Skip to content

Commit 81fd842

Browse files
committed
Enable selecting a container's children from the IFC Spatial Manager panel
1 parent a8f1a28 commit 81fd842

5 files changed

Lines changed: 19 additions & 2 deletions

File tree

src/blenderbim/blenderbim/bim/module/spatial/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
operator.ContractContainer,
3838
operator.ExpandContainer,
3939
operator.DeleteContainer,
40+
operator.SelectDecomposedElements,
4041
prop.SpatialElement,
4142
prop.BIMSpatialProperties,
4243
prop.BIMObjectSpatialProperties,

src/blenderbim/blenderbim/bim/module/spatial/operator.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,13 @@ def _execute(self, context):
246246
part_name="Unnamed",
247247
)
248248
core.load_container_manager(tool.Spatial)
249+
250+
251+
class SelectDecomposedElements(bpy.types.Operator, tool.Ifc.Operator):
252+
bl_idname = "bim.select_decomposed_elements"
253+
bl_label = "Select Children"
254+
bl_options = {"REGISTER", "UNDO"}
255+
256+
def _execute(self, context):
257+
core.select_decomposed_elements(tool.Spatial)
258+
return {"FINISHED"}

src/blenderbim/blenderbim/bim/module/spatial/ui.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ def draw(self, context):
119119
ifc_definition_id = self.props.containers[self.props.active_container_index].ifc_definition_id
120120
row = self.layout.row()
121121
row.alignment = "RIGHT"
122+
row.operator("bim.select_decomposed_elements", icon="RESTRICT_SELECT_OFF", text="Select Children")
122123
if SpatialData.data["containers"][ifc_definition_id]["type"] in ["IfcBuildingStorey", "IfcBuilding"]:
123124
row.operator("bim.add_building_storey", icon="ADD", text="Add storey").part_class = "IfcBuildingStorey"
124125
row.operator("bim.delete_container", icon="X", text="Delete").container = ifc_definition_id

src/blenderbim/blenderbim/core/spatial.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,8 @@ def expand_container(spatial, container=None):
115115
def delete_container(ifc, spatial, geometry, container=None):
116116
geometry.delete_ifc_object(ifc.get_object(container))
117117
spatial.load_container_manager()
118+
119+
def select_decomposed_elements(spatial):
120+
container = spatial.get_active_container()
121+
if container:
122+
spatial.select_products(spatial.get_decomposed_elements(container))

src/blenderbim/blenderbim/tool/spatial.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ def load_container_manager(cls):
203203
cls.props.is_container_update_enabled = False
204204
parent = tool.Ifc.get().by_type("IfcProject")[0]
205205

206-
for object in ifcopenshell.util.element.get_parts(parent):
206+
for object in ifcopenshell.util.element.get_parts(parent) or []:
207207
if object.is_a("IfcSpatialElement"):
208208
cls.create_new_storey_li(object, 0)
209209
cls.props.is_container_update_enabled = True
@@ -222,7 +222,7 @@ def create_new_storey_li(cls, element, level_index):
222222
if new.has_decomposition:
223223
new.has_children = True
224224
if new.is_expanded:
225-
for related_object in ifcopenshell.util.element.get_parts(element):
225+
for related_object in ifcopenshell.util.element.get_parts(element) or []:
226226
if related_object.is_a("IfcSpatialElement"):
227227
cls.create_new_storey_li(related_object, level_index + 1)
228228

0 commit comments

Comments
 (0)