XSIMath.MapObjectPositionToObjectSpace

Description

Converts a position described in an ObjectSpace to a position in a different ObjectSpace.

C# Syntax

SIVector3 XSIMath.MapObjectPositionToObjectSpace( SITransformation in_pObjectSpace, SITransformation in_pSpace, SIVector3 in_pPosition );

Scripting Syntax

oReturn = XSIMath.MapObjectPositionToObjectSpace( ObjectSpace, Space, Position );

Return Value

SIVector3 (position)

Parameters

Parameter Type Description
ObjectSpace SITransformation ObjectSpace in which the position is described.
Space SITransformation Space in which we want to convert the position .
Position SIVector3 Position to convert.

Examples

1. JScript Example

var	oCube = ActiveSceneRoot.AddGeometry("Cube","MeshSurface");
oCube.Kinematics.Global.Parameters("posy").value = 4.0;
oCube.Kinematics.Global.Parameters("posx").value = 2.0;
var	oGrid = ActiveSceneRoot.AddGeometry("Grid", "MeshSurface");
oGrid.Kinematics.Global.Parameters("posy").value = -2.0;
if( Above(oCube, oGrid) )
	 Application.LogMessage ( "The Cube is above the Grid" );
else
	 Application.LogMessage ( "The Cube is not above the Grid" );
//Function that returns true if in_obj1 is above in_obj2.
//Which means that all " y" values of in_obj1 vertices relative to in_obj2 are bigger
//than in_obj2 "y" values
function  Above(in_obj1, in_obj2)
{
	 var l_trans1, l_trans2, l_pos, l_biggesty;
	 l_biggesty = 0;
	 var oGeometry2 = in_obj2.activeprimitive.geometry;
	 var l_nbPoints = oGeometry2.Points.Count;
	 //Determine the upper position on in_obj2
	 for(var i = 0; i < l_nbPoints; i++) 
	 { 
		if (oGeometry2.Points(i).position.y > l_biggesty)
			l_biggesty = oGeometry2.Points(i).position.y;
	 }
	 l_trans1 = in_obj1.Kinematics.Global.Transform;
	 l_trans2 = in_obj2.Kinematics.Global.Transform;
	 var oGeometry1 = in_obj1.activeprimitive.geometry;
	 l_nbPoints = oGeometry1.Points.Count;
	 //Determine if all vertices of in_obj1 are above in_obj2
	 for(var i = 0; i < l_nbPoints; i++) 
	 { 
		l_pos = oGeometry1.Points(i).position;
		l_pos = XSIMath.MapObjectPositionToObjectSpace(l_trans1, l_trans2, l_pos);;
		if( l_pos.y < l_biggesty )
			return false;
	 }
	return true;
}
//OUTPUT
//INFO : The Cube is above the Grid

2. VBScript Example

set oRoot = Application.ActiveProject.ActiveScene.Root
	set oCube = oRoot.AddGeometry("Cube","MeshSurface")
	oCube.Kinematics.Global.Parameters("posy").value = 4.0
	oCube.Kinematics.Global.Parameters("posx").value = 2.0
	set oGrid = oRoot.AddGeometry("Grid", "MeshSurface")
	oGrid.Kinematics.Global.Parameters("posy").value = -2.0
	if Above(oCube, oGrid) then
			Application.LogMessage "The Cube is above the Grid"
	else
			Application.LogMessage "The Cube is not above the Grid"
	end if
	'Function that returns true if in_obj1 is above in_obj2.
	'Which means that all " y" values of in_obj1 vertices relative to in_obj2 are bigger
	'than in_obj2 "y" values
	Function Above(in_obj1, in_obj2)
		Dim l_trans1, l_trans2, l_pos, l_biggesty
		l_biggesty = 0
		'Determine the upper position on in_obj2
		for each p in in_obj2.activeprimitive.geometry.points
			if p.position.y > l_biggesty then
				l_biggesty = p.position.y
			end if
		next
		set l_trans1 = in_obj1.Kinematics.Global.Transform
		set l_trans2 = in_obj2.Kinematics.Global.Transform
		'Determine if all vertices of in_obj1 are above in_obj2
		for each p in in_obj1.activeprimitive.geometry.points
			set l_pos = p.position
			set l_pos = xsimath.MapObjectPositionToObjectSpace(l_trans1, l_trans2, l_pos)
			if l_pos.y < l_biggesty then
				Above = False
				Exit Function
			end if
		next
		Above = True
	End Function