From 1971bfe014bd95ab7978834d9f64dd71aa1a9507 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 25 Mar 2020 17:12:02 +1100 Subject: [PATCH] Support BCF topic document references --- src/ifcblenderexport/blenderbim/__init__.py | 2 ++ src/ifcblenderexport/blenderbim/operator.py | 19 +++++++++++++++++++ src/ifcblenderexport/blenderbim/prop.py | 18 ++++++++++++++++++ src/ifcblenderexport/blenderbim/ui.py | 13 +++++++++++++ 4 files changed, 52 insertions(+) diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index e2109129a3..1ea17105b7 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -39,6 +39,7 @@ if bpy is not None: operator.OpenBcfReferenceLink, operator.OpenBcfBimSnippetSchema, operator.OpenBcfBimSnippetReference, + operator.OpenBcfDocumentReference, operator.SelectFeaturesDir, operator.SelectDiffJsonFile, operator.SelectDiffNewFile, @@ -111,6 +112,7 @@ if bpy is not None: prop.BcfTopic, prop.BcfTopicLabel, prop.BcfTopicLink, + prop.BcfTopicDocumentReference, prop.Subcontext, prop.BIMProperties, prop.BCFProperties, diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index 54a5b15b68..1f5aa21a04 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -484,6 +484,25 @@ class OpenBcfBimSnippetReference(bpy.types.Operator): return {'FINISHED'} +class OpenBcfDocumentReference(bpy.types.Operator): + bl_idname = 'bim.open_bcf_document_reference' + bl_label = 'Open BCF Document Reference' + data: bpy.props.StringProperty() + + def execute(self, context): + import bcfplugin + topic_guid, index = self.data.split('/') + doc = bpy.context.scene.BCFProperties.topic_document_references[int(index)] + uri = doc.name + if doc.is_external: + webbrowser.open(uri) + return {'FINISHED'} + webbrowser.open('file:///' + os.path.join( + bcfplugin.util.getBcfDir(), + topic_guid, uri)) + return {'FINISHED'} + + class SelectAudited(bpy.types.Operator): bl_idname = 'bim.select_audited' bl_label = 'Select Audited' diff --git a/src/ifcblenderexport/blenderbim/prop.py b/src/ifcblenderexport/blenderbim/prop.py index 8789579cdd..cdd8b25d07 100644 --- a/src/ifcblenderexport/blenderbim/prop.py +++ b/src/ifcblenderexport/blenderbim/prop.py @@ -372,6 +372,13 @@ class BcfTopicLink(PropertyGroup): name: StringProperty(name='Name') +class BcfTopicDocumentReference(PropertyGroup): + name: StringProperty(name='Reference') + description: StringProperty(name='Description') + guid: StringProperty(name='GUID') + is_external: BoolProperty(name='Is External') + + def refreshBcfTopic(self, context): global bcfviewpoints_enum import bcfplugin @@ -427,6 +434,16 @@ def refreshBcfTopic(self, context): else: props.topic_snippet_is_external = False + # Load document references + while len(props.topic_document_references) > 0: + props.topic_document_references.remove(0) + for doc in topic.docRefs: + new = props.topic_document_references.add() + new.name = doc.reference.uri + new.description = doc.description + new.guid = str(doc.guid) + new.is_external = doc.external + # Load viewpoints bcfviewpoints_enum.clear() viewpoints = bcfplugin.getViewpoints(topic) @@ -540,6 +557,7 @@ class BCFProperties(PropertyGroup): topic_snippet_schema: StringProperty(name='BIM Snippet Schema') topic_snippet_type: StringProperty(name='BIM Snippet Type') topic_snippet_is_external: BoolProperty(name='Is BIM Snippet External') + topic_document_references: CollectionProperty(name='BCF Topic Document References', type=BcfTopicDocumentReference) class MapConversion(PropertyGroup): diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index c523300c19..d508e6756f 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -600,6 +600,19 @@ class BIM_PT_bcf(Panel): else: row.operator('bim.open_bcf_bim_snippet_reference', icon='FILE_FOLDER', text='').topic_guid = props.topic_guid + layout.label(text="Document References:") + for index, doc in enumerate(props.topic_document_references): + row = layout.row(align=True) + row.prop(doc, 'description', text=f'File {index+1} Description:') + row = layout.row(align=True) + row.prop(doc, 'name', text=f'File {index+1} URI') + if doc.is_external: + row.operator('bim.open_bcf_document_reference', icon='URL', text='').data = '{}/{}'.format( + props.topic_guid, index) + else: + row.operator('bim.open_bcf_document_reference', icon='FILE_FOLDER', text='').data = '{}/{}'.format( + props.topic_guid, index) + class BIM_PT_qa(Panel): bl_label = "BIMTester Quality Auditing"