From da08eb78cc3dee16eaca3c3dd4c95866b1b39224 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Fri, 20 Mar 2026 22:24:19 +0000 Subject: [PATCH] update --- CLAUDE.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 7bd160f..d04cb90 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -170,6 +170,8 @@ Windows and doors have multiple relationships that must all be cleaned up: `root.remove_product` is a smart delete — removes the entity plus all its relationships (geometry, placement, properties, materials, containment, type assignments, space boundaries). The IfcOpeningElement must be removed separately. +Alternatively, `feature.remove_feature` permanently deletes an IfcOpeningElement and its void relationship in one call. Any fillings still present become orphaned and must be removed first via `root.remove_product`. + **Verify no orphaned openings remain:** ``` ifc_relations() # → check children.openings for unfilled IfcOpeningElements @@ -184,6 +186,14 @@ ifc_edit("geometry.edit_object_placement", '{"product": "", "matrix" Always move the IfcOpeningElement to the same position as the window/door. Also check `IfcRelSpaceBoundary` entities — their geometry may need updating if the window moves between spaces or changes boundary. +### Moving an assembly + +When moving an assembly (roof, furniture group, or any element with nested children) and you want all children to travel with it, pass `"should_transform_children": "true"`. The default is `"false"`, which rewrites each child's local placement to preserve its current world position — the parent moves but the children stay where they are. + +``` +ifc_edit("geometry.edit_object_placement", '{"product": "", "matrix": [[...],[...],[...],[0,0,0,1]], "should_transform_children": "true"}') +``` + ### Changing element types ```