下載app免費(fèi)領(lǐng)取會(huì)員
本文來(lái)自“BIM的樂(lè)趣”的“九哥BIMer”
你好,我是九哥~
今天呢,我們來(lái)玩?zhèn)€不一樣的,給我們的Dynamo程序,添加一個(gè)進(jìn)度條,如下圖所示:
本次教程不詳細(xì)講解這個(gè)如何實(shí)現(xiàn)的了,給大家一個(gè)用Python寫(xiě)好的窗體,你只需要在自己的程序里直接調(diào)用即可使用,然后我會(huì)在接下來(lái)的幾篇文章中,給大家講解一下如何在Dynamo中使用WindowsForm繪制窗體。
本次教程,就給大家介紹下,如何將這個(gè)進(jìn)度條加入到自己的程序中,雖然并不是特別準(zhǔn)確的顯示程序進(jìn)度,但是也能有個(gè)大概提示。
首先,新建一個(gè)PythonScript節(jié)點(diǎn),把我提供的代碼復(fù)制進(jìn)去作為模塊使用。
附件下載:
Dynamo運(yùn)行時(shí)添加一個(gè)進(jìn)度條.zip
文章開(kāi)始的動(dòng)圖,是通過(guò)1到10000的計(jì)數(shù),簡(jiǎn)單實(shí)現(xiàn)了一個(gè)進(jìn)度條,代碼如下:
#示例代碼:
importsys
importclr
importSystem
clr.AddReference('ProtoGeometry')
fromAutodesk.DesignScript.Geometryimport*
ProgressBarUtils=IN[0]
pgb=ProgressBarUtils()
lstProcessing=list(range(10000))
out=[]
withpgb.MyProgressBroadcaster(len(lstProcessing),"BIM的樂(lè)趣")asbroadcaster:
foriinlstProcessing:
#你自己程序的核心代碼
#
#通過(guò)EventHook增加進(jìn)度條
broadcaster.onChange.next_p()
OUT=out
這里的進(jìn)度條是通過(guò)模塊里寫(xiě)好的一個(gè)計(jì)數(shù)器實(shí)現(xiàn)的,我們直接通過(guò)broadcaster.onChange.next_p()方法與你自己的程序掛鉤,來(lái)增加進(jìn)度條顯示。
接下來(lái)我們用一個(gè)簡(jiǎn)單的小例子介紹要具體用法,我們簡(jiǎn)單創(chuàng)建一系列點(diǎn),然后在指定點(diǎn)出放置族:
如上所示,我們?cè)谥付c(diǎn)處放置族,套用了上面的示例代碼,融合了在指定點(diǎn)處放置族的代碼,可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的帶進(jìn)度條的程序,代碼如下:
import sys
import clr
import System
clr.AddReference("RevitServices")
clr.AddReference("RevitNodes")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
famType = UnwrapElement(IN[0])
pts = IN[1]
if not isinstance(pts, list):
pts = UnwrapElement([pts])
else:
pts = UnwrapElement(pts)
ProgressBarUtils = IN[2]
pgb = ProgressBarUtils()
elems = []
elemlist = []
with pgb.MyProgressBroadcaster(len(pts), "種樹(shù)進(jìn)度條") as broadcaster:
TransactionManager.Instance.EnsureInTransaction(doc)
for pt in pts:
#你自己的程序操作邏輯
if famType.IsActive == False:
famType.Activate()
elems = doc.Create.NewFamilyInstance(pt.ToRevitType(), famType, Structure.StructuralType.NonStructural)
elemlist.append(elems.ToDSType(True))
#通過(guò)EventHook增加進(jìn)度條
broadcaster.onChange.next_p()
TransactionManager.Instance.TransactionTaskDone()
OUT = elemlist
本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。
下一篇:Revit石材幕墻建模解決方案——“材質(zhì)分割”(一)
推薦專題