P_Rhino_Geometry_VolumeMassProperties_VolumeError - mcneel/rhinocommon-api-docs GitHub Wiki
Gets the uncertainty in the volume calculation.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0
C#
public double VolumeError { get; }
VB
Public ReadOnly Property VolumeError As Double
Get
Type: Double
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