李德全
(北京市建筑設(shè)計研究院有限公司,北京 100045)
近些年,國內(nèi)多數(shù)設(shè)計院都在試圖推廣“BIM正向設(shè)計”[1],但是在這個過程中,不僅僅是一個軟件的過渡,而是一個工作方式的轉(zhuǎn)變,一種思維邏輯的改變。
多數(shù)設(shè)計院都選擇Autodesk公司的Revit作為實現(xiàn)BIM三維設(shè)計的基礎(chǔ)工具,因為它基本可以滿足從二維設(shè)計到三維設(shè)計的轉(zhuǎn)變過程,并且設(shè)計師比較容易上手。
但是在實際使用過程中,Revit雖然可以勉強滿足平面圖、立面圖、剖面圖等的繪制要求,但是效率遠遠沒有使用CAD等制圖工具高。并且在詳圖、系統(tǒng)圖等方面,Revit這款三維設(shè)計軟件,在這些方面還有些顯得力不從心。例如,在門窗表制作的過程中,雖然利用Revit內(nèi)置的明細表功能,可以快速地統(tǒng)計出同一種窗的個數(shù),以及各種參數(shù)信息,但是出圖格式卻并不能滿足我們設(shè)計院的常用格式,無法實現(xiàn)分層統(tǒng)計。再例如,在繪制門窗詳圖的時候,Revit雖然可以在圖例視圖中,將制作好的門窗族顯示為平面圖例或者立面圖例,但是卻無法自動統(tǒng)計圖紙中的門窗數(shù)量,并在圖例視圖中按指定格式排列。
為了解決這個問題,可以采用Revit內(nèi)置的圖形化編程工具——Dynamo for Revit[2]。利用Dynamo編寫圖形化程序[3],然后配合Revit內(nèi)置的一些功能,可以快速制作出滿足我們制圖要求的門窗表及門窗詳圖[4]。效率更高,準確度也得到了保證。
由于項目體量比較大,在實際建模過程中,對模型進行了分解,并且在不同的模型中分別繪制對應(yīng)的圖紙,但是在最后進行門窗統(tǒng)計的時候,雖然明細表可以統(tǒng)計出數(shù)量[5],但是格式無法滿足要求。門窗詳圖更難統(tǒng)計,無法保證圖例的準確性與唯一性,給項目造成了不小的困擾。
在以往的項目中,都是根據(jù)統(tǒng)計的門窗表,然后人工繪制每個門窗的詳圖,最后再手動排版,效率低,且準確性得不到保障。針對此特點,決定采用Dynamo圖形化編程工具[6],輔助完成門窗表及門窗詳圖。
由于Revit不允許手動批量添加共享參數(shù),所以需要手動逐個添加,故選用Dynamo批量添加的方式,根據(jù)Dynamo參數(shù)化的方式,基本技術(shù)路徑如圖1所示。
在繪制門窗詳圖的過程中,有幾個不可避免的問題,一個是正確統(tǒng)計門窗類型的數(shù)量[7],另一個是快速繪制門窗詳圖[8]。在Revit中,每個門窗的詳圖可以在制作族的時候一并完成,但是無法自動統(tǒng)計并排版。根據(jù)Dynamo參數(shù)化的方式,基本技術(shù)路徑如圖2所示。

圖2 門窗詳圖技術(shù)路線
(1)獲取項目中所有的門窗
用Dynamo獲取項目中的所有門窗,并獲取門窗所在標高,如圖3所示,然后取標高列表的唯一值,作為后面分層統(tǒng)計門窗的基礎(chǔ)數(shù)據(jù)備用。
(2)對所有門窗添加標高共享參數(shù)
可以使用Orchid節(jié)點包的Parameter.CreateSharedParameter節(jié)點,為門、窗添加標高共享參數(shù),并且為實例參數(shù),如圖4所示。

圖4 添加門窗標高共享參數(shù)
(3)對門窗的所有標高參數(shù),全部填入值“0”
為了避免后期調(diào)整門窗所在標高,造成門窗表統(tǒng)計錯誤,每次調(diào)整模型后,需重新運行本程序,如圖5所示,先將門窗所有標高參數(shù)全部填入值“0”。

圖5 所有標高參數(shù)全部寫入值“0”
這里用CodeBlock節(jié)點,構(gòu)造一個waitfor函數(shù),如圖6所示,等待創(chuàng)建完標高參數(shù)以后,再寫入標高參數(shù)值“0”。

圖6 構(gòu)造等待函數(shù)
(4)替換門、窗所在的標高參數(shù)值為“1”
繼續(xù)用waitfor函數(shù),等待所有參數(shù)值均填入“0”以后,再對門窗所在標高,填入值“1”,如圖7所示。

圖7 門窗所在標高參數(shù)寫入值“1”
(5)最后利用Revit的明細表功能,創(chuàng)建門窗表
新建Revit門窗明細表,在明細表屬性—字段選項卡下將圖8中紅框所標的字段,均添加到明細表中。

圖8 添加字段

圖9 設(shè)置分組
在明細表屬性中排序/分組選項卡下設(shè)置按類型分組,并取消勾選“逐項列舉每個實例(Z)”,如圖9所示。在明細表屬性中格式選項卡下,選中標高參數(shù),在右下角的條件格式里,選擇計算總數(shù)[9],如圖10所示。點擊確定后,就能得到一個符合我們設(shè)計要求的門窗明細表,生成結(jié)果如圖11所示。
利用Dynamo添加參數(shù)并寫入?yún)?shù)值,可以在保證質(zhì)量的同時,大大提高工作效率,如圖12柱狀圖所示,手動添加共享參數(shù),只能一個一個添加,然后逐層選擇門、窗寫入?yún)?shù)值。通過Dynamo的方式,可以瞬間完成參數(shù)的添加和參數(shù)值寫入,而且項目規(guī)模越大,Dynamo提升效率更加明顯。

圖10 對標高參數(shù),計算總數(shù)

圖11 門窗明細表

圖12 工作效率分析對比圖

圖13 選擇門窗
(1)選擇鏈接模型中的門、窗和當前項目中的所有門、窗類型
根據(jù)設(shè)計師框選的鏈接模型和選擇的族類別,選擇鏈接模型的門、窗族實例和當前項目中的所有門窗類別,如圖13所示。
(2)獲取鏈接模型族類型
根據(jù)上一步得到的鏈接模型中的門、窗族實例,取唯一值后,再獲取門、窗的族類型,如圖14所示。

圖14 獲取鏈接模型中門窗族的類型
(3)對比鏈接模型和當前項目的門窗類型
可以在Python Script中編寫簡單的Python代碼[4],對比鏈接模型的門窗類型與當前項目中的門窗類型,篩選出當前項目中沒有的類型,并復(fù)制到當前項目中,如圖15所示。
Python Script中代碼如下:
import clr
clr.AddReference(′ProtoGeometry′)
from Autodesk.DesignScript.Geometry import *
l1=IN[0]
l2=IN[1]
out=[]
for x in range(len(l1)):
for y in range(len(l2)):
if l1[x]==l2[y]:
out.append(y)
OUT=out

圖15 復(fù)制鏈接模型中族類型到當前項目
(4)放置門、窗圖例和圖框圖例
由于Revit API的限制,不允許通過Dynamo直接在圖例視圖上放置族圖例,所以創(chuàng)建好門窗圖例視圖以后,先手動放置一個門窗圖例和一個圖框圖例,如圖16所示。

圖16 放置圖例
(5)合并去重

圖17 組類型合并去重
根據(jù)獲取的鏈接文件和當前文件中所有的門窗族類型,合并后去除重復(fù)值,作為最后生成門窗詳圖所需的類型,如圖17,所用代碼同上文(3)中代碼。
(6)創(chuàng)建向量列表
在放置好一個圖例以后,需要復(fù)制這個圖例,以達到創(chuàng)建所有門窗圖例的目的,所以需要先創(chuàng)建一組向量,用來復(fù)制圖例,然后允許設(shè)置每行圖例的個數(shù),以及不同圖框族的尺寸,如圖18。
(7)復(fù)制圖例
根據(jù)前面取得的族類型唯一值數(shù)量和向量列表,復(fù)制放置的圖例和圖框,并利用Element.SetParameterByName節(jié)點,將復(fù)制的圖例類型,替換為實際的族類型,如圖19。
(8)讀取族參數(shù),寫入圖框
到這里門窗圖例已經(jīng)放置完成,需要將圖框的參數(shù)和門、窗族中的參數(shù)關(guān)聯(lián),可以利用Element.GetParameterValueByName節(jié)點,讀取族的參數(shù),然后再用Element.SetParameterByName節(jié)點,寫入到對應(yīng)的圖框族,如圖20所示。
到這里,創(chuàng)建門窗詳圖的工作就基本完成,為了進一步進行自動尺寸標注,經(jīng)過測試,只能標注外輪廓,還無法實現(xiàn)自動判斷門窗是單扇還是雙扇,以及豎梃的分隔位置,所以并不能完全自動化。
(9)獲取門窗BoundingBox投影到圖例視圖

圖18 創(chuàng)建向量列表

圖19 復(fù)制圖例

圖20 讀取和寫入?yún)?shù)

圖21 獲取圖例BoundingBox,并投影到圖例視圖平面
在創(chuàng)建完所有圖例以后,可以通過獲取BoundingBox的方式,獲取所有圖例的外輪廓,然后投影到圖例平面上,作為尺寸標注的參照線,如圖21所示。
(10)創(chuàng)建一道尺寸標注

圖22 創(chuàng)建尺寸標注

圖23 自動生成的窗詳圖示例
利用Dimension.ByElements節(jié)點,在圖例視圖中創(chuàng)建尺寸標注,如圖22所示。根據(jù)上一步得到的BoundingBox投影輪廓線,轉(zhuǎn)換為圖例視圖中的詳圖線,進行尺寸標注。
到這里,一張準確的門窗詳圖就自動創(chuàng)建完成了,只需要設(shè)計師對尺寸標注進行調(diào)整即可達到出圖的要求,生成結(jié)果如圖23所示。
與門、窗表相比,門、窗詳圖更能體現(xiàn)Dynamo圖形編程帶來的好處,不僅統(tǒng)計準確,還能按需求定制門窗詳圖的顯示樣式、排版等,有效地解決了設(shè)計出圖過程中的難題,提高了質(zhì)量和效率。
在大型公建項目中,利用Dynamo生成門、窗詳圖的優(yōu)勢更為明顯,大量的門、窗數(shù)量和類型,人為很難統(tǒng)計準確,而Dynamo可以快速準確地完成該工作。
利用Dynamo輔助施工圖設(shè)計,可以解決很多痛點問題,并且能夠有效減少人為出圖的工作量。對于一個簡單并且重復(fù)性很高的工作,用Dynamo參數(shù)化編程解決起來更是游刃有余。相較于Revit本身,Dynamo優(yōu)勢更明顯,如下:
(1)重復(fù)工作自動化:對于簡單機械的重復(fù)任務(wù),可以用參數(shù)化建模的方法,簡單高效地完成;
(2)提高模型的準確度:參數(shù)化建模的好處,就是所有數(shù)據(jù)都是精確控制的,避免了人為拖拽造成的模型精度下降。
在施工圖設(shè)計過程中,Revit很多功能并不能滿足需求,但是通過原生的可視化編程插件Dynamo就可以解決很多建模或者出圖中的問題。在原生節(jié)點無法滿足要求的時候,還可以通過Python編程,調(diào)用Revit API解決更多問題,如快速創(chuàng)建圖紙、快速布圖、批量導出DWG、停車位指定順序編號[10]等。通過Dynamo可實現(xiàn)重復(fù)工作自動化,在Revit施工圖設(shè)計過程中節(jié)約了很多時間,有效調(diào)動了設(shè)計師采用BIM工具設(shè)計的積極性。