NurbsCurve.EvaluatePositionFromPercentage operator

Description

Returns a 3D vector containing the position, tangent in U direction, normal and bi-normal at a given percentage along the curve.

C# Syntax

Object NurbsCurve.EvaluatePositionFromPercentage( Double in_dPercentage );

Scripting Syntax

oArray = NurbsCurve.EvaluatePositionFromPercentage( Percentage );

Return Value

A 1-dimensional Array containing the position, tangent, normal and bi-normal.

Parameters

Parameter Type Description
Percentage Double The percentange (with values between 0.0 and 100.0 inclusive) of the length of the curve at which we want to evaluate the curve.

Examples

1. VBScript Example

set oRoot = Application.ActiveProject.ActiveScene.Root

set oArc = oRoot.AddGeometry( "Arc", "NurbsCurve" )

aValues = oArc.ActivePrimitive.Geometry.Curves(0).EvaluatePositionFromPercentage( 70.0 )

set oPosition = aValues(0)

logmessage "The position at 70%% of the curve is x :" &  oPosition.x	& " y: " & oPosition.y & " z: " & oPosition.z

set oUTangent = aValues(1)

logmessage "The tangent in U at 70%% of the curve is x :" & oUTangent.x & " y: " & oUTangent.y & " z: " & oUTangent.z

set oNormal = aValues(2)

logmessage "The normal at 70%% of the curve is x :" & oNormal.x & " y: " & oNormal.y & " z: " & oNormal.z

set oBiNormal = aValues(3)

logmessage "The bi-normal at 70%% of the curve is x :" & oBiNormal.x & " y: " & oBiNormal.y & " z: " & oBiNormal.z

2. JScript Example

SICreateCurve("crvlist", 3, 0);

SIAddPointOnCurveAtEnd("crvlist", -3.951, 0.000, 1.651, false);

SIAddPointOnCurveAtEnd("crvlist", -3.214, 0.000, -1.884, false);

SIAddPointOnCurveAtEnd("crvlist", -0.592, 0.000, 1.146, false);

SIAddPointOnCurveAtEnd("crvlist", 1.660, 0.000, 2.856, false);

SIAddPointOnCurveAtEnd("crvlist", 3.272, 0.000, -1.224, false);

GetNurbsCurveListInfo( GetValue("crvlist") );

function GetNurbsCurveListInfo( oCurveList )

{

	var oPosition, oUTangent, oNormal, oBiNormal;

	var p = XSIMath.CreateVector3();

	oGeometry = oCurveList.ActivePrimitive.Geometry;

	// Display curve list info

	LogMessage( "    Name: " + oCurveList.Name );

	LogMessage( "FullName: " + oCurveList.FullName );

	LogMessage( "    Type: " + oCurveList.Type );

	// Display geometry info:

	LogMessage( "      Length: " + oGeometry.Length );

	LogMessage( "      Closed: " + oGeometry.Closed );

	LogMessage( "   Nb Points: " + oGeometry.Points.Count );

	LogMessage( "  Nb Control: " + oGeometry.ControlPoints.Count );

	LogMessage( "   Nb Curves: " + oGeometry.Curves.Count );

	LogMessage( "   Nb Facets: " + oGeometry.Facets.Count );

	LogMessage( " Nb Segments: " + oGeometry.Segments.Count );

	LogMessage( " Nb Clusters: " + oGeometry.Clusters.Count );

	LogMessage( "Nb Triangles: " + oGeometry.Triangles.Count ); //crashes Softimage

	// Get the lower-level stuff

	for ( i = 0; i < oGeometry.Curves.Count; i++ ) 

	{

		LogMessage( "--- Curve["+i+"] ---" );

		oCurve = oGeometry.Curves(i);

		// Find the midpont along the curve

		var aValues = new VBArray(oCurve.EvaluatePositionFromPercentage( 50.0 ));

		var oPosition = aValues.getItem(0);

		var oUTangent = aValues.getItem(1);

		var oNormal = aValues.getItem(2);

		var oBiNormal = aValues.getItem(3);

		LogMessage( " Position[x,y,z]: " + oPosition.x +","+ oPosition.y +","+ oPosition.z );

		LogMessage( "U Tangent[x,y,z]: " + oUTangent.x +","+ oUTangent.y +","+ oUTangent.z );

		LogMessage( "   Normal[x,y,z]: " + oNormal.x   +","+ oNormal.y +","+ oNormal.z   );

		LogMessage( "Bi Normal[x,y,z]: " + oBiNormal.x +","+ oBiNormal.y +","+ oBiNormal.z );

		// Display the info

		LogMessage( "   Nb Knots: " + oCurve.Knots.Count );

		LogMessage( "   Degree: "   + oCurve.Degree      );

	}

	return(0);

}

See Also

NurbsCurve.GetPercentageFromU NurbsCurve.GetUFromPercentage