本帖最后由 香蕉 于 2013-1-19 20:35 編輯
需求分析
三維打印快速成型機成型彩色實體,重要技術之一是開發(fā)色彩添加軟件模塊,它是處理 STL 文件數(shù)據(jù)、形成實體層片輪廓模型和給實體內(nèi)部添加可漸變色彩信息的主要工具。根據(jù)成型機成型彩色實體的要求色彩添加應具有兩大功能:
(1)STL 文件數(shù)據(jù)處理功能
① STL 文件的讀取;
② 三角面片拓撲結構建立;
③ 實體分層算法設計和層片輪廓生成。
(2)層片的色彩漸變插值著色功能
① 層片線性插值著色;
② 層片余弦插值著色;
③ 層片調(diào) G 色余弦插值著色
④ 層片冪插值著色。
色彩添加模塊需求分析結構
2.jpg (41.2 KB, 下載次數(shù): 324)
下載附件
色彩添加模塊需求分析結構
2013-1-19 20:31 上傳
功能實現(xiàn)及代碼編程
模塊軟件和硬件開發(fā)環(huán)境
(1)軟件環(huán)境
由于色彩添加模塊用到較為復雜的算法設計和圖形圖像的色彩處理功能,如需建立相關小三角形面片數(shù)據(jù)結構、拓撲結構以及色彩漸變操作等,因此模塊在軟件層面采用VC++6.0 和 OpenGL 開發(fā)。VC++6.0 是一種面向?qū)ο蟮拈_發(fā)語言,以功能強大而著稱,提供許多圖形控制和繪畫功能,能通過 Cclient 類和 CwindowDC 類直接訪問 windows設備環(huán)境。對于顯示器和打印設備環(huán)境對象應用程序框架會直接將句柄附在對象上,即使對于其它設備環(huán)境如內(nèi)存設備環(huán)境也可將對象和句柄相聯(lián)系進行相關操作。對于 GDI對象的操作如使用刷子填充顏色或使用調(diào)色板增強顏色的描繪能力等都可以使用 MFC庫中的類來訪問。
OpenGL 也是一種面向?qū)ο蟮恼Z言,它包含許多像素、圖形庫、屬性、幾何變換、三維圖形的控制等
。這給三維圖形的制作和控制帶來了許多方便。
(2)硬件環(huán)境
開發(fā)本模塊要求計算機能快速處理圖形圖像等數(shù)據(jù),以便具有良好的顯示效果。開發(fā)和運行本模塊的計算機硬件環(huán)境配置:
① CPU:intel core2 Duo T5750,2.0GHz;
② 內(nèi)存儲器:2GB 金士頓內(nèi)存,DDRⅡ 667MHz;
③ 顯示卡:NVIDIAGeForce 8400M GS;
④ 顯示器:DELL 14 英寸 LCD 彩色顯示器;
⑤ 硬盤驅(qū)動器:SAMSUNG HM160HI 160GB;
⑥ 網(wǎng)絡適配器:Broadcom NetLink(TM)Fast Ethernet 100M bps
模塊界面設計
軟件模塊界面設計如圖 所示。使用菜單和工具按鈕實現(xiàn)模塊功能。“STL 文件拾取”菜單項可實現(xiàn) STL 文件讀取、拓撲結構的建立、生成層片數(shù)據(jù)等功能,“色彩插值方法”菜單項可完成余弦插值法、調(diào) G 色余弦插值法和冪插值法三種插值法的著色功能。
工具欄中的工具按鈕分別可實現(xiàn),STL 文件讀取、拓撲結構的建立、層片生成以及三種插值方法的著色功能等。
2.jpg (154.3 KB, 下載次數(shù): 360)
下載附件
模塊界面設計
2013-1-19 20:33 上傳
類的定義和設計
(1)STL 文件數(shù)據(jù)處理類
STL 文件數(shù)據(jù)處理相關的類,如表 。
表 STL 文件數(shù)據(jù)處理類的功能和說明
類名 類的功能和說明
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 ); //讀取三角形頂點的個數(shù),統(tǒng)計點的個數(shù)
OnBuildStruct(CVertex *,int ); //建立三角面片頂點和邊的拓撲結構
OnSortVertex(CVertex *); //三角形所有頂點排序,求 Vmin 和 Vmax
};
Class CBuildFigure
{
......
CBuildSlice(CVertex *,Vmin,Vmax); //生成層片
CViewSlice();
......
};
(2)層片的色彩漸變插值方法類
給實體層片添加漸變色彩相關的類
層片色彩漸變插值方法類的功能和說明
類名 類的功能和說明
CLineInterpolate 層片線性插值法著色
CCosInterpolate 層片余弦插值法著色
CCosGInterpolate 層片調(diào) 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”, 這時可看到三角面片數(shù)據(jù)。
以球體 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 文件數(shù)據(jù)的程序代碼:
void CBuildTopology::OnReadVertex(&nlink,36963)
{
int pos,id=0;
CString buf ;
|