From c0ed4074d8d2efd558b617aaff96dbbfb9680fd2 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 27 Jan 2021 15:28:29 +1100 Subject: [PATCH] You can now assign reps to type products. See #1222. --- .../module/geometry/assign_representation.py | 38 +++++++++++++------ .../bim/module/geometry/map_representation.py | 2 +- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/module/geometry/assign_representation.py b/src/ifcblenderexport/blenderbim/bim/module/geometry/assign_representation.py index b01084c8ae..482fce9451 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/geometry/assign_representation.py +++ b/src/ifcblenderexport/blenderbim/bim/module/geometry/assign_representation.py @@ -1,18 +1,34 @@ class Usecase: def __init__(self, file, settings=None): self.file = file - self.settings = { - "product": None, - "representation": None - } + self.settings = {"product": None, "representation": None} for key, value in settings.items(): self.settings[key] = value def execute(self): - definition = self.settings["product"].Representation - if not definition: - definition = self.file.createIfcProductDefinitionShape() - self.settings["product"].Representation = definition - representations = list(definition.Representations) if definition.Representations else [] - representations.append(self.settings["representation"]) - definition.Representations = representations + if self.settings["product"].is_a("IfcProduct"): + definition = self.settings["product"].Representation + if not definition: + definition = self.file.createIfcProductDefinitionShape() + self.settings["product"].Representation = definition + representations = list(definition.Representations) if definition.Representations else [] + representations.append(self.settings["representation"]) + definition.Representations = representations + elif self.settings["product"].is_a("IfcTypeProduct"): + if self.settings["product"].RepresentationMaps: + maps = list(self.settings["product"].RepresentationMaps) + else: + maps = [] + self.zero = self.file.createIfcCartesianPoint((0.0, 0.0, 0.0)) + self.x_axis = self.file.createIfcDirection((1.0, 0.0, 0.0)) + self.z_axis = self.file.createIfcDirection((0.0, 0.0, 1.0)) + maps.append( + self.file.create_entity( + "IfcRepresentationMap", + **{ + "MappingOrigin": self.file.createIfcAxis2Placement3D(self.zero, self.z_axis, self.x_axis), + "MappedRepresentation": self.settings["representation"], + } + ) + ) + self.settings["product"].RepresentationMaps = maps diff --git a/src/ifcblenderexport/blenderbim/bim/module/geometry/map_representation.py b/src/ifcblenderexport/blenderbim/bim/module/geometry/map_representation.py index 155b2a35de..479986e290 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/geometry/map_representation.py +++ b/src/ifcblenderexport/blenderbim/bim/module/geometry/map_representation.py @@ -36,7 +36,7 @@ class Usecase: return self.file.create_entity( "IfcRepresentationMap", **{ - "MappingOrigin": self.file.createIfcAxis2Placement3D(zero, z_axis, x_axis), + "MappingOrigin": self.file.createIfcAxis2Placement3D(self.zero, self.z_axis, self.x_axis), "MappedRepresentation": self.settings["representation"], } )