mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-07 21:06:25 +00:00
ifcopenshell.util.element.get_element_mass_density
Move it from Blender qto calculator as this method can be generally useful
This commit is contained in:
@@ -580,49 +580,7 @@ def get_obj_mass_density(obj: bpy.types.Object) -> Union[float, None]:
|
||||
"""Calculate object mass density based on Pset_MaterialCommon.MassDensity."""
|
||||
entity = tool.Ifc.get_entity(obj)
|
||||
assert entity
|
||||
material = ifcopenshell.util.element.get_material(entity)
|
||||
if material is None:
|
||||
return
|
||||
|
||||
if (
|
||||
material.is_a("IfcMaterialLayerSet")
|
||||
or material.is_a("IfcMaterialProfileSet")
|
||||
or material.is_a("IfcMaterialConstituentSet")
|
||||
):
|
||||
return
|
||||
|
||||
if material.is_a("IfcMaterial"):
|
||||
material_mass_density = ifcopenshell.util.element.get_pset(material, "Pset_MaterialCommon", "MassDensity")
|
||||
return material_mass_density
|
||||
|
||||
if material.is_a("IfcMaterialLayerSetUsage"):
|
||||
material_layers = material.ForLayerSet.MaterialLayers
|
||||
densities = []
|
||||
thicknesses = []
|
||||
obj_mass_density = 0
|
||||
for material_layer in material_layers:
|
||||
material_mass_density = ifcopenshell.util.element.get_pset(
|
||||
material_layer.Material, "Pset_MaterialCommon", "MassDensity"
|
||||
)
|
||||
if material_mass_density is None:
|
||||
return
|
||||
densities.append(material_mass_density)
|
||||
thickness = material_layer.LayerThickness
|
||||
thicknesses.append(thickness)
|
||||
obj_mass_density = obj_mass_density + (material_mass_density * thickness)
|
||||
total_thickness = sum(thicknesses)
|
||||
obj_mass_density = obj_mass_density / total_thickness
|
||||
return obj_mass_density
|
||||
|
||||
if material.is_a("IfcMaterialProfileSetUsage"):
|
||||
material_profiles = material.ForProfileSet.MaterialProfiles
|
||||
if len(material_profiles) == 1:
|
||||
material_mass_density = ifcopenshell.util.element.get_pset(
|
||||
material_profiles[0].Material, "Pset_MaterialCommon", "MassDensity"
|
||||
)
|
||||
return material_mass_density
|
||||
else:
|
||||
return
|
||||
return ifcopenshell.util.element.get_element_mass_density(entity)
|
||||
|
||||
|
||||
def get_opening_type(opening: bpy.types.Object, obj: bpy.types.Object) -> Literal["OPENING", "RECESS"]:
|
||||
|
||||
Reference in New Issue
Block a user