给Dynamo程序添加个进度条——WindowsForm系列教程

你好,我是九哥~

今天呢,我们来玩个不一样的,给我们的 Dynamo 程序,添加一个进度条,如下图所示:

本次教程不详细讲解这个如何实现的了,给大家一个用 Python 写好的窗体,你只需要在自己的程序里直接调用即可使用,然后我会在接下来的几篇文章中,给大家讲解一下如何在 Dynamo 中使用 WindowsForm 绘制窗体。

本次教程,就给大家介绍下,如何将这个进度条加入到自己的程序中,虽然并不是特别准确的显示程序进度,但是也能有个大概提示。

首先,新建一个 PythonScript 节点,把我提供的代码复制进去(公众号内回复__ProgressBar获取),作为模块使用。

文章开始的动图,是通过 1 到 10000 的计数,简单实现了一个进度条,代码如下:

import sys
import clr
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

ProgressBarUtils = IN[0]
pgb = ProgressBarUtils()
lstProcessing = list(range(10000))
out = []
with pgb.MyProgressBroadcaster(len(lstProcessing), "BIM的乐趣") as broadcaster:
    for i in lstProcessing:



        broadcaster.onChange.next_p()
OUT = out

这里的进度条是通过模块里写好的一个计数器实现的,我们直接通过_broadcaster.onChange.next_p()_方法与你自己的程序挂钩,来增加进度条显示。

接下来我们用一个简单的小例子介绍要具体用法,我们简单创建一系列点,然后在指定点出放置族:

如上所示,我们在指定点处放置族,套用了上面的示例代码,融合了在指定点处放置族的代码,可以实现一个简单的带进度条的程序,代码如下:

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), "种树进度条") 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))
    
    broadcaster.onChange.next_p()
  TransactionManager.Instance.TransactionTaskDone()

OUT = elemlist

好了,今天的分享就到这里,小伙伴们快去自己尝试吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九哥BIMer

予人玫瑰,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值