Geometry.GetBoundingCapsule
 
 
 

Geometry.GetBoundingCapsule

Introduced

v5.0

Description

Returns the center and extents of a bounding capsule of the Geometry object. If an input transform is specified, it is applied to the Geometry before the bounding capsule is calculated.

C# Syntax

Object Geometry.GetBoundingCapsule( siVolumeCenterMethod in_centerMethod, siBoundingCapsuleMethod in_axisMethod, Object in_pXfoObjectToBCapsuleSpace );

Scripting Syntax

oArray = Geometry.GetBoundingCapsule( [Type], [Type], [Transform] );

Return Value

1-dimensional Array containing five values: the X, Y and Z coordinates of the center, followed by the length of the central cylinder (excluding the capping hemispheres) and the radius of the capping hemispheres and cylinder.

Parameters

Parameter Type Description
Type siVolumeCenterMethod The technique used to calculate the center of the bounding capsule

Default Value: siVolumeCenterMethodBBoxCenter

Type siBoundingCapsuleMethod The technique used to calculate the axis of the bounding capsule

Default Value: siBoundingCapsuleMethodBestAxis

Transform SITransformation Transform to be applied to the Geometry before the bounding capsule is calculated

Examples

1. JScript Example

/* 
        Example using no input transform and default parameters
*/
// Create and move (rotate and translate) a torus
NewScene( null, false ) ;
var oTorus = ActiveSceneRoot.AddGeometry( "Torus", "MeshSurface" ) ;
SelectObj( oTorus ) ;
Rotate(null, 45, 0, 0, siAbsolute, siPivot, siObj, siX, null, null, null, null, null, null, null, 0, null) ;
Translate(null, 3, 2, 1, siAbsolute, siPivot, siObj, siX, null, null, null, null, null, null, null, null, null, 0, null) ;
// Find the bounding capsule
var vba = new VBArray( oTorus.ActivePrimitive.Geometry.GetBoundingCapsule() ) ;
var jsa = vba.toArray() ;
// Report the (local) center and radius
Application.LogMessage( "center:"  + jsa[0] + ", " + jsa[1] + ", " + jsa[2] ) ;
Application.LogMessage( "length:" + jsa[3] ) ;
Application.LogMessage( "radius:" + jsa[4] ) ;

2. JScript Example

/* 
        Example using an input transform to preserve scaling and non-default parameters
*/
// Create and move (rotate and translate) a torus
NewScene( null, false ) ;
var oTorus = ActiveSceneRoot.AddGeometry( "Torus", "MeshSurface" ) ;
SelectObj( oTorus ) ;
Scale(null, 0.5, 0.5, 1, siAbsolute, siGlobal, siObj, siY, null, null, null, null, null, null, null, 0, null) ;
oTransform = oTorus.Kinematics.Local.Transform ;
// Find the bounding capsule
var vba = new VBArray( oTorus.ActivePrimitive.Geometry.GetBoundingCapsule( siVolumeCenterMethodCOG, siBoundingCapsuleMethodXAxis, oTransform) ) ;
var jsa = vba.toArray() ;
// Report the (local) center and radius
Application.LogMessage( "center:" + jsa[0] + ", " + jsa[1] + ", " + jsa[2] ) ;
Application.LogMessage( "height:" + jsa[3] ) ;
Application.LogMessage( "radius:" + jsa[4] ) ;
// Build a capsule that shows the bounding volume
var oSphere = ActiveSceneRoot.AddPrimitive("Sphere" ) ;
oSphere.radius = jsa[4] ;
oSphere.PosX = jsa[0] + 0.5*jsa[3];
oSphere.PosY = jsa[1] ;
oSphere.PosZ = jsa[2] ;
var oSphere2 = ActiveSceneRoot.AddPrimitive("Sphere" ) ;
oSphere2.radius = jsa[4] ;
oSphere2.PosX = jsa[0] - 0.5*jsa[3];
oSphere2.PosY = jsa[1] ;
oSphere2.PosZ = jsa[2] ;
var oCylinder = ActiveSceneRoot.AddPrimitive("Cylinder" ) ;
oCylinder.radius = jsa[4] ;
oCylinder.height = jsa[3] ;
oCylinder.PosX = jsa[0] ;
oCylinder.PosY = jsa[1] ;
oCylinder.PosZ = jsa[2] ;
Rotate(oCylinder, 0, 0, 90.0, siAbsolute, siGlobalCOG, siObj, siXYZ, null, null, null, null, null, null, null, 0, null);
// Rotate them to align graphically
var oColl = new ActiveXObject("XSI.Collection") ;
oColl.Add( oCylinder ) ;
oColl.Add( oSphere ) ;
oColl.Add( oSphere2 ) ;
Rotate( oColl , 0, 90.0, 0, siRelative, siGlobalCOG, siObj, siXYZ, null, null, null, null, null, null, null, 0, null);
// Expected results:
//INFO : center:0, -1.734723475976807e-18, 2.0816681711721685e-16
//INFO : height:8
//INFO : radius:4

See Also

Geometry.GetBoundingBox Geometry.GetBoundingSphere X3DObject.GetBoundingBox GetBBox