parseNurbsGeometry method

dynamic parseNurbsGeometry(
  1. dynamic geoNode
)

Implementation

parseNurbsGeometry( geoNode ) {

	if ( NURBSCurve == null ) {

		print( 'THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.' );
		return new BufferGeometry();

	}

	var order = int.parse( geoNode.Order );

	if ( order == null ) {

		print( 'THREE.FBXLoader: Invalid Order ${geoNode.Order} given for geometry ID: ${geoNode.id}' );
		return BufferGeometry();

	}

	var degree = order - 1;

	var knots = geoNode.KnotVector.a;
	var controlPoints = [];
	var pointsValues = geoNode.Points.a;

	for ( var i = 0, l = pointsValues.length; i < l; i += 4 ) {

		controlPoints.add( Vector4().fromArray( pointsValues, i ) );

	}

	var startKnot, endKnot;

	if ( geoNode.Form == 'Closed' ) {

		controlPoints.add( controlPoints[ 0 ] );

	} else if ( geoNode.Form == 'Periodic' ) {

		startKnot = degree;
		endKnot = knots.length - 1 - startKnot;

		for ( var i = 0; i < degree; ++ i ) {

			controlPoints.add( controlPoints[ i ] );

		}

	}

	var curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot );
	var points = curve.getPoints( controlPoints.length * 12 );

	return new BufferGeometry().setFromPoints( points );

}