mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 06:58:56 +00:00
Export basic material information
This commit is contained in:
@@ -101,6 +101,7 @@ class IfcParser():
|
|||||||
self.rel_defines_by_type = {}
|
self.rel_defines_by_type = {}
|
||||||
self.rel_defines_by_qto = {}
|
self.rel_defines_by_qto = {}
|
||||||
self.rel_defines_by_pset = {}
|
self.rel_defines_by_pset = {}
|
||||||
|
self.rel_associates_material = {}
|
||||||
self.rel_aggregates = {}
|
self.rel_aggregates = {}
|
||||||
self.representations = {}
|
self.representations = {}
|
||||||
self.type_products = []
|
self.type_products = []
|
||||||
@@ -112,6 +113,7 @@ class IfcParser():
|
|||||||
self.convert_selected_objects_into_products(bpy.context.selected_objects)
|
self.convert_selected_objects_into_products(bpy.context.selected_objects)
|
||||||
self.psets = self.get_psets()
|
self.psets = self.get_psets()
|
||||||
self.representations = self.get_representations()
|
self.representations = self.get_representations()
|
||||||
|
self.materials = self.get_materials()
|
||||||
self.qtos = self.get_qtos()
|
self.qtos = self.get_qtos()
|
||||||
self.spatial_structure_elements = self.get_spatial_structure_elements()
|
self.spatial_structure_elements = self.get_spatial_structure_elements()
|
||||||
|
|
||||||
@@ -195,6 +197,9 @@ class IfcParser():
|
|||||||
self.rel_defines_by_pset.setdefault(
|
self.rel_defines_by_pset.setdefault(
|
||||||
'{}/{}'.format(key, object[key]), []).append(product)
|
'{}/{}'.format(key, object[key]), []).append(product)
|
||||||
|
|
||||||
|
for slot in object.material_slots:
|
||||||
|
self.rel_associates_material.setdefault( slot.material.name, []).append(product)
|
||||||
|
|
||||||
if object.parent \
|
if object.parent \
|
||||||
and self.is_a_type(self.get_ifc_class(object.parent.name)):
|
and self.is_a_type(self.get_ifc_class(object.parent.name)):
|
||||||
reference = self.get_type_product_reference(object.parent.name)
|
reference = self.get_type_product_reference(object.parent.name)
|
||||||
@@ -345,6 +350,24 @@ class IfcParser():
|
|||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def get_materials(self):
|
||||||
|
results = {}
|
||||||
|
if not self.ifc_export_settings.has_representations:
|
||||||
|
return results
|
||||||
|
for product in self.selected_products + self.type_products:
|
||||||
|
object = product['raw']
|
||||||
|
if not object.data:
|
||||||
|
continue
|
||||||
|
for slot in object.material_slots:
|
||||||
|
if slot.material.name in results:
|
||||||
|
continue
|
||||||
|
results[slot.material.name] = {
|
||||||
|
'ifc': None,
|
||||||
|
'raw': slot.material,
|
||||||
|
'attributes': { 'Name': slot.material.name }
|
||||||
|
}
|
||||||
|
return results
|
||||||
|
|
||||||
def get_qtos(self):
|
def get_qtos(self):
|
||||||
if not self.ifc_export_settings.has_quantities:
|
if not self.ifc_export_settings.has_quantities:
|
||||||
return {}
|
return {}
|
||||||
@@ -488,6 +511,7 @@ class IfcExporter():
|
|||||||
self.create_libraries()
|
self.create_libraries()
|
||||||
self.create_map_conversion()
|
self.create_map_conversion()
|
||||||
self.create_representations()
|
self.create_representations()
|
||||||
|
self.create_materials()
|
||||||
self.create_type_products()
|
self.create_type_products()
|
||||||
self.create_spatial_structure_elements(self.ifc_parser.spatial_structure_elements_tree)
|
self.create_spatial_structure_elements(self.ifc_parser.spatial_structure_elements_tree)
|
||||||
self.create_qtos()
|
self.create_qtos()
|
||||||
@@ -498,6 +522,7 @@ class IfcExporter():
|
|||||||
self.relate_objects_to_types()
|
self.relate_objects_to_types()
|
||||||
self.relate_objects_to_qtos()
|
self.relate_objects_to_qtos()
|
||||||
self.relate_objects_to_psets()
|
self.relate_objects_to_psets()
|
||||||
|
self.relate_objects_to_materials()
|
||||||
self.file.write(self.output_file)
|
self.file.write(self.output_file)
|
||||||
|
|
||||||
def set_common_definitions(self):
|
def set_common_definitions(self):
|
||||||
@@ -646,6 +671,23 @@ class IfcExporter():
|
|||||||
ifcopenshell.guid.new(),
|
ifcopenshell.guid.new(),
|
||||||
self.owner_history, None, None, relating_object, related_objects)
|
self.owner_history, None, None, relating_object, related_objects)
|
||||||
|
|
||||||
|
def create_materials(self):
|
||||||
|
for material in self.ifc_parser.materials.values():
|
||||||
|
surface_colour = self.file.createIfcColourRgb(None,
|
||||||
|
material['raw'].diffuse_color[0],
|
||||||
|
material['raw'].diffuse_color[1],
|
||||||
|
material['raw'].diffuse_color[2])
|
||||||
|
surface_style_rendering = self.file.create_entity('IfcSurfaceStyleRendering', **{
|
||||||
|
'SurfaceColour': surface_colour
|
||||||
|
})
|
||||||
|
surface_style = self.file.createIfcSurfaceStyle(None, 'BOTH', [surface_style_rendering])
|
||||||
|
styled_item = self.file.createIfcStyledItem(None, [surface_style], None)
|
||||||
|
styled_representation = self.file.createIfcStyledRepresentation(
|
||||||
|
self.ifc_rep_subcontext, None, None, [styled_item])
|
||||||
|
material['ifc'] = self.file.createIfcMaterial(material['raw'].name, None, None)
|
||||||
|
self.file.createIfcMaterialDefinitionRepresentation(
|
||||||
|
material['raw'].name, None, [styled_representation], material['ifc'])
|
||||||
|
|
||||||
def create_representations(self):
|
def create_representations(self):
|
||||||
for representation in self.ifc_parser.representations.values():
|
for representation in self.ifc_parser.representations.values():
|
||||||
representation['ifc'] = self.create_representation(representation)
|
representation['ifc'] = self.create_representation(representation)
|
||||||
@@ -786,6 +828,13 @@ class IfcExporter():
|
|||||||
[o['ifc'] for o in related_objects],
|
[o['ifc'] for o in related_objects],
|
||||||
relating_property)
|
relating_property)
|
||||||
|
|
||||||
|
def relate_objects_to_materials(self):
|
||||||
|
for relating_material_key, related_objects in self.ifc_parser.rel_associates_material.items():
|
||||||
|
self.file.createIfcRelAssociatesmaterial(
|
||||||
|
ifcopenshell.guid.new(), self.owner_history, None, None,
|
||||||
|
[o['ifc'] for o in related_objects],
|
||||||
|
self.ifc_parser.materials[relating_material_key]['ifc'])
|
||||||
|
|
||||||
class IfcExportSettings:
|
class IfcExportSettings:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.has_representations = True
|
self.has_representations = True
|
||||||
|
|||||||
Reference in New Issue
Block a user