JT是西門子公司推出的PLM通用三維格式,設計爲一個開放、高效率的、緊湊,持久性存儲的產品數據格式,用於產品可視化、協做和CAD數據共享。JT文件格式包括多方面的數據,以及對曲面邊的精準表示,產品和製造業的相關信息,元數據信息,這些信息均可以文件系統導出能夠被產品數據管理系統(PDM)導入到軟件裏。它已被定爲ISO標準(IS 14306-1), 能在PLM整個全生命週期中使用。更多信息,請訪問https://www.plm.automation.siemens.com/en/products/open/jtopen/index.shtml。html
JT格式文件主要存儲模型的可視化網格,並採用各類技術對網格進行壓縮;但也支持存儲精確幾何數據BREP,或者存儲與模型匹配的Parasolid格式內容(這樣通用性更好),存入同一個文件。算法
其版本最開始或僅爲內部使用,在 JT File Format 8.0 和8.1時有普遍使用(當前彷佛已找不到比8.0更前的格式文件)。從版本8.1開始,能夠在網上找到相應的格式說明文件。ISO14306-2012基於西門子JT9.5版本,最新發布的有JT10.0版本。多線程
文件的基本結構,以下圖:
架構
jt格式內容解析,難點在於那些壓縮算法的處理上,其它的或者是zlib,或者是lzma通用性壓縮,處理上應該不是難點。app
3D網格數據通常分爲兩部分,一部分爲拓撲(哪些頂點組成三角形/多邊形);另外一部分爲幾何(頂點數據)。測試
谷歌開源3D數據壓縮算法 Draco 在線看片不再用緩衝了?,相比通用壓縮算法,針對3D數據的特色而開發的壓縮能夠有更大比率的壓縮,這一領域如今也已經被研究二三十年了。google
draco 支持輸入點雲與網格,分別爲ply,obj輸入格式,壓縮後變爲draco自身的格式,可解壓輸出爲ply,obj。在拓撲的壓縮上,draco裏邊有一個很是經典 EdgeBreaker 編碼過程,(draco還支持設置壓縮程度,當最高爲10時,彷佛變換成爲一種序列模式,這個是什麼樣的原理不大清楚),EdgeBreaker基於區域增加原理遍歷網格,英文資料能夠在https://www.cc.gatech.edu/~jarek/edgebreaker/內找到,此外這方面的國產論文也是滿天飛的,資料很好找;在幾何的壓縮上,沒有細看draco的處理模式,可能採用了有損的壓縮方式。點雲的特色是隻有幾何而沒有拓撲,因此draco能夠省略掉拓撲方面的處理。編碼
jt文件還支持裝配、部件的組織結構,這是ply,obj,cml,...等等一系列文件所不具有的。jt8.0版本的沒有對拓撲的專門處理,而9.0版開始採用了一種對偶網格(中文表述或不許確,英文名稱爲Dual Vertex-Facet Mesh,示範代碼類名爲DualVFMesh)的方法進行壓縮,對偶網格方面的國產論文不多,只找到2~3篇提升對偶網格的,自身並不介紹該方法,相比EdgeBreaker,對偶網格除支持三角形網格以外,還同時支持四邊形,五邊形等多邊的模式,搞不大清楚爲何對偶網格方面的論文會比較少,不過若是僅依靠論文,掌握這些算法估計很難。在其餘方面,jt還採用位長度編碼,算術編碼,8.0版還有一個Huffman編碼,此外在位長度壓縮上,9.0版與8.0版有所不一樣。插件
Dual Vertex-Facet Mesh 大致上是這樣的,好比一個矩形體,劃分三角網格以後,通常是8個頂點,12個三角形;反過來,把三角形當成頂點,頂點當成面,示例圖示如上,將這樣表述後獲得的東東壓縮後存儲。線程
沒有去比較draco和jt的壓縮能力,如前所述,兩者所針對的行業與需求是有所差異的。
我認爲draco格式相比jt,最大的缺點是不能表述裝配組件,這樣與CAD模型文件比較不能一一對應。
在文末提供一個我本身寫的支持解析jt文件的osg插件,基於OpenSceneGraph 3.6.3開發,使用vs2017編譯,不過還比較簡陋,jt8.1版的支持度相對好一些,9.0~9.5版還缺乏Chopper解碼,測試也還不夠,大批9.0以上的文件估計沒法支持,當前主要特性以下:
當前僅提供Debug版的插件,還只算是Demo級別,之因此如今就發出來,是由於準備暫時停止這一方面的探索,想對前面這好幾個月在這方面的花費時間與精力作一個備份,之後再視狀況與機會改進。
連接: https://pan.baidu.com/s/1N-iPU6nCfjO2hVV7da_Eww 提取碼: t5xh 複製這段內容後打開百度網盤手機App,操做更方便哦
使用方法:osgviewerd butterflyvalve.jt