﻿ Object Model: NurbsCurve.EvaluatePositionFromPercentage

NurbsCurve.EvaluatePositionFromPercentage

## NurbsCurve.EvaluatePositionFromPercentage

### 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); } ```