From 04afc101a3e7c65dcdbc4ca5e7b0ca66a33a8e75 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 1 May 2020 19:13:54 +1000 Subject: [PATCH] You can now relate and export document references and information entities --- src/ifcblenderexport/blenderbim/bim/__init__.py | 1 + src/ifcblenderexport/blenderbim/bim/export_ifc.py | 4 ++++ src/ifcblenderexport/blenderbim/bim/operator.py | 14 ++++++++++++++ src/ifcblenderexport/blenderbim/bim/prop.py | 1 + src/ifcblenderexport/blenderbim/bim/ui.py | 5 +++++ 5 files changed, 25 insertions(+) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 09f4605c05..eed2f3604c 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -55,6 +55,7 @@ if bpy is not None: operator.RemoveMaterialPset, operator.AddDocumentInformation, operator.RemoveDocumentInformation, + operator.AssignDocumentInformation, operator.AddDocumentReference, operator.RemoveDocumentReference, operator.AssignDocumentReference, diff --git a/src/ifcblenderexport/blenderbim/bim/export_ifc.py b/src/ifcblenderexport/blenderbim/bim/export_ifc.py index 17682cb0d3..00b33ab874 100644 --- a/src/ifcblenderexport/blenderbim/bim/export_ifc.py +++ b/src/ifcblenderexport/blenderbim/bim/export_ifc.py @@ -689,6 +689,7 @@ class IfcParser(): results[reference.name] = { 'ifc': None, 'raw': reference, + 'referenced_document': reference.referenced_document, 'attributes': attributes } return results @@ -1347,6 +1348,9 @@ class IfcExporter(): def create_document_references(self): for reference in self.ifc_parser.document_references.values(): + if reference['referenced_document'] \ + and reference['referenced_document'] in self.ifc_parser.document_information: + reference['attributes']['ReferencedDocument'] = self.ifc_parser.document_information[reference['referenced_document']]['ifc'] reference['ifc'] = self.file.create_entity( 'IfcDocumentReference', **reference['attributes']) self.file.createIfcRelAssociatesDocument( diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 4f59b2ad5a..465088bc19 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -812,6 +812,20 @@ class RemoveDocumentInformation(bpy.types.Operator): return {'FINISHED'} +class AssignDocumentInformation(bpy.types.Operator): + bl_idname = 'bim.assign_document_information' + bl_label = 'Assign Document Information' + index: bpy.props.IntProperty() + + def execute(self, context): + reference = bpy.context.scene.BIMProperties.document_references[self.index] + index = bpy.context.scene.BIMProperties.active_document_information_index + info = bpy.context.scene.BIMProperties.document_information + if index < len(info): + reference.referenced_document = info[index].name + return {'FINISHED'} + + class AddDocumentReference(bpy.types.Operator): bl_idname = 'bim.add_document_reference' bl_label = 'Add Document Reference' diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index 521530052c..1ec0137a4e 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -427,6 +427,7 @@ class DocumentReference(PropertyGroup): name: StringProperty(name="Identification") human_name: StringProperty(name="Name") description: StringProperty(name="Description") + referenced_document: StringProperty(name="Referenced Document") class BcfTopic(PropertyGroup): diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index e2d06400d7..7347894c63 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -171,6 +171,9 @@ class BIM_PT_document_information(Panel): row.prop(reference, 'location') row = layout.row() row.prop(reference, 'description') + row = layout.row(align=True) + row.prop(reference, 'referenced_document') + row.operator('bim.assign_document_information', icon='LINKED', text='').index = props.active_document_reference_index row = layout.row(align=True) row.operator('bim.assign_document_reference', text='Assign Reference') @@ -212,6 +215,8 @@ class BIM_PT_documents(Panel): row.prop(reference, 'location') row = layout.row() row.prop(reference, 'description') + row = layout.row() + row.prop(reference, 'referenced_document') else: layout.label(text="Reference is invalid")