本帖最后由 香蕉 于 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 ;
|