Maybe I’m missing something.
To rotate a group about its Z access, for example, I can query its zaxis to return its vector3D:
zvector3D = group1.transformation.zaxis
Then find it’s center point3d:
centerpoint3D = group1.bounds.center
Then create a transform that can be used to do the rotation directly:
t = Geom::Transformation.rotation centerpoint3D, zvector3D, angle
This works (I think) no matter how deeply nested the group is within arbitrarily transformed parent groups.
However, to Scale the same group, there is no option to scale along a vector. You can only scale along the global X, Y, or Z axes. So for scaling I first have to inverse the group’s (nested) transforms, then do the scaling, then reapply to nested transforms.
But maybe I’m missing something?