There are some oddities in the API here that could be worth explaining.
transform! honors an objects original position (also a transformation) and moves it from there.
transform= sets the transformation of the object, totally overriding what transformation it already had.
move!suggest a relationship to
transform! but it is actually much more like
transformation= that it just sets a transformation, overriding what was already there. Its difference from
transformation= is that it isn’t added to the undo stack, which is useful for animations.
group.move!(Geom::Transformation.translation(ORIGIN)) is geometrically identical to
group.transformation = IDENITY as
Transformation.translation(ORIGIN) returns an identity transformation. It represents either no movement or the object being aligned with the parent axes, depending on how you apply it.
transformation= ignores any existing value when writing the transformation, you could use it only once and skip the previous step of “resetting” the position.
group.transformation = Geom::Transformation.new(group_point, face_vector)