From 829b97a0d820d49a8c0092d3739e795699086917 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 9 Aug 2020 11:33:47 +1000 Subject: [PATCH] New feature to calculate area of selected faces --- src/ifcblenderexport/blenderbim/bim/__init__.py | 1 + src/ifcblenderexport/blenderbim/bim/operator.py | 16 ++++++++++++++++ src/ifcblenderexport/blenderbim/bim/ui.py | 2 ++ 3 files changed, 19 insertions(+) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index ff988a16cb..664e884b7d 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -170,6 +170,7 @@ if bpy is not None: operator.SelectIfcPatchOutput, operator.ExecuteIfcPatch, operator.CalculateEdgeLengths, + operator.CalculateFaceAreas, prop.StrProperty, prop.Variable, prop.Role, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index baba4cb489..8b008e6768 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -3363,3 +3363,19 @@ class CalculateEdgeLengths(bpy.types.Operator): obj.data.vertices[edge.vertices[0]].co).length bpy.context.scene.BIMProperties.qto_result = str(result) return {'FINISHED'} + + +class CalculateFaceAreas(bpy.types.Operator): + bl_idname = 'bim.calculate_face_areas' + bl_label = 'Calculate Face Areas' + + def execute(self, context): + result = 0 + for obj in bpy.context.selected_objects: + if not obj.data or not obj.data.polygons: + continue + for polygon in obj.data.polygons: + if polygon.select: + result += polygon.area + bpy.context.scene.BIMProperties.qto_result = str(result) + return {'FINISHED'} diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 6da710ddeb..6ce2fe0931 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -525,6 +525,8 @@ class BIM_PT_qto(Panel): row = layout.row(align=True) row.operator("bim.calculate_edge_lengths") + row = layout.row(align=True) + row.operator("bim.calculate_face_areas") class BIM_PT_classifications(Panel):