Rhino Geometry Transform Transpose in RhinoCommon

There seems to be a Transpose() (e.g. for Rhino.Geometry.Transform’s) in the online RhinoCommon SDK reference, and I can invoke many of the other functions, such as
transformation.TryGetInverse(…)
but not
transformation.Transpose()

Is it missing?

This seems to work:

Rhino.Geometry.Transform xform = new Rhino.Geometry.Transform(1.0);
xform.Transpose();
// TODO...

Dale, is this how I would get the world coordinates of a point within a block that is created in another coordinate system?

To transform something form one coordinate system to another, create a transform object using Rhino.Geometry.Transform.ChangeBasis. But, blocks in Rhino are based on world coordinates. So I’m not sure where you question is coming from…

– Dale

forDale.3dm (57.2 KB)

I’ve explained my issue in the note window of the attachment.

Hi Cliff,

Dealing with blocks always add some complexity because the underlying block definition geometry is never where it seems.

The geometry of a block (instance) definition is always based at world origin (0,0,0). When you insert an instance of a block and you pick the insertion point, scale, and rotation, you are defining a transformation (from the world origin) and this transformation is stored on the block instance.

With that in mind, every time you want to query a block’s underlying instance geometry for a property, you need to remember that the instance definition geometry is not were you see it (on the screen), as Rhino’s drawing code takes the instance definition geometry, applies the instance reference’s transformation, and then draws. So, you may need to do the same depending on what you are doing.

If i were you, I’d get a block’s instance definition geometry by calling Rhino.DocObjects.InstanceObject.Explode. This will give you position accurate geometry that you can query. When finished, just throw the stuff away.

If you want to know how explode work, see the following:

https://github.com/dalefugier/SampleCsCommands/blob/master/SampleCsExplodeBlock.cs

So, no alternate coordinate system here. No reason to confuse the issue with ChangeBasis.

Does this help?