![539f9d2deecab10d2d5ce33736de4daf.png](https://i-blog.csdnimg.cn/blog_migrate/abf1cf5ccafbf12eee8cd5551858fd66.jpeg)
许多Dynamo节点的端口都有指定的数据类型及其默认值。大多数情况下(除却某些List类的处理函数),当我们给端口传入列表数据时,Dynamo会自动分层解析输入数据直到获取与端口指定类型一致的数据,然后据此数据进行核心功能操作。因为输入数据为列表,节点会在解析数据的过程中自行重复调用核心功能,并按照输入的数据层级关系来构建最终的输出结果。如最简单的A+B函数,当我们给A或者B其中之一输入数字列表(可以是任意层级)时,其总能进行计算并返回结果。如下图所示:
![b6e48798be90a2e9bbcfd7a5b69ae0d6.png](https://i-blog.csdnimg.cn/blog_migrate/4da0c689e2b186771f4f24331c95ab79.png)
仅以两个数字的A+B功能为例,我们可以写一个Python Script来实现,其代码也很简单:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
OUT = IN[0] + IN[1]
因为Python Script不支持设定输入数据类型及默认值,同时也不支持连缀等功能,这样的Python Script只能接受两个数字之间的运算,如果我们需要其中一个是列表怎么办?
最显而易见的方式是修改Python Script代码,将输入强制转换成列表,而后再使用FOR循环来逐个处理。但这样会增加大量的代码,同时需要考虑输入都是纯数字时,依然需要保持代码能运行。很明显,更多的代码,等于更多的工作量,也可意味着更低的效率。那么有没有其他简单的解决方案呢?
答案是有,使用自定义节点。
我们可以把整个Python Script转换成一个自定义节点。此时我们将列表接入IN端口,返回值将会是null。如下图所示:
![c93b9da527013e4e1cede1635c35812a.png](https://i-blog.csdnimg.cn/blog_migrate/a8f580b53de7a78d73b48cb2943ae655.png)
下面就是展现魔力的时刻,首先我们双击打开自定义节点,修改其中的input节点内容为x:double和y:double,然后返回之前的DYN将会发现,节点可以自动处理列表数据了,包括有层级的列表而不用额外写任何代码!如下图所示:
![b006a390e62716497cca4f70e9fd6236.png](https://i-blog.csdnimg.cn/blog_migrate/b61872e029df28f300b132a9bcc9b27b.png)
虽然上面的例子仅仅是简单的数学运算,但是这种方式也可以在实际工程实践中进行应用,如构建处理单个曲线、曲面或者实体的代码为自定义节点,指定输入的数据类型为对应的曲线(Autodesk.DesignScript.Geometry.Curve)、曲面(Autodesk.DesignScript.Geometry.Surface)及实体(Autodesk.DesignScript.Geometry.Solid),然后可以给节点传递包含曲线、曲面和实体的数据列表直接获取最终结果。
快速链接
上一篇 《《《《《 应用秘籍目录 》》》》》下一篇