楊 波,樊超群
(中國電子科技集團第二十八研究所,江蘇 南京 210004)
隨著科學技術的發展,消防、公安、軍事等領域對室內人員精準定位的需求日益增加,但精準室內定位顯示要依賴于精確的三維建筑室內模型。目前常用的生成三維建筑模型的方法主要有基于無人機的傾斜攝影修正、基于BIM的Revit軟件建模和3DMAX建模等,但這些方式基本都需要專業領域的工程師才能操作,并且完成一個完整的模型需要大量時間,無法滿足消防和公安等實時使用的需求[1]。
本文將介紹以當前建筑行業廣泛使用的AutoCAD二維建筑圖樣為基礎,利用二次開發技術提取室內建筑模型要素,通過三維模型軟件,快速簡易生成精確三維室內建筑模型的方法。
目前常用的生成三維建筑模型的方法主要有基于無人機傾斜攝影修正、基于BIM的Revit軟件建模和3DMAX建模等,下述簡單介紹這幾種方式。
1)無人機傾斜攝影。
通過無人機搭載數個專業高分辨率傾斜攝影相機,分別從不同方向沿事先規劃好的航線拍攝目標建筑物,拍攝完成后根據GPS信息和慣性導航信息對數據進行幾何校正處理,再利用專業的測繪軟件通過多視角的影像運算出建筑模型,在此基礎上再通過著色處理等方式形成傾斜攝影三維建筑模型[2]。
2)Revit軟件建模。
Revit是Autodesk公司專為建筑信息模型(BIM)設計的,記錄建筑的全生命周期,包括幾何和非幾何信息,但是需要專業建筑設計人員根據前期二維圖樣仔細設計所有建筑要素,比如立柱、墻體、門、窗等,通過逐層累加形成三維建筑模型[3]。
3)3DMAX建模。
3DMAX軟件廣泛應用于建筑設計、游戲、工業設計等領域,采用3DMAX創建三維建筑模型需要專業設計人員基于二維圖樣底圖,對各要素進行造型、PS處理、貼圖等操作,通過渲染使建筑模型比較逼真,最后將模型整體導入三維場景系統使用[4]。
上述3種方式都需要專業技術人員配合專用商業軟件才能生成三維建筑模型,無法滿足消防等領域即時性的要求。
本文設計一種基于二維AutoCAD圖樣快速生成三維建筑模型的方法,其包括基于二維圖樣圖層的建筑特征要素數據輸出和基于三維設計軟件的三維建筑模型生成,主要有如下幾個步驟。
1)導入樓層圖樣:將樓層建筑平面圖加載到軟件中。
2)提取圖層信息:獲取當前平面圖圖樣的圖層信息。
3)圖層要素分類:根據預先設定要素,將圖層分類。
4)輸出特征要素文件:通過建筑物名稱、樓層和樓高等信息輸出特征要素數據文件。
5)生成建筑模型:利用解析過的特征要素數據,根據特征生成相應建筑模型。
流程圖如圖1所示。
AutoCAD二次開發方法有ObjectARX、VBA、AutoLISP和.NET等,本文主要介紹AutoCAD.NET二次開發方法。
AutoCAD.NET使用戶可通過編程的方法利用程序集或開放庫操作AutoCAD和圖形文件。通過開放的對象,它們可被許多不同的編程語言和環境訪問,AutoCAD.NET的API接口中有許多不同類型的對象,其對象模型之間的關系構成一種樹狀結構[5](見圖2)。
在對象結構中以Application為基礎,一個AutoCAD應用程序就是一個Application對象,通過Application對象,用戶可以訪問主窗口以及任何打開的圖形。一旦用戶獲得了圖形,就可以訪問圖形中的對象[6]。下述是本文用到的幾個主要對象。
1)Document對象。
Document對象實際上就是AutoCAD圖形,它是DocumentCollection對象的一部分,并提供訪問與Document對象相關的Database對象。
Document對象提供訪問圖形狀態欄(StatusBar)、document對象被打開的窗口(Window)、Editor(Editor)和事務管理器(TransactionManager)的對象。Editor提供用戶以輸入形式獲取的點、輸入字符串或數字值的功能。
2)Database對象。
Database對象包括所有的圖形和大部分非圖形的AutoCAD對象。被包含在Database中的一些對象有實體、符號表、命名字典。實體在Database中表示圖樣內部的圖形對象。直線、圓、圓弧、文本、填充和多段線都是實體的一個例子。用戶可以在屏幕上看到一個實體并可以操作它。用戶通過Document對象的Database成員屬性可以訪問當前文檔的Database對象。
3)圖形和非圖形對象。
圖形對象,也稱為圖元,是組成圖形的可見對象(例如直線、圓、光柵圖像等)。添加圖形對象到圖形中是通過正確的塊表記錄引用,然后使用AppendEntity方法將一個新對象添加到圖形中來完成的。
非圖形對象是指屬于圖形的一部分但不可見的(提示性的)對象,例如Layers、Linetypes、DimStyles、TableStyle等。若要創建新的符號表記錄,請使用表所有者的Add方法或使用SetAt方法添加一個字典到命令對象字典中[7]。
輸出特征要素文件以C#.NET平臺開發,圖3所示為輸出特征要素數據文件總體流程圖,包括如下幾個步驟。
1)導入樓層圖樣:將樓層建筑平面圖加載到AutoCAD軟件中(見圖4)。
2)提取圖層信息:獲取當前平面圖圖樣的圖層信息。
3)圖層要素分類:根據預先設定要素,將圖層分類。
4)提取要素信息:根據特征要素提取對應圖層中點、線、多線段和塊等模型信息。
5)輸出特征要素數據文件:通過建筑物名稱、樓層和樓高等信息結合特征要素信息輸出特征要素數據文件。
6)是否輸出所有樓層:根據判斷是否已完成所有樓層數據輸出,如果已完成則結束,如果未完成則重復步驟1~5。
具體開發軟件為VisualStudio 2010與AutoCAD 2014結合開發,首先加載AutoCAD指定目錄的acdbmgb.dll與acmgb.dll作為引用文件,這2個文件是進行AutoCAD.NET二次開發必須引用的,通過AtuoCAD自定義菜單與代碼中[CommandMethod("XXX")]字符關聯調出軟件主界面[8]。
在導入樓層圖樣后,通過界面讀取當前圖樣的圖層LayerTable信息,以列表形式展示并可以通過控制顯隱來直觀感受圖層所對應的特征要素。接著按照預先設定墻體Wall、門窗Window和樓梯Stair等建筑要素將圖層分類,再分別針對分類要素對相應圖層的數據進行篩選提取,比如點Point3d、線Line、多線段Polyline和塊BlockReference等,最后按照名稱等建筑物總體屬性,樓層高度等各樓層屬性,墻、門窗和樓梯等樓層特征要素屬性組織成對應XML文件輸出[9]。
三維設計軟件建筑模型生成流程如圖5所示,包括如下幾個步驟。
1)導入特征要素數據文件:導入整體建筑模型特征要素數據文件。
2)解析建筑要素:通過解析結構化文件識別各個特征要素數據。
3)生成建筑模型:利用解析過的特征要素數據,根據特征生成相應建筑模型。
以三維渲染效果較好的Unity3D為例,Unity3D方便的腳本編譯接口,結合VS2010可快速部署開發環境。按照一定格式提供解析,依據解析的特征要素分別創建不同的Object,如樓層Object、墻Object、門窗Object和樓梯Object等。在Unity3D世界中Object形狀由Mesh元素決定,而Mesh通過坐標點繪制而成,通過解析XML文件中存儲的要素的坐標點,然后賦值給各要素對應的Mesh,就可繪制出Object的形狀,從而構建出整個三維建筑模型。最后通過材質設置Material以使建筑更加逼真[10],最終效果如圖6所示。
利用AutoCAD的二次開發技術進行建筑特征的信息提取導出中間模型數據,再結合三維模型軟件二次開發解析數據快速生成三維建筑模型,該技術優點是操作界面簡單,容易快速上手,適用于需要快速現場依據電子圖樣生成三維模型的需求,但也有相應的缺點,即需要二維和三維2種軟件相結合。