你可以试试 ReplaceBlock ,关于 ReplaceBlock
https://docs.mcneel.com/rhino/8/help/zh-cn/index.htm#commands/replaceblock.htm
你好,我们之前有写过一个类似功能的C#代码,命令为mergesameblock
社区好像无法上传RHP?如果版主允许我有导出可以直接运行的RHP。以下是当时的代码逻辑
相似的Block合并:
本案例为合并相似图块为同一个图块。
通过判断图块原始的几何体是否相似,反向合并不同的图块归位为同一个图块。
如果图块定义的几何体有缩放,则无法再判断。
代码难度四星半:思路难度大于代码本身
思路是分类处理看上去相同图块的几种不同类型
-
图块定义位置形状都相同:
对于同一个图块定义,被Unique之后,虽然取消了关联,但是图块定义位置形状都相同。
即使之后有缩放变形等等,(在变换前)图块炸开之后图块定义形状一致就很好判断
通过图块定义的几何体种类,和位置(BoundingBox)来判断是否相同 -
图块定义的形状相同,但是位置和旋转不同:
使用完全相同的几何体建Block,但是建立图块的时候有旋转,使得图块定义的几何体出现位移和旋转
需要对几何体进行排除旋转位移的检测,目前采用的方法是提取特征点,并对特征点进行相对位置的Hash建立。
建立特征点相对位置,通过按点顺序进行距离测定来判断。同时对于过多点的几何体,需要进行采样。
所以通过距离进行测定能够判断旋转,但是无法判断缩放,如果需要判断缩放,需要更复杂的算法,不考虑了。 -
图块定义不同,包括相同几何形体形状有所缩放:
则不进行合并,使用BoundingBox进行标记和输出
当上述检测都不符合时,认为是不相似的图块。
用这个AIMO社区的分享码:wucl12-475668CD398D可以检索并直接下载源码并在RHINO 6 7 8直接编译运行,链接我就不放了。