Operator Reference

volume_object_model_3d_relative_to_planeT_volume_object_model_3d_relative_to_planeVolumeObjectModel3dRelativeToPlaneVolumeObjectModel3dRelativeToPlanevolume_object_model_3d_relative_to_plane (Operator)

volume_object_model_3d_relative_to_planeT_volume_object_model_3d_relative_to_planeVolumeObjectModel3dRelativeToPlaneVolumeObjectModel3dRelativeToPlanevolume_object_model_3d_relative_to_plane — Calculate the volume of a 3D object model.

Signature

volume_object_model_3d_relative_to_plane( : : ObjectModel3D, Plane, Mode, UseFaceOrientation : Volume)

Herror T_volume_object_model_3d_relative_to_plane(const Htuple ObjectModel3D, const Htuple Plane, const Htuple Mode, const Htuple UseFaceOrientation, Htuple* Volume)

void VolumeObjectModel3dRelativeToPlane(const HTuple& ObjectModel3D, const HTuple& Plane, const HTuple& Mode, const HTuple& UseFaceOrientation, HTuple* Volume)

static HTuple HObjectModel3D::VolumeObjectModel3dRelativeToPlane(const HObjectModel3DArray& ObjectModel3D, const HPoseArray& Plane, const HTuple& Mode, const HTuple& UseFaceOrientation)

double HObjectModel3D::VolumeObjectModel3dRelativeToPlane(const HPose& Plane, const HString& Mode, const HString& UseFaceOrientation) const

double HObjectModel3D::VolumeObjectModel3dRelativeToPlane(const HPose& Plane, const char* Mode, const char* UseFaceOrientation) const

double HObjectModel3D::VolumeObjectModel3dRelativeToPlane(const HPose& Plane, const wchar_t* Mode, const wchar_t* UseFaceOrientation) const   ( Windows only)

static void HOperatorSet.VolumeObjectModel3dRelativeToPlane(HTuple objectModel3D, HTuple plane, HTuple mode, HTuple useFaceOrientation, out HTuple volume)

static HTuple HObjectModel3D.VolumeObjectModel3dRelativeToPlane(HObjectModel3D[] objectModel3D, HPose[] plane, HTuple mode, HTuple useFaceOrientation)

double HObjectModel3D.VolumeObjectModel3dRelativeToPlane(HPose plane, string mode, string useFaceOrientation)

def volume_object_model_3d_relative_to_plane(object_model_3d: MaybeSequence[HHandle], plane: Sequence[Union[int, float]], mode: MaybeSequence[str], use_face_orientation: MaybeSequence[str]) -> Sequence[float]

def volume_object_model_3d_relative_to_plane_s(object_model_3d: MaybeSequence[HHandle], plane: Sequence[Union[int, float]], mode: MaybeSequence[str], use_face_orientation: MaybeSequence[str]) -> float

Description

volume_object_model_3d_relative_to_planevolume_object_model_3d_relative_to_planeVolumeObjectModel3dRelativeToPlaneVolumeObjectModel3dRelativeToPlanevolume_object_model_3d_relative_to_plane calculates the volume under the faces of a 3D object model relative to a plane. The plane is defined by the x-y plane of the pose given in PlanePlanePlaneplaneplane.

For ObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d, a triangulation or a list of polygons must be available. With default settings, if the mesh is watertight and ordered, the operator calculates the actual volume of the 3D object model. To also cover cases where the mesh is not closed or the faces are not ordered consistently, the calculation of the volume can be influenced with the parameters ModeModeModemodemode and UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation.

How the volume is calculated:

First, the operator calculates the volume of the prisms that are constructed by projecting each face onto the plane.

The individual volumes of the prisms can be positive or negative depending on the orientation of the face (away or towards the plane) or the location of the face (above or below the plane). This can be controlled with the parameter UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation.

After that, the volumes of the prisms are added up depending on the parameter ModeModeModemodemode.

The volume returned in VolumeVolumeVolumevolumevolume is the absolute value of the calculated sum.

How to set the parameters:

ModeModeModemodemode can be set to the following options:

'signed' (default)

The volumes above and below the plane are added.

'unsigned'

The volume below the plane is subtracted from the volume above the plane.

'positive'

Only faces above the plane are taken into account.

'negative'

Only faces below the plane are taken into account.

UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation can be set to the following options:

'true' (default)

Use the orientation of the faces relative to the plane. A face points away from the plane if the corner points are ordered clockwise when viewed from the plane. The volume under a face is considered positive if the orientation of the face is away from the plane. In contrast, it is considered negative if the orientation of the face is towards the plane.

'false'

The volume under a face is considered positive if the face is located above the plane. In contrast, it is considered negative if the face is located below the plane.

For example, with the default combination (ModeModeModemodemode: 'signed'"signed""signed""signed""signed", UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation: 'true'"true""true""true""true"), you can approximate the real volume of a closed object. In this case, the PlanePlanePlaneplaneplane is still required, but does not change the resulting volume.

Example: (A) ModeModeModemodemode: 'signed'"signed""signed""signed""signed", UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation: 'true'"true""true""true""true": (B) ModeModeModemodemode: 'signed'"signed""signed""signed""signed", UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation: 'false'"false""false""false""false": (C) ModeModeModemodemode: 'negative'"negative""negative""negative""negative":

Attention

The calculation of the volume might be numerically unstable in case of a large distance between the plane and the object (approx. distance > 10000 times the object diameter).

Execution Information

  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).
  • Multithreading scope: global (may be called from any thread).
  • Processed without parallelization.

Parameters

ObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d (input_control)  object_model_3d(-array) HObjectModel3D, HTupleMaybeSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle of the 3D object model.

PlanePlanePlaneplaneplane (input_control)  pose(-array) HPose, HTupleSequence[Union[int, float]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Pose of the plane.

Default: [0,0,0,0,0,0,0]

ModeModeModemodemode (input_control)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Method to combine volumes laying above and below the reference plane.

Default: 'signed' "signed" "signed" "signed" "signed"

List of values: 'negative'"negative""negative""negative""negative", 'positive'"positive""positive""positive""positive", 'signed'"signed""signed""signed""signed", 'unsigned'"unsigned""unsigned""unsigned""unsigned"

UseFaceOrientationUseFaceOrientationUseFaceOrientationuseFaceOrientationuse_face_orientation (input_control)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Decides whether the orientation of a face should affect the resulting sign of the underlying volume.

Default: 'true' "true" "true" "true" "true"

List of values: 'false'"false""false""false""false", 'true'"true""true""true""true"

VolumeVolumeVolumevolumevolume (output_control)  number(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Absolute value of the calculated volume.

Number of elements: Volume == ObjectModel3D

Example (HDevelop)

gen_box_object_model_3d ([0,0,0,0,0,0,0],3,2,1, ObjectModel3D)
convex_hull_object_model_3d (ObjectModel3D, ObjectModel3DConvexHull)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHull,\
                                          [0,0,0,0,0,0,0], 'signed',\
                                          'true', Volume)

Result

volume_object_model_3d_relative_to_planevolume_object_model_3d_relative_to_planeVolumeObjectModel3dRelativeToPlaneVolumeObjectModel3dRelativeToPlanevolume_object_model_3d_relative_to_plane returns 2 ( H_MSG_TRUE) if all parameters are correct. If necessary, an exception is raised.

Possible Predecessors

read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dread_object_model_3d, xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d, select_points_object_model_3dselect_points_object_model_3dSelectPointsObjectModel3dSelectPointsObjectModel3dselect_points_object_model_3d

Possible Successors

project_object_model_3dproject_object_model_3dProjectObjectModel3dProjectObjectModel3dproject_object_model_3d, object_model_3d_to_xyzobject_model_3d_to_xyzObjectModel3dToXyzObjectModel3dToXyzobject_model_3d_to_xyz, select_object_model_3dselect_object_model_3dSelectObjectModel3dSelectObjectModel3dselect_object_model_3d

See also

area_object_model_3darea_object_model_3dAreaObjectModel3dAreaObjectModel3darea_object_model_3d

Module

3D Metrology