處理ImportInstance的原理及區別

在Revit裡面直接鏈接或者導入的DWG文件中,裡面經常會有多個圖層的情況。當然,如果在Revit中對於這些圖層不敏感,也就是不同圖層上的圖形可以混搭起來使用,就不會有任何阻礙。不過在DWG中定義的圖層,往往用於給特定的類型進行分類,如WALL和WINDOWS圖層就可以非常簡易地幫助我們通過圖層來區分建築構件,哪怕他們都是僅僅用線繪製的。

Dynamo內置節點對於ImportInstance的圖形提取,僅僅是簡單的將所有的線條提取出來,而線條所包含的額外信息如圖層等,是不進行解析輸出的。這樣的節點提取出來的數據,將無法區分是WALL還是WINDOWS,在後繼的分類處理中明顯十分不便。而且對於這樣一股腦的輸出,也沒有辦法通過程序演算法來對這些線進行分類和分組,畢竟線條在節點內重構時,僅有基本信息而沒有額外的附加信息。

但是這種附加信息在ImportInstance中其實是存在的,只不過藏得比較深,需要多一些挖掘。曲線的圖層信息保存在圖形的GraphicsStyle裡面,通過獲取圖形對應的GraphicsStyle及其Category的名稱(Name),我們就可以獲取到曲線所在的DWG圖層名稱。這個Python代碼如下:

## input:crvnLayerName = DOC.GetElement(crv.GraphicsStyleId).GraphicsStyleCategory.Namen

通過這個簡單的挖掘,就可以將每條曲線對應所在的圖層提取出來,而這樣的圖層的組合,也是我們可以從ImportInstance裡面提取的圖層名稱信息。

BimporphNodes軟體包和LinkDWG軟體包都是使用相同的方法來對ImportInstance中的曲線進行按層的分組,但是兩者也略有不同,主要是對Polyline的處理:

  • BimporphNodes軟體包

    將Polyline轉換成直線段的組合,並與其他平級的曲線放在一起。會增加整體的曲線數量

  • LinkDWG軟體包

    將Polyline轉換成僅有直線段的PolyCurve,保持與Polyline的對應,不增加曲線數量

請仔細看圖片中的【3*Arc+PolyCurve】與【3*Arc+5*Line】

同時請注意:此截圖非正式發布版本,僅為過程版本,正式版本將有更多選項控制和輸出,詳細請跳轉到處理ImportInstance的擴充

在對ImportInstance數據的解析代碼方面,LinkDWG軟體包因為是重新設計,也相對要精簡的多,更加容易讀懂和理解。同時,LinkDWG軟體包還輸出API曲線列表,形式為Autodesk.Revit.DB.Line、Autodesk.Revit.DB.Arc、Autodesk.Revit.DB.Polyline等,方便後繼主要在這些曲線的基礎上進一步做處理工作。

這些區別的視頻演示已經錄製完成並上線,歡迎加入姑娘課堂的Dynamo的ActiveX技術應用:LinkDWG課程進行觀看學習。

推薦閱讀:

為什麼像國內的廣聯達,斯維爾出的模型,不能被叫做 BIM?
關於 BIM 遇到的技術、流程、軟體上的問題,應該去哪裡找資料和答案?
Revit 的前景如何?
不做什麼事情能讓BIM更順利實施?
使用Revit時,是否碰到過模型損壞無法打開的問題?碰到這種問題,你們項目團隊是如何解決的?

TAG:AutoDeskRevit | AutoCAD | BIM |