![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=1739427299-VTWtVSnWDBNmKiXh1ogaioguvaG9R9In-0-7560dad28efaca6ec58e577430cff704)
图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=1739427299-abURIUhZO8ayElYOYsnWXAcXEluqxlK6-0-2f6bd06e7c329f36ed688c395eac14d1)
图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=1739427299-vGpHTQ3PMMfNzCPkrr8CCI18lAeKWteZ-0-f1cd58ca544033b2dabb60fcfa82d8ca)
图1-96
如图1-97所示,FamilyInstance.ByPoint(通过点放置族)节点需要输入两个参数:
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/52_03.jpg?sign=1739427299-5CsnhFTi64nuuksBVYbOKjtT4xJjlT0I-0-df5752983311f86da3e60ca6557f727c)
图1-97
(1)需要放置的族构件。
(2)等分点。
接下来问题的关键便是解决这两个输入端口。
familyType(族类型)需要选择已经载入项目中的族,这里按族类型进行选择。在Revit下的Selection(选择)中寻找目标节点,如图1-98所示;很显然Family Types(族类型)节点便是。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/53_01.jpg?sign=1739427299-MtWsozxjeg1ULLtUIHOd4txCrNzgAdMK-0-abbd53201eabaac05c57e94fe20fc805)
图1-98
选择项目中已载入的“白杨3D”,并连接FamilyInstance.ByPoint(通过点放置族)节点,如图1-99所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/53_02.jpg?sign=1739427299-EyFgf0tTDADIYAlhRPPMbebhSinDVpKG-0-fe9345d896335098131dd44d605ade00)
图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=1739427299-69VYbixeVD3pnANKruVEmL3gFKOadNwO-0-6be2b7ebb9dc7c839106e286e08a6e8f)
图1-100
选择Revit中的图元,其Element(图元)后的数字便是Revit中图元的ID号,表示已被选择,如图1-101所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_01.jpg?sign=1739427299-BSOGHc7XKvbFJOz9ci49Vq8fS8sK3eW1-0-e82546deb354de5383d3e8a49d1e5cad)
图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=1739427299-TqcgS1D74PSsl2Y1sVlPgFVrT7XxTBDt-0-467a0c7e8d601b843a6f483fc71fe86c)
图1-102
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_03.jpg?sign=1739427299-uSrBrOMWWuK2uHgHDFnjZvPllwUf31yZ-0-fce9d4fe47afc46dc7dc6b8890d2b871)
图1-103
在曲线上找等分点,则回到了Dynamo自身的问题。
利用Geometry(几何学)→Curves(线)→Curve(线)中的Curve.PointAtParameter(获取曲线参数处的点)节点,按曲线位置参数取点(图1-104)。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/54_04.jpg?sign=1739427299-nWYnZcqiINg7u4LTS3yCaH7EwBztfnaJ-0-49c169d5ecc606478317bc000f0f7769)
图1-104
这里为了更加灵活,可以将等分的个数设置成数字(整数)滑块,如图1-105所示。同时,在Curve.PointAtParameter(获取曲线参数处的点)节点上单击鼠标右键,将连缀改为最长(连缀在后续章节中将单独讲解)。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_01.jpg?sign=1739427299-5xwKWGbd7Vp4MFj6n8hGrEvSzRZgOyEd-0-5c10bc02d4215258d99096f2bb6bcb70)
图1-105
接入FamilyInstance.ByPoint(通过点放置族)节点,便完成了一条路径的布置,如图1-106所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_02.jpg?sign=1739427299-sFJx0pLeN3Xop5Gy0yO0b6l3fbFgPpko-0-68af823a26432610863f5a3c684ee943)
图1-106
选择另一条路径,改变树的类型和等分点个数,运行脚本,如图1-107所示。这时候发现,原来已经完成的路径上的树却没有了,也就是说,脚本只能被执行一次。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_03.jpg?sign=1739427299-xfNIbY9zvLkSmvY7gKw45OrlvHtUrCY2-0-7b858b7f6295720935292919ad49d809)
图1-107
为了解决这个问题,需要引入Dynamo播放器。
将上述完成的节点文件保存,命名为“批量放置线性植被.dyn”。
“管理”→“可视化编程”中的“Dynamo播放器”,如图1-108所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/55_04.jpg?sign=1739427299-0Qlo6mvbXBu8k3mC03MycoVosSUNrqBJ-0-85d17946f0f7cea76fa93eca1ff3e48c)
图1-108
Dynamo播放器在使用前还需要进行设置:将此节点文件的3个输入端口均勾选上“是输入”,如图1-109所示。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/56_01.jpg?sign=1739427299-WFienYFvSYbyrQCKVMfyZjoT8mQ66Gf6-0-bc9009b2693f715cfc5800ddf8000407)
图1-109
启动Dynamo播放器,打开“查看当前文件夹”,将之前写的Dynamo脚本文件放在里面,并单击刷新按钮,如图1-110所示。
单击运行“批量放置线性植被”脚本文件,可以对三个输入端进行操作。这样运行脚本更加方便,不需要再打开Dynamo脚本文件,如图1-111所示。此时便完成了批量放置线性植被的工作。
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/56_02.jpg?sign=1739427299-FEGijQeCT1t448MpOQlyaPA0NiZPTypv-0-5364c8447dc2cab4e3cddcea89287abe)
图1-110
![](https://epubservercos.yuewen.com/8A2F8F/23083818501903406/epubprivate/OEBPS/Images/56_03.jpg?sign=1739427299-iKslfDrWj8YJNHUJHGdgZTVMn0SjO7gs-0-edfa2122672b85f7ca03c615ef7d7e7d)
图1-111