From fa6df3fa3052a1fa32da3fb5289aaa3696df5ab0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 28 Dec 2020 18:44:33 +1100 Subject: [PATCH] Implement support for deleting document references --- src/bcf/bcf/bcfxml.py | 9 ++++++ .../blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/operator.py | 15 ++++++++++ src/ifcblenderexport/blenderbim/bim/ui.py | 30 ++++++++++--------- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/bcf/bcf/bcfxml.py b/src/bcf/bcf/bcfxml.py index c059917e2e..de31c8fa95 100644 --- a/src/bcf/bcf/bcfxml.py +++ b/src/bcf/bcf/bcfxml.py @@ -523,6 +523,15 @@ class BcfXml: topic.bim_snippet = None self.edit_topic(topic) + def delete_document_reference(self, topic, index): + document_reference = topic.document_references[index] + if document_reference.referenced_document and not document_reference.is_external: + filepath = os.path.join(self.filepath, topic.guid, document_reference.referenced_document) + if os.path.exists(filepath): + os.remove(filepath) + del topic.document_references[index] + self.edit_topic(topic) + def add_bim_snippet(self, topic, bim_snippet): if topic.bim_snippet: self.delete_bim_snippet(topic) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index c8cfc85b86..40bf1aeef9 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -44,6 +44,7 @@ if bpy is not None: operator.RemoveBcfComment, operator.RemoveBcfBimSnippet, operator.RemoveBcfReferenceLink, + operator.RemoveBcfDocumentReference, operator.EditBcfReferenceLinks, operator.EditBcfLabels, operator.RemoveBcfLabel, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index e7941b2773..810c5a4a4c 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -1002,6 +1002,21 @@ class RemoveBcfBimSnippet(bpy.types.Operator): return {"FINISHED"} +class RemoveBcfDocumentReference(bpy.types.Operator): + bl_idname = "bim.remove_bcf_document_reference" + bl_label = "Remove BCF Document Reference" + index: bpy.props.IntProperty() + + def execute(self, context): + bcfxml = bcfstore.BcfStore.get_bcfxml() + props = bpy.context.scene.BCFProperties + blender_topic = props.topics[props.active_topic_index] + topic = bcfxml.topics[blender_topic.name] + bcfxml.delete_document_reference(topic, self.index) + bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) + return {"FINISHED"} + + class RemoveBcfComment(bpy.types.Operator): bl_idname = "bim.remove_bcf_comment" bl_label = "Remove BCF Comment" diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 33438b6fbd..780b185490 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -1839,19 +1839,19 @@ class BIM_PT_bcf_metadata(Panel): row = layout.row() row.operator("bim.add_bcf_bim_snippet") - if topic.document_references: - layout.label(text="Document References:") - for index, doc in enumerate(topic.document_references): - box = self.layout.box() - row = box.row(align=True) - row.prop(doc, "reference") - if doc.is_external: - row.operator("bim.open_uri", icon="URL", text="").uri = doc.reference - else: - op = row.operator("bim.open_uri", icon="FILE_FOLDER", text="") - op.uri = os.path.join(bcfxml.filepath, topic.name, doc.reference) - row = box.row(align=True) - row.prop(doc, "description") + layout.label(text="Document References:") + for index, doc in enumerate(topic.document_references): + box = self.layout.box() + row = box.row(align=True) + row.prop(doc, "reference") + if doc.is_external: + row.operator("bim.open_uri", icon="URL", text="").uri = doc.reference + else: + op = row.operator("bim.open_uri", icon="FILE_FOLDER", text="") + op.uri = os.path.join(bcfxml.filepath, topic.name, doc.reference) + row.operator("bim.remove_bcf_document_reference", icon="X", text="").index = index + row = box.row(align=True) + row.prop(doc, "description") if topic.related_topics: layout.label(text="Related Topics:") @@ -1893,7 +1893,9 @@ class BIM_PT_bcf_comments(Panel): author_text = "*{} ({})".format(comment.modified_author, comment.modified_date) row = box.row(align=True) row.label(text=author_text, icon="WORDWRAP_ON") - row.prop(comment, "is_editable", icon="CHECKMARK" if comment.is_editable else "GREASEPENCIL", icon_only=True) + row.prop( + comment, "is_editable", icon="CHECKMARK" if comment.is_editable else "GREASEPENCIL", icon_only=True + ) row.operator("bim.remove_bcf_comment", icon="X", text="").comment_guid = comment.name if comment.is_editable: