Now materials that aren't also used as a styled item can be exported

This commit is contained in:
Dion Moult
2020-11-14 13:36:49 +11:00
parent ddfe0e0c98
commit 599089ad67
@@ -109,7 +109,7 @@ class IfcParser:
self.constraints = self.get_constraints() self.constraints = self.get_constraints()
self.load_representations() self.load_representations()
self.load_presentation_layer_assignments() self.load_presentation_layer_assignments()
self.materials = self.get_materials() self.get_materials()
self.styled_items = self.get_styled_items() self.styled_items = self.get_styled_items()
self.spatial_structure_elements = self.get_spatial_structure_elements() self.spatial_structure_elements = self.get_spatial_structure_elements()
self.groups = self.get_groups() self.groups = self.get_groups()
@@ -1134,26 +1134,37 @@ class IfcParser:
return name return name
def get_materials(self): def get_materials(self):
results = {}
if not self.ifc_export_settings.has_representations: if not self.ifc_export_settings.has_representations:
return results return
for product in self.selected_products + self.type_products: for product in self.selected_products + self.selected_types:
obj = product["raw"] obj = product["raw"]
if obj.data is None: if obj.BIMObjectProperties.material_type == "IfcMaterial" and obj.BIMObjectProperties.material:
continue self.get_material(obj.BIMObjectProperties.material)
elif obj.BIMObjectProperties.material_type == "IfcMaterialConstituentSet":
for constituent in obj.BIMObjectProperties.material_set.material_constituents:
self.get_material(constituent.material)
elif obj.BIMObjectProperties.material_type == "IfcMaterialLayerSet":
for layer in obj.BIMObjectProperties.material_set.material_layers:
self.get_material(layer.material)
elif obj.BIMObjectProperties.material_type == "IfcMaterialProfileSet":
for profile in obj.BIMObjectProperties.material_set.material_profiles:
self.get_material(profile.material)
for slot in obj.material_slots: for slot in obj.material_slots:
if slot.material is None: if slot.material is None or slot.link == "OBJECT":
continue continue
if slot.material.name in results or slot.link == "OBJECT": self.get_material(slot.material)
continue
material = { def get_material(self, material):
"ifc": None, if material.name in self.materials:
"raw": slot.material, return
"attributes": self.get_material_attributes(slot.material), data = {
} "ifc": None,
results[slot.material.name] = material "raw": material,
self.get_material_psets(material, slot.material) "attributes": self.get_material_attributes(material),
return results }
print(material.name)
self.materials[material.name] = data
self.get_material_psets(data, material)
def get_material_attributes(self, material): def get_material_attributes(self, material):
attributes = {"Name": material.name} attributes = {"Name": material.name}