What, exactly, is "Transform origins" doing?

Hi all, Hope this is the right place to ask - it’s not a python question per se but it’s a question about the Blender internals so I hope someone here will know.
I’m new to Python scripting in Blender (but do have some other scripting background). I’m trying to create a tool to transfer legacy assets from 3ds max and Blender and one of the problem that popped up is that 3ds max has this thing called object-offset. Basically the origin is offset from its default location and/or rotation so for example you create a door from a box, you can offset the origin off to the side so the door opens on its hinges.

Now, Blender appears to have a very similar feature, when you check “transform origin” you can move the origin independently of the mesh data. But I’m beginning to suspect that the way it’s implemented is quite different. In 3ds max, it’s implemented as an extra transform matrix that is independent of the mesh data and can be reset. But I was unable to find anything similar in blender. Is using this feature in Blender changing a transform matrix somewhere, or is it actually restructuring the mesh data to match the new origin?

The origin is the origin of the mesh data so changing it is also changing the mesh data.

The equivalent, assuming 3ds is not also internally changing the vertices relative to the ‘object-offset’, would be the delta transform.
I think the transform of a given vertex would be object * delta * origin * vector.

1 Like

I don’t know 3ds. I know a little CAD.
In my opinion, the name of Blender “origin” is really confusing.
In fact, it is “local coordinate system” of CAD world.
Below is a definition I copied.
Using Local Coordinate Systems (adaptive-vision.com)

Local coordinate systems provide a convenient means for inspecting objects that may appear at different positions on the input image. Instead of denoting coordinates of geometrical primitives in the absolute coordinate system of the image, local coordinate systems make it possible to use coordinates local to the object being inspected. In an initial step of the program the object is located and a local coordinate system is set accordingly. Other tools can then be configured to work within this coordinate system, and this makes them independent of the object translation, rotation and scale.

I hope this could help.