I think the recipe for the global placement is straightforward enough:
Code: Select all
gpl = App.Placement()
for obj in [panelFaceXY, container, container001, container002]: # containers listed from leaf to root
gpl = obj.Placement * gpl
Code: Select all
gpl = App.Placement()
for obj in [container002, container001, container, panelFaceXY]: # containers listed from root to leaf
gpl = gpl * obj.Placement
If you read my blog article, it works exactly the same way as compounded rotations. https://blog.freecad.org/2023/01/16/the ... n-freecad/
Master the algebra of rotation/placements and you can quickly figure this out for yourself. There is also the Macro I pointed out (which is more complicated than necessary after the introduction of the getSelectionEx('',0) option). https://github.com/FreeCAD/FreeCAD-macr ... nt.FCMacro