关于Rhino开发中螺旋线的使用
Rhino是我们的好帮手,在有了RhinoinXXX这样的插件后,我们可以借用Rhino中便捷的曲线曲面修改来进行 各种异型建筑的创建,根据特定要求来开发指定的电池就显得比较重要了。
一、螺旋线
在Rhino中,提供了螺旋线的创建指令,同时也提供了两种螺旋线的创建API方法:


在使用API之前,我们最好先了解一下Rhino中螺旋线的使用方式:
先绘制一条直线

2.再指定另一个点

3.可以在上方设置螺旋线的圈数、直径、螺距、是否反向扭转

其中,当我们在第二步指定另一个点的时候,这个点距离曲线起点的距离就会被判定为螺旋线的半径。
二、开发中的API
下面我们来看一下官方提供的两种方法:

其中让我们输入的几个参数,分别是起点,螺旋线的轴的法向量、半径点、螺距、圈数、半径1、半径2;以上方法中,起点为(0,0,0),法向量为朝向X轴,半径点为垂直于X轴,螺距为1,圈数为10,起点半径和终点半径均为1;
以上方法中,我们是无法根据指定路径来创建螺旋线的,我们来看第二个方法:

以上需要我们输入的参数为,导向曲线、导向曲线的起点值、导向曲线的终点值、半径点、螺距、圈数、起点半径、终点半径、转弯点数;
在以上方法中,导向曲线是比较好理解的,螺旋线会直接沿着输入的曲线来进行生成,圈数也是比较好理解的,在固定的线段长度下,圈数会决定螺旋线看起来的疏密感,起点半径和终点半径也就是螺旋线开口和闭口的半径大小:

以上是一段直线生成的,圈数都为10,半径为1和半径为2的螺旋线;
起点数值直接拿到直线的Domain的的Max和Min就可以,下面问题来了,这里的点,也就是输入的第三个参数到底有什么用呢?
在官方的解释中,我们应该输入一个垂直与直线的点。
测试1:创建两条螺旋线,一个输入线的起点,其Z值进行随意增加,另一个输入线的终点,其Z值进行随意增加;

结果:两条螺旋线会重合,且Z值的增加或减少不会更改螺旋线的任何状态。
测试2:创建两条螺旋线,一个输入起点方向的单位法向量,向量大小进行随意增加,另一个输入终点的单位法向量,向量大小进行随意增加;

结果:螺旋线创建失败;
测试3:我们综合上两种,在修改点的平面位置的时候同事来修改点的Z轴位置;

结果:螺旋线创建成功,但是任何值的更改都不会影响螺旋线。
测试3:Z轴一个输入正值,一个输入负值;

结果:两条螺旋线进行了交错;

综上所述,我们得到了一条结论,在平面上创建以直线为轴的螺旋线时,其指定的半径点的XY平面位置不会影响螺旋线的生成,而Z值的大小也不会影响螺旋线的生成,Z值的正负会修改螺旋线时正转还是翻转。
三、曲线为轴螺旋线
这时,我们将测试对象换成一条平面曲线。
测试一:创建两条螺旋线,一个输入线的起点,其Z值进行随意增加,另一个输入线的终点,其Z值进行随意增加;

结果:有趣的现象来了,当我们区修改起点的Z值时,我们发现螺旋线无任何变化,当我去修改终点的Z值时,螺旋线会发生旋转上的偏移,即螺旋的长度保持不变,起点和终点会的角度会发生变化,且在数值越小时发生的偏移越大。
测试二:向着螺旋线的法线方向进行偏移;

结果:向着终点法向量进行偏移时才有效果,起点坐标进行按法向量方向移动,螺旋线会无法创建,而终点方向的法向量移动值只有超过70之后才有一次变化;
测试三:同时进行改变;

结果:起点在拥有Z值偏移后,螺旋线可以正常创建,但是修改数值并不会引起螺旋线的变化;而终点值在Z值和平面同事偏移后,70会成为临界点,小于70且小于零会大幅度向逆时针方向进行旋转,大于70且小于400会小幅度向顺时针方向进行旋转。

综上所述,在导向曲线为平面曲线时,修改曲线起点的Z或者平面位置不会引发螺旋线的变化,而在终点时,修改其Z值向较小值方向移动可以控制螺旋线的旋转。

以上探究主要还是向用代码能够方便的控制,空间曲线为导向曲线时,螺旋线的旋转变化,但是最后还是没能找到很好的方法,假如有大佬知道欢迎在评论区留言。