datagridview 绑定list 不能刷新界面_Dynamo应用秘籍:33:元素绑定

6f9c4c5ef37a6fc4cedc6962dc023786.png

本篇秘籍是Dynamo应用秘籍28的扩充与扩展。在Dynamo的官网论坛上,Autodesk的JacobSmall详细的讲解了关于Dynamo内的元素关联设计如下:

元素绑定是Dynamo在运行过程中“跟踪”在非Dynamo环境内创建的物体,因为在Revit内的应用最广,因此下面也以Revit为例。这种机制在除Revit外的其他程序(如Advanced Steel, Alias, Fusion等)中都是一样的。

在Revit中,元素(Element)是代表在Revit数据库内具有ElementID的物体。正确应用绑定,可以为我们撬动Dynamo的更多功能提供可能。相反的,如果错误使用,也会降低Dynamo的应用表现及程序运行速度。先来看一下案例:项目文件: Element Binding Review.rvt (1.3 MB) 未绑定程序: No Element Binding.dyn (11.2 KB)

首先使用Revit2019打开项目文件并启动Dynamo2.0及以上版本并打开.DYN文件,然后并立刻另存文件名为“Element Binding”。这是个非常简单的Dynamo程序:创建一个矩形,提取四条边并转换现成墙。运行这个程序,将会在Revit中创建墙体;修改矩形的尺寸,Dynamo将会正常、平稳的刷新运行并将原生成的墙体“移动”到新的位置。运行结束后,保存DYN文件并关闭。

找到两个DYN文件进行比较,会发现文件大小不一样,从12兆增加到了19兆。这多出来的7兆就是构件绑定数据。用Dynamo打开两个大小不同的DYN文件,在用户界面是不会发现有任何的差异的。DYN文件是JSON格式的文本文件,因此我们需要使用其他程序如WEB浏览器或文本编辑器来打开。下图就是使用Notepad++打开的No Element Binding这个文件:

742aaa4caf0bfeeb1715dafc0b86c44c.png

在DYN文件中,可以清晰地看出不同区域和片段的键和[值]。通过这些,我们可以了解更多用户界面下发生的操作。对于元素绑定,其对应的键是Bindings。因此首先搜索这个键,就可以看到该键下的所有内容。在no-bindings的DYN文件中,包含数据的花括号内没有数据;在Element Binding这个文件中,可能会看到类似这样的数据:

97bcef7d7918c73827703564e8a0d28a.png

其中的“乱码”就是经过Base64(使用Base64转码后全部只有基本数字和字母,不会有非法字符或者无法显示的字符如000)转码的数据。Dynamo是如何使用这些数据的?从半技术的角度,Dynamo会解码(反Base64)这些数据并读取,再调用包含绑定的节点去读取Revit模型来找到对应的Revit元素,最后将这个元素附加到节点上。这个过程其实跟重新运行是一样的,不过是因为有了元素绑定,节点关联的元素将会被更重新而不是新建。

我们已经知道了绑定是如何工作的,现在来看一下他们的应用。首先关闭使用所有使用文本编辑器或WEB浏览器打开的DYN文件。在Revit内,给每一段墙体上都放置几个窗户和门,并根据墙体边界创建地板和屋顶。启动Dynamo并打开Element Binding运行。这时候你会发现,程序的首次(打开文件后第一次)运行的速度很慢,这是因为Dynamo需要处理绑定数据。因为绑定数据都是上兆的文本,因此处理速度不是特别快。但是在Github上有一个项目是致力于加快这个进程的,有兴趣的可以去GitHub找。

程序运行结束后你会发现,程序并不会新建墙体,而是将墙体及墙体关联的构件都更新了位置。这样,我们可以在升级流程中做一些非常有意思的操作:甚至可以将原来的矩形换成一个多边形!不同数量的边,可能会产生出不同的设计。不过也要注意,某些情况下,也可能会才造成链接元素的错误。如原来四片墙上都有窗户,然后更新数据成三片墙,那么就会有原来链接给“消失”的墙体上的窗也会自动“灭失”(皮之不存,毛将焉附)。

下面是几条忠告:

  • 元素绑定仅能支持单一项目文件。如果DYN文件在文件1中进行了元素绑定,那么在文件2中,她将不能更新其中的元素。这一点在使用“中心模型”时要特别考量。这个特征也决定了无法创建一个标准的绑定来应用到多个项目中(类似于CAD的外部参照)。对于不同的项目文件,都需要清空绑定数据并未之单独保存绑定好的DYN文件。
  • 这种元素绑定方式被证明适用于Revit,在其他程序(如Advanced Steel, Alias, Fusion等)中不一定适用。如果你经常使用那些软件,可以参考Revit中的这个方法进行探索在软件中的元素绑定方式。
  • 自定义节点及PythonScript节点也不一定适用。如果自定义节点未能按照预定表现,建议联系节点作者来获取更新或帮助。对于PythonScript节点,或者在代码中对Transaction及元素进行恰当的处理,或者简单的将PythonScript节点封装成一个自定义节点。
  • 因为元素绑定是保存在DYN文件中的,因此需要保证在运行Dynamo程序后保存。因此DynamoPlayer是不支持元素绑定的,因为DynamoPlayer并不会每次运行完后更新保存DYN文件。

说了这么多元素绑定,但是如果你不想要她呢?原则上有两种解决方案。一般建议在任何方案下都执行另存为,并比较前后文件的差异。

Dynamo界面方案:

  1. 打开新的Revit文件及DYN文件,首先断开所有起始运行的节点,然后运行。这样会清空所有节点上已有的数据。对于运行后产生的错误,是要不影响Revit就全部忽略。然后保存DYN文件,恢复节点的关联(不要运行)并再次保存。这样会清空元素关联的数据。
  2. 替代方案是重新放置一个新的创建Revit构件的节点,可以使用复制黏贴(CtrlC+CtrlV)或者直接从左侧边栏搜索放置一个全新的节点来替换原程序中的同名节点。
  3. 更加简洁的方案是我在Dynamo应用秘籍27所提到的使用Dynamo Sandbox的打开保存大法。

文本编辑器方案:

使用文本编辑器打开DYN文件,找到Bindings段并手动清除其中花括号内的所有数据。需要注意不能破坏文件内容的结构,否则可能导致DYN文件格式错误。可以使用一些工具(甚至自己编一个Dynamo的版本)来批量对DYN文件进行处理。

快速链接

上一篇 《《《《《 应用秘籍目录 》》》》》下一篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值