dynamodb 快速入门(干货分享-Dynamo应用秘籍05)
dynamodb 快速入门(干货分享-Dynamo应用秘籍05)因为Python Script是不支持连缀的,通过这样简单的代码处理,就可以解决单一层级True/False判断时的数据对应问题。import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * if IN[0]== True: OUT= IN[1] else: OUT=IN[2]这个问题如何解决呢?有两个方法:强制匹配长度,保证True和Flase条件下的返回值都有对应关系。可以通过给短的列表增加null来增长到相互对应。直接写个Python Script,三个输入端口与IF节点一致,里面的内容也异常简单:
Dynamo中基本所有节点都支持连缀控制,但万事都有例外,Dynamo里也有没有连缀控制的节点,IF就是其中一个。但是要注意,没有连缀控制的操作项,不意味着使用IF时可以不考虑连缀的影响。事实上,连缀在使用IF时是无法规避的。
当数据简单时,连缀的变化影响不明显,IF节点的表现会是非常自然的。但是当数据比较多,且数据结构比较复杂时,IF节点的输出可能会是完全另外一幅样子。下面我们先举个例子来测试一下。
例如需要给轴网编号,我们直接构建了一个数字的和一个字母的列表,但是因为方案中水平和垂直轴网的数量不同,因此两个表的长度不一样,我们假定数字的轴号为1..15 字母的轴号为A..G。这样我们在使用时需要判断这一组轴网是水平的垂直的,因此我们会有一个数据列表,其中都是True或者False。跟我们的设定匹配,水平轴网应该有7个,垂直轴网应该有15个。我们通过直接构造True列表来传给IF,看会发生什么:
这就很明显, IF是永远按照两个返回值的长度关系按照最短的连缀原则产生结果。再深入的测试还可以发现,如果返回值列表中还有子列表,其返回值在子列表的层级上也依然是相互对应按最短来取。因此在使用IF需要返回列表时,我们要非常小心,除非True/False两种情况的返回值一一相互对应,否则及其容易造成数据丢失。尤其是图NNN,按照自然的理解关系,需要True时返回15个数字而False时返回7个字母,但是因为传入数据的长度问题,在需要数字时只能得到7个,丢失了大量的数据。
这个问题如何解决呢?有两个方法:
-
强制匹配长度,保证True和Flase条件下的返回值都有对应关系。可以通过给短的列表增加null来增长到相互对应。
-
直接写个Python Script,三个输入端口与IF节点一致,里面的内容也异常简单:
import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * if IN[0]== True: OUT= IN[1] else: OUT=IN[2]
因为Python Script是不支持连缀的,通过这样简单的代码处理,就可以解决单一层级True/False判断时的数据对应问题。
这个方案也是Chynamo软件包中SafeIF节点的核心。
转载自:腿腿教学网