![Autodesk Revit参数化设计之道:Dynamo实战剖析](https://wfqqreader-1252317822.image.myqcloud.com/cover/758/43806758/b_43806758.jpg)
1.11 例题10:应用Dynamo批量放置线性植被
1.解题思路
用Revit进行道路景观设计时,不可避免地会有在道路两旁批量放置树木等重复性工作;更重要的是,道路是一条空间曲线,工作量及其准确性不容小觑。例题9是在体量环境中运行Dynamo脚本文件,而本题则是在项目环境中运行。
读取Revit项目中放置树木路径的空间曲线,并在Dynamo中进行等分处理,最后将Revit中的树族放在对应的等分点上(图1-94)。
依然沿用例题9的思路,从结果(终节点)出发,逆向寻找节点。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/51_02.jpg?sign=1739599346-yV6tXOl0vAgshU7mzPBxCl8VQ25KxKZh-0-a14aa42c17c2f9900d24a55dbc28a287)
图1-94
2.知识点
● Family Instance. ByPoint
● Family Types
● Select Model Element
● Element. Geometry
● Curve. PointAtParameter
● Integer Slider
● Dynamo播放器
3.例题详解
在Revit项目环境中,创建一个内建体量,用“通过点的样条曲线”命令,创建两条空间曲线,分别模拟放置不同树木的路径;如图1-95所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/52_01.jpg?sign=1739599346-FWK5T4hpcGgYsEMCnyoSSbBH5Hj0UQms-0-2965c8b98d9ce032915f63de630e47a2)
图1-95
首先明确,最终目的是实现在Revit中放置族构件。
切换至Dynamo界面。因为涉及与Revit的交互,且需要按特定要求放置族实例,所以在Revit→Elements(图元)→FamilyInstance(放置族)中寻找,如图1-96所示。需要按等分点放置族构件,FamilyInstance.ByPoint(通过点放置族)节点即符合要求。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/52_02.jpg?sign=1739599346-9DPVv1oCWU3UOxRTRuHb7lRO8eZv5Obg-0-b0b0b9ce4afc8b68fdde40042e30b4f8)
图1-96
如图1-97所示,FamilyInstance.ByPoint(通过点放置族)节点需要输入两个参数:
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/52_03.jpg?sign=1739599346-6oTW0JFovuFxRvs3CtINLj8ZrNNYCGcM-0-454bcefc6539df66ffb1f964303d9b9b)
图1-97
(1)需要放置的族构件。
(2)等分点。
接下来问题的关键便是解决这两个输入端口。
familyType(族类型)需要选择已经载入项目中的族,这里按族类型进行选择。在Revit下的Selection(选择)中寻找目标节点,如图1-98所示;很显然Family Types(族类型)节点便是。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/53_01.jpg?sign=1739599346-go2EfarQQDxzQRY91hVRnDOgUUhOpQaE-0-71b125509654bf25a9576c525a6e21fd)
图1-98
选择项目中已载入的“白杨3D”,并连接FamilyInstance.ByPoint(通过点放置族)节点,如图1-99所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/53_02.jpg?sign=1739599346-Zl6HagX1LlEM4i4Ro6ZW8iu8D2daTtwC-0-8b8d5a2fe2f23f735e151da262aa5026)
图1-99
最后便是解决point(点)的问题。
首先,读取Revit中的图元信息到Dynamo。其次,在Dynamo中处理完成后再次将其导入Revit。由于两条路径上的树木种类可能不一样,这里需要分别处理两条路径。
选择路径,同样在Revit下的Selection(选择)中寻找。
如图1-100所示,Select Model Element(选择Reivt实体图元)节点是选择Revit中的图元;Select Model Elements(选择Reivt实体图元)节点则是框选Revit中的多个图元。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/53_03.jpg?sign=1739599346-BIvkvfZN67PnuzdPBOwZFILMNr3JNQla-0-67056f45e6293b113d43b86f169b3546)
图1-100
选择Revit中的图元,其Element(图元)后的数字便是Revit中图元的ID号,表示已被选择,如图1-101所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_01.jpg?sign=1739599346-z34jgBkvdirdMLbxMRyiz7rVGuKWwTtG-0-304ca8997705ed25b696882639307ebd)
图1-101
获取Revit图元信息到Dynamo,这样才能在Dynamo中处理。
利用Revit→Elements(图元)中的Element.Geometry(获取Revit图元的几何图形)节点便可将图元几何信息读取到Dynamo中,如图1-102所示。
连接节点后,便可以在Dynamo中看见Revit的图元信息,如图1-103所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_02.jpg?sign=1739599346-GxzhHB6fe5QRFpSvvX9N8FEPpoeM8P9i-0-fd28e99aa2e57cbc4f054ab9d7aff7c8)
图1-102
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_03.jpg?sign=1739599346-47NKVJQI5PnLyg8QVkKAbHT4nGQwJ1PF-0-d0521538c239ce5831267c23215de8f6)
图1-103
在曲线上找等分点,则回到了Dynamo自身的问题。
利用Geometry(几何学)→Curves(线)→Curve(线)中的Curve.PointAtParameter(获取曲线参数处的点)节点,按曲线位置参数取点(图1-104)。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_04.jpg?sign=1739599346-pyamNCcuTBMG7Vw4gQv5DdXL8RF90lHl-0-f996219c326d3f7267a72ed6d0cc6cb0)
图1-104
这里为了更加灵活,可以将等分的个数设置成数字(整数)滑块,如图1-105所示。同时,在Curve.PointAtParameter(获取曲线参数处的点)节点上单击鼠标右键,将连缀改为最长(连缀在后续章节中将单独讲解)。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_01.jpg?sign=1739599346-ZYn6vQKkvyfhDlkqd3huZbFFd9VXpGUV-0-25ff46da951f1c4b1b3c24da7de74160)
图1-105
接入FamilyInstance.ByPoint(通过点放置族)节点,便完成了一条路径的布置,如图1-106所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_02.jpg?sign=1739599346-yRugLutKUbr7zMii17aQEUk2LlxlBAqX-0-d1cb76835e28fac300a804f50b4c5b44)
图1-106
选择另一条路径,改变树的类型和等分点个数,运行脚本,如图1-107所示。这时候发现,原来已经完成的路径上的树却没有了,也就是说,脚本只能被执行一次。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_03.jpg?sign=1739599346-PA8ugFHC0SzP93YJR1NrzMsvKW5gI65T-0-4156f12ccc7b33ff351bf0abed95c251)
图1-107
为了解决这个问题,需要引入Dynamo播放器。
将上述完成的节点文件保存,命名为“批量放置线性植被.dyn”。
“管理”→“可视化编程”中的“Dynamo播放器”,如图1-108所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_04.jpg?sign=1739599346-i6M799nD8aAk3wO13UcGiF7xmLn6qaOI-0-cc994167cd7108699b82aa3dc7dc2558)
图1-108
Dynamo播放器在使用前还需要进行设置:将此节点文件的3个输入端口均勾选上“是输入”,如图1-109所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/56_01.jpg?sign=1739599346-4cuAsFsKkxcDQz6KS4NnhvDmmAPIWIlU-0-b2f756607983341dab95220d6b902b79)
图1-109
启动Dynamo播放器,打开“查看当前文件夹”,将之前写的Dynamo脚本文件放在里面,并单击刷新按钮,如图1-110所示。
单击运行“批量放置线性植被”脚本文件,可以对三个输入端进行操作。这样运行脚本更加方便,不需要再打开Dynamo脚本文件,如图1-111所示。此时便完成了批量放置线性植被的工作。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/56_02.jpg?sign=1739599346-gLjr2cszNIEZwTp2rPTunanSopRO4AFW-0-5571ac5234b807a50d4bd74e2fb1a1b2)
图1-110
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/56_03.jpg?sign=1739599346-wOMPV9hCmRT4282O06du0M53CBx3htkv-0-f9be166b66dd89fae612947632b1813f)
图1-111