图文分享 | Grasshopper提取单元边线的顺序

最近收到用户反馈:GH的“Brep Edges ”工具提取曲面的4个边缘顺序不一致。

初步思考怀疑这是一个Bug,所以需要进一步测试找出错误点并反馈给GH开发工程师修复,我们做了两块最简单的四边面单元进行一些测试。

检查曲面单元的UV方向

首先这两个曲面的UV方向必须保持一致是前提,否则边线是否一致就无从谈起了。我们先写一个简单的程序检查两块曲面的UV方向。这里简叙过程思路,不做具体的GH组件的说明。

在两块曲面单元上通过“Evaluate Surface ”组件的UV定位找到曲面上对应的位置点,例如图中两块面的左下角的一个点。

Evaluate Surface”可以输出UV坐标位置的一系列几何数据,包括我们需要的UV坐标的矢量方向,因此右边部分把UV两个方向的矢量显示出来即可。

结果可以从图中看到,两个曲面单元对应点位置的UV方向是完全一致的(如图中的箭头)。

提示: 刚开始接触Rhino和GH的用户并不能准确的理解UV坐标的概念,简单理解为曲面上的XY坐标即可。所以下图中“Evaluate Surface ”组件的UV并不是输入一个“点”而是输入点在曲面上的定位“坐标”。


检查曲面单元的UV方向

把这两块曲面单元输入“Brep Edges”提取边线。如下图,因为有2块面因此各提取出4条边线,输出结果为2个列表,每个列表里4条线。

提取出边线后开始检查边线的顺序是否一致,思路就是从每条边线上取出一个点(一般用中点)然后根据列表的顺序标出数字1,2,3,4…..这样就可以看到每块面提取出的四条边线在列表里的顺序了,程序如上图。可以看到虽然两块测试的面UV方向一致,但提取的边线顺序并不一致。

提示:通过测试可以确认“Brep Edges ”组件提取的边线顺序的确不一致。但这就能说明这是一个BUG么?我们最后再分析,首先我们先通过别的办法解决提取的边线顺序不一致的问题。

换一个思路解决问题

如果用户对 Rhino 里曲面的结构概念了解,那么其实对于这种完整的四边面,他的四个边其实就是曲面边缘的ISO线(等参数线),因此我们可以借助”Iso Curve “组件获取曲面边缘线。

这里可以通过定位UV坐标为 {0,0} 和{1,1}来提取到边缘线,可以看下面的gif动画帮助理解为什么。

曲线提取出后合并为一个列表即可,这里需要做一点数据处理,需要用户了解GH的数据控制的基本法则,作为思路分享的文章这里就不讲太具体了,最终的结果就是两块面对应输出两个列表,每个列表里就是对应的四条边,则个程序的结果通过右边的顺序分析可以看到现在每个单元的4个边顺序就完全一致了。

文章分享到这里差不多该结束了,但是尴尬的是,我这时候才注意到:其实直接有另外两个组件就可以做到,如下图所示这两个组件可以直接提取单元的边线而且顺序是一致的。

其实“Brep Edges”本来就不是用来以顺序提取边线的工具,它更主要的作用是根据边缘的几何属性做分类提取,所以从程序设计上来说这并不是这个组件的BUG,换句话说如果对提取的线有明确的顺序一致性要求那么根本不该用这个工具来做。

所以前面的内容算是白做了吗?

GH这种参数化理念的设计软件本身就是为了突破传统软件的功能的限制,因此如果GH提供的工具无法直接达到设计想要的效果,换一个思路绕过去即可。所以解决问题的过程中介绍的思路和方法才是对学习者最有价值的部分,你注意到了吗?

本文完。

此条目发表在Grasshopper, Rhino, Rhino3D中文原厂论坛, 参数化设计, 基础教学分类目录。将固定链接加入收藏夹。