亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于WPF的STL可視化系統(tǒng)

        2019-11-06 00:28:00陳軍任王艷紅
        微處理機 2019年5期
        關(guān)鍵詞:面片頂點儲存

        陳軍任,王艷紅

        (1.沈陽工業(yè)大學信息科學與工程學院,沈陽 110870;2.沈陽工業(yè)大學管理學院,沈陽 110870)

        1 引 言

        隨著科技發(fā)展,人們對加工速度以及加工質(zhì)量有了更高的要求,STL 的可視化技術(shù)在應用中占據(jù)了很大的比重。STL 的可視化技術(shù)就是將3D 掃描的STL 文件快速轉(zhuǎn)化為可視化的三維模型,便利于人們對其進行人機交互等操作,提高加工速率及精確度。研究者對于STL 的可視化進行了大量的研究,占志敏[1]等結(jié)合OpenGL 圖形編程技術(shù),成功實現(xiàn)STL 三維模型的可視化,其算法簡單,只是經(jīng)過簡單的冗余處理及拓撲關(guān)系。鄭毅[2]使用C++標準模板庫和迭代器技術(shù)進行編程,借助紅黑樹結(jié)構(gòu),加快了拓撲重建任務,但沒有實現(xiàn)三維顯示及人機交互。鄒學涌[3]等采用基于哈希表的拓撲重建算法,并借助了OpenGL 顯示技術(shù),實現(xiàn)顯示效果及信息獲取,該算法中哈希函數(shù)的設(shè)定對算法效率影響較大,設(shè)置不當會使效率大幅降低。尚旭明[4]利用WPF 及XAML技術(shù)實現(xiàn)了對3ds Max 模型的顯示及簡單人機交互。Tata[5]等人提出了一種自適應分層算法,可以根據(jù)局部幾何形狀改變層厚,算法基于三個基本概念:選擇適應曲面復雜性的準則、識別對象的關(guān)鍵特征和物體特征,以及開發(fā)用于表示對象的facet 的分組方法。Choi[6]等人提出了一種用于分層制造的切片輪廓處理的容錯切片算法,該算法旨在克服計算機內(nèi)存的限制和傳統(tǒng)切片方法所固有的計算不穩(wěn)定性。Brown[7]等人運用切片算法實現(xiàn)了能夠處理和切割一個或多個STL 文件。

        在此,針對上述研究成果的不足及可行之處,并結(jié)合某機械加工企業(yè)的實際需求,提出一種基于WPF 的STL 系統(tǒng)可視化設(shè)計方案,通過建立WPF模型數(shù)據(jù),對直接導入的STL 文件模型進行轉(zhuǎn)化,對模型頂點、邊、以及三角片面進行拓撲關(guān)系建立,生成三維模型,從而確定模型特征,在此基礎(chǔ)上,利用WPF 的3D 顯示模塊將三維模型顯示出來,進而實現(xiàn)STL 文件對應模型的旋轉(zhuǎn)、縮放、平移等人機交互功能。

        2 系統(tǒng)整體結(jié)構(gòu)

        系統(tǒng)主要由STL 文件分析處理、算法研究實現(xiàn)、人機交互三個主要功能組成。

        1)STL 文件分析處理

        研究STL 文件格式,分析不同格式間的共同性,對STL 文件進行結(jié)構(gòu)分析,探究其更合適的拓撲關(guān)系。

        2)算法研究實現(xiàn)

        針對對STL 文件的分析,設(shè)計STL 文件的讀取儲存方式,給出STL 文件可視化實現(xiàn)算法流程圖。

        3)人機交互功能設(shè)計及實現(xiàn)

        首先利用WPF 的3D 模塊搭建可顯示3D 效果的場景,然后利用給出的算法處理STL 文件,在3D場景中顯示,最后針對可視化的模型進行可操作化設(shè)計。

        系統(tǒng)整體結(jié)構(gòu)圖如圖1所示。

        圖1 系統(tǒng)整體結(jié)構(gòu)圖

        3 STL文件分析與處理

        STL 格式文件以三角形面為單位記錄了每個三角形的簡單幾何信息,每個三角形面都包含該三角形所在平面的法向矢量以及三角形的三個頂點坐標。目前為止,STL 文件有文本(ASCII)和二進制(BINARY)兩種格式[8]。

        3.1 STL文件的文本格式

        ASCII 格式的STL 文件逐行給出三角形面片的幾何信息,每一行由1 個或2 個關(guān)鍵字開頭。在STL文件中一個帶矢量方向的三角形面片是由三角形面片的信息單元facet 來表述的,每一個facet 由7 行數(shù)據(jù)組成。

        關(guān)鍵字facet normal 后面給出三個數(shù)是三角面指向?qū)嶓w外部的法向矢量坐標;

        outer loop 隨后的3 行數(shù)據(jù)分別是三角面的3個頂點坐標;

        end loop 表示完成三角形面片的3 個頂點坐標定義;

        end facet 表示完成一個三角形面片定義;

        end solid 表示整個STL 文件定義結(jié)束,由若干個三角形面片的信息單元facet 構(gòu)成整個STL 文件格式模型,3 個頂點沿指向?qū)嶓w外部的法矢方向逆時針排列。

        3.2 STL文件的二進制格式

        二進制STL 文件用固定的字節(jié)數(shù)來給出三角面片的幾何信息。

        文件起始的80 個字節(jié)是文件頭,用于存貯文件名,緊接著用4 個字節(jié)的整數(shù)來描述模型的三角面片總數(shù),后面逐個給出每個三角面片的幾何信息。每個三角形面片占用固定的50 個字節(jié),依次是:

        3 個4 字節(jié)浮點數(shù),表示三角面法矢量;

        3 個4 字節(jié)浮點數(shù),表示三角面片第一個頂點坐標;

        3 個4 字節(jié)浮點數(shù),表示三角面片第二個頂點坐標;

        3 個4 字節(jié)浮點數(shù),表示三角面片第三個頂點坐標;

        最后2 個字節(jié)為預留字,一般表示屬性特征。

        一個完整的二進制STL 文件的大小為三角面的個數(shù)乘以50 再加上84 個字節(jié)。

        3.3 STL文件結(jié)構(gòu)分析

        其實不管何種的格式的STL 文件,一個基本的三角片中,都包括了三角片的法向量normal 以及三個頂點的三維坐標vertex 等信息。憑借這些信息都可以唯一確定一個三角片,進而確定完整的三維曲面模型。為更好分析STL 文件結(jié)構(gòu),以下給出部分STL 文件結(jié)構(gòu)圖,如圖2所示。

        圖2 STL 文件局部結(jié)構(gòu)示意圖

        根據(jù)圖2所示,假設(shè)頂點所對應的邊以及邊的兩個相鄰的邊為鄰接邊,那么在三角形ABC 中,點A 的鄰接邊是a,邊a 在該三角形中的鄰接邊分別為邊b 和邊c。但是這只是一個三角形的頂點以及鄰接邊信息,STL 文件所表示的是n 個三角片的信息,其中會有很多相同的頂點以及鄰接邊。經(jīng)過觀察可以得到一個頂點最多可以達到6 個鄰接邊,最少有4 個。而邊的鄰接邊最多可以有4 個鄰接邊,最少2 個。由此可見,若只是簡單地減少冗余量提升打開文件的速度,直接處理點的冗余就可以實現(xiàn),但是如果要進行后續(xù)的操作,邊的信息也是非常重要的一部分,例如后續(xù)在線建模和NC 代碼自動生成等。故此不能只處理點的冗余,也須處理邊的冗余,然后建立點與鄰接邊、邊與鄰接邊的拓撲關(guān)系。

        4 算法研究實現(xiàn)

        儲存STL 文件信息時,并不能簡單地儲存點、邊以及三角片的信息,還需要儲存它們各自的鄰接邊信息。通過研究還可發(fā)現(xiàn),雖然每三個頂點可以確定唯一的三角片,但是不同的三角片有可能用到相同的頂點以及相同的鄰接邊,這樣就極大地浪費了儲存空間以及處理速度。所以為了存取方便,避免點和邊的重復存取,設(shè)計給每個點和邊一個專用的ID號,依據(jù)讀取的順序,設(shè)計點和邊的ID 號從0 開始依次遞增。這樣就便于在存取的過程中同時也可以剔除重復的頂點和邊信息,進而能夠大幅度提高存取效率,節(jié)省儲存空間及讀取時間。

        為此,需要建立三個容器分別來儲存頂點、邊和三角片的數(shù)據(jù)集合。三維頂點的屬性包含頂點的三維坐標,以及頂點的鄰接邊和頂點的專用ID;邊的屬性包含邊的位置信息(兩個頂點)、邊的鄰接邊的序號的集合以及邊的ID 號;三角片容器屬性包含三角形的頂點、邊和法矢量信息。容器結(jié)構(gòu)示意圖如圖3所示。

        圖3 容器結(jié)構(gòu)示意圖

        憑借頂點和邊的鄰接關(guān)系,完全可以確定網(wǎng)格模型各三角面片之間的連接關(guān)系。由一個頂點出發(fā),可根據(jù)其鄰接邊獲取包含該頂點的所有三角形;由產(chǎn)生的鄰接邊,可分別獲取它們自身的鄰接邊組合。如此循環(huán)擴展,直到擴展到整個網(wǎng)格模型為止。然后把STL 文件中的三角片的法矢量信息儲存到建立的三角片容器中,這樣由以上三個容器的建立就可以獲取STL 文件中的所有信息并建立起基本圖元之間的鄰接關(guān)系。簡易的演示過程如圖4所示。

        圖4 三角片拓展關(guān)系演示圖

        參考圖2的設(shè)定,具體算法流程可如圖5所示。

        圖5 STL 可視化算法流程圖

        如圖,假設(shè)先讀取三角片ABC,首先讀取三角片三個頂點的信息,然后按照上述建立的鄰接邊關(guān)系,分別將三角片ABC 的頂點信息儲存到頂點容器中,設(shè)置點信息ID 號以及點對應的鄰接邊ID 號;然后把邊的信息儲存到邊容器中,設(shè)置邊信息ID 號以及邊所對應的鄰接邊ID 號;最后在三角片容器中儲存三角片三個頂點ID 以及法矢量信息。接下來讀取三角片BDC,首先判斷三角片BDC 的三個頂點以及邊是否被處理(判斷依據(jù)是用頂點的三維坐標值與已儲存在容器中的三維坐標值相比較),若被處理,將不再處理此信息不同的保留作為下一個處理頂點,然后將欲處理的點邊信息分別儲存到對應的容器中,且添加鄰接邊關(guān)系。往后的三角片按照上述方法處理,直到達到文件的末尾位置為止。

        5 可視化模型操作設(shè)計

        對可視化模型進行操作化設(shè)計,可直觀地看出所打開的STL 文件是否有缺陷,并為實現(xiàn)后續(xù)在線建模提供操作基礎(chǔ)。目前大多數(shù)研究者利用C++語言跟OpenGL 或者3ds Max 結(jié)合實現(xiàn)3D 模型顯示功能,但此方法實際操作性復雜。在此利用XAML技術(shù)WPF 框架來實現(xiàn)系統(tǒng)3D 模型顯示功能。XAML 技術(shù)提供了一種便于擴展和定位的語法來定義與程序邏輯相分離的用戶界面,XAML 中界面表現(xiàn)和邏輯功能的分離使得界面開發(fā)和功能開發(fā)代碼分離,有利于開發(fā)團隊的合理分工,提高了開發(fā)效率。WPF 技術(shù)主要是用來實現(xiàn)3D 效果,使用WPF實現(xiàn)3D 顯示只需要設(shè)置好3D 場景,然后將需要打開的STL 文件經(jīng)過算法處理就可以直接顯示。利用C#語言除了因為其與WPF 可以組合實現(xiàn)外,還可以避免C++語言中存在的bug。

        5.1 3D環(huán)境搭建與可視化實現(xiàn)

        3D 環(huán)境搭建首先需要在XAML 板塊中編寫一個Viewport3D 模塊,用來顯示打開處理的STL 文件,然后在后臺程序當中初始化顯示3D 模型的必要元素:攝像機(Camera)、光源(Light)、模型(Model)。

        設(shè)置好這些3D 環(huán)境所需要的固定屬性,就可以去處理STL 文件來顯示STL 文件里面所儲存的3D 模型。主要步驟如下:

        1)在編寫的系統(tǒng)3D 模塊中加入3DTools 工具;

        2)建立世界坐標;

        3)利用上文算法處理STL 文件:

        ①構(gòu)建頂點容器,儲存頂點的三維坐標x、y、z,以及頂點的鄰接邊和頂點的專用ID;

        ②構(gòu)建鄰接邊容器,儲存邊的位置信息(兩個頂點)、邊的鄰接邊的序號的集合以及邊的ID 號;

        ③構(gòu)建三角片容器,儲存三角形的頂點、邊和法矢量信息;

        ④利用鄰接邊信息進行三維模型拓展;

        ⑤定義表面材質(zhì)(設(shè)置Material 屬性);

        最終,通過調(diào)用處理后的STL 文件,就可在系統(tǒng)中的3D 顯示區(qū)域?qū)崿F(xiàn)STL 模型的可視化??梢暬Ч故救鐖D6所示。

        圖6 STL 文件可視化展示圖

        5.2 操作功能設(shè)計

        主要設(shè)計旋轉(zhuǎn)、縮放、平移等三大功能。這些可通過操作模型的變化來實現(xiàn),也可通過操作Camera來實現(xiàn)。操作模型時需要變化模型的全部坐標以及更新,而操作Camera 時只需要變化Camera 的坐標信息,故實現(xiàn)三大功能全部用操作Camera 來實現(xiàn)。

        當操作Camera 時,首先需要獲得Camera 的初始位置以及模型的中心位置,然后需要設(shè)置每個功能的計算公式以及獲取的變化變量,這樣就可以得到新的Camera 坐標位置,以此實現(xiàn)操作功能。

        1)模型中心位置獲取

        在WPF 的MeshGeometry3D 中,有一個 Bounds屬性,該屬性的功能是返回MesheGeometry3D 的邊界Rect3D。Rect3D 表示一個三維矩形,也就是模型的外切矩形。由此信息可以得到外切矩形的三條邊長分別為SizeX、SizeY、SizeZ,并且可以得到模型的中心位置(SizeX,SizeY,SizeZ),同時可以計算外切圓半徑,計算公式為:

        通過初始設(shè)置時可以得到Camera 最初的坐標位置為(x0,y0,z0),這樣可以得到Camera 到模型中心距離為a,其計算公式為:

        2)旋轉(zhuǎn)功能設(shè)計

        旋轉(zhuǎn)功能除了中心位置的獲取,還需要旋轉(zhuǎn)半徑及旋轉(zhuǎn)角度。旋轉(zhuǎn)角度可通過鼠標的控制來獲取。旋轉(zhuǎn)半徑首先比較a 與r 的大小,當a 大于r 時選取a 為旋轉(zhuǎn)半徑,否則選r。此舉主要是為防止Camera 旋轉(zhuǎn)時進入模型內(nèi)部出錯。

        3)縮放功能設(shè)計

        采取向量比例的算法來實現(xiàn)模型縮放功能,根據(jù)鼠標轉(zhuǎn)輪采集的縮放信息進行縮放。設(shè)縮放大小為d,縮放后新的Camera 位置可如下式計算得到:

        4)平移功能設(shè)計

        通過計算模型中心位置與期望移動位置的偏差,來確定新的Camera 位置坐標,實現(xiàn)模型的平移功能。

        5.3 系統(tǒng)測試

        為測試上述構(gòu)建的方法及所開發(fā)系統(tǒng)的有效性,選用某企業(yè)實際加工中的一些STL 文件,分別對期文本和二進制兩種格式的STL 文件進行測試。結(jié)果表明,系統(tǒng)實現(xiàn)了兩種STL 格式的可視化,并且可以通過人機交互實現(xiàn)模型的旋轉(zhuǎn)、縮放、平移。系統(tǒng)操作簡單、反應速度快。具體測試效果如圖7。

        圖7 實際測試效果展示圖

        6 結(jié) 束 語

        采用WPF 框架以及XAML 技術(shù)的設(shè)計方案,優(yōu)化了系統(tǒng)實現(xiàn)的簡約性,實現(xiàn)了對STL 文件的可視化,也實現(xiàn)了對可視化STL 文件進行操作的功能。用鄰接邊作為STL 文件快速拓展的依據(jù),極大減少了STL 信息的冗余量,提高了可視化速度,為后續(xù)研究中進一步處理可視化的STL 模型提供了信息基礎(chǔ)。

        猜你喜歡
        面片頂點儲存
        食物的儲存之道
        過非等腰銳角三角形頂點和垂心的圓的性質(zhì)及應用(下)
        初次來壓期間不同頂板對工作面片幫影響研究
        關(guān)于頂點染色的一個猜想
        山東科學(2018年6期)2018-12-20 11:08:58
        安防云儲存時代已來
        甜面片里的人生
        幸福家庭(2016年3期)2016-04-05 03:47:08
        青海尕面片
        飲食科學(2014年10期)2014-10-29 16:58:38
        老伴逼我搟面片
        火電廠碳捕集與儲存中吸收法的應用和改進
        冬眠
        文苑(2011年11期)2011-08-09 05:24:30
        午夜福利92国语| 久久九九久精品国产| 免费国产99久久久香蕉| 亚洲欧美国产国产综合一区| 人妻少妇精品视频一区二区三| 被暴雨淋湿爆乳少妇正在播放 | 熟妇的荡欲色综合亚洲| 午夜无码一区二区三区在线观看| 精品国产午夜久久久久九九 | 亚洲综合精品伊人久久| 日本女优久久精品观看| 久久久久国产精品片区无码| 免费男人下部进女人下部视频| 亚洲乱码中文字幕久久孕妇黑人| 亚洲综合在不卡在线国产另类| 麻豆国产VA免费精品高清在线| 怡红院免费的全部视频| 一边摸一边抽搐一进一出口述 | 手机AV片在线| 国产欧美日产久久| 一区二区三区无码高清视频| 青青草成人原视频在线播放视频| 国产99视频精品免费视频免里| 天天夜碰日日摸日日澡性色av| 日本免费看片一区二区三区| 蜜桃在线一区二区三区| 亚洲αⅴ无码乱码在线观看性色 | 日出白浆视频在线播放| 久久黄色精品内射胖女人| 国产精品国产三级国产an| 三上悠亚久久精品| 亚洲精品tv久久久久久久久久| 国产av激情舒服刺激| 日本中文字幕乱码中文乱码| 成人精品国产亚洲av久久| 日韩av一区二区三区四区av| 精品深夜av无码一区二区老年| 免费无遮挡无码永久视频| 亚洲天堂成人av在线观看| 亚洲av熟女天堂久久天堂| 国产美女精品AⅤ在线老女人|