From b938e4b3c37a21eef4bac8184e25181d9244dec1 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 21 Jan 2021 10:54:24 +1100 Subject: [PATCH] Add new get volume by material script --- .../get_volume_by_material.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/ifcblenderexport/get_volume_by_material.py diff --git a/src/ifcblenderexport/get_volume_by_material.py b/src/ifcblenderexport/get_volume_by_material.py new file mode 100644 index 0000000000..a7cf8ca6b7 --- /dev/null +++ b/src/ifcblenderexport/get_volume_by_material.py @@ -0,0 +1,25 @@ +import bpy +import bmesh +import pprint + +material_volumes = {} + +for obj in bpy.context.selected_objects: + if not obj.data or not isinstance(obj.data, bpy.types.Mesh): + continue + material_polygons = {} + for polygon in obj.data.polygons: + material_polygons.setdefault(polygon.material_index, []).append(polygon.vertices) + verts = [v.co for v in obj.data.vertices] + for index, polygons in material_polygons.items(): + mesh = bpy.data.meshes.new("Temporary Mesh") + mesh.from_pydata(verts, [], polygons) + bm = bmesh.new() + bm.from_mesh(mesh) + material_name = obj.data.materials[index].name + material_volumes.setdefault(material_name, 0) + material_volumes[material_name] += bm.calc_volume() + bm.free() + bpy.data.meshes.remove(mesh) + +pprint.pprint(material_volumes)