Dynamo节点应用实例:dynamo中使用Python Script节点进行点阵处理
任务:
根据已有不同标高及形状的样条曲线,创建相邻样条曲线间等分的幕墙嵌板
方法:
解析样条曲线,确定等分原则,等分样条曲线确定等分点;形成两曲线间的点阵,载入具有四个自适应点的自适应嵌板族;形成竖向幕墙表皮。
步骤:
step1:首先拾取目标Curves,让这些线在Dynamo中可见,且能被处理。当然这些线提前在Revit项目环境中创建完成。通过ModelElements节点进行拾取的。和之前小编分享的创建曲面桁架的方法一致。
step2:获取每条曲线长度(length),给定线分段长度参数并分段(/),取分段长度平均值(长度不一致,分段数量不尽相同),通过Math.Celling节点确定分段数量为均值向上取整,确定线分段数量。
step3:这一步就是该案例最精彩的部分。对每条线根据分段数量进行分割获得分割点。
每条线均有分割数量个点,形成列表,此列表的结构对下一步运用PythonScript节点进行点阵处理至关重要。
关键中的关键,精彩中的精彩!PythonScript脚本文件
对于大神@Vctcn93来说,这个脚本是“常规动作”,但对小编来说解读这个脚本还是牺牲了不少脑细胞,不过看样10天速成Python基础也不是白学的。
来看看小编的解读:
1、定义两个变量data和result确定为本节点的输入和输出。data其实就是刚刚提到的那个重要的列表。len(data)表示这个列表的长度,根据以上我们就非常清楚,该数值就是样条曲线的数量,本案例中该值为4。即4条样条曲线,也就是列表是由4组数组组成。rang(len(data)-1)就是range(3),在Python中他代表的值就是[0,1,2]。
2、foriinrange(len(data)-1),是遍历范围(range)的每个数。其实说白了,就是遍历三个数:0,1,2。
3、定义两个变量并赋值current_line=data[i]
next_line=data[i+1]
也就是定义了当前线的点列表和下一条线的点列表;也就是i在range中遍历"0"时,current_line=data[0],也就是第一条线上所有点的列表;而next_line=data[1],也就是列表中的第2项,也就是第二条线上所有点坐标的list。一次类推,当i遍历到2时,current_line=data[2],也就是第三项(第三条线),而此时next_line=data[3],也就是第四项(第四条线)。此时,根据range的范围,i已经遍历完,也就是完成了四条线的遍历。
4、同理一下代码,就是从第一条线的第一个点开始遍历点。定义一个node变量,用以存放遍历的点坐标。根据上条可见,K的range为[0,....,12]。每遍历一个点都将该点的坐标append到node中,起点、本条线一下个相邻点、下一条线对应点、下一条线发向相邻点,这样四个点连线即可形成封闭的四边形。遍历完所有点的,也就形成了所有四边形的四个点坐标list,变量名为node。
最终这个脚本要的就是这个result。如下图所示。
也就是每条线13个点,也就是通过这些点载入自适应幕墙嵌板族,可以形成幕墙嵌板实体。144/4=36块幕墙嵌板,完美!
效果如下:
思考:
1、这波操作是批量建族吗?很显然不是!
2、如此处理还是运用了一样的建模的思路,只是点的处理采取了另一种方式。
3、这种点阵处理的方式,可以用在其他list转化中。
BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!
相关培训