<i id="e4ikp"><label id="e4ikp"><ul id="e4ikp"></ul></label></i>
  • <table id="e4ikp"></table>
  • <span id="e4ikp"><tfoot id="e4ikp"></tfoot></span><var id="e4ikp"><input id="e4ikp"><noframes id="e4ikp"></noframes></input></var>
    <form id="e4ikp"></form>
    <i id="e4ikp"></i>
  • <thead id="e4ikp"></thead>
    <form id="e4ikp"><form id="e4ikp"><sub id="e4ikp"></sub></form></form>
    完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
    * 主體類型
    * 企業(yè)名稱
    * 信用代碼
    * 所在行業(yè)
    * 企業(yè)規(guī)模
    * 所在職位
    * 姓名
    * 所在行業(yè)
    * 學(xué)歷
    * 工作性質(zhì)
    請(qǐng)先選擇行業(yè)
    您還可以選擇以下福利:
    行業(yè)福利,領(lǐng)完即止!

    下載app免費(fèi)領(lǐng)取會(huì)員

    NULL

    ad.jpg

    Dynamo運(yùn)行時(shí)添加一個(gè)進(jìn)度條

    發(fā)布于:2021-06-30 11:45:13

    網(wǎng)友投稿

    更多

    本文來(lái)自“BIM的樂(lè)趣”的“九哥BIMer”

    你好,我是九哥~

    今天呢,我們來(lái)玩?zhèn)€不一樣的,給我們的Dynamo程序,添加一個(gè)進(jìn)度條,如下圖所示:

    01.gif

    本次教程不詳細(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)出放置族:

    02.gif

    如上所示,我們?cè)谥付c(diǎn)處放置族,套用了上面的示例代碼,融合了在指定點(diǎn)處放置族的代碼,可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的帶進(jìn)度條的程序,代碼如下:

    03.png

    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)載。

    未標(biāo)題-1.jpg

    上一篇:Revit應(yīng)用和刪除填充圖案

    下一篇:Revit石材幕墻建模解決方案——“材質(zhì)分割”(一)