本帖最后由 深蓝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,这样就能保证一一对应!
程序没有问题,你再增多你的面数,结果也不会有问题。
最后再说几句,这个程序并不是最精简的程序,这里其实就是按照你的思路走,才能解释清楚。
写程序每做几步,就应该查看下数据如何对应,做到心中有数,再往下走,才能更好的写出复杂的庞大程序,别等到最后一部出错了才回头看,那时候你自己都晕了,也没心情改错了。
|