bim.purge_unused_elements_by_class - make filepath argument optional

This commit is contained in:
Andrej730
2024-09-16 12:15:20 +05:00
parent cfd63392e7
commit a2c2cf65a1
+18 -6
View File
@@ -492,22 +492,33 @@ class PurgeUnusedElementsByClass(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.purge_unused_elements_by_class" bl_idname = "bim.purge_unused_elements_by_class"
bl_label = "Purge Unused Elements By Class" bl_label = "Purge Unused Elements By Class"
bl_description = ( bl_description = (
"Will find all elements of class that have no inverse refernces and will remove them, use very carefully" "Will find all elements of class that have no inverse references and will remove them, use very carefully.\n"
"If IFC class is provided in neighbour field, will purge only elemnts of the provided class. Otherwise will purge all white-listed elements.\n"
"ALT+CLICK to provide a path where to save the IFC file with the removed elements (note changes will be applied to the current IFC too)"
) )
bl_options = {"REGISTER", "UNDO"} bl_options = {"REGISTER", "UNDO"}
filepath: bpy.props.StringProperty(subtype="FILE_PATH") filepath: bpy.props.StringProperty(subtype="FILE_PATH", options={"SKIP_SAVE"})
filter_glob: bpy.props.StringProperty(default="*.ifc", options={"HIDDEN"}) filter_glob: bpy.props.StringProperty(default="*.ifc", options={"HIDDEN"})
def invoke(self, context, event): def invoke(self, context, event):
context.window_manager.fileselect_add(self) if event.type == "LEFTMOUSE" and event.alt:
return {"RUNNING_MODAL"} context.window_manager.fileselect_add(self)
return self.execute(context)
@classmethod
def poll(cls, context):
if not tool.Ifc.get():
cls.poll_message_set("No IFC file is loaded.")
return False
return True
def _execute(self, context): def _execute(self, context):
props = context.scene.BIMDebugProperties props = context.scene.BIMDebugProperties
if props.ifc_class_purge: if props.ifc_class_purge:
purged_elements = core.purge_unused_elements(tool.Ifc, tool.Debug, props.ifc_class_purge) purged_elements = core.purge_unused_elements(tool.Ifc, tool.Debug, props.ifc_class_purge)
self.report({"INFO"}, f"{purged_elements} unused elements found and removed.") self.report({"INFO"}, f"{purged_elements} unused elements found and removed.")
tool.Ifc.get().write(self.filepath) if self.filepath:
tool.Ifc.get().write(self.filepath)
return return
# A whitelisted class is a class that only contains simple data that # A whitelisted class is a class that only contains simple data that
@@ -607,7 +618,8 @@ class PurgeUnusedElementsByClass(bpy.types.Operator, tool.Ifc.Operator):
elif total_batches > 20: elif total_batches > 20:
print("Finished 20 batches. Manually stopping in case of infinite loop.") print("Finished 20 batches. Manually stopping in case of infinite loop.")
self.report({"INFO"}, f"Auto purged {total_purged} orphaned elements") self.report({"INFO"}, f"Auto purged {total_purged} orphaned elements")
tool.Ifc.get().write(self.filepath) if self.filepath:
tool.Ifc.get().write(self.filepath)
class PurgeUnusedObjects(bpy.types.Operator, tool.Ifc.Operator): class PurgeUnusedObjects(bpy.types.Operator, tool.Ifc.Operator):