From 98e082ccac292db24f7252ad771b91a1ffe5d1d5 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 23 Jan 2020 15:23:19 +1100 Subject: [PATCH] Assign product types using a property, not by parenting for scalability. --- src/ifcblenderexport/blenderbim/export_ifc.py | 10 +++++++--- src/ifcblenderexport/blenderbim/prop.py | 1 + src/ifcblenderexport/blenderbim/ui.py | 3 +++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/export_ifc.py b/src/ifcblenderexport/blenderbim/export_ifc.py index d1bb5bdfca..e3803e1e64 100644 --- a/src/ifcblenderexport/blenderbim/export_ifc.py +++ b/src/ifcblenderexport/blenderbim/export_ifc.py @@ -379,9 +379,10 @@ class IfcParser(): product['attributes'].update(attribute_override) product.update(metadata_override) - if obj.parent \ - and self.is_a_type(self.get_ifc_class(obj.parent.name)): - reference = self.get_type_product_reference(obj.parent.name) + type_product = obj.BIMObjectProperties.type_product + if type_product \ + and self.is_a_type(self.get_ifc_class(type_product.name)): + reference = self.get_type_product_reference(type_product.name) self.rel_defines_by_type.setdefault(reference, []).append(self.product_index) if product['has_boundary_condition']: @@ -924,6 +925,7 @@ class IfcParser(): results.append(type_product) library['rel_declares_type_products'].append(index) + # TODO: this should use properties for key in obj.keys(): if key[0:3] == 'Doc': self.rel_associates_document_type.setdefault( @@ -949,6 +951,8 @@ class IfcParser(): elif self.is_structural(obj) and obj.type == 'EMPTY': names.append('Model/Reference/GRAPH_VIEW/{}'.format(obj.name)) return names + if not obj.data: + return names name = self.get_ifc_representation_name(obj.data.name) for context in self.ifc_export_settings.context_tree: for subcontext in context['subcontexts']: diff --git a/src/ifcblenderexport/blenderbim/prop.py b/src/ifcblenderexport/blenderbim/prop.py index bedc1667e6..a8106f680d 100644 --- a/src/ifcblenderexport/blenderbim/prop.py +++ b/src/ifcblenderexport/blenderbim/prop.py @@ -420,6 +420,7 @@ class BoundaryCondition(PropertyGroup): class BIMObjectProperties(PropertyGroup): global_ids: CollectionProperty(name="GlobalIds", type=GlobalId) attributes: CollectionProperty(name="Attributes", type=Attribute) + type_product: PointerProperty(name='Type Product', type=bpy.types.Object) psets: CollectionProperty(name="Psets", type=Pset) applicable_attributes: EnumProperty(items=getApplicableAttributes, name="Attribute Names") documents: CollectionProperty(name="Documents", type=Document) diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index 869b2aa21a..34a046a520 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -37,6 +37,9 @@ class BIM_PT_object(Panel): row = layout.row() row.prop(props, 'attributes') + row = layout.row() + row.prop(props, 'type_product') + layout.label(text="Property Sets:") row = layout.row() row.prop(context.scene.BIMProperties, "pset_name")