上一节我们提到《dynamo对Revit族进行数据排序》,应用的方法是通过坐标的顺序来修改族参数,这节我们来介绍通过指定的顺序来修改族参数,其实这部分的思路再再我之前做房屋名称命名的时候有用到过,这节还是延续使用上节的族“Q”。

打算把着一些族按照蛇形走位给他排序命名,比如这样

其实这样的工作场景还是比较多的,dynamo房间命名、dynamo路灯编号等,只要是工艺规格需要线性不同编号的工作场景都可以这样使用。
首先要解决的问题就是如何选取这个顺序,我们还是绘制样条曲线来把这些球串连起来。

我们按照自己既定的路线顺序已经将各个族串连起来了,接下来的工作就是按照这个路径顺序定位获取各个“Q”族,这里我们可以通过找交点的方式,要获取“Q”和曲线,然后判断相交,如下:

上面的图是通过【Select Model Elements】选择球“Q”和绘制好的曲线,通过【Element.Solids】获取模型实体,通过【Geometry.IntersectAll】获取相交信息。

可以看到相交的信息是Nurbs曲线,然后通过【Curve.StartPoint】节点获取Nurbs曲线的起点,当然,也可以采用获取终点的办法来获取一个交点。

到这一步我们已经获取了交点,接下来的任务是吧这些交点按照预期的顺序排列起来,这里可以通过交点到曲线起始点的弧长距离来对交点排序,那么接下来就是获取交点处的弧长了,我们看如下的连接方式。

【Curve.ParameterAtPoint】节点获取这些交点在曲线位置的参数,【Curve.SegmentLengthAtParameter】获取这些点在曲线位置处的弧长,我们在显示的数据中已经可以看到,弧长已经显示出来了,接下来我们对弧长进行排序,用【List.Sort】节点。

接下来的操作就和《dynamo对Revit族进行数据排序》一致了,用【List.Map】来获取排序后的数据在之前列表中的位置。

通过【List.GetItemAtIndex】节点来对初始获取的“Q”族来定位,因为通过【List.Map】来获取的位置也符合初始“Q”族的位置。

我们现在已经拿到排好序的列表了,接下来就是给Q球写入参数了,这个过程大家可以参考之前文章的过程,这里我就直接贴节点了。

我们来看下效果

dy源文件和revit项目文件在文章末尾,大家可以下载参照!Revit版本:Revit2020。dynamo版本如下
