 # Sketchup C Api SUTransformationGetOrigin

I just tried the latest C SDK (SDK_WIN_x64_2021-1-279)
The SUTransformationSetFromPointAndAxes() function will adjust the given point?
see the below example, the retrieved value is (-100,-200,0) instead of the given (100,200,0).
why?
how to solve the issue?
e.g.

``````SUPoint3D origin{};
origin.x = 100;
origin.y = 200;
origin.z = 0;

SUVector3D xAxis{};
xAxis.x = 1.0;
xAxis.y = 0.0;
xAxis.z = 0.0;

SUVector3D yAxis{};
yAxis.x = 0.0;
yAxis.y = 1.0;
yAxis.z = 0.0;

SUVector3D zAxis{};
zAxis.x = 0.0;
zAxis.y = 0.0;
zAxis.z = 1.0;

SUTransformation trans{};
SUTransformationSetFromPointAndAxes(&trans, &origin, &xAxis, &yAxis, &zAxis);

//get the origin
SUPoint3D retrieved{};
SUTransformationGetOrigin(&trans, &retrieved);``````

The origin of the axis is not the same as the point given in `SUTransformationSetFromPointAndAxes`.

When you provide `(100,200,0)` to `SUTransformationSetFromPointAndAxes` that means the point will become the new `0, 0, 0` when you apply the transformation, thus the transformation includes a translation in the direction of `-100,-200,0`.

If you need to obtain the point given to `SUTransformationSetFromPointAndAxes` you’d need to take the inverse transformation and use `SUTransformationGetOrigin`.

I just realized our Ruby and C API is inconsistent. The Ruby API behaves as you expected.

``````tr = Geom::Transformation.new(X_AXIS, Y_AXIS, Z_AXIS, [100, 200, 0])
#<Geom::Transformation:0x0000019e95235bd8>
tr.origin.inspect
Point3d(100, 200, 0)
``````
``````tr2 = Geom::Transformation.axes([100, 200, 0], X_AXIS, Y_AXIS, Z_AXIS)
#<Geom::Transformation:0x0000019e94fea9f0>
tr2.origin.inspect
Point3d(100, 200, 0)
``````

I’m not sure why the C API ended up with this behaviour. Found this comment in the implementation:

``````    // Negate the point so the explanation of what the method does is correct
*cpoint *= -1.0;
``````

An unfortunate inconsistency. I’ll write up a ticket to clarify the effect in the documentation.

2 Likes

thanks for the clarification.