先放一下解决方案:
请仔细观察dir命令后,最左侧曲面(你用mirror镜像右侧曲面的结果)的白色方向箭头的反向,是否有一个蓝紫色的短线。
该短线表示此曲面经过了镜像,镜像原本会改变曲面的方向,但是犀牛会自动将其反转。
反转后的法向和UV并不构成原本的螺旋定则,(紫色的那个才构成螺旋定则)
如果你使用list命令查看镜像后的曲面,会在列表中找到
“face[ 0]: surface(0) reverse(1) loops(0)”
大概在下图的进度位置
以曲面为操作对象进行NormalAt时,会返回紫色的线,也就是遵循螺旋定则的曲面“真”方向。
而使用BrepFace为操作对象进行NormalAt时,会返回白色的线,也就是曲面的“修正”方向
关于此问题的详细请查看该帖子的倒数第二个开发者回帖
https://discourse.mcneel.com/t/evalutate-surface-with-codes-surface-normal-is-not-the-same-direction-with-grasshoppers-evalutate-surface-component/63126/10
注意Dale回复的代码第二段中,同时进行了BrepFace.NormalAt操作,和判断BrepFace是否反转的操作(如果BrepFace反转则反转结果向量)。该操作的结果是返回曲面的“真”法向。
对你的应用来说,如果你需要的是曲面的“修正”方向,则只需要使用BrepFace.NormalAt即可,而不用额外增加判断的操作。