Brep becomes invalid with Orient component

Hello,
I have some Breps that when put through the Orient component become invalid, and I don’t know why.
I have seen another topic about the same problem (topic here), but no explanation or solution seems to have been given.
As you can see in the example file, the first brep becomes invalid with the orient component. However, it does not when I just use move and rotate components.


Is there any reason for this ? Is there a way to fix it ?
Thanks !
friou

Sample file : 191016 Orient invalid Brep.gh (184.4 KB)

Maybe source of problem is that Orient transformation (which computes angles… - see transformation matrix) results in floating “error” since your objects are positioned far away from center.
If we have two numbers A, and B with large number of digits and:

  1. we calculate C=A/B
  2. and D=C*B
  3. so we are expecting to get D = A, but in reality it will not be exactly A and it may happen that this error invoke some “failures” in further calculation.

But there may be way to work around - see attached definition.
And generally, if you can achieve result by translation only, do not use orient-transformation. It is more “expensive” and less “accurate”.
191016 Orient invalid Brep_v2.gh (196.3 KB)

hi,
for some reason the problem is caused by your 1st source plane.
once I changed that specific plane with another, the brep worked fine.
I don’t know why, it doesn’t look to be invalid.

Since you orient these breps to O(i)xy, you should use align planes with Oxy as a guide plane to minimize their serial rotations since direction of x,y axis play an essential role in orientation. See more in this discussion
image 191016 Orient invalid Brep - re.gh (186.4 KB)

Thanks guys for your answers !
I understand now where the problem comes from : the distance of the objects.
I thought the orient operation would be easier than the (move+rotate) since it takes only one component instead of 6, but apparently simpler is not always better !
I could use Loc’s solution but I would still need to rotate my objects afterwards, so it is the same as moving and rotating them.
With your answers, I found a halfway solution : first I move the objects closer to the origin and then I orient them. Seems to work !

friou