View Issue Details

IDProjectCategoryView StatusLast Update
0004592ArchBugpublic2021-05-22 14:58
Reporterbitacovir Assigned To 
Status newResolutionopen 
Product Version0.19 
Summary0004592: [Arch] "Move With Host" property of Arch windows does not work in FC 0.19
DescriptionIn FC 0.19 when I move a Arch Wall with a nested Arch Door or Window, these elements do not move with the arch wall.
As default, "Move With Host" property of windows is setup to "True", but it does not work.
This bug is a regression, because the feature "Move with Host" works normally in FC 0.18.4 for arch windows nested in arch walls.

This bug/regression has been mentioned several times in the forum:

Steps To ReproduceIn FC0.19
-Open Arch Module
-Create an Arch Wall
-Select the wall and place an Arch window in it. (The property "Move With Host" of the window should be True).
-Select the wall and change or move its position. The wall moves, but the window doesn't.

Same steps in FC 0.18.4 make the wall and windows move simultaneously, as expected.
Tags0.19, Arch
FreeCAD InformationOS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.24267 (Git)
Build type: Release
Branch: master
Hash: b2ca86d8d72b636011a73394bf9bcdedb3b109b7
Python version: 3.8.8
Qt version: 5.12.5
Coin version: 4.0.0
OCC version: 7.4.0
Locale: English/United States (en_US)



2021-03-31 19:23

reporter   ~0015589

Last edited: 2021-04-01 16:58

I suspect that the relevant bit of code is `get_movable_children()`. Looking there, it seems to iterate over the OutList of the wall looking for children with "MoveWithHost" set, but that seems wrong to me. Any objects that have the wall set in their "Hosts" property, will (AFAIU) appear in the InList of the wall, not the OutList?

I quickly tried this patch:

--- a/src/Mod/Draft/draftutils/
+++ b/src/Mod/Draft/draftutils/
@@ -297,8 +297,8 @@ def get_movable_children(objectslist, recursive=True):
     for obj in objectslist:
         # Skips some objects that should never move their children
         if utils.get_type(obj) not in ("Clone", "SectionPlane",
                                        "Facebinder", "BuildingPart"):
-            children = obj.OutList
+            children = obj.InList
             if (hasattr(obj, "Proxy") and obj.Proxy
                     and hasattr(obj.Proxy, "getSiblings")
                     and utils.get_type(obj) != "Window"):

Which seems to work to fix this problem. However, it also breaks the copy tool (gives src/App/Expression.cpp:3109: App::ExpressionParser::ExpressionImporter::ExpressionImporter(Base::XMLReader&): Assertion `!_Reader' failed.)

Also, looking at the git history, it seems that this has been OutList since it was first introduced in 2014 ( FreeCAD master cb5a8079 ), so this is probably not the right fix.

So I guess the window is supposed to be in the wall's outlist? Should it be in the Additions property? That is what commit FreeCAD master cb5a8079 suggests. But if it is in the wall's outlist and the wall is in the window's outlist, then there would be a cycle?

Hm, I guess I do not quite understand yet how all this is supposed to work...


2021-05-22 14:58

reporter   ~0015673

See for a lot more detailed investigation about MoveWithHost and its current problems. The above suggested fix certainly is not the right approach :-)

Issue History

Date Modified Username Field Change
2021-03-09 19:10 bitacovir New Issue
2021-03-09 19:10 bitacovir Tag Attached: 0.19
2021-03-09 19:10 bitacovir Tag Attached: Arch
2021-03-09 19:12 bitacovir Steps to Reproduce Updated
2021-03-31 19:23 matthijskooijman Note Added: 0015589
2021-04-01 16:56 Kunda1 Note Edited: 0015589
2021-04-01 16:57 Kunda1 Note Edited: 0015589
2021-04-01 16:58 Kunda1 Note Edited: 0015589
2021-05-22 14:58 matthijskooijman Note Added: 0015673