请问参照物体和物件本身的区别是什么?

我用rs.AllObjects()拾取到GH中的是Mesh,用GH电池拾取的是Referenced Mesh。

在后续程序中两个的计算结果有差别,rs.AllObjects()拾取的会导致错误计算结果,请问这是BUG吗?

如果不是BUG,我该怎么处理这个情况呢?

这是我的测试文件和GH文件:

测试文件.3dm (1.4 MB)
GH.gh (95.7 KB)

感谢阅读 (:slight_smile:)


更新内容:使用eleFront的拾取的后续计算结果和rs.AllObjects()计算结果相同,都是错误的。
我觉得这可能是个BUG。


问题已经解决了,GH内部在传输数据时候对于所有的小数计算其实是浮点,由于我设置了过高的精度导致判断数据时候出了问题。
其实我觉得还是有点奇怪,主要计算误差出在 “Plane Closest Point” 和 "Mesh ->Area → Centroid"的组合上的时候,我设置的精度为小数点后两位(mm制)情况下,固然精度过高了,取整数就足以满足需求。但是小数点后两位在相对于浮点运算的误差还是大了太多数量级。

感谢版主鹿神 :grimacing:

你这个问题问的也太偷懒了,那么长一串复杂功能,别人根本没法看懂。
直接找了个最后自己觉得不对的地方标记”出错组件“

我帮你排查了一下

早在红色箭头处就已经有不同了。和你之前那个分组的代码有关系。

不同的拾取方法导致一开始的mesh顺序也不同
而你的代码里面有很多排序类的操作

看你最后的效果,应该是一个简单的分组和排序,怎么会搞那么复杂?原则上这类操作纯电池就行了

你希望做的是什么效果呢?

1 个赞

感谢鹿神,
抱歉没有注意这个描述的细节,我的我的。问题已经解决了,是我的疏忽,设置的精度过高了,GH内部的是浮点运算导致有时候判定是正确的,有时候却是错误的。

我想做的是按照面的朝向和位置去分组展平,第一次分组是按照面的朝向分组,第二次分组是在方向相同的小组内按照位置坐标去分组。

你觉得搞起来特别复杂那里是我把面的朝向从笛卡尔坐标系转换成了球坐标系,因为法线长度固定为1,所以可以用两个变量就可以描述面的朝向,在排序计算时候可以简化一点。

红色箭头所指的是依照方向分组后的结果,虽然不同的拾取方式顺序有差,但是我在分组时候是用属性-索引去提取,所以应该是不影响计算结果的,在这里(第一次)分组的结果上是正确的。

建议你还是尽量用自带的电池逻辑搞定
转极坐标是一种常见做法,挺好的,但是没必要折腾那么多py电池,每一个其实都有一定损耗
Expression电池可以写Round(x,y)


这里给你一个我自己的朝向分组思路

1 个赞

Expression可以支持Round()的吗,我才知道,谢谢。

另外你给的示例可以在world(x,y)上进行正确的分组,但对于不规则朝向时候就不那么方便了,转换为极坐标是挺常见的,我这是转为球坐标所以麻烦,我也想简单点 :disappointed:


一般转为极坐标可以直接用To Polar电池
你说的不规则具体是什么意思?

哦哦,我也是才知道这个 :sweat_smile:

不规则的意思是面的朝向往往不只有上下四周的六个单元向量足以描述,当然用足够多的插值也可以满足要求。

我的四个向量的panel加入一个旋转变量就可以
如果是四个方向不是正交,是特殊值,也可以手工给

总体思路就是这样,利用向量夹角做判断,公差也可以自己给,我图上是20
理论上可以满足所有需求

尽量挖掘GH自带的几何库,而不要过早介入代码,会导致问题提前复杂化

1 个赞

嗯嗯,ok,谢谢鹿神