From 6a00f2f0d2c7d210a6f27c23bc81052f137a8157 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 27 Dec 2020 17:07:02 +1100 Subject: [PATCH] Implement adding BCF reference links --- .../blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/operator.py | 20 +++++- src/ifcblenderexport/blenderbim/bim/prop.py | 1 + src/ifcblenderexport/blenderbim/bim/ui.py | 62 ++++++++++--------- 4 files changed, 53 insertions(+), 31 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 16b5b0dba3..13abc613bd 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -36,6 +36,7 @@ if bpy is not None: operator.SaveBcfProject, operator.AddBcfTopic, operator.AddBcfHeaderFile, + operator.AddBcfReferenceLink, operator.ViewBcfTopic, operator.RemoveBcfComment, operator.RemoveBcfReferenceLink, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 7fa8272628..4cfd6be8ff 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -841,6 +841,25 @@ class RemoveBcfFile(bpy.types.Operator): return {"FINISHED"} +class AddBcfReferenceLink(bpy.types.Operator): + bl_idname = "bim.add_bcf_reference_link" + bl_label = "Add BCF Reference Link" + + 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] + if not blender_topic.reference_link: + return {"FINISHED"} + new = blender_topic.reference_links.add() + new.name = blender_topic.reference_link + topic.reference_links.append(blender_topic.reference_link) + bcfxml.edit_topic(topic) + blender_topic.reference_link = "" + return {"FINISHED"} + + class RemoveBcfReferenceLink(bpy.types.Operator): bl_idname = "bim.remove_bcf_reference_link" bl_label = "Remove BCF Reference Link" @@ -854,7 +873,6 @@ class RemoveBcfReferenceLink(bpy.types.Operator): del topic.reference_links[self.index] bcfxml.edit_topic(topic) blender_topic.reference_links.remove(self.index) - props.active_topic_index = props.active_topic_index # Refreshes the BCF Topic return {"FINISHED"} diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index 2bd3ce8f7e..591adf4183 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -1017,6 +1017,7 @@ class BcfTopic(PropertyGroup): file_ifc_project: StringProperty(default="", name="IFC Project") file_ifc_spatial_structure_element: StringProperty(default="", name="IFC Spatial Structure Element") reference_links: CollectionProperty(name="Reference Links", type=StrProperty) + reference_link: StringProperty(default="", name="Reference Link") labels: CollectionProperty(name="Labels", type=StrProperty) bim_snippet: PointerProperty(type=BcfBimSnippet) document_references: CollectionProperty(name="Document References", type=BcfDocumentReference) diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 1beaf049ac..a411f6b90a 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -1747,32 +1747,31 @@ class BIM_PT_bcf_metadata(Panel): bcfxml = bcfstore.BcfStore.get_bcfxml() bcf_topic = bcfxml.topics[topic.name] - if bcf_topic.header and bcf_topic.header.files: - layout.label(text="Header Files:") - for index, f in enumerate(bcf_topic.header.files): - box = self.layout.box() - row = box.row(align=True) - row.label(text=f.filename, icon="FILE_BLANK") - if f.is_external: - row.operator("bim.open_uri", icon="URL", text="").uri = f.reference - else: - op = row.operator("bim.open_uri", icon="FILE_FOLDER", text="") - op.uri = os.path.join(bcfxml.filepath, topic.name, f.reference) - row.operator("bim.remove_bcf_file", icon="X", text="").index = index + layout.label(text="Header Files:") + for index, f in enumerate(bcf_topic.header.files): + box = self.layout.box() + row = box.row(align=True) + row.label(text=f.filename, icon="FILE_BLANK") + if f.is_external: + row.operator("bim.open_uri", icon="URL", text="").uri = f.reference + else: + op = row.operator("bim.open_uri", icon="FILE_FOLDER", text="") + op.uri = os.path.join(bcfxml.filepath, topic.name, f.reference) + row.operator("bim.remove_bcf_file", icon="X", text="").index = index + row = box.row() + row.label(text="Date") + row.label(text=f.date) + + if f.ifc_project: row = box.row() - row.label(text="Date") - row.label(text=f.date) + row.label(text="IFC Project") + row.label(text=f.ifc_project) - if f.ifc_project: - row = box.row() - row.label(text="IFC Project") - row.label(text=f.ifc_project) - - if f.ifc_spatial_structure_element: - row = box.row() - row.label(text="IFC Spatial Structure Element") - row.label(text=f.ifc_spatial_structure_element) + if f.ifc_spatial_structure_element: + row = box.row() + row.label(text="IFC Spatial Structure Element") + row.label(text=f.ifc_spatial_structure_element) row = layout.row(align=True) row.prop(topic, "file_reference") @@ -1785,13 +1784,16 @@ class BIM_PT_bcf_metadata(Panel): row = layout.row() row.operator("bim.add_bcf_header_file") - if topic.reference_links: - layout.label(text="Reference Links:") - for index, link in enumerate(topic.reference_links): - row = layout.row(align=True) - row.prop(link, "name") - row.operator("bim.open_uri", icon="URL", text="").uri = link.name - row.operator("bim.remove_bcf_reference_link", icon="X", text="").index = index + layout.label(text="Reference Links:") + for index, link in enumerate(topic.reference_links): + row = layout.row(align=True) + row.prop(link, "name") + row.operator("bim.open_uri", icon="URL", text="").uri = link.name + row.operator("bim.remove_bcf_reference_link", icon="X", text="").index = index + row = layout.row() + row.prop(topic, "reference_link") + row = layout.row() + row.operator("bim.add_bcf_reference_link") if topic.labels: layout.label(text="Labels:")