Update status visibility automatically #3721

This commit is contained in:
Andrej730
2023-09-06 15:44:15 +05:00
parent fbad0eeac2
commit 21aad4c4f5
3 changed files with 7 additions and 3 deletions
@@ -51,7 +51,7 @@ class EnableStatusFilters(bpy.types.Operator):
pset = element.PartOfPset[0]
if pset.Name.startswith("Pset_") and pset.Name.endswith("Common"):
statuses.update(element.EnumerationValues)
elif pset.Name == "EPset_Status": # Our secret sauce
elif pset.Name == "EPset_Status": # Our secret sauce
statuses.update(element.EnumerationValues)
elif element.Name == "UserDefinedStatus":
statuses.add(element.NominalValue)
@@ -67,6 +67,7 @@ class EnableStatusFilters(bpy.types.Operator):
class DisableStatusFilters(bpy.types.Operator):
bl_idname = "bim.disable_status_filters"
bl_label = "Disable Status Filters"
bl_description = "Deactivate status filters panel.\nCan be used to refresh the displayed statuses"
def execute(self, context):
props = context.scene.BIMStatusProperties
@@ -77,6 +78,7 @@ class DisableStatusFilters(bpy.types.Operator):
class ActivateStatusFilters(bpy.types.Operator):
bl_idname = "bim.activate_status_filters"
bl_label = "Activate Status Filters"
bl_description = "Filter and display objects based on currently selected IFC statuses"
def execute(self, context):
props = context.scene.BIMStatusProperties
@@ -92,6 +94,7 @@ class ActivateStatusFilters(bpy.types.Operator):
query = " + ".join(query)
if not query:
self.report({"INFO"}, "No statuses selected.")
return {"FINISHED"}
visible_elements = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query)
@@ -107,6 +110,7 @@ class ActivateStatusFilters(bpy.types.Operator):
class SelectStatusFilter(bpy.types.Operator):
bl_idname = "bim.select_status_filter"
bl_label = "Select Status Filter"
bl_description = "Select elements with currently selected status"
name: bpy.props.StringProperty()
def execute(self, context):
@@ -405,7 +405,7 @@ class ISODuration(PropertyGroup):
class IFCStatus(PropertyGroup):
name: StringProperty(name="Name")
is_visible: BoolProperty(name="Is Visible", default=True)
is_visible: BoolProperty(name="Is Visible", default=True, update=lambda x, y: bpy.ops.bim.activate_status_filters())
class BIMStatusProperties(PropertyGroup):
@@ -52,7 +52,7 @@ class BIM_PT_status(Panel):
return
row = self.layout.row(align=True)
row.operator("bim.activate_status_filters", icon="TIME")
row.label(text="Statuses found in the project:")
row.operator("bim.disable_status_filters", icon="CANCEL", text="")
for status in self.props.statuses: