Enable selecting a container's children from the IFC Spatial Manager panel

This commit is contained in:
Sigma Dimensions
2023-06-13 21:17:02 +01:00
parent a8f1a28ac2
commit 81fd84223a
5 changed files with 19 additions and 2 deletions
@@ -37,6 +37,7 @@ classes = (
operator.ContractContainer,
operator.ExpandContainer,
operator.DeleteContainer,
operator.SelectDecomposedElements,
prop.SpatialElement,
prop.BIMSpatialProperties,
prop.BIMObjectSpatialProperties,
@@ -246,3 +246,13 @@ class AddBuildingStorey(bpy.types.Operator, tool.Ifc.Operator):
part_name="Unnamed",
)
core.load_container_manager(tool.Spatial)
class SelectDecomposedElements(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.select_decomposed_elements"
bl_label = "Select Children"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.select_decomposed_elements(tool.Spatial)
return {"FINISHED"}
@@ -119,6 +119,7 @@ class BIM_PT_SpatialManager(Panel):
ifc_definition_id = self.props.containers[self.props.active_container_index].ifc_definition_id
row = self.layout.row()
row.alignment = "RIGHT"
row.operator("bim.select_decomposed_elements", icon="RESTRICT_SELECT_OFF", text="Select Children")
if SpatialData.data["containers"][ifc_definition_id]["type"] in ["IfcBuildingStorey", "IfcBuilding"]:
row.operator("bim.add_building_storey", icon="ADD", text="Add storey").part_class = "IfcBuildingStorey"
row.operator("bim.delete_container", icon="X", text="Delete").container = ifc_definition_id
@@ -115,3 +115,8 @@ def expand_container(spatial, container=None):
def delete_container(ifc, spatial, geometry, container=None):
geometry.delete_ifc_object(ifc.get_object(container))
spatial.load_container_manager()
def select_decomposed_elements(spatial):
container = spatial.get_active_container()
if container:
spatial.select_products(spatial.get_decomposed_elements(container))
+2 -2
View File
@@ -203,7 +203,7 @@ class Spatial(blenderbim.core.tool.Spatial):
cls.props.is_container_update_enabled = False
parent = tool.Ifc.get().by_type("IfcProject")[0]
for object in ifcopenshell.util.element.get_parts(parent):
for object in ifcopenshell.util.element.get_parts(parent) or []:
if object.is_a("IfcSpatialElement"):
cls.create_new_storey_li(object, 0)
cls.props.is_container_update_enabled = True
@@ -222,7 +222,7 @@ class Spatial(blenderbim.core.tool.Spatial):
if new.has_decomposition:
new.has_children = True
if new.is_expanded:
for related_object in ifcopenshell.util.element.get_parts(element):
for related_object in ifcopenshell.util.element.get_parts(element) or []:
if related_object.is_a("IfcSpatialElement"):
cls.create_new_storey_li(related_object, level_index + 1)