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

[复制链接]
跳转到指定楼层
54346 休止符 发表于 2013-9-17 15:01:03 楼主
这几天我重新翻看外国的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, 下载次数: 183

cull and curve on surface3.3dm

50.32 KB, 下载次数: 172

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享
关于大陆地区Rhino原厂培训中心
深蓝Ansen 发表于 2013-9-17 20:22:01
2
暂时先贴上电池图供你参考下,如果有疑问你可以继续跟帖交流




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

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

烦请老师析疑
深蓝Ansen 发表于 2013-9-19 00:07:38
5
本帖最后由 深蓝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

查看全部评分

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

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

收获很大,对于gh的编写初学者有着非常好的帮助。我看明白了,谢谢老师
byxs 发表于 2015-6-8 11:35:07
7
请问老师,那个序号求解器在哪里呀?找不到,谢谢。
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则