mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 11:06:51 +00:00
Enable selecting a container's children from the IFC Spatial Manager panel
This commit is contained in:
@@ -37,6 +37,7 @@ classes = (
|
|||||||
operator.ContractContainer,
|
operator.ContractContainer,
|
||||||
operator.ExpandContainer,
|
operator.ExpandContainer,
|
||||||
operator.DeleteContainer,
|
operator.DeleteContainer,
|
||||||
|
operator.SelectDecomposedElements,
|
||||||
prop.SpatialElement,
|
prop.SpatialElement,
|
||||||
prop.BIMSpatialProperties,
|
prop.BIMSpatialProperties,
|
||||||
prop.BIMObjectSpatialProperties,
|
prop.BIMObjectSpatialProperties,
|
||||||
|
|||||||
@@ -246,3 +246,13 @@ class AddBuildingStorey(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
part_name="Unnamed",
|
part_name="Unnamed",
|
||||||
)
|
)
|
||||||
core.load_container_manager(tool.Spatial)
|
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
|
ifc_definition_id = self.props.containers[self.props.active_container_index].ifc_definition_id
|
||||||
row = self.layout.row()
|
row = self.layout.row()
|
||||||
row.alignment = "RIGHT"
|
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"]:
|
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.add_building_storey", icon="ADD", text="Add storey").part_class = "IfcBuildingStorey"
|
||||||
row.operator("bim.delete_container", icon="X", text="Delete").container = ifc_definition_id
|
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):
|
def delete_container(ifc, spatial, geometry, container=None):
|
||||||
geometry.delete_ifc_object(ifc.get_object(container))
|
geometry.delete_ifc_object(ifc.get_object(container))
|
||||||
spatial.load_container_manager()
|
spatial.load_container_manager()
|
||||||
|
|
||||||
|
def select_decomposed_elements(spatial):
|
||||||
|
container = spatial.get_active_container()
|
||||||
|
if container:
|
||||||
|
spatial.select_products(spatial.get_decomposed_elements(container))
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ class Spatial(blenderbim.core.tool.Spatial):
|
|||||||
cls.props.is_container_update_enabled = False
|
cls.props.is_container_update_enabled = False
|
||||||
parent = tool.Ifc.get().by_type("IfcProject")[0]
|
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"):
|
if object.is_a("IfcSpatialElement"):
|
||||||
cls.create_new_storey_li(object, 0)
|
cls.create_new_storey_li(object, 0)
|
||||||
cls.props.is_container_update_enabled = True
|
cls.props.is_container_update_enabled = True
|
||||||
@@ -222,7 +222,7 @@ class Spatial(blenderbim.core.tool.Spatial):
|
|||||||
if new.has_decomposition:
|
if new.has_decomposition:
|
||||||
new.has_children = True
|
new.has_children = True
|
||||||
if new.is_expanded:
|
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"):
|
if related_object.is_a("IfcSpatialElement"):
|
||||||
cls.create_new_storey_li(related_object, level_index + 1)
|
cls.create_new_storey_li(related_object, level_index + 1)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user