mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 00:49:59 +00:00
you can now filter structural loads based on name and inverse references
This commit is contained in:
@@ -43,6 +43,7 @@ classes = (
|
|||||||
operator.DisableEditingStructuralLoad,
|
operator.DisableEditingStructuralLoad,
|
||||||
operator.RemoveStructuralLoad,
|
operator.RemoveStructuralLoad,
|
||||||
operator.EditStructuralLoad,
|
operator.EditStructuralLoad,
|
||||||
|
operator.ToggleFilterStructuralLoads,
|
||||||
prop.StructuralAnalysisModel,
|
prop.StructuralAnalysisModel,
|
||||||
prop.StructuralActivity,
|
prop.StructuralActivity,
|
||||||
prop.StructuralLoad,
|
prop.StructuralLoad,
|
||||||
|
|||||||
@@ -761,13 +761,29 @@ class LoadStructuralLoads(bpy.types.Operator):
|
|||||||
bl_label = "Load Structural Loads"
|
bl_label = "Load Structural Loads"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
|
self.file = IfcStore.get_file()
|
||||||
props = context.scene.BIMStructuralProperties
|
props = context.scene.BIMStructuralProperties
|
||||||
while len(props.structural_loads) > 0:
|
while len(props.structural_loads) > 0:
|
||||||
props.structural_loads.remove(0)
|
props.structural_loads.remove(0)
|
||||||
for ifc_definition_id, structural_loads in Data.structural_loads.items():
|
if props.filtered_structural_loads:
|
||||||
new = props.structural_loads.add()
|
names = [structural_load["Name"] or "Unnamed" for _, structural_load in Data.structural_loads.items()]
|
||||||
new.ifc_definition_id = ifc_definition_id
|
for ifc_definition_id, structural_load in Data.structural_loads.items():
|
||||||
new.name = structural_loads["Name"] or "Unnamed"
|
if (
|
||||||
|
names.count(structural_load["Name"] or "Unnamed") > 1
|
||||||
|
and len(self.file.get_inverse(self.file.by_id(ifc_definition_id))) < 2
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
new = props.structural_loads.add()
|
||||||
|
new.ifc_definition_id = ifc_definition_id
|
||||||
|
new.name = structural_load["Name"] or "Unnamed"
|
||||||
|
new.number_of_inverse_references = len(self.file.get_inverse(self.file.by_id(ifc_definition_id)))
|
||||||
|
|
||||||
|
else:
|
||||||
|
for ifc_definition_id, structural_load in Data.structural_loads.items():
|
||||||
|
new = props.structural_loads.add()
|
||||||
|
new.ifc_definition_id = ifc_definition_id
|
||||||
|
new.name = structural_load["Name"] or "Unnamed"
|
||||||
|
new.number_of_inverse_references = len(self.file.get_inverse(self.file.by_id(ifc_definition_id)))
|
||||||
props.is_editing_loads = True
|
props.is_editing_loads = True
|
||||||
bpy.ops.bim.disable_editing_structural_load()
|
bpy.ops.bim.disable_editing_structural_load()
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
@@ -859,3 +875,16 @@ class EditStructuralLoad(bpy.types.Operator):
|
|||||||
Data.load(IfcStore.get_file())
|
Data.load(IfcStore.get_file())
|
||||||
bpy.ops.bim.load_structural_loads()
|
bpy.ops.bim.load_structural_loads()
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
class ToggleFilterStructuralLoads(bpy.types.Operator):
|
||||||
|
bl_idname = "bim.toggle_filter_structural_loads"
|
||||||
|
bl_label = "Toggle Filter Structural Loads"
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
props = context.scene.BIMStructuralProperties
|
||||||
|
props.filtered_structural_loads = not props.filtered_structural_loads
|
||||||
|
bpy.ops.bim.load_structural_loads()
|
||||||
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ class StructuralActivity(PropertyGroup):
|
|||||||
class StructuralLoad(PropertyGroup):
|
class StructuralLoad(PropertyGroup):
|
||||||
name: StringProperty(name="Name")
|
name: StringProperty(name="Name")
|
||||||
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
||||||
|
number_of_inverse_references: IntProperty(name="Number of Inverse References")
|
||||||
|
|
||||||
|
|
||||||
class BIMStructuralProperties(PropertyGroup):
|
class BIMStructuralProperties(PropertyGroup):
|
||||||
@@ -137,12 +138,15 @@ class BIMStructuralProperties(PropertyGroup):
|
|||||||
)
|
)
|
||||||
load_group_activities: CollectionProperty(name="Load Group Activities", type=StructuralActivity)
|
load_group_activities: CollectionProperty(name="Load Group Activities", type=StructuralActivity)
|
||||||
active_load_group_activity_index: IntProperty(name="Active Load Group Activity Index")
|
active_load_group_activity_index: IntProperty(name="Active Load Group Activity Index")
|
||||||
|
|
||||||
structural_loads: CollectionProperty(name="Structural Loads", type=StructuralLoad)
|
structural_loads: CollectionProperty(name="Structural Loads", type=StructuralLoad)
|
||||||
active_structural_load_index: IntProperty(name="Active Structural Load Index")
|
active_structural_load_index: IntProperty(name="Active Structural Load Index")
|
||||||
active_structural_load_id: IntProperty(name="Active Structural Load Id")
|
active_structural_load_id: IntProperty(name="Active Structural Load Id")
|
||||||
is_editing_loads: BoolProperty(name="Is Editing Loads", default=False)
|
is_editing_loads: BoolProperty(name="Is Editing Loads", default=False)
|
||||||
structural_load_types: EnumProperty(items=getStructuralLoadTypes, name="Structural Load Types")
|
structural_load_types: EnumProperty(items=getStructuralLoadTypes, name="Structural Load Types")
|
||||||
structural_load_attributes: CollectionProperty(name="Structural Load Attributes", type=Attribute)
|
structural_load_attributes: CollectionProperty(name="Structural Load Attributes", type=Attribute)
|
||||||
|
filtered_structural_loads: BoolProperty(name="Filtered Structural Loads", default=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BIMObjectStructuralProperties(PropertyGroup):
|
class BIMObjectStructuralProperties(PropertyGroup):
|
||||||
|
|||||||
@@ -453,11 +453,18 @@ class BIM_PT_structural_loads(Panel):
|
|||||||
self.props = context.scene.BIMStructuralProperties
|
self.props = context.scene.BIMStructuralProperties
|
||||||
|
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.label(text="{} Structural Loads Found".format(len(Data.structural_loads)), icon="GHOST_ENABLED")
|
row.label(text="{} Structural Loads Found".format(len(Data.structural_loads)), icon="ANIM_DATA")
|
||||||
if self.props.is_editing_loads:
|
if self.props.is_editing_loads:
|
||||||
|
row.operator(
|
||||||
|
"bim.toggle_filter_structural_loads",
|
||||||
|
text="FILTER - OFF" if not self.props.filtered_structural_loads else "FILTER - ON",
|
||||||
|
icon="FILTER",
|
||||||
|
)
|
||||||
|
row.operator("bim.disable_structural_load_editing_ui", text="", icon="SCREEN_BACK")
|
||||||
|
|
||||||
|
row = self.layout.row(align=True)
|
||||||
row.prop(self.props, "structural_load_types", text="")
|
row.prop(self.props, "structural_load_types", text="")
|
||||||
row.operator("bim.add_structural_load", text="", icon="ADD").ifc_class = self.props.structural_load_types
|
row.operator("bim.add_structural_load", text="", icon="ADD").ifc_class = self.props.structural_load_types
|
||||||
row.operator("bim.disable_structural_load_editing_ui", text="", icon="CANCEL")
|
|
||||||
else:
|
else:
|
||||||
row.operator("bim.load_structural_loads", text="", icon="GREASEPENCIL")
|
row.operator("bim.load_structural_loads", text="", icon="GREASEPENCIL")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user