李德全
(北京市建筑設(shè)計(jì)研究院有限公司,北京 100045)
近些年,國內(nèi)多數(shù)設(shè)計(jì)院都在試圖推廣“BIM正向設(shè)計(jì)”[1],但是在這個(gè)過程中,不僅僅是一個(gè)軟件的過渡,而是一個(gè)工作方式的轉(zhuǎn)變,一種思維邏輯的改變。
多數(shù)設(shè)計(jì)院都選擇Autodesk公司的Revit作為實(shí)現(xiàn)BIM三維設(shè)計(jì)的基礎(chǔ)工具,因?yàn)樗究梢詽M足從二維設(shè)計(jì)到三維設(shè)計(jì)的轉(zhuǎn)變過程,并且設(shè)計(jì)師比較容易上手。
但是在實(shí)際使用過程中,Revit雖然可以勉強(qiáng)滿足平面圖、立面圖、剖面圖等的繪制要求,但是效率遠(yuǎn)遠(yuǎn)沒有使用CAD等制圖工具高。并且在詳圖、系統(tǒng)圖等方面,Revit這款三維設(shè)計(jì)軟件,在這些方面還有些顯得力不從心。例如,在門窗表制作的過程中,雖然利用Revit內(nèi)置的明細(xì)表功能,可以快速地統(tǒng)計(jì)出同一種窗的個(gè)數(shù),以及各種參數(shù)信息,但是出圖格式卻并不能滿足我們?cè)O(shè)計(jì)院的常用格式,無法實(shí)現(xiàn)分層統(tǒng)計(jì)。再例如,在繪制門窗詳圖的時(shí)候,Revit雖然可以在圖例視圖中,將制作好的門窗族顯示為平面圖例或者立面圖例,但是卻無法自動(dòng)統(tǒng)計(jì)圖紙中的門窗數(shù)量,并在圖例視圖中按指定格式排列。
為了解決這個(gè)問題,可以采用Revit內(nèi)置的圖形化編程工具——Dynamo for Revit[2]。利用Dynamo編寫圖形化程序[3],然后配合Revit內(nèi)置的一些功能,可以快速制作出滿足我們制圖要求的門窗表及門窗詳圖[4]。效率更高,準(zhǔn)確度也得到了保證。
由于項(xiàng)目體量比較大,在實(shí)際建模過程中,對(duì)模型進(jìn)行了分解,并且在不同的模型中分別繪制對(duì)應(yīng)的圖紙,但是在最后進(jìn)行門窗統(tǒng)計(jì)的時(shí)候,雖然明細(xì)表可以統(tǒng)計(jì)出數(shù)量[5],但是格式無法滿足要求。門窗詳圖更難統(tǒng)計(jì),無法保證圖例的準(zhǔn)確性與唯一性,給項(xiàng)目造成了不小的困擾。
在以往的項(xiàng)目中,都是根據(jù)統(tǒng)計(jì)的門窗表,然后人工繪制每個(gè)門窗的詳圖,最后再手動(dòng)排版,效率低,且準(zhǔn)確性得不到保障。針對(duì)此特點(diǎn),決定采用Dynamo圖形化編程工具[6],輔助完成門窗表及門窗詳圖。
由于Revit不允許手動(dòng)批量添加共享參數(shù),所以需要手動(dòng)逐個(gè)添加,故選用Dynamo批量添加的方式,根據(jù)Dynamo參數(shù)化的方式,基本技術(shù)路徑如圖1所示。
在繪制門窗詳圖的過程中,有幾個(gè)不可避免的問題,一個(gè)是正確統(tǒng)計(jì)門窗類型的數(shù)量[7],另一個(gè)是快速繪制門窗詳圖[8]。在Revit中,每個(gè)門窗的詳圖可以在制作族的時(shí)候一并完成,但是無法自動(dòng)統(tǒng)計(jì)并排版。根據(jù)Dynamo參數(shù)化的方式,基本技術(shù)路徑如圖2所示。
圖2 門窗詳圖技術(shù)路線
(1)獲取項(xiàng)目中所有的門窗
用Dynamo獲取項(xiàng)目中的所有門窗,并獲取門窗所在標(biāo)高,如圖3所示,然后取標(biāo)高列表的唯一值,作為后面分層統(tǒng)計(jì)門窗的基礎(chǔ)數(shù)據(jù)備用。
(2)對(duì)所有門窗添加標(biāo)高共享參數(shù)
可以使用Orchid節(jié)點(diǎn)包的Parameter.CreateSharedParameter節(jié)點(diǎn),為門、窗添加標(biāo)高共享參數(shù),并且為實(shí)例參數(shù),如圖4所示。
圖4 添加門窗標(biāo)高共享參數(shù)
(3)對(duì)門窗的所有標(biāo)高參數(shù),全部填入值“0”
為了避免后期調(diào)整門窗所在標(biāo)高,造成門窗表統(tǒng)計(jì)錯(cuò)誤,每次調(diào)整模型后,需重新運(yùn)行本程序,如圖5所示,先將門窗所有標(biāo)高參數(shù)全部填入值“0”。
圖5 所有標(biāo)高參數(shù)全部寫入值“0”
這里用CodeBlock節(jié)點(diǎn),構(gòu)造一個(gè)waitfor函數(shù),如圖6所示,等待創(chuàng)建完標(biāo)高參數(shù)以后,再寫入標(biāo)高參數(shù)值“0”。
圖6 構(gòu)造等待函數(shù)
(4)替換門、窗所在的標(biāo)高參數(shù)值為“1”
繼續(xù)用waitfor函數(shù),等待所有參數(shù)值均填入“0”以后,再對(duì)門窗所在標(biāo)高,填入值“1”,如圖7所示。
圖7 門窗所在標(biāo)高參數(shù)寫入值“1”
(5)最后利用Revit的明細(xì)表功能,創(chuàng)建門窗表
新建Revit門窗明細(xì)表,在明細(xì)表屬性—字段選項(xiàng)卡下將圖8中紅框所標(biāo)的字段,均添加到明細(xì)表中。
圖8 添加字段
圖9 設(shè)置分組
在明細(xì)表屬性中排序/分組選項(xiàng)卡下設(shè)置按類型分組,并取消勾選“逐項(xiàng)列舉每個(gè)實(shí)例(Z)”,如圖9所示。在明細(xì)表屬性中格式選項(xiàng)卡下,選中標(biāo)高參數(shù),在右下角的條件格式里,選擇計(jì)算總數(shù)[9],如圖10所示。點(diǎn)擊確定后,就能得到一個(gè)符合我們?cè)O(shè)計(jì)要求的門窗明細(xì)表,生成結(jié)果如圖11所示。
利用Dynamo添加參數(shù)并寫入?yún)?shù)值,可以在保證質(zhì)量的同時(shí),大大提高工作效率,如圖12柱狀圖所示,手動(dòng)添加共享參數(shù),只能一個(gè)一個(gè)添加,然后逐層選擇門、窗寫入?yún)?shù)值。通過Dynamo的方式,可以瞬間完成參數(shù)的添加和參數(shù)值寫入,而且項(xiàng)目規(guī)模越大,Dynamo提升效率更加明顯。
圖10 對(duì)標(biāo)高參數(shù),計(jì)算總數(shù)
圖11 門窗明細(xì)表
圖12 工作效率分析對(duì)比圖
圖13 選擇門窗
(1)選擇鏈接模型中的門、窗和當(dāng)前項(xiàng)目中的所有門、窗類型
根據(jù)設(shè)計(jì)師框選的鏈接模型和選擇的族類別,選擇鏈接模型的門、窗族實(shí)例和當(dāng)前項(xiàng)目中的所有門窗類別,如圖13所示。
(2)獲取鏈接模型族類型
根據(jù)上一步得到的鏈接模型中的門、窗族實(shí)例,取唯一值后,再獲取門、窗的族類型,如圖14所示。
圖14 獲取鏈接模型中門窗族的類型
(3)對(duì)比鏈接模型和當(dāng)前項(xiàng)目的門窗類型
可以在Python Script中編寫簡(jiǎn)單的Python代碼[4],對(duì)比鏈接模型的門窗類型與當(dāng)前項(xiàng)目中的門窗類型,篩選出當(dāng)前項(xiàng)目中沒有的類型,并復(fù)制到當(dāng)前項(xiàng)目中,如圖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ù)制鏈接模型中族類型到當(dāng)前項(xiàng)目
(4)放置門、窗圖例和圖框圖例
由于Revit API的限制,不允許通過Dynamo直接在圖例視圖上放置族圖例,所以創(chuàng)建好門窗圖例視圖以后,先手動(dòng)放置一個(gè)門窗圖例和一個(gè)圖框圖例,如圖16所示。
圖16 放置圖例
(5)合并去重
圖17 組類型合并去重
根據(jù)獲取的鏈接文件和當(dāng)前文件中所有的門窗族類型,合并后去除重復(fù)值,作為最后生成門窗詳圖所需的類型,如圖17,所用代碼同上文(3)中代碼。
(6)創(chuàng)建向量列表
在放置好一個(gè)圖例以后,需要復(fù)制這個(gè)圖例,以達(dá)到創(chuàng)建所有門窗圖例的目的,所以需要先創(chuàng)建一組向量,用來復(fù)制圖例,然后允許設(shè)置每行圖例的個(gè)數(shù),以及不同圖框族的尺寸,如圖18。
(7)復(fù)制圖例
根據(jù)前面取得的族類型唯一值數(shù)量和向量列表,復(fù)制放置的圖例和圖框,并利用Element.SetParameterByName節(jié)點(diǎn),將復(fù)制的圖例類型,替換為實(shí)際的族類型,如圖19。
(8)讀取族參數(shù),寫入圖框
到這里門窗圖例已經(jīng)放置完成,需要將圖框的參數(shù)和門、窗族中的參數(shù)關(guān)聯(lián),可以利用Element.GetParameterValueByName節(jié)點(diǎn),讀取族的參數(shù),然后再用Element.SetParameterByName節(jié)點(diǎn),寫入到對(duì)應(yīng)的圖框族,如圖20所示。
到這里,創(chuàng)建門窗詳圖的工作就基本完成,為了進(jìn)一步進(jìn)行自動(dòng)尺寸標(biāo)注,經(jīng)過測(cè)試,只能標(biāo)注外輪廓,還無法實(shí)現(xiàn)自動(dòng)判斷門窗是單扇還是雙扇,以及豎梃的分隔位置,所以并不能完全自動(dòng)化。
(9)獲取門窗BoundingBox投影到圖例視圖
圖18 創(chuàng)建向量列表
圖19 復(fù)制圖例
圖20 讀取和寫入?yún)?shù)
圖21 獲取圖例BoundingBox,并投影到圖例視圖平面
在創(chuàng)建完所有圖例以后,可以通過獲取BoundingBox的方式,獲取所有圖例的外輪廓,然后投影到圖例平面上,作為尺寸標(biāo)注的參照線,如圖21所示。
(10)創(chuàng)建一道尺寸標(biāo)注
圖22 創(chuàng)建尺寸標(biāo)注
圖23 自動(dòng)生成的窗詳圖示例
利用Dimension.ByElements節(jié)點(diǎn),在圖例視圖中創(chuàng)建尺寸標(biāo)注,如圖22所示。根據(jù)上一步得到的BoundingBox投影輪廓線,轉(zhuǎn)換為圖例視圖中的詳圖線,進(jìn)行尺寸標(biāo)注。
到這里,一張準(zhǔn)確的門窗詳圖就自動(dòng)創(chuàng)建完成了,只需要設(shè)計(jì)師對(duì)尺寸標(biāo)注進(jìn)行調(diào)整即可達(dá)到出圖的要求,生成結(jié)果如圖23所示。
與門、窗表相比,門、窗詳圖更能體現(xiàn)Dynamo圖形編程帶來的好處,不僅統(tǒng)計(jì)準(zhǔn)確,還能按需求定制門窗詳圖的顯示樣式、排版等,有效地解決了設(shè)計(jì)出圖過程中的難題,提高了質(zhì)量和效率。
在大型公建項(xiàng)目中,利用Dynamo生成門、窗詳圖的優(yōu)勢(shì)更為明顯,大量的門、窗數(shù)量和類型,人為很難統(tǒng)計(jì)準(zhǔn)確,而Dynamo可以快速準(zhǔn)確地完成該工作。
利用Dynamo輔助施工圖設(shè)計(jì),可以解決很多痛點(diǎn)問題,并且能夠有效減少人為出圖的工作量。對(duì)于一個(gè)簡(jiǎn)單并且重復(fù)性很高的工作,用Dynamo參數(shù)化編程解決起來更是游刃有余。相較于Revit本身,Dynamo優(yōu)勢(shì)更明顯,如下:
(1)重復(fù)工作自動(dòng)化:對(duì)于簡(jiǎn)單機(jī)械的重復(fù)任務(wù),可以用參數(shù)化建模的方法,簡(jiǎn)單高效地完成;
(2)提高模型的準(zhǔn)確度:參數(shù)化建模的好處,就是所有數(shù)據(jù)都是精確控制的,避免了人為拖拽造成的模型精度下降。
在施工圖設(shè)計(jì)過程中,Revit很多功能并不能滿足需求,但是通過原生的可視化編程插件Dynamo就可以解決很多建模或者出圖中的問題。在原生節(jié)點(diǎn)無法滿足要求的時(shí)候,還可以通過Python編程,調(diào)用Revit API解決更多問題,如快速創(chuàng)建圖紙、快速布圖、批量導(dǎo)出DWG、停車位指定順序編號(hào)[10]等。通過Dynamo可實(shí)現(xiàn)重復(fù)工作自動(dòng)化,在Revit施工圖設(shè)計(jì)過程中節(jié)約了很多時(shí)間,有效調(diào)動(dòng)了設(shè)計(jì)師采用BIM工具設(shè)計(jì)的積極性。