打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
给Dynamo程序添加个进度条——WindowsForm系列教程
userphoto

2022.09.29 北京

关注

你好,我是九哥~

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

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

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

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

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

#示例代码:import sysimport clrimport Systemclr.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: #你自己程序的核心代码        # #通过EventHook增加进度条        broadcaster.onChange.next_p()OUT = out

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

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

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

import sysimport clrimport System
clr.AddReference("RevitServices")clr.AddReference("RevitNodes")import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManagerdoc = DocumentManager.Instance.CurrentDBDocument
import Revitclr.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)) #通过EventHook增加进度条 broadcaster.onChange.next_p() TransactionManager.Instance.TransactionTaskDone()
OUT = elemlist

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



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Dynamo入门教程,4.9元拿走
有多少人在使用C++/CLR?
NET程序是如何编译的
Dynamo
python相关的python 教程和python 下载你可以在老王python里寻觅
Dynamo初探——简介及安装
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服