M_Rhino_Geometry_VolumeMassProperties_Compute_1 - mcneel/rhinocommon-api-docs GitHub Wiki
Compute the VolumeMassProperties for a single Mesh.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0
C#
public static VolumeMassProperties Compute(
Mesh mesh
)
VB
Public Shared Function Compute (
mesh As Mesh
) As VolumeMassProperties
- mesh
- Type: Rhino.Geometry.Mesh
Mesh to measure.
Type: VolumeMassProperties
The VolumeMassProperties for the given Mesh or null on failure.
Exception | Condition |
---|---|
ArgumentNullException | When mesh is null. |
VB
Imports Rhino
Imports Rhino.Commands
Imports Rhino.Input.Custom
Imports Rhino.Geometry
Imports Rhino.DocObjects
Namespace examples_vb
Public Class MeshVolumeCommand
Inherits Command
Public Overrides ReadOnly Property EnglishName() As String
Get
Return "vbMeshVolume"
End Get
End Property
Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
Dim gm = New GetObject()
gm.SetCommandPrompt("Select solid meshes for volume calculation")
gm.GeometryFilter = ObjectType.Mesh
gm.GeometryAttributeFilter = GeometryAttributeFilter.ClosedMesh
gm.SubObjectSelect = False
gm.GroupSelect = True
gm.GetMultiple(1, 0)
If gm.CommandResult() <> Result.Success Then
Return gm.CommandResult()
End If
Dim volume As Double = 0.0
Dim volume_error As Double = 0.0
For Each obj_ref As ObjRef In gm.Objects()
If obj_ref.Mesh() IsNot Nothing Then
Dim mass_properties = VolumeMassProperties.Compute(obj_ref.Mesh())
If mass_properties IsNot Nothing Then
volume += mass_properties.Volume
volume_error += mass_properties.VolumeError
End If
End If
Next
RhinoApp.WriteLine("Total volume = {0:f} (+/- {1:f})", volume, volume_error)
Return Result.Success
End Function
End Class
End Namespace
C#
using Rhino;
using Rhino.Commands;
using Rhino.Input.Custom;
using Rhino.Geometry;
using Rhino.DocObjects;
namespace examples_cs
{
public class MeshVolumeCommand : Command
{
public override string EnglishName { get { return "csMeshVolume"; } }
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
var gm = new GetObject();
gm.SetCommandPrompt("Select solid meshes for volume calculation");
gm.GeometryFilter = ObjectType.Mesh;
gm.GeometryAttributeFilter = GeometryAttributeFilter.ClosedMesh;
gm.SubObjectSelect = false;
gm.GroupSelect = true;
gm.GetMultiple(1, 0);
if (gm.CommandResult() != Result.Success)
return gm.CommandResult();
double volume = 0.0;
double volume_error = 0.0;
foreach (var obj_ref in gm.Objects())
{
if (obj_ref.Mesh() != null)
{
var mass_properties = VolumeMassProperties.Compute(obj_ref.Mesh());
if (mass_properties != null)
{
volume += mass_properties.Volume;
volume_error += mass_properties.VolumeError;
}
}
}
RhinoApp.WriteLine("Total volume = {0:f} (+/- {1:f})", volume, volume_error);
return Result.Success;
}
}
}
Python
from Rhino.Input.Custom import *
from Rhino.DocObjects import ObjectType
from Rhino.Geometry import *
from Rhino.Commands import Result
def RunCommand():
gm = GetObject()
gm.SetCommandPrompt("Select solid meshes for volume calculation")
gm.GeometryFilter = ObjectType.Mesh
gm.GeometryAttributeFilter = GeometryAttributeFilter.ClosedMesh
gm.SubObjectSelect = False
gm.GroupSelect = True
gm.GetMultiple(1, 0)
if gm.CommandResult() != Result.Success:
return gm.CommandResult()
volume = 0.0
volume_error = 0.0
for obj_ref in gm.Objects():
if obj_ref.Mesh() != None:
mass_properties = VolumeMassProperties.Compute(obj_ref.Mesh())
if mass_properties != None:
volume += mass_properties.Volume
volume_error += mass_properties.VolumeError
print "Total volume = {0:f} (+/- {1:f})".format(volume, volume_error)
return Result.Success
if __name__ == "__main__":
RunCommand()
Supported in: 6.0.16224.21491, 5D58w
VolumeMassProperties Class
Compute Overload
Rhino.Geometry Namespace