批量定位铝板


定位物体.gh (13.5 KB)
求解,怎么能批量的按照限制条件定位

1 个赞


1:使用了第三方插件Viper
如果必须使用插件,请你在红色箭头处右键后内置数据,让帮你调试的其他人可以不需要费工夫去搜索/下载/安装插件。
2:绿色箭头的曲线信息丢失,你没有发犀牛文件,或者这里忘记内置
3:问题描述中提到的“按照限制条件定位”,那么你的限制条件到底是什么?

定位物体.gh (15.1 KB)
老师,第一次发有些问题没注意到,感谢老师细心讲解,数据已经内置,限制条件也已标明

你最后实现的效果是间距16往右排列?
但是看了你的非常复杂的程序,不明白到底限制逻辑是什么
可以用语言描述一下吗?


注意我圈起来的红色
根据你目前程序的逻辑,如果使用同一个方块不停这么排列下去,方块会越来越小。
因为你用的这个orient运算器会根据向量长度做缩放,而你的向量长度越来越小。
确认一下这是你想要的结果。
因为看标题你要做的是定位铝板,而不是生成铝板。
铝板越来越小,加上四边形的角度,最终你的铝板会排列成一个龙虾尾巴或者牛角的形态,趋近于尖角。

请提供一个明确有效的案例,可以不是GH程序,只是犀牛文件,甚至逻辑清晰的截图。
我提供一个例子


目标

限制条件
1:黄色红色夹角90度
2:黄色距离16

12.7 十三批.3dm (186.7 KB)
我是想把铝板以第一个为基准从左至右,以相邻铝板的右边为基准依次定位,手动用两点定位太慢了,所以想用写电池组批量定位

目的是为了在加工安装铝板之前提前,在电脑上提前知道加工现场出来的效果是怎么样的

模型看到了,逻辑也清晰了,就和我画的红黄线一样。
不用插件和代码的情况下,需要熟练掌握GH中transform也就是变换矩阵的概念和用法。
刚好以前做过这个应用,今晚到家后给你回帖讲解。




先发一下算法,你可以尝试自己连连看。

好的,收到,谢谢老师,我先看看


拿到垂直边,这一个做法我微调了一下,从原来的阈值改成了排序


确保按照先左后右排序


确保曲线的走势是从上往下


拿到右侧的线,offset一定距离,就是铝板的缝隙
注意曲线的走势一旦确定,offset的方向也唯一确定。


使用编织,将左线和offset后的右线重新穿插起来


两次shift电池,注意这里正负号不要搞错,另外图上忘记标注,shift第三个输入端wrap=False
shift前后变化见四种颜色


提取线的起点和起点方向,作为orient的输入端
注意evaluate curve电池返回的切向量tangeng vector必定是单位向量
所以在这里的orient并不会对物体缩放

以上步骤应该都在基础操作的范围内。
之后的步骤会比较特殊,也会比较抽象。
在这里我们不直接使用orient操作物体,而是提取了orient电池的X输出端,也就是transform变换矩阵
注意:移动,旋转,缩放,镜像,orient等每个电池都会有一个额外的X输出端,它们都是变换矩阵。
相关的数学知识可以百度和谷歌查阅。GH也提供一些简单的矩阵显示和运算,方便研究。


我们首先在最前面插入一个Y方向移动一定距离的变换矩阵,这样排序完毕的铝板就会排列在原来第一个铝板上方一定距离,这个距离可以自己设定,也可以是0
观察panel输出,会发现后面几个矩阵因为是orient产生的,因此属于复合矩阵,无法直观显示(orient做了移动,旋转和缩放,虽然在这里缩放因子是1,但缩放矩阵仍然存在)


将矩阵列表反转
然后生成一个倒序的等差数列备用


使用shift电池对矩阵列表进行操作,因为逻辑不那么直观
可以直接先看结果
1:红色为第一个铝板的变换矩阵列表,第一个铝板只需要按照红色箭头移动一下就可以
2:第二个铝板首先按照右侧蓝色箭头orient到第一个铝板的末尾,然后就可以按照第一个的方式去运动,沿着左侧的蓝色箭头
3:第三个铝板首先按照最右侧的绿色箭头orient到第二个铝板的末尾,然后按照第二个铝板的orient列表移动,一共运动三次
4:第四个第五个以此类推

可以想象为5个小朋友需要站成一列,一开始是分散的状态
5号先跑到4号的后面,并用手搭住4号的肩膀
4号跑到3号的后面,并用手搭住3号的肩膀,注意这时候5号为了保证和4号是同步的,需要完全跟着4号跑
3号跑到2号后面,此时4和5号都是跟着3号跑的,跑的时候三个人永远保持固定的前后位置,因此三个人的变换矩阵应该是完全一样的。
以此类推

最后发现5号需要移动4次,1号只需要移动0次
如果是这个GH案例,因为1号还额外跑了一点距离,因此5号需要移动5次,1号需要移动1次

回顾上一张图,为了达成5个物体的变换矩阵列表内的矩阵数量是从1个到5个的倒序列表。需要构造4,3,2,1,0数列作为shift的数量。同时一开始的矩阵列表需要反转顺序。


最后使用compound将每个物体需要移动的矩阵列表合并起来

矩阵相关的内容比较抽象,我也不确定是否能讲清楚,最好还是自己尝试在实际GH中去查看和摸索。
如果还有问题,欢迎发帖或者回帖讨论。

2 个赞

thank you。已经get到了,老师讲的很清楚,我已经明白老师的意思了,主要就是transfer,compound,shift list的应用。
还想请问老师有没有相关的插件可以达到相同的目的?

老师你讲的太仔细了,每个过程都讲的如此的仔细,非常感谢,老师真的太好了,解答迅速且仔细

还是想感谢老师,老师您太细心了,讲的太仔细了,感谢

“还想请问老师有没有相关的插件可以达到相同的目的?”
你可以将刚才这部分内容消化掉,自己做一遍,打包做成插件。
然后你的问题就有解答了。

我从来不用插件,知道的插件半个手都数的过来。
插件的话,就我所知的半个手里面没有。但因为样本数量太小,不排除有人做过类似的东西。

你要是对自己不是很有信心,想找别人的插件,那也可以去找一下。
就目前这个问题来看,如果我是你,我会选择自己把这套东西消化掉,每一步骤都是透明可见,有没有错误,呈现什么结果都是一目了然的。
相反你去food4rhino或者其他地方找了个插件,除非他是开源的(就比例来看小到可怜)。
否则插件就是个黑盒子,就是个闷包,你给他什么,他算完了给你个结果,你也不知道错还是对,也不知他用的什么算法,也不知道里面的代码是真的高手写的,还是学了几天代码就开始发布插件的初学者。

就算有办法去验证插件的对错,并且最后找到了这个插件。
我相信你找插件的时间,足够做很多有意义的事情了。

1 个赞

刚才忘记说一个概念了
一些和行业无关的通用操作,例如图块相关,文字识别相关的东西
会很容易找到插件,并且插件的质量都不会太差
例如elefront和human
那是因为这些都是rhino和GH比较刚性的需求,不管是什么行业的人用软件都相当有可能会用到

但相反铝板排列这类操作,属于特定行业+特定应用。尤其是针对你的案例,不规则四边,有两边很平,要对齐另外两边,有一大半内容是提炼铝板orient向量的。
要找到有人刚好做了个插件的概率是极其小的。

所以可能会找很久,还不如不找。

1 个赞

是的,老师说的对,把基本的知识融会贯通就是最好的,感谢老师,以后有问题继续请教老师
,还望麻烦老师不吝赐教

如果只是想要实现排列放样,查看铝板反尺数据有没有问题,可以用循环插件