本發(fā)明涉及三維模型數(shù)據(jù)格式轉(zhuǎn)換技術(shù)領(lǐng)域,尤其涉及一種dgn數(shù)據(jù)格式的轉(zhuǎn)換方法。
背景技術(shù):
隨著bim(建筑信息模型)應(yīng)用的深入,信息模型如何能夠在各個(gè)平臺(tái)上集成和使用成為了關(guān)鍵問題。bim數(shù)據(jù)的主要來源是三維cad設(shè)計(jì)或建模的成果,但是三維cad數(shù)據(jù)的集成面臨最大的問題是數(shù)據(jù)格式不能轉(zhuǎn)換,導(dǎo)致設(shè)計(jì)模型不能與其它應(yīng)用和軟件相結(jié)合。以當(dāng)前主要的三維設(shè)計(jì)軟件平臺(tái)autodesk和bentley為例,導(dǎo)出為公開格式collada時(shí),主要存在以下問題:
(1)屬性信息全部丟失,很多信息模型只能在各自廠商的體系中運(yùn)轉(zhuǎn),導(dǎo)出為其它格式時(shí),三維模型攜帶的屬性信息會(huì)完全丟失;
(2)模型元素劃分不合理,在cad平臺(tái)中作為一個(gè)元素的圖形,導(dǎo)出以后會(huì)以一個(gè)或若干個(gè)構(gòu)成新的元素,造成元素劃分結(jié)果不可控。比如,在dgn文件中,樁基與承臺(tái)分別為兩個(gè)元素,但是只要在一個(gè)圖層,利用microstaion導(dǎo)出為collada格式時(shí),會(huì)合并成一個(gè)元素;
(3)某些元素丟失,造成數(shù)據(jù)的不完整。
因此,在實(shí)際的數(shù)據(jù)交換工程中,還需要大量轉(zhuǎn)換后的數(shù)據(jù)重構(gòu)工作,導(dǎo)致模型輸出效率低下,影響后續(xù)利用。
dgn文件格式是美國bentley公司產(chǎn)品的通用數(shù)據(jù)格式,bentley的基礎(chǔ)設(shè)計(jì)平臺(tái)microstaion及其它專業(yè)設(shè)計(jì)軟件支持的數(shù)據(jù)格式都是dgn格式。three.js是流行的webgl框架,可以用它創(chuàng)建各種三維場景,包括了攝影機(jī)、光影、材質(zhì)等各種對象,在web頁面上看到許多精彩的三維場景。three.js支持json腳本表達(dá)的三維模型數(shù)據(jù)。
目前,dgn數(shù)據(jù)格式轉(zhuǎn)換主要依賴microstation自帶的數(shù)據(jù)導(dǎo)出功能,或者采用第三方數(shù)據(jù)轉(zhuǎn)換程序(如fme),但是缺乏對bim模型的專門支持。尤其是隨著web三維技術(shù)的發(fā)展,需要將dgn成果模型在網(wǎng)頁上展示、開發(fā)的需求越來越強(qiáng)烈。但是,市場上尚沒有工具很好地支持dgn數(shù)據(jù)導(dǎo)出為three.js支持格式,因此,需要針對dgn格式研究方法和工具,實(shí)現(xiàn)dgn到three.js的json格式。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是針對bim在web中的應(yīng)用需求,為突破dgn數(shù)據(jù)格式不能應(yīng)用于webgl的局限,采用模型解析重構(gòu)技術(shù),通過在microstation上開發(fā)插件,解決dgn數(shù)據(jù)到three.js支持格式的無損轉(zhuǎn)換。
為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:
一種dgn數(shù)據(jù)格式的轉(zhuǎn)換方法,包括步驟:
1、在程序中讀入dgn模型;
2、解析dgn模型,獲取dgn圖形數(shù)據(jù)、元素屬性信息以及元素材質(zhì)信息,所述元素屬性信息指組成dgn圖形數(shù)據(jù)的元素的專業(yè)屬性,包括元素的尺寸和用途,所述元素材質(zhì)信息包括材質(zhì)名稱、顏色以及透明度;
3、解析dgn圖形數(shù)據(jù),獲取組成圖形數(shù)據(jù)的基本元素,將基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng);
4、將三角網(wǎng)信息、元素材質(zhì)信息以及元素屬性信息根據(jù)three.js模型數(shù)據(jù)格式進(jìn)行重構(gòu)并導(dǎo)出。
所述步驟3中解析dgn圖形數(shù)據(jù),獲取組成圖形數(shù)據(jù)的基本元素,將基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng)的具體方法是:
3.1解析dgn圖形數(shù)據(jù),判斷組成dgn圖形數(shù)據(jù)的元素所屬三維元素類型,所述三維元素類型包括基本元素和單元,所述基本元素包括實(shí)體、智能實(shí)體、曲面以及網(wǎng)格面,所述單元是指若干基本元素的組合;若組成dgn圖形數(shù)據(jù)的元素屬于基本元素,則執(zhí)行步驟3.2;若組成dgn圖形數(shù)據(jù)的元素屬于單元,則執(zhí)行步驟3.3;
3.2、將dgn圖形數(shù)據(jù)的基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng);
3.3、對所述單元進(jìn)行遞歸遍歷,得到其基本元素,然后將得到的基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng),并將轉(zhuǎn)換后的三角網(wǎng)進(jìn)行組合。
所述步驟3.2和3.3中基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng)的具體方法為:
(1)根據(jù)基本元素是否封閉,將所述基本元素分成封閉元素和非封閉元素,其中非封閉元素又分為一般曲面元素和網(wǎng)格面元素;
(2)對于封閉元素和一般曲面元素,調(diào)用microstation的api中的片化體函數(shù)mdlkisolid_facetbodywithnormals,將片的最大邊數(shù)設(shè)置為固定值3,同時(shí)傳入弦公差、角度以及最大邊長,得到三角化后的點(diǎn)坐標(biāo)、三角形頂點(diǎn)索引數(shù)組以及三角形法向量數(shù)組;對于網(wǎng)格面元素,采用microstation的api中的函數(shù)mdlmesh_getpolyfacearrays提取點(diǎn)坐標(biāo)和面頂點(diǎn)索引數(shù)組,然后根據(jù)microstation的api中的函數(shù)mdlmesh_triangulateembeddedarrays進(jìn)行三角化重組,將其中不是三角形的面拆分為三角形,得到三角化后的點(diǎn)坐標(biāo)和三角形頂點(diǎn)索引數(shù)組以及三角形法向量數(shù)組。
所述步驟3.3在執(zhí)行前定義一個(gè)開關(guān),當(dāng)要執(zhí)行步驟3.3時(shí)將開關(guān)開啟,當(dāng)步驟3.3執(zhí)行結(jié)束時(shí)將開關(guān)關(guān)閉。
所述步驟4)中將三角網(wǎng)信息、元素材質(zhì)信息以及元素屬性信息根據(jù)three.js模型數(shù)據(jù)格式進(jìn)行重構(gòu)并導(dǎo)出的具體方法為:
根據(jù)three.js模型數(shù)據(jù)格式的組織方式,將三角網(wǎng)信息,即三角化后的點(diǎn)坐標(biāo)、三角形頂點(diǎn)索引數(shù)組、三角形法向量數(shù)組以及元素包絡(luò)球填入到three.js模型數(shù)據(jù)格式的圖形數(shù)組geometries;將元素材質(zhì)信息填入到three.js模型數(shù)據(jù)格式的材質(zhì)數(shù)組materials,將元素屬性信息連同三角網(wǎng)信息和材質(zhì)信息一起組合填入three.js模型數(shù)據(jù)格式中object對象中的children字段;然后添加three.js模型數(shù)據(jù)格式中元數(shù)據(jù)metadata信息;最后將組織好的字符串輸出到指定路徑的文本文件。
所述元數(shù)據(jù)metadata信息包括創(chuàng)建者和版本信息,所述組織好的字符串為json格式。
相對于現(xiàn)有技術(shù),本發(fā)明的有益效果是:
本發(fā)明提出的采用microstation的api解析dgn數(shù)據(jù),進(jìn)行三角化,最后重構(gòu)導(dǎo)出得到結(jié)果,對比借助中間格式或第三方轉(zhuǎn)換軟件的優(yōu)勢有:
1)針對性強(qiáng),可以只將關(guān)心的元素類型導(dǎo)出,同時(shí)保留了設(shè)計(jì)模型中的屬性信息;
2)過程可控,由于不借助于中間格式,直接將兩種格式對接,對于哪一部分詳細(xì)、哪一部分粗略、哪些合并、哪些拆分等問題,可以在轉(zhuǎn)換過程中把控,提高了數(shù)據(jù)準(zhǔn)確度;
3)效率高,避免了數(shù)據(jù)格式轉(zhuǎn)換后重新處理修改的步驟,有效縮減了數(shù)據(jù)加工時(shí)間。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要的附圖做簡單的介紹,顯而易見地,下面描述的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明dgn數(shù)據(jù)格式的轉(zhuǎn)換方法流程圖。
具體實(shí)施方式
為了使本發(fā)明實(shí)現(xiàn)的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解,下面結(jié)合具體實(shí)施例和附圖,進(jìn)一步闡述本發(fā)明,但下述實(shí)施例僅僅為本發(fā)明的優(yōu)選實(shí)施例,并非全部?;趯?shí)施方式中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得其它實(shí)施例,都屬于本發(fā)明的保護(hù)范圍。
本發(fā)明提出基于解析——三角化——重構(gòu)的數(shù)據(jù)轉(zhuǎn)換技術(shù)路線,采用microstation二次開發(fā)api(applicationprogramminginterface,應(yīng)用程序編程接口),實(shí)現(xiàn)三維模型及其屬性信息轉(zhuǎn)換為json格式的文本數(shù)據(jù),在工程實(shí)際應(yīng)用中實(shí)現(xiàn)三維設(shè)計(jì)成果dgn數(shù)據(jù)與webgl的數(shù)據(jù)交換。其具體實(shí)現(xiàn)方法如圖1所示:
一、在程序中讀入dgn模型;
二、解析dgn模型,獲取dgn圖形數(shù)據(jù)、元素屬性信息和元素材質(zhì)信息;
所述元素屬性信息指元素的專業(yè)屬性,包括元素的尺寸和用途,所述元素材質(zhì)信息包括材質(zhì)名稱、顏色以及透明度,材質(zhì)的顏色、透明度等可以方便地使用microstaion中的xmlinstanceapi下的函數(shù)獲取到相應(yīng)的數(shù)值。例如,獲取材質(zhì)顏色的函數(shù)為mdlelement_getsymbology,相應(yīng)的,而獲取材質(zhì)透明度的函數(shù)為mdlelement_gettransparency。
三、解析dgn圖形數(shù)據(jù),判斷組成dgn圖形數(shù)據(jù)的元素所屬三維元素類型,所述三維元素類型包括基本元素和單元,所述基本元素包括實(shí)體、智能實(shí)體、曲面以及網(wǎng)格面,所述單元是指若干基本元素的組合;若組成dgn圖形數(shù)據(jù)的元素屬于基本元素,則執(zhí)行步驟四;若組成dgn圖形數(shù)據(jù)的元素屬于單元,則執(zhí)行步驟五;
四、將dgn圖形數(shù)據(jù)的基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng),執(zhí)行步驟六;
五、對所述單元進(jìn)行遞歸遍歷,得到其基本元素,然后將得到的基本元素轉(zhuǎn)換成webgl支持的圖形元素類型三角網(wǎng),并將轉(zhuǎn)換后的三角網(wǎng)進(jìn)行組合,執(zhí)行步驟六;
由于基本元素和單元在格式轉(zhuǎn)換過程中所涉及的處理過程不同,因此需要將基本元素和單元分別單獨(dú)進(jìn)行處理,單元的處理方式是先進(jìn)行遞歸遍歷得到基本元素,然后將基本元素三角化處理后進(jìn)行組合。在對單元進(jìn)行處理前需要定義一個(gè)開關(guān)值isinsertingcellelm,在處理單元時(shí)設(shè)置為true,處理結(jié)束組合完畢后,設(shè)置為false,在處理過程中只要判別isinsertingcellelm為true,得到的基本元素就要組合到一起。
由于webgl支持的圖形元素類型本質(zhì)上都是三角網(wǎng),和dgn中的元素類型不能對應(yīng),因此,需要將dgn中的元素類型轉(zhuǎn)換成webgl支持的三角網(wǎng)。針對dgn中的封閉元素、一般曲面元素和網(wǎng)格面元素,需要采用不同的三角化方法將其轉(zhuǎn)換成三角網(wǎng)。具體方法為:
(1)根據(jù)基本元素是否封閉,將所述基本元素分成封閉元素和非封閉元素,所述非封閉元素又分為一般曲面元素和網(wǎng)格面元素;
(2)對于封閉元素和一般曲面元素,調(diào)用microstation的api中的片化體函數(shù)mdlkisolid_facetbodywithnormals,將片的最大邊數(shù)設(shè)置為固定值3,同時(shí)傳入弦公差、角度以及最大邊長,得到三角化后的點(diǎn)坐標(biāo)、三角形頂點(diǎn)索引數(shù)組以及三角形法向量數(shù)組;對于網(wǎng)格面元素,采用microstation的api中的函數(shù)mdlmesh_getpolyfacearrays提取點(diǎn)坐標(biāo)和面頂點(diǎn)索引數(shù)組,然后根據(jù)microstation的api中的函數(shù)mdlmesh_triangulateembeddedarrays進(jìn)行三角化重組,將其中不是三角形的面拆分為三角形,得到三角化后的點(diǎn)坐標(biāo)和三角形頂點(diǎn)索引數(shù)組以及三角形法向量數(shù)組。
六、將三角網(wǎng)信息、元素材質(zhì)信息以及元素屬性信息根據(jù)three.js模型數(shù)據(jù)格式進(jìn)行重構(gòu)并導(dǎo)出。
three.js模型數(shù)據(jù)格式主要分為以下4部分:元數(shù)據(jù)metadata、圖形數(shù)組geometries、材質(zhì)數(shù)組materials和對象object。
元數(shù)據(jù)metadata主要記錄版本、創(chuàng)建者等信息;geometries數(shù)組主要是各個(gè)元素的坐標(biāo)數(shù)據(jù)、三角形頂點(diǎn)索引數(shù)組、元素最小包絡(luò)球等;材質(zhì)數(shù)組materials中,主要存儲(chǔ)各個(gè)元素以及元素組成部分獲取到的材質(zhì)信息;對象object中有一個(gè)children字段,主要是將圖形、材質(zhì)和屬性三部分組合。
根據(jù)three.js模型數(shù)據(jù)格式的組織方式,將點(diǎn)坐標(biāo)、三角形頂點(diǎn)索引數(shù)組、法向量數(shù)組、元素包絡(luò)球等填入到對應(yīng)位置;添加顏色、透明度等材質(zhì)信息;在用戶屬性部分添加元素的屬性信息。最后,將這個(gè)json字符串輸出到指定路徑的文本文件。
本發(fā)明具體實(shí)施方式采用c++的開源函數(shù)庫rapidjson,實(shí)現(xiàn)json的建立、修改和輸出。創(chuàng)建的類jsoncreater,結(jié)構(gòu)如下:
技術(shù)指標(biāo):
(1)運(yùn)行插件的microstaion版本為v8i,dgn數(shù)據(jù)版本為v8以上。
功能指標(biāo):
(1)可以設(shè)置參數(shù),從而實(shí)現(xiàn)不同精細(xì)程度的導(dǎo)出結(jié)果。
(2)導(dǎo)出模型的元素劃分滿足專業(yè)bim實(shí)施的要求,攜帶專業(yè)的屬性信息。
本發(fā)明提出數(shù)據(jù)格式轉(zhuǎn)換的技術(shù)路線,不借助于中間格式,實(shí)現(xiàn)dgn數(shù)據(jù)到three.js支持的json格式;提出數(shù)據(jù)解析重構(gòu)的方法,實(shí)現(xiàn)實(shí)體元素、面元素、網(wǎng)格元素、元素組合的提取——?dú)w類——處理——重組;提出可擴(kuò)展的屬性字段和值的轉(zhuǎn)換方法,實(shí)現(xiàn)信息的無損轉(zhuǎn)換;采用microstaion的api,自行開發(fā)插件工具實(shí)現(xiàn)轉(zhuǎn)換,提高了轉(zhuǎn)換效率。
以上所述僅為本發(fā)明的具體實(shí)施方式,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。