3d打印色彩添加模块软件开发方案

3D打印软件设计算法
2013
01/19
20:31
分享
评论
本帖最后由 香蕉 于 2013-1-19 20:35 编辑

需求分析
三维打印快速成型机成型彩色实体,重要技术之一是开发色彩添加软件模块,它是处理 STL 文件数据、形成实体层片轮廓模型和给实体内部添加可渐变色彩信息的主要工具。根据成型机成型彩色实体的要求色彩添加应具有两大功能:
(1)STL 文件数据处理功能
① STL 文件的读取;
② 三角面片拓扑结构建立;
③ 实体分层算法设计和层片轮廓生成。
(2)层片的色彩渐变插值着色功能
① 层片线性插值着色;
② 层片余弦插值着色;
③ 层片调 G 色余弦插值着色
④ 层片幂插值着色。
色彩添加模块需求分析结构

色彩添加模块需求分析结构

色彩添加模块需求分析结构


功能实现及代码编程
模块软件和硬件开发环境
(1)软件环境
由于色彩添加模块用到较为复杂的算法设计和图形图像的色彩处理功能,如需建立相关小三角形面片数据结构、拓扑结构以及色彩渐变操作等,因此模块在软件层面采用VC++6.0 和 OpenGL 开发。VC++6.0 是一种面向对象的开发语言,以功能强大而著称,提供许多图形控制和绘画功能,能通过 Cclient 类和 CwindowDC 类直接访问 windows设备环境。对于显示器和打印设备环境对象应用程序框架会直接将句柄附在对象上,即使对于其它设备环境如内存设备环境也可将对象和句柄相联系进行相关操作。对于 GDI对象的操作如使用刷子填充颜色或使用调色板增强颜色的描绘能力等都可以使用 MFC库中的类来访问。
OpenGL 也是一种面向对象的语言,它包含许多像素、图形库、属性、几何变换、三维图形的控制等
。这给三维图形的制作和控制带来了许多方便。
(2)硬件环境
开发本模块要求计算机能快速处理图形图像等数据,以便具有良好的显示效果。开发和运行本模块的计算机硬件环境配置:
① CPU:intel core2 Duo T5750,2.0GHz;
② 内存储器:2GB 金士顿内存,DDRⅡ  667MHz;
③ 显示卡:NVIDIAGeForce 8400M GS;
④ 显示器:DELL 14 英寸 LCD 彩色显示器;
⑤ 硬盘驱动器:SAMSUNG HM160HI 160GB;
⑥ 网络适配器:Broadcom NetLink(TM)Fast Ethernet 100M bps

模块界面设计
软件模块界面设计如图 所示。使用菜单和工具按钮实现模块功能。“STL 文件拾取”菜单项可实现 STL 文件读取、拓扑结构的建立、生成层片数据等功能,“色彩插值方法”菜单项可完成余弦插值法、调 G 色余弦插值法和幂插值法三种插值法的着色功能。
工具栏中的工具按钮分别可实现,STL 文件读取、拓扑结构的建立、层片生成以及三种插值方法的着色功能等。

模块界面设计

模块界面设计

类的定义和设计
(1)STL 文件数据处理类
STL 文件数据处理相关的类,如表 。
表  STL 文件数据处理类的功能和说明
类名 类的功能和说明
CVertex 三角面片顶点类,存储三角面片不重复的顶点
CEdge 三角面片边类,以顶点为表头存储三角面片的边
CBuildTopology 建立三角面片之间,点和线之间的拓扑结构
CBuildFigure 三角面片与平面求交,且生成轮廓模型
类的定义:
Class CVertex
{
public:
int id; //该顶点的 id 号
float Vx,Vy,Vz; //Vx、Vy、Vz 分别为该顶点的 x、y、z 坐标
CEdge *firstedge; //firstedge 为指标,指向以该顶点为端点的第一条边
}
Class CEdge
{
public:
int flag; //标志域,取 0 或 1
int sid,eid; //sid,eid 为该边开始端点和结束端点的 id 值
int nsid,neid; //nsid,neid 为该边后序边的开始端点和结束端点的 id 值
CEdge *edgenext; //sidenext 为指标,指向下一条邻接边
};
Class CBuildTopology
{
......
OnOpenSTL(); //打开 STL 文件
OnReadVertex(CVertex *,int ); //读取三角形顶点的个数,统计点的个数
OnBuildStruct(CVertex *,int ); //建立三角面片顶点和边的拓扑结构
OnSortVertex(CVertex *); //三角形所有顶点排序,求 Vmin 和 Vmax
};
Class CBuildFigure
{
......
CBuildSlice(CVertex *,Vmin,Vmax); //生成层片
CViewSlice();
......
};
(2)层片的色彩渐变插值方法类
给实体层片添加渐变色彩相关的类
层片色彩渐变插值方法类的功能和说明
类名 类的功能和说明
CLineInterpolate 层片线性插值法着色
CCosInterpolate 层片余弦插值法着色
CCosGInterpolate 层片调 G 色余弦插值法着色
CExpInterpolate 层片幂插值法着色
类的定义:
Class CLineInterpolate
{
......
CBrush brush;
......
OnFirstSlice(RGB(BYTE , BYTE , BYTE)); //定义第一层片色彩信息
OnEndSlice(RGB(BYTE,BYTE,BYTE)); //定义最后层片色彩信息
OnLInterpolate(RGB(BYTE,BYTE,BYTE); //为中间层片添加可渐变色彩信息
......
};
Class CCosInterpolate
{
......
CBrush brush;
......
OnFirstSlice(RGB(BYTE , BYTE , BYTE)); //定义第一层片色彩信息
OnEndSlice(RGB(BYTE,BYTE,BYTE)); //定义最后层片色彩信息
OnCInterpolate(RGB(BYTE,BYTE,BYTE); //为中间层片添加可渐变色彩信息
......
};
Class CCosGInterpolate
{
......
CBrush brush;
......
OnFirstSlice(RGB(BYTE , BYTE , BYTE)); //定义第一层片色彩信息
OnEndSlice(RGB(BYTE,BYTE,BYTE)); //定义最后层片色彩信息
OnCGInterpolate(RGB(BYTE,BYTE,BYTE); //为中间层片添加可渐变色彩信息
......
};
Class CExpInterpolate
{
......
CBrush brush;
......
OnFirstSlice(RGB(BYTE , BYTE , BYTE)); //定义第一层片色彩信息
OnEndSlice(RGB(BYTE,BYTE,BYTE)); //定义最后层片色彩信息
OnEInterpolate(RGB(BYTE,BYTE,BYTE); //为中间层片添加可渐变色彩信息
......
};
代码编程与功能运行
(1)STL 文件读取
使用 UGNX 软件或 CAD 制图软件制作三维实体图,制图完成后通过菜单选项可形成扩展名为“*.stl”文件。常用的三维造型软件在 “文件”菜单中都有“导出”命令,然后导出扩展名为“*.stl”文件,再将扩展名“stl”手动改为“txt”类型文件。若想了解文件格式,可以使用记事本打开“*.txt”, 这时可看到三角面片数据。
以球体 sphere.stl 为例,打开 STL 文件程序代码:
void CBuildTopology::OnOpenstl()
try
{
file.Open("circle1.txt",CFile::modeRead);
this->GetDlgItem(IDC_OPENSTL)->EnableWindow(FALSE);
}
catch(CFileException *e)
{
TCHAR szBuf[256];
e->GetErrorMessage(szBuf,256,NULL);
MessageBox(szBuf,_T("Warning"));
e->Delete();
}
读取 sphere.txt 文件数据的程序代码:
void CBuildTopology::OnReadVertex(&nlink,36963)
{
int pos,id=0;
CString buf ;

上一篇:全彩色实体3d打印成型过程原理和设置
下一篇:MakerWare软件下载与安装使用
回复

使用道具 举报

 楼主| 香蕉
2013-1-19 20:37:59 | 显示全部楼层
拓扑结构建立
可知,使用快速分层算法建立三角面片顶点和边的数据结构。数据结构建立完成后,对所有不重复的顶点重新排序,则拓扑结构建立完成。
建立拓扑结构主要程序代码:
CBuildTopology::OnBuildStruct(&nlink,36963)
{ ......
file.ReadString(buf);
while(buf!="endsolid")
{
file.ReadString(buf);
if(buf.Find("vertex")+1)
{
for(int i=0;i<3;i++)
{
pos=buf.Find("vertex");
pos=pos+9;
buf=buf.Right(buf.GetLength()-pos);
tempx=buf.Left(14);
pos=buf.Find(" ")+1;
buf=buf.Right(buf.GetLength()-pos);
tempy=buf.Left(14);
pos=buf.Find(" ")+1;
buf=buf.Right(buf.GetLength()-pos);
tempz=buf;
if(i==0)
{
f1=id;
}
if(i==1)
{
f2=id;
}
if(i==2)
{
f3=id;
}
idflag=0;
or(int idtemp=0;idtemp {
if((tempx==nlink[idtemp].Vx)&&(tempy==nlink[idtemp].Vy)&&(tempz==nlink[idtemp]
.Vz))
{
idflag=1;
}
}
if(idflag==0)
{
nlink[id].Vx=tempx;
nlink[id].Vy=tempy;
nlink[id].Vz=tempz;
id++;
}
Cedge *edgei=new Cedge;
edgei->flag=0;
edgei->sid=f1;
edgei->eid=f2;
edgei->nsid=f2;
edgei->neid=f3;
nlink[id].fedg=&edgelink;
......
}
建立拓扑结构对话框

(3)线性插值法
在中式为关于 i 变量的一次线性函数,直接以此式实现色彩的渐变
主要程序代码:
CLineInterpolate::OnPaint()
{
......
for(int i=0;i {
......
brushi.CreateSolidBrush(RGB(ri,gi,bi));
CBrush *pOldBrush=dc.SelectObject(&brushi);
Slice(i);
dc.SelectObject(pOldBrush);
brushi.DeleteObject();
......
}
......
}

线性插值法效果

线性插值法效果


(4)余弦插值法
在 4.3.3 节中式(4.25)为关于 i 变量的余弦插值法函数,以此式实现色彩的渐变主
要程序代码:
CCosInterpolate::OnPaint()
{
......
for(int i=0;i {
......
brushi.CreateSolidBrush(RGB(ri,gi,bi));
CBrush *pOldBrush=dc.SelectObject(&brushi);
Slice(i);
dc.SelectObject(pOldBrush);
brushi.DeleteObject();
......
}
......
}
色彩添加模块的开发过程做了详细的说明。根据需求分析设定软件实现的功能,一完成 STL 文件数据处理,二为实体层片添加可渐变色彩信息;采用 VC++6.0 和OpenGL 开发工具编程实现算法,并给出了主要类的定义和算法实现方法,根据算法绘制色彩渐变效果的图形。
回复 支持 反对

使用道具 举报

推动3D打印

关注南极熊

通知

联系QQ/微信9:00-16:00

392908259

南极熊3D打印网

致力于推动3D打印产业发展

Copyright © 2024 南极熊 By 3D打印 ( 京ICP备14042416号-1 ) 京公网安备11010802043351
快速回复 返回列表 返回顶部