From f2dcd8bb75a069175a0a3cdae2c29f847e42dde0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 9 Aug 2020 11:46:14 +1000 Subject: [PATCH] Add feature to calculate multiple object volumes --- .../blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/operator.py | 19 +++++++++++++++++-- src/ifcblenderexport/blenderbim/bim/ui.py | 2 ++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 664e884b7d..34d96b2131 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -171,6 +171,7 @@ if bpy is not None: operator.ExecuteIfcPatch, operator.CalculateEdgeLengths, operator.CalculateFaceAreas, + operator.CalculateObjectVolumes, prop.StrProperty, prop.Variable, prop.Role, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 8b008e6768..9c7de14615 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -3361,7 +3361,7 @@ class CalculateEdgeLengths(bpy.types.Operator): if edge.select: result += (obj.data.vertices[edge.vertices[1]].co - obj.data.vertices[edge.vertices[0]].co).length - bpy.context.scene.BIMProperties.qto_result = str(result) + bpy.context.scene.BIMProperties.qto_result = str(round(result, 3)) return {'FINISHED'} @@ -3377,5 +3377,20 @@ class CalculateFaceAreas(bpy.types.Operator): for polygon in obj.data.polygons: if polygon.select: result += polygon.area - bpy.context.scene.BIMProperties.qto_result = str(result) + bpy.context.scene.BIMProperties.qto_result = str(round(result, 3)) + return {'FINISHED'} + + +class CalculateObjectVolumes(bpy.types.Operator): + bl_idname = 'bim.calculate_object_volumes' + bl_label = 'Calculate Object Volumes' + + def execute(self, context): + qto_calculator = qto.QtoCalculator() + result = 0 + for obj in bpy.context.selected_objects: + if not obj.data: + continue + result += qto_calculator.get_volume(obj) + bpy.context.scene.BIMProperties.qto_result = str(round(result, 3)) return {'FINISHED'} diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 6ce2fe0931..9305c23d78 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -527,6 +527,8 @@ class BIM_PT_qto(Panel): row.operator("bim.calculate_edge_lengths") row = layout.row(align=True) row.operator("bim.calculate_face_areas") + row = layout.row(align=True) + row.operator("bim.calculate_object_volumes") class BIM_PT_classifications(Panel):