亚洲欧美日韩一区成人|日韩少妇一区二区无码|91久久澡人人爽人人添|日韩欧美一区二区三区高清|国产一区二区三区乱码网站|国产乱码一区二区三区下载|精品久久久久久久久久久久久|日本高清一区二区三区不卡免费

    1. <track id="mzbtu"><dl id="mzbtu"><delect id="mzbtu"></delect></dl></track>
        <small id="mzbtu"></small>
        1. <i id="mzbtu"><ins id="mzbtu"></ins></i>
          1. <source id="mzbtu"></source>

              3d打印色彩添加模塊軟件開發(fā)方案

              軟件設(shè)計算法
              2013
              01/19
              20:31
              分享
              評論
              本帖最后由 香蕉 于 2013-1-19 20:35 編輯

              需求分析
              三維打印快速成型機(jī)成型彩色實體,重要技術(shù)之一是開發(fā)色彩添加軟件模塊,它是處理 STL 文件數(shù)據(jù)、形成實體層片輪廓模型和給實體內(nèi)部添加可漸變色彩信息的主要工具。根據(jù)成型機(jī)成型彩色實體的要求色彩添加應(yīng)具有兩大功能:
              (1)STL 文件數(shù)據(jù)處理功能
              ① STL 文件的讀?。?br /> ② 三角面片拓?fù)浣Y(jié)構(gòu)建立;
              ③ 實體分層算法設(shè)計和層片輪廓生成。
              (2)層片的色彩漸變插值著色功能
              ① 層片線性插值著色;
              ② 層片余弦插值著色;
              ③ 層片調(diào) G 色余弦插值著色
              ④ 層片冪插值著色。
              色彩添加模塊需求分析結(jié)構(gòu)


              功能實現(xiàn)及代碼編程
              模塊軟件和硬件開發(fā)環(huán)境
              (1)軟件環(huán)境
              由于色彩添加模塊用到較為復(fù)雜的算法設(shè)計和圖形圖像的色彩處理功能,如需建立相關(guān)小三角形面片數(shù)據(jù)結(jié)構(gòu)、拓?fù)浣Y(jié)構(gòu)以及色彩漸變操作等,因此模塊在軟件層面采用VC++6.0 和 OpenGL 開發(fā)。VC++6.0 是一種面向?qū)ο蟮拈_發(fā)語言,以功能強(qiáng)大而著稱,提供許多圖形控制和繪畫功能,能通過 Cclient 類和 CwindowDC 類直接訪問 windows設(shè)備環(huán)境。對于顯示器和打印設(shè)備環(huán)境對象應(yīng)用程序框架會直接將句柄附在對象上,即使對于其它設(shè)備環(huán)境如內(nèi)存設(shè)備環(huán)境也可將對象和句柄相聯(lián)系進(jìn)行相關(guān)操作。對于 GDI對象的操作如使用刷子填充顏色或使用調(diào)色板增強(qiáng)顏色的描繪能力等都可以使用 MFC庫中的類來訪問。
              OpenGL 也是一種面向?qū)ο蟮恼Z言,它包含許多像素、圖形庫、屬性、幾何變換、三維圖形的控制等
              。這給三維圖形的制作和控制帶來了許多方便。
              (2)硬件環(huán)境
              開發(fā)本模塊要求計算機(jī)能快速處理圖形圖像等數(shù)據(jù),以便具有良好的顯示效果。開發(fā)和運行本模塊的計算機(jī)硬件環(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)絡(luò)適配器:Broadcom NetLink(TM)Fast Ethernet 100M bps

              模塊界面設(shè)計
              軟件模塊界面設(shè)計如圖 所示。使用菜單和工具按鈕實現(xiàn)模塊功能?!癝TL 文件拾取”菜單項可實現(xiàn) STL 文件讀取、拓?fù)浣Y(jié)構(gòu)的建立、生成層片數(shù)據(jù)等功能,“色彩插值方法”菜單項可完成余弦插值法、調(diào) G 色余弦插值法和冪插值法三種插值法的著色功能。
              工具欄中的工具按鈕分別可實現(xiàn),STL 文件讀取、拓?fù)浣Y(jié)構(gòu)的建立、層片生成以及三種插值方法的著色功能等。

              類的定義和設(shè)計
              (1)STL 文件數(shù)據(jù)處理類
              STL 文件數(shù)據(jù)處理相關(guān)的類,如表 。
              表  STL 文件數(shù)據(jù)處理類的功能和說明
              類名 類的功能和說明
              CVertex 三角面片頂點類,存儲三角面片不重復(fù)的頂點
              CEdge 三角面片邊類,以頂點為表頭存儲三角面片的邊
              CBuildTopology 建立三角面片之間,點和線之間的拓?fù)浣Y(jié)構(gòu)
              CBuildFigure 三角面片與平面求交,且生成輪廓模型
              類的定義:
              Class CVertex
              {
              public:
              int id; //該頂點的 id 號
              float Vx,Vy,Vz; //Vx、Vy、Vz 分別為該頂點的 x、y、z 坐標(biāo)
              CEdge *firstedge; //firstedge 為指標(biāo),指向以該頂點為端點的第一條邊
              }
              Class CEdge
              {
              public:
              int flag; //標(biāo)志域,取 0 或 1
              int sid,eid; //sid,eid 為該邊開始端點和結(jié)束端點的 id 值
              int nsid,neid; //nsid,neid 為該邊后序邊的開始端點和結(jié)束端點的 id 值
              CEdge *edgenext; //sidenext 為指標(biāo),指向下一條鄰接邊
              };
              Class CBuildTopology
              {
              ......
              OnOpenSTL(); //打開 STL 文件
              OnReadVertex(CVertex *,int ); //讀取三角形頂點的個數(shù),統(tǒng)計點的個數(shù)
              OnBuildStruct(CVertex *,int ); //建立三角面片頂點和邊的拓?fù)浣Y(jié)構(gòu)
              OnSortVertex(CVertex *); //三角形所有頂點排序,求 Vmin 和 Vmax
              };
              Class CBuildFigure
              {
              ......
              CBuildSlice(CVertex *,Vmin,Vmax); //生成層片
              CViewSlice();
              ......
              };
              (2)層片的色彩漸變插值方法類
              給實體層片添加漸變色彩相關(guān)的類
              層片色彩漸變插值方法類的功能和說明
              類名 類的功能和說明
              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 制圖軟件制作三維實體圖,制圖完成后通過菜單選項可形成擴(kuò)展名為“*.stl”文件。常用的三維造型軟件在 “文件”菜單中都有“導(dǎo)出”命令,然后導(dǎo)出擴(kuò)展名為“*.stl”文件,再將擴(kuò)展名“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 ;

              上一篇:全彩色實體3d打印成型過程原理和設(shè)置
              下一篇:MakerWare軟件下載與安裝使用
              回復(fù)

              使用道具 舉報

              2#
               樓主| 香蕉
              2013-1-19 20:37:59 | 只看該作者
              拓?fù)浣Y(jié)構(gòu)建立
              可知,使用快速分層算法建立三角面片頂點和邊的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)建立完成后,對所有不重復(fù)的頂點重新排序,則拓?fù)浣Y(jié)構(gòu)建立完成。
              建立拓?fù)浣Y(jié)構(gòu)主要程序代碼:
              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;
              ......
              }
              建立拓?fù)浣Y(jié)構(gòu)對話框

              (3)線性插值法
              在中式為關(guān)于 i 變量的一次線性函數(shù),直接以此式實現(xiàn)色彩的漸變
              主要程序代碼:
              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 節(jié)中式(4.25)為關(guān)于 i 變量的余弦插值法函數(shù),以此式實現(xiàn)色彩的漸變主
              要程序代碼:
              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();
              ......
              }
              ......
              }
              色彩添加模塊的開發(fā)過程做了詳細(xì)的說明。根據(jù)需求分析設(shè)定軟件實現(xiàn)的功能,一完成 STL 文件數(shù)據(jù)處理,二為實體層片添加可漸變色彩信息;采用 VC++6.0 和OpenGL 開發(fā)工具編程實現(xiàn)算法,并給出了主要類的定義和算法實現(xiàn)方法,根據(jù)算法繪制色彩漸變效果的圖形。

              推動3D打印

              關(guān)注南極熊

              通知

              聯(lián)系QQ/微信9:00-16:00

              392908259

              南極熊3D打印網(wǎng)

              致力于推動3D打印產(chǎn)業(yè)發(fā)展

              Copyright © 2024 南極熊 By 3D打印 ( 京ICP備14042416號-1 ) 京公網(wǎng)安備11010802043351
              快速回復(fù) 返回列表 返回頂部
              肇州县| 繁峙县| 武山县| 江门市| 金昌市| 昆山市| 成武县| 长沙市| 河北省| 舒兰市| 和平县| 芒康县| 桦川县| 万载县| 南昌县| 佛学| 马尔康县| 阳江市| 松溪县| 南安市| 义马市| 三原县| 贵阳市| 德化县| 缙云县| 陆川县| 陆良县| 昆明市| 隆安县| 巴林左旗| 江阴市| 新民市| 辽阳县| 西昌市| 澄江县| 土默特左旗| 新平| 阳曲县| 义乌市| 资阳市| 额济纳旗|