🌓
搜索
 找回密码
 立即注册

Ginger Studio Dynamo Revit中的参数设计插件简介(一)

生姜工作室 2019-6-10 22:50:37 2976

生姜工作室

Revit中的参数设计插件Dynamo简介


Note:今天的分享是博主在美国工作的同学讲述自己用Revit以及dynamo的工作经验。文章作者就职的公司设计范畴包括了许多Prefab(预制建筑)的工作内容,因此使用Revit及Dynamo介入设计流程。




分享Grasshopper实例的平台,鼓励Grasshopper原创作者




本期作者


MY.W

现就职于洛杉矶建筑设计公司,毕业于USC洛杉矶




前言:

最近两个礼拜,把目前网上能找到的所有Dynamo教程大致看了一遍,除了那些要付费的。发现很多现有的教程都有一些通病。有的教程完全把Dynamo当成Grasshopper来写,把一些初级的GH教程用Dynamo跑一遍,就成了Dynamo教程;有的教程花了大篇幅来讲Python入门,最后并没有落到Revit的实际应用上;还有个别教程把Dynamo官方的英文教程翻译了一下,还要收费才能看。。。

 

学软件的最终目的是帮助到实际的工作,教程的内容落不到实处就是浪费时间。这个系列把重点放在Dynamo在Revit中的实际应用上,结合在实际工作中碰到的案例来分析Dynamo的实用性。

 

主要通过几个方面来讲解:

- Dynamo-Revit参数化建模,与Grasshopper-Rhino的比较

- Python在Dynamo中的应用、Revit API的应用

- 利用Dynamo-Python进行BIM数据处理,对实际项目预算以及跨专业合作的帮助

- 利用Dynamo快速出图

 

第一章:Revit-Dynamo VS. Rhino-Grasshopper

先简单对比一下Dynamo和Grasshopper,然后放一个简单的例子。



单作为可视化编程软件来说,Grasshopper已经发展多年,有很多强大的插件的支持,功能上远比Dynamo强大。尤其在几何处理能力上,Dynamo差了不止一点点。Dynamo之所以可以在近几年逐渐发展,并且接受度不断增加,原因自然是在于搭载的平台。


下面用一个创建曲面墙的例子来比较Dynamo和Grasshopper的建模思路。

Dynamo脚本:


图1.1


这部分和Grasshopper中的思路基本相同,通过几个点创建曲线,通过两条曲线Loft生成曲面。接下来只要加一个厚度,就可以得到一个曲面的体块。


图1.2a,1.2b:


ImportInstance.ByGeometry可以把Dynamo中的模型导入Revit中,类似于GH中Bake的作用。点一下Run,就可以在Revit中生成这个体块。

为了更好的对比,我们在Revit中直接创建一个曲面墙。


图1.3:


对比之下问题来了,通过之前的Dynamo创建的这个体块并没有被Revit归入到墙体的种类(Category)中


图1.4a,1.4b:


它不属于墙这个种类,就意味着在Revit中不能在上面直接放置门窗,也没有属于墙体的族中所有的任何参数。


图1.5a,1.5b:


这个体块就像Rhino里的一个立方体,你可以称它为墙,称它为柱子,称它为家具,但这个体块本身并不具有任何的属性,因此也不能被Revit识别为墙面。在用Dynamo进行建模时,必须要注意与Revit建模原理的相对应。

接下来的修改就可以看出Dynamo有别于Grasshopper的地方。

在之前的例子(图1.3)中可以看到,创建墙面的过程中用到了Revit中“Wall by Face” 这个命令。Dynamo中搜索一下就发现,有一个相同的命令。


图1.6:Dynamo Node: Wall by Face


这个节点分别由三个输入端:墙体的基准线(Location Line),面(Surface),墙类型(Wall Type)。这里要注意,输入端的数据类型必须要匹配。把鼠标停在各输入端就可以看到要求的数据类型。比如Location Line的数据类型是字符串(String),所以直接打字作为输入端也是可以被接受的。


图1.7a,1.7b:


而另两个输入端的数据类型分别是“Surface“和”WallType“,这时就必须用相应的节点来提供相同的数据类型,打字作为输入端是不可行的。


图1.8a,1.8b:


左图是正确的数据类型输入,右图则是错误的类型,出错时可以查看错误信息提示。

当然通过简单Python代码就可以转换数据类型,在一些特殊的位置会用到,在之后的教程中会详细介绍。


图1.9:


照常理说,这样就应该没有问题了。点击一下Run。


图1.10:


发现运行失败了,虽然没有报错,输出的结果却是null,Revit空间里也没有出现墙体。

我们再回想一下之前在Revit中创建曲面墙的过程。运行失败的原因就在于,必须要基于Revit中实际存在的面才可以创建墙体。我们在Dynamo中Loft生成了一个曲面,但这个曲面并不存在于Revit的模型空间,因此创建墙面失败。

要完成整个操作,必须要绕一圈:先把Dynamo中的曲面创建到Revit中,再根据这个曲面创建墙面,最后删除这个曲面。这里用到了一个插件”Springs”:

从这里可以看出,Dynamo存在不完善的地方,报错机制也并不完善。

这里要用到插件springs中的节点“FamilyInstance.ByGeometry”。通过这个节点可以把Dynamo中的图形创建到Revit中,并赋予族的属性,这里给了一个通用模型(Generic Model)的属性。这样这个面就被创建到了Revit的模型空间。


图1.11:


图1.12:


节点的输出端里的instance就是Revit里的曲面模型,提取它的surface,再连接到Wall.ByFace的输入端,再点击运行,就得到了我们想要的结果,这个墙面就像之前通过Revit创建的墙面一样,具有族的各种特征和参数。


图1.13:


图1.14:

最后一步,删除之前创建到Revit中的曲面。再删除命令前加一个PassThrough节点(来自Clockwork插件),保证在墙面创建之后再删除这个曲面。


图1.15:

完成。总结一下,为了完美贴合Revit中的模型结构,Dynamo中必须要经过一些额外的步骤,才能确保最终创建的模型可以再Revit中进行更多的操作。例如更方便的创建门窗,获取各项参数,以及之后会提到的批量的模型数据处理等。类似Grasshopper体块的创建,Dynamo也可以做到,但是得到的结果与Revit的建模思路不符,因此不适合应用到如墙体,楼板,柱子这类建筑的基本组件上。但如果仅仅是一个特殊的构件,仅仅是造型上的表现,通过Dynamo直接创建到Revit中也是可行的。

 

本章到此结束,下一章将对Dynamo中的数据获取及分析处理进行简单的介绍。




长按识别二维码关注我们






欢迎小伙伴们提供优化的算法,也欢迎愿意分享知识的伙伴们投稿,我们会制作投稿专题

扫一扫

95518.jpg

0 回复

高级模式
游客
返回顶部