Rhino(犀牛)中国技术支持&推广中心


[GH基础教学]交错的椭圆开孔

06.15.2014, Grasshopper, 基础教学, by .
作者:Ansen
本次教学跟大家分享下图中这种造型的制作方法,比较适合Grasshopper初学者参考学习
本教学的重点在于如何使用Grasshopper(下文简称GH)工具,通过几何的方式解决原本在Rhino中很难处理的问题


C13.png

这个造型有点类似于莫比乌斯环,一开始分析这个造型的时候,忽略其表面的开孔与厚度,看起来像是一张曲面发生自相交,简化后的模型如下图所示:


A14.png

既然与莫比乌斯环类似,那么我们不妨从莫比乌斯环的做法入手,做点尝试。
考虑到一些朋友是第一次绘制这样的造型,因此你可以跟随下面的步骤绘制一个莫比乌斯环。
1.在Rhino场景中绘制好一条直线与一个正圆曲线,并以直线为轴线绘制一个截面形状为正方形的方管。如下图所示:


A01.png

2.使用Rhino的扭转工具(指令:Twist将方管绕着红色的轴线扭转180度,如下图所示:


A02.png

3.使用Rhino的沿着曲线流动工具(指令:Flow将扭过的方管由直线对变到正圆曲线上

A03.png 

要注意这个工具中的延展选项要设置为  如果不太清楚这几个选项的用法可以查看Rhino 5帮助文档,里面有较详细的解释。结果如下图所示:


A05.png

4.在第三步中得到的造型有可能比例不合适,你可以借助Rhino 5的 记录建构历史功能 通过缩放圆的大小来调整造型的比例,得到一个满意的效果即可,如下图所示:


A04.png

下面我们来做点尝试,假设在刚刚的步骤1中我们绘制的不是方管,而是其内部的两条相互交叉且垂直的平面,结果又会是怎样呢?
方法和之前的完全一样,这里不再赘述,大家一试便知。


A06.png

A07.png

结果与我们最早分析的那个造型接近了,细心的你一定会发现得到的结果其实是两个单独的曲面“摆放”在一起了,而我们需要的是“一张”曲面的造型。

A08.png

其实,我们在扭转的时候让它们扭转90度,再做流动得到的结果就是正确的,(为什么要扭转90度,不扭转45度,30度… …想想看咯) 过程如下图所示:


A10.png

得到的结果是由两张面拼起来的。


A13.png

大型出来了,接下来就是如何在曲面上开孔。

A15.png

A16.png

既然是两张曲面,我们就可以把这些椭圆曲线做分组,又考虑到椭圆图形的对称性,可以将其中一个椭圆位置放在两张曲面拼接处,这样就可以拆开来做了,如下图所示:


A16-4.png

我以其中的一部分为例做讲解

A16-3.png

在Rhino中直接在曲面上绘制图形很困难,因此我们可以先将图案在平面上绘制好,然后再对变到曲面上
我以上图中椭圆数目为例,13个完整椭圆+半个椭圆 ,效果如下图所示:


A17.png

1.首先要对椭圆的位置做精确的定位

在TOP视图中绘制一个平面,使用Rhino中的等分曲线工具(指令:Divide)确定一组定位点,分段的数量设置为27(为什么是27?设想下,最终要将两个曲面拼接起来,而相邻的椭圆之间间距是相同的,那么可以以半个椭圆为单位,总共就应该是13.5*2个),你可以和我设置的不同,但这个数字一定为奇数

D01.png 

A18.png 

2.绘制椭圆,中心捕捉放置在曲面边缘中点处,短轴端点与竖直直线有一定距离即可

A20.png 

3.直线阵列14份,最后将多出去的半个椭圆修剪掉


A21.png 

4.使用沿着曲面流动工具(指令:FlowAlongSrf)将这组椭圆曲线由平面对变到曲面上

D02.png 

A22.png 

很明显,椭圆发生了形变,靠近外圈的部分被拉伸,靠近内圈的部分被挤压,这个结果好比是一张长条状铁皮上开了这样的孔,然后做扭转和弯曲变形,孔的轮廓形状一定也会变形


A23.png 

即使在流动时将硬性(不变形)设置为 ,也会有问题,如下图所示:

D05.png 

A24.png 

如何保证曲面上的曲线形状为椭圆且位置正确,我想在Rhino中需要花费一些时间来解决。
本篇教学的重点来了,就是将GH应用在这种使用Rhino做很困难的造型中。

通过以上的分析过程,我们已经有了制作思路,下面就是将这些思路套用在GH中。

B01-1.png

1.将蓝色的正圆曲线拾取到GH中,使用Divide Curve运算器,将曲线等分为27份


B01.png

后面你可以改变这个数值,所以严谨点,把数值类型设置为 奇数

B01-2.png 

箭头所指的点即为圆的闭合点,也是这组等分点中的第一个点(序号为0)

B02.png 

2.获取定位点


下图中的黄色虚线是假想出来的椭圆,因此红色的点是我们需要的定位点。


B03.png

挑选这些点的方法很多,下面我将使用Dispatch运算器将这些点间隔的分为两组,具体做法如下: 

先解释下Dispatch运算器 

P输入端 默认情况下的判断方式是True False,会把一组列表中的值按照重复 真 假 真 假 真 假…的判断方法做分类,判断结果为真的值从A端输出,判断结果为假的值从B端输出。

将其他运算器的计算结果做隐藏,只显示A端输出的点


B04a.png


得到的结果正好和椭圆错开,这是因为正圆的方向反了,只要做反转方向操作即可


如果你的结果本身没有错误,那么恭喜你,无视接下来的操作,直接往第3步看>>>>

不建议直接反转Rhino场景中的曲线方向,可以在GH中接入Flip Curve运算器

B04.png

这一部分的完整程序图:

B06.png

这样,定位点就得到了,如下图所示:

B06-2.png

3.创建工作平面

通过简单的分析,需要以每个定位点为坐标原点,创建一组垂直于曲面法线方向的工作平面

B07.png

我们可以先将曲面拾取到GH中,接着搭配使用Surface Closest Point Evaluate Surface运算器来创建工作平面。


B07-2.png

得到的结果有个明显的错误,由于第一个点的位置正好处在曲面的两个边缘的交点处,因此在这种临界位置,程序在放置第一个工作平面的时候可能会判断失误

如果你的结果是正确的,那么继续无视,请往第5步看>>>>

B09-2.png 

4.修改有问题的工作平面


接入List Item 运算器,将第一个工作平面(序号为0)挑出来. 输入端默认就是 0,不用更改,将其他运算器的计算结果隐藏起来,如下图所示:


B09.png

我们只需要将第一个工作平面绕着它的Y坐标轴(绿色)旋转 90度 即可(为什么为90度,不用解释了吧)

先用Deconstruct Plane运算器 获取工作平面的坐标原点Y轴向量,再用Rotate 3D运算器将工作平面绕着Y轴向量转90度,输入端A默认以弧度制计算。

B11.png 

B12.png 

最后使用Replace Items 运算器用新得到的工作平面替换之前的工作平面,这个运算器的输入输出端的解释请看其Help

B13.png 

B15.png 

这部分的完整程序图:

B14.png 

5.创建椭圆


直接贴图,不解释了


B16.png

B17.png

6.挤出曲面


因为得到的椭圆并不在曲面上,直接裁剪得到的结果并不是很好,需要将它们沿着Cplane的Z方向做挤出曲面


先用Deconstruct Plane运算器获取工作平面的Z轴向量,将单位向量与数字相乘得到挤出向量,如下图所示:


C01.png


C02.png


如果希望其在Z轴方向往两侧挤出,可以先将椭圆沿着Z轴移动一定的距离


C03.png


C04.png


再将新得到的椭圆反向挤出一定距离,可以在D输入端通过一个表达式 -2*X 来实现类似Rhino中的朝两侧挤出曲线的功能


C05.png


C06.png


这一步完成了切孔用的曲面的制作,完整的程序图如下:


C07.png


你可以把挤出的曲面Bake在Rhino中完成剩下的事情,也可以继续在GH中做>>>>

过程不做细致解释,大概思路是:先计算相交线,再做分割,最后挑出面积最大的那块曲面,如下图所示:


C10.png


C11.png


同样的方法处理好另一块曲面的开孔,制作厚度,孔洞边缘倒圆角的过程略。

C12.png


你还可以将整个制作过程在GH中完成,做出一些更加复杂的形态出来。


莫比乌斯环.png 

本教学为Shaper3d原创教学,转载请注明出处。

如果您有什么疑问,或参与此话题的讨论,请访问:

http://bbs.shaper3d.com/thread-24470-1-1.html

1 则回应给 [GH基础教学]交错的椭圆开孔

  1. 2014-07-21 at 06:59 魏士翔

    Thank you!获益匪浅

    回复

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

click to changeSecurity Code

div class=div class=