X
返回顶部
当前位置: 首页> BIM资讯> BIM技术

Dynamo节点应用实例:dynamo中使用Python Script节点进行点阵处理

发布:中文网小编3号 浏览:3413人 分享
发布于:2020-06-02 11:12

    任务:

    根据已有不同标高及形状的样条曲线,创建相邻样条曲线间等分的幕墙嵌板

    方法:

    解析样条曲线,确定等分原则,等分样条曲线确定等分点;形成两曲线间的点阵,载入具有四个自适应点的自适应嵌板族;形成竖向幕墙表皮。

    步骤:

    step1:首先拾取目标Curves,让这些线在Dynamo中可见,且能被处理。当然这些线提前在Revit项目环境中创建完成。通过ModelElements节点进行拾取的。和之前小编分享的创建曲面桁架的方法一致。

image.png

    step2:获取每条曲线长度(length),给定线分段长度参数并分段(/),取分段长度平均值(长度不一致,分段数量不尽相同),通过Math.Celling节点确定分段数量为均值向上取整,确定线分段数量。

image.png

    step3:这一步就是该案例最精彩的部分。对每条线根据分段数量进行分割获得分割点。

image.png

    每条线均有分割数量个点,形成列表,此列表的结构对下一步运用PythonScript节点进行点阵处理至关重要。

image.png

image.png

    关键中的关键,精彩中的精彩!PythonScript脚本文件

image.png

    对于大神@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。

image.png

    最终这个脚本要的就是这个result。如下图所示。

image.png

    也就是每条线13个点,也就是通过这些点载入自适应幕墙嵌板族,可以形成幕墙嵌板实体。144/4=36块幕墙嵌板,完美!

    效果如下:

image.png

    思考:

    1、这波操作是批量建族吗?很显然不是!

    2、如此处理还是运用了一样的建模的思路,只是点的处理采取了另一种方式。

    3、这种点阵处理的方式,可以用在其他list转化中。


BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!