Column profiles now update when switching type

This commit is contained in:
Dion Moult
2021-06-21 14:44:42 +10:00
parent 5d0d3aaa16
commit 650ebeddd6
4 changed files with 35 additions and 1 deletions
@@ -1,6 +1,7 @@
import ifcopenshell
import ifcopenshell.api
import ifcopenshell.util.element
import ifcopenshell.util.representation
class Usecase:
@@ -47,6 +48,8 @@ class Usecase:
material_set = self.file.create_entity("IfcMaterialProfileSet")
else:
material_set = self.file.create_entity("IfcMaterialProfileSet")
self.update_representation_profile(material_set)
material_set_usage = self.create_profile_set_usage(material_set)
self.create_material_association(material_set_usage)
elif self.settings["type"] == "IfcMaterialList":
@@ -54,6 +57,21 @@ class Usecase:
material_set.Materials = [self.settings["material"]]
self.create_material_association(material_set)
def update_representation_profile(self, material_set):
profile = material_set.CompositeProfile
if not profile and material_set.MaterialProfiles:
profile = material_set.MaterialProfiles[0].Profile
if not profile:
return
representation = ifcopenshell.util.representation.get_representation(
self.settings["product"], "Model", "Body", "MODEL_VIEW"
)
if not representation:
return
for subelement in self.file.traverse(representation):
if subelement.is_a("IfcSweptAreaSolid"):
subelement.SweptArea = profile
def create_layer_set_usage(self, material_set):
return self.file.create_entity(
"IfcMaterialLayerSetUsage",
@@ -9,6 +9,7 @@ class Usecase:
self.settings[key] = value
def execute(self):
# TODO: handle composite profiles
old_profile = self.settings["material_profile"].Profile
self.settings["material_profile"].Profile = self.settings["profile"]
for profile_set in self.settings["material_profile"].ToMaterialProfileSet:
@@ -31,6 +32,8 @@ class Usecase:
def change_profile(self, element):
representation = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
if not representation:
return
for subelement in self.file.traverse(representation):
if subelement.is_a("IfcSweptAreaSolid"):
subelement.SweptArea = self.settings["profile"]