Rotating Entire window in Vision

In your case, I imagine a combination of the Template Canvas with a Paintable Canvas underlay could efficiently render the orientation functionality you're looking for in a way that will remain understandable to the team in the future. I imagine any scheme that programmatically transforms each individual component at runtime will prove to be a headache to maintain.

The first approach I would try would be to make four dataset custom properties—one for each orientation layout—and map your components for the Template Canvas there.

Then, simply add an expression binding to the templates property of the Template Canvas and use some property to dictate which dataset is used:

case({Root Container.Orientation Dropdown.selectedIndex},
0, {Root Container.Template Canvas.orientation_0},
1, {Root Container.Template Canvas.orientation_90},
2, {Root Container.Template Canvas.orientation_180},
3, {Root Container.Template Canvas.orientation_270},
{Root Container.Template Canvas.orientation_0})

This will automatically move the templates to the desired locations without requiring scripting or forced rotations. If the orientation of the template itself needs to change, do that within the template based upon an external parameter. This parameter can be delivered to the templates through the parameter dataset's parameters column. The manual explains how to do all of this in more detail.

The Paintable Canvas is a good tool for things such as connecting lines or specialized labels that don't fit neatly into templates. If the background color of the Template Canvas is transparent, the Paintable Canvas can be positioned as an underlay to draw static connections and strings where needed.

That said, the Paintable Canvas can also be used as a glass pane to add advanced functionality to a window, and the forum does have a growing list of Paintable Canvas hacks that can help with more complex stuff.