参考资料
罗嘉祥,宋姗,田宏钧. 《Autodesk Revit炼金术——Dynamo基础实战教程》,同济大学出版社
最近在备课、带本科生的毕业设计,要用到Dynamo。自己花点时间复习一下,顺便记个笔记。
从Revit2018之后就自带Dynamo了,从“管理”选项卡中可以进入。
启动Dynamo之后,可以进入出事界面如下。
点击“新建”,可以进入Dynamo的工作界面,左边是节点库,右边是工作空间。
可以看到,Dynamo是一种可视化编程,大大降低了编程的入门门槛。
Dynamo的节点可以分为创建节点、操作节点和查询节点,关于Dynamo的节点的简介可以看文章《Dynamo基础知识02 节点介绍》。当我们想使用某个节点时,只需要点击节点库的某一项,该节点就会出现在工作空间上。不同节点之间的连线就可以表示数据流。
下面我们就是通过具体的例子,来看一下每个节点应该怎么用。
参考资料:
《Dynamo基础知识03-常用节点用法》
《Dynamo中列表基本操作》
根据起点和终点创建直线——Line.ByStartPointEndPoint
根据中心店和半径创建圆形——Circle.ByCenterPointRadius
List Create
:列表叠加。将多个列表叠加,形成新的多维列表,每个子列表的数据不变。创建圆内接多边形——Polygon.RegularPolygon
当我们创建节点时,可以从后往前创建。例如我们想要创建一个长方体,可以先找到长方体这个节点,然后看这个节点需要什么输入。如果我们不确定这个输入是什么类型的数据,可以将鼠标放在输入接口上,就会提示上一个节点应该是什么节点。例如下图就表明,这里的“Origin”就需要一个“Point”,也就是坐标点作为输入。
通过中心店、长、宽、高创建长方体——Cuboid.ByLengths
根据中心店和半径创建球体——Sphere.ByCenterPointRadius
节点Geomwrey.Translate
可以实现几何形体的平移复制,可以通过设置x、y、z三个方向的平移距离来实现(上图),也可以通过设置平移的方向来实现(下图)。
除了上面两种方式,还可以通过方向+长度的方式来实现平移复制:
这里,我们用到了一个新的节点——Code Block。Code Block是一个允许直接编写DesignScript 代码的节点,我们先称它为“代码块”,在代码块里面可以直接输入数字、字符串、列表、函数命令等。 具体可以看文章《Dynamo基础知识04-Code Block代码块的使用》和《Dynamo-CodeBlock手册-基础篇》
——Geometry.Rotate
下图的例子表示,半径为1的圆,绕其旋转的基点坐标点(2,2,0)旋转,旋转轴为(0,0,1)的向量,旋转角度为“0,30,…,360”的角度数列表。
下图的例子表示,圆形以旋转基准面XZ平面,以角度数列表“0,30,…,360”为旋转角度进行旋转。
——Geometry.Scale
等比例缩放:
不等比例缩放:
Watch
:查看节点。可以查看变量的值。——Geometry.Split
需要注意的是,两个几何体能进行拆分的前提是有交集。
差集——Solid.Difference
:
并集——Solid.Union
:
使用Code Block创建螺旋线:
使用节点Helix.ByAxis
生成空间螺旋线:
——Curve.PointAtParameter
。可以将曲线看作是长度为1,使用[0,1]之间的任意数值作为参数,且由该参数定义的连续的坐标点的集合。那么可以通过参数param
得到曲线上的坐标点。
也可以通过输入弧长,来获取从曲线起点处开始,至给定弧长处的坐标点——Curve.PointAtSegmentLength
。
——Curve.Reverse
因为曲线是有方向性的,曲线的翻转就是改变其起点和终点。
翻转前,获取到的坐标点靠右侧:
翻转后,获取到的坐标点靠左侧:
延伸起点——Curve.ExtendStart
延伸终点——Curve.ExtendEnd
初始的样条曲线。样条控制点的列表为arr=[Point.ByCoordinates(-20,-20,0),Point.ByCoordinates(-10,20,0),Point.ByCoordinates(0,-20,0),Point.ByCoordinates(20,20,0)];
。需要注意的是,在2022版本的Dynamo中,Code block
中的列表用中括号[]
表示。
选取从参数为0.2处的坐标点到曲线终点之间的一段曲线——Curve.TrimByStartParameter
。
选取从起点开始到参数为0.90处的坐标点之间的一段曲线——Curve.TrimByEndParameter
。
选取从曲线参数为0.2至参数为0.9的坐标点之间的一段曲线——Curve.TrimByParameter
。
删除从曲线参数为0.2至参数为0.9的坐标点之间的一段曲线——Curve.TrimInteriorByParameter
。
切线——Curve.TangentAtParameter
。这里的0..1..0.5
表示取[0,1]之间的值的列表,步长为0.5。
法线——Curve.NormalAtParameter
。
——Curve.Project
曲面可以看作是由包含两个参数u和v的函数所定义的连续的坐标点的几何。在Dynamo中,二维曲面和三维曲面都称作Surface
。曲面的创建方式有很多种。
由曲线向某个方向拉伸生成曲面——Curve.Extrude
可以通过填充生成曲面——Surface.ByPatch
。该方法仅适用于闭合曲线。
通过对多条曲线,进行按顺序的放样,生成曲面——Surface.ByLoft
。
上面的例子都是在生成PolySurface,NurbsSurface的创建通常是通过给定一系列坐标点生成——NurbsSurface.ByPoints
。
获取曲面上的坐标点——Surface.PointAtParameter
获取一系列曲面上的向量——Surface.NormalAtParameter
曲面上uv值对应的曲线,称为参数线曲线。可以通过Surface.GetIsoLine
来获取。
通过输入偏移距离实现,偏移方向为曲面法向量方向——Surface.Offset
使用Range
创建
使用Sequence
创建
使用Code Block
创建
使用Code Block
创建由多种方式:
创建方式 | 事理 |
---|---|
起始值…最终值 | 10…15 = [10, 11, 12, 13, 14, 15] |
起始值…最终值…#列表项数 | 10…20…#3 = [10, 15, 20] |
起始值…#列表项数…间距 | 10…#5…3 = [10, 13, 16, 19, 22] |
参考资料:
Dynamo中列表基本操作
将列表中的项按给定的数量向左/右移动——List.ShiftIndicies
列表的翻转及列表按照逆序重新排序——List.Reverse
列表的转置,常用于多级列表——List.Transpose
获取指定的列表索引项——List.GetItemAtIndex
L
ist.
去除列表中某个索引的值——List.RemoveItemAtIndex
替换列表中某个索引的值——List.ReplaceItemAtIndex
将多个子列表合并为一个大列表——List.Create
将多个子列表合并为单个列表——List.Join
将列表分割为指定长度的一组连续子列表——List.Chop
计算列表中的项数——List.Count
列表编组——List.GroupByKey
。