How can I display volume of any mesh object?
I can display length of an edge, the area of the face, but nothing for volume. Is it possible?
Blender Stack Exchange is a question and answer site for people who use Blender to create 3D graphics, animations, or games. It only takes a minute to sign up.Sign up to join this community
You can use the 3D Print Toolbox add-on for that. Activate it in the Preferences and it will appear in the Tool Shelf of the 3D View. Top line buttons let you calculate volume and total area.
You don't need an addon for this.
In general, the methods for calculating the volume of a mesh can be divided into two categories: (1) Analytical methods which are based on mathematical formulas, these methods are efficient and accurate but are limited to simple shapes. (2) Numerical methods which involve breaking the mesh into smaller parts and summing the volume of those parts. These methods can be applied to any shape, but the accuracy of the results may vary depending on the number of parts used and the method for calculating the volume of each part.
Here's a script that uses the Numerical Method to calculate the volume of a mesh.
import bpy import bmesh from mathutils import Vector obj = bpy.context.active_object me = obj.data bm = bmesh.new() bm.from_mesh(me) bm.transform(obj.matrix_world) bmesh.ops.triangulate(bm, faces=bm.faces) volume = 0 for f in bm.faces: v1 = f.verts.co v2 = f.verts.co v3 = f.verts.co volume += v1.dot(v2.cross(v3)) / 6 print("Volume:", volume) bm.free()
For performance reasons I came up with the following solution based on rigid body ops.
def select_object(ob): for o in bpy.context.selected_objects: o.select_set(False) ob.select_set(True) bpy.context.view_layer.objects.active = ob def calc_object_volume(ob): select_object(ob) bpy.ops.rigidbody.object_add() bpy.ops.rigidbody.mass_calculate(material='Custom', density=1) # density in kg/m^3 return ob.rigid_body.mass