rs.XformChangeBasis() returning wrong transform

Hi there,

I have the following model…

Now maybe I completely misunderstand the concept of rs.XformChangeBasis(), because when I try this:

obj = rs.ObjectsByName("test")[0]
x = rs.WorldXYPlane()[1]
y = rs.WorldXYPlane()[2]
z = rs.WorldXYPlane()[3]

pt = [0,0,0]
pln1 = rs.PlaneFromFrame(pt, y, z)
pln2 = rs.PlaneFromFrame(pt, x, y)

plane_transform = rs.XformChangeBasis(pln2, pln1)
transformed = rs.TransformObject(obj, plane_transform, copy=False)

the output is the following:


So far this is what I wanna achieve.

But when I try to transform it ot another plane like that:

obj = rs.ObjectsByName("test")[0]

x = rs.WorldXYPlane()[1]
y = rs.WorldXYPlane()[2]
z = rs.WorldXYPlane()[3]
pt = [0,0,0]

pln1 = rs.PlaneFromFrame(pt, y, z)
pln2 = rs.PlaneFromFrame(pt, x, z)

plane_transform = rs.XformChangeBasis(pln2, pln1)
transformed = rs.TransformObject(obj, plane_transform, copy=False)

It seems to orient it to a completely other plane (y/reverse x).

What am I missing or what do I understand the wrong way?

Thanks in advance,
T.

Here’s an update:
I made it work this way:

obj = rs.ObjectsByName("test")[0]
x = rs.WorldXYPlane()[1]
y = rs.WorldXYPlane()[2]
z = rs.WorldXYPlane()[3]
pt = [0,0,0]

pln0 = rs.PlaneFromFrame(pt, x, y)
pln1 = rs.PlaneFromFrame(pt, y, z)
pln2 = rs.PlaneFromFrame(pt, x, z)

plane_transform = rs.XformChangeBasis(pln0, pln1)
transformed = rs.TransformObject(obj, plane_transform, copy=False)

plane_transform = rs.XformChangeBasis(pln2, pln0)
transformed = rs.TransformObject(transformed, plane_transform, copy=False)

So maybe I really have a totally wrong understanding of the transform methodology?
Is this the right way to do it?

Hi @tobias.stoltmann,

Does this help?

– Dale

@dale
perfect, yes.
I did not search for the solution in rhinocommon.

import Rhino.Geometry as rg
transformed = rg.Transform.PlaneToPlane(pln1, frm)
result = rs.TransformObject(obj, transformed, copy=True) 

May I ask though if my thougts are correct here:
When using Transform.ChangeBasis I always have to go that way:
source to XY. XY to target.
Is that correct?

x = Transform.ChangeBasis(plane_to_transform_form, plane_to_transform_to);
1 Like