已经解决 --- 关于crv on srf以及divide srf运算器的事,请教

[复制链接]
深蓝Ansen 发表于 2013-9-17 20:22:01
楼主
暂时先贴上电池图供你参考下,如果有疑问你可以继续跟帖交流




关于大陆地区Rhino原厂培训中心
深蓝Ansen 发表于 2013-9-19 00:07:38
2
本帖最后由 深蓝Ansen 于 2013-9-19 00:53 编辑

多花点时间回复你的问题,希望我能讲清楚,帮到有相同疑惑的朋友。

1.其实你程序的问题本身在于数据对应的问题。而你之前在拆分曲面的时候,将其拆分成100份,这样很不利于你观察数据之间的对应,怪不得你一头雾水;

既然是要同时处理多个数据,你不妨就设置为2组,即下图中的两块面,这样也方便你查错;

2. 利用我之前写好的程序很容易找到面的序号,还有每个曲面角点的序号,这个过程你在写程序之前就应该要想到,因为你的目的无非是将曲面的对角线的角落点连接起来;
如下图所示,黑色的Dot代表面的序号红色的Dot代表曲面角落点的序号(2号面序号我不标记了)


3.先来解释下这里的Reparameterize,其实这里不做这个设置也完全没有问题。但是曲面的UV坐标与XYZ并不是一回事,怕你混淆,也是考虑到后面要查看输出的每块面上4个角落点对应的UV坐标值,我还是将它设置了。
这里的Reparameterize选项的作用是将曲面的UV 两个方向的定义域重新设置为0~1,那么UV坐标的数值范围也自然在0~1之间,这样做方便理解UV坐标数值;


4.接下来就是要考虑数据对应了。下图中我也用黑色的Dot标记出曲面的序号以及生成的UV坐标值所对应的面的序号:4组UV坐标值,分别对应两块曲面的4个角落点1,2,3,4 。 这个不难理解;


5.为了将四个角落点拆开,方便后面的连线,先将这4组中共8个数据“压平”到一个组中,如下图所示,注意曲面的编号


6.下图中,通过简单的判断筛选就能将这些点的UV坐标分别放置在4个不同的组中,P端口中判断的方法就不讲了,很简单的判断方法,下图中红色的Dot代表角落点的编号


7.接下来就是要将曲面的对角线的角点连接起来,即1 4一组,2 3一组
当然你直接同时接入右边的输入端也没问题,但是建议程序写规范点,也能帮你分析数据和查错,因此我用到了Merge,可以把相同组名下的UV坐标值合并在一起
,放在一个组里,但是结果出错了;
写程序很多时候不注意这一点,列表中的元素默认是以最长的方式对应,下图中数据对应明显很混乱:每块面分别要与4个UV坐标值对应起来进行运算,更重要的是这些坐标值中两两重复,出错是显而易见的;


8.这时候你一定会考虑到:假如每一块面仅仅对应它自己的两个UV坐标,那么问题就能解决了。

那么就应该将Cull Pattern运算器的L输出端做一次Graft,请注意下图中的标记,理解下为什么这样做
我之前用了Merge,可以把相同组名下的UV坐标值合并在一起,放在一个组里,这样结果应该对了吧?多看看数据的对应关系!做到这一步,在你的Rhino视窗中可以看到“正确”的结果


9.其实不完全正确,再看看下图中的数据对应,按照我们的思路,检查一下下图中最右边框选区域,生成的曲线应该为2条,但是却为4条,明显有重复,原因是组之间数据对应默认也是以最长的方式,其实他们共计算了4次,对吧?


10.为了避开这种问题,将曲面输出端做一次Graft,这样就能保证一一对应!
程序没有问题,你再增多你的面数,结果也不会有问题。




最后再说几句,这个程序并不是最精简的程序,这里其实就是按照你的思路走,才能解释清楚。

写程序每做几步,就应该查看下数据如何对应,做到心中有数,再往下走,才能更好的写出复杂的庞大程序,别等到最后一部出错了才回头看,那时候你自己都晕了,也没心情改错了。



评分

参与人数 1技术 +2 收起 理由
Jessesn + 2

查看全部评分

您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则