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

标题: 关于crv on srf以及divide srf运算器的事,请教 [打印本页]

作者: 休止符    时间: 2013-9-17 15:01
标题: 关于crv on srf以及divide srf运算器的事,请教
这几天我重新翻看外国的grasshopper教学视频"Grashopper - Generative Modeling for Rhino"当中的advanced--cull and curve on surface章节。按照着视频做,但是不成功,做出来的成果差很远。于是在此上图,虚心向各位求教。
视频截图1

视频截图2

视频截图3

视频截图4

视频这一步我一直很在意,从Divide Srf运算器出来的数据,视频当中是4个一组,但是我做的话只有2个一组。我曾经认为这应该是U、V输入端的问题,因此把U、V输入端设置成了3,但是总感觉不对(如下图所示,我自己做的练习截图)  



视频截图5
直到这一步感觉上我还能够跟上,但是之后发生的我搞不懂怎么回事。


直到这一步我都可以成功做出。


视频截图6,
按照视频所示,4个cull pattern运算器的L输入端,练的是divide srf的uv输出端。而cull pattern运算器的输入端连crv on srf运算器的uv输入端并且是工作的。

但是我自己的练习过程,则变成下图所示:

没有产生任何的连线。做不出想要的结果。我有留意过数据上的不同,尤其是后半段,根据视频所示不应该是tree结构,所以我尝试过拍平(如下图所示,divide srf的uv输出端拍平,不再是树形数据)

但是依然失败


问题:
1.Deconstruct Brep我已经完全明白原理。但是Divide Surface的输出端,P输出的坐标是世界坐标还是什么坐标?这点没搞清楚,而且在分工上和Deconstruct Brep有什么不同,有什么是Deconstruct Brep不能做但是Divide Surface可以做的?不明白为何功能相近却要分两个运算器

2.数据类型按图索骥地匹配了,但是依然是失败。虚心请教各位,我应该怎么调整

谢谢指教!

cull and curve on surface3.gh

13.68 KB, 下载次数: 179

cull and curve on surface3.3dm

50.32 KB, 下载次数: 168


作者: 深蓝Ansen    时间: 2013-9-17 20:22
暂时先贴上电池图供你参考下,如果有疑问你可以继续跟帖交流





作者: 休止符    时间: 2013-9-17 21:06
深蓝Ansen 发表于 2013-9-17 20:22
暂时先贴上电池图供你参考下,如果有疑问你可以继续跟帖交流

谢谢深蓝老师,我先看看。
作者: 休止符    时间: 2013-9-18 19:20
深蓝老师你好
根据你提供的电池结构图,我已经可以把整个练习做出来了,但依然有3个问题不明白。初学所以请老师莫怪
1.在IsoTrim电池后面跟着的那个Srf,为什么要把它右击调整为Reparameterize?这个操作我之前没见过,是什么作用的?
2.4个cull pattern后L输出端,输出的是树状数据结构,这一点也没有想明白,为什么不能直接输出?
3.Merge这一步也没有弄明白,为什么需要合并树。(我觉得如果我弄明白问题2的话可能就弄明白问题3了)

烦请老师析疑
作者: 深蓝Ansen    时间: 2013-9-19 00:07
本帖最后由 深蓝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,这样就能保证一一对应!
程序没有问题,你再增多你的面数,结果也不会有问题。




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

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




作者: 休止符    时间: 2013-9-22 08:42
深蓝Ansen 发表于 2013-9-19 00:07
多花点时间回复你的问题,希望我能讲清楚,帮到有相同疑惑的朋友。

1.其实你程序的问题本身在于数据对应 ...

收获很大,对于gh的编写初学者有着非常好的帮助。我看明白了,谢谢老师
作者: byxs    时间: 2015-6-8 11:35
请问老师,那个序号求解器在哪里呀?找不到,谢谢。




欢迎光临 Rhino(犀牛)中国技术支持与推广中心 (http://bbs.rhino3d.asia/) Powered by Discuz! X3.2