利用Dynamo進行模型版本對比

你好,這裏是 BIM 的樂趣,我是九哥~

今天我們來聊一個老生常談的話題——模型版本對比。

先來看一段視頻演示:

此處爲語雀視頻卡片,點擊鏈接查看:003-模型調整跟蹤.mp4

比較同一個模型的不同版本,找出新增,刪除以及更改的內容,雖然感覺上實現應該不難,但是讓你在 Dynamo 裏寫這麼個程序,相信很多人也是不知道該如何上手。今天我們就來聊聊如何用 Dynamo 寫這麼個程序。

最開始是自己胡亂嘗試,獲取參數對比參數之類的,發現效率特別低,後來就在 Bing 上搜了下,發現大佬 Jeremy Tammik 博客裏介紹過。在他的帖子中提到過解決問題的兩種方法,其中有一個就是比較模型的 “快照”。看了這篇文章對我啓發挺大的,所以就照着嘗試了一下。

文章裏詳細介紹了比較方法,並且創建了 GitHub 庫,有二開需求的小夥伴,直接去看看估計就搞定了,我這裏呢,就是類比下,把相同的方法,用 Python 實現,並在 Dynamo 裏做成一種通用的簡便快捷的方法。

接下來進入正題,我們要對比 Revit 模型的版本變化,主要是對比幾方面:

1、新增圖元

2、刪除圖元

3、參數變化

4、幾何變化

5、參數和幾何均變化

一、判斷圖元是新增還是刪除,我們可以使用圖元的 GUID

這一步很簡單,遍歷 A 模型的圖元 GUID 是否在 B 模型列表內,反過來再遍歷 B 模型的圖元 GUID 是否在 A 模型列表內,這樣就能找出新增還是刪除的圖元了。

newguid = [e for e in docAguid if e not in docBguid]
deletedguid = [e for e in docBguid if e not in docAguid]

二、判斷圖元和參數變化

這裏就用到了 “快照” 的概念,可以將參數和幾何轉換成 Encode 對比,也可以轉換成字符串進行對比,看你的操作習慣,例如對比參數,我們可以定義一個自定義函數,如下:

    parameters = x.Parameters
    paramnames = [p.Definition.Name for p in parameters]
    sortedindex = sorted(range(len(paramnames)), key = lambda k : paramnames[k])
    sortedparameters = [paramnames[i] for i in sortedindex]
    paramvalues = []
    for p in parameters:
        if p.AsString() != None:
        paramvalues.append(p.AsString())
    else :
        paramvalues.append(p.AsValueString())
    sortedvalues = [paramvalues[i] for i in sortedindex]

幾何的話,需要先將 solid 轉換成 Mesh,再獲取 Mesh 的頂點,再轉換成字符串進行對比,效率就高很多了。

這個需要自己去多嘗試了,我的方法不一定是最好的,就不展示,小夥伴們子去試試哈~

然後將所有的對比結果依次輸出即可,也可輸出對比的圖元 ID,在 Revit 中對圖元進行顏色區分,就可以很清楚的表達出我們的對比結果了~

好了,今天的分享就到這裏,小夥伴們快去自己嘗試吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章