<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersive'  version='3.0 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.0.xsd ' >
<head>
<component level='4name='NURBS'/>
<meta name='titlecontent=' NurbsPrototypes.x3d '/>
<meta name='descriptioncontent='Non-Uniform Rational B-Spline (NURBS) prototype definitions.'/>
<meta name='creatorcontent='Original blaxxun definitions heavily modified, X3D specification revisions by Don Brutzman, Charles Adams, Jeffrey Weekley and Alan Shaffer NPS.'/>
<meta name='translatorcontent='Don Brutzman'/>
<meta name='createdcontent='1 January 2000'/>
<meta name='translatedcontent='18 March 2002'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name=' warning content=' Under development for final version of X3D NURBS nodes '/>
<meta name=' warning content=' Not all NURBS nodes are prototyped here, and these implementations are not yet fully demonstrated. '/>
<meta name='referencecontent=' https://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/nurbs.html '/>
<meta name='referencecontent=' http://www.blaxxun.com/vrml/protos/nurbs.wrl '/>
<meta name='referencecontent=' NurbsPrototypesOriginal.x3d.txt '/>
<meta name='referencecontent=' javadoc/index.html '/>
<meta name='subjectcontent='NURBS Prototypes'/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPrototypes.x3d '/>
<meta name='generatorcontent=' Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../../license.html'/>
</head>
<!-- -->
<Scene>
<WorldInfo title='NurbsPrototypes.x3d'/>
<ProtoDeclare name='Contour2Dappinfo='Contour2D groups a set of curve segments to a composite contour Children segments form a closed loop with first point of first child repeated as last point of last child and last point of segment repeated as first point of consecutive segment Children segments are type NurbsCurve2D or Polyline2D enumerated in consecutive order of contour topology.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#Contour2D ' >
<ProtoInterface>
<field name='addChildrentype='MFNodeaccessType='inputOnly'
 appinfo='[NurbsCurve|ContourPolyline2D]' />

<field name='removeChildrentype='MFNodeaccessType='inputOnly'
 appinfo='[NurbsCurve|ContourPolyline2D]' />

<field name='childrentype='MFNodeaccessType='initializeOnly'
 appinfo='[NurbsCurve|ContourPolyline2D]' >
<!-- default is empty node array -->
</field>
<field name='set_childrentype='MFNodeaccessType='inputOnly'/>
<field name='children_changedtype='MFNodeaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Group DEF='Contour2DGroup'>
<IS>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='set_childrenprotoField='set_children'/>
<connect nodeField='children_changedprotoField='children_changed'/>
</IS>
</Group>
<!-- consider adding a Script here to check that the children nodes are solely of type NurbsCurve2D and/or ContourPolyline2D -->
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='ContourPolyline2Dappinfo='ContourPolyline2D defines a linear curve segment as part of a trimming contour in u-v domain of a surface.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#ContourPolyline2D ' >
<ProtoInterface>
<field name='pointtype='MFVec2faccessType='initializeOnly'>
<!-- Specification definition: MFVec2f [in,out] point [] (-∞,∞) but we cannot match accessType inputOutput since there is no VRML 97 field that is MFVec2f [in,out]. Hence a known limitation. -->
</field>
<field name='set_pointtype='MFVec2faccessType='inputOnly'/>
<field name='point_changedtype='MFVec2faccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- Typical initial approach: group all body nodes together, since rendering is only affected by first Prototype child. Then, map interface field(s) to dummy-node field(s) so that a Script can USE and then manipulate them. -->
<Group DEF='ContourPolyline2DGroup'>
<Switch DEF='HideDummywhichChoice='-1'>
<Shape>
<Extrusion DEF='PointHolder'>
<IS>
<connect nodeField='crossSectionprotoField='point'/>
</IS>
</Extrusion>
</Shape>
</Switch>
<Script DEF='ScriptContourPolyline2D-missingBodydirectOutput='true'>
<field name='PointHoldertype='SFNodeaccessType='initializeOnly'>
<Extrusion USE=' PointHolder'/>
</field>
</Script>
</Group>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='CoordinateDoubleappinfo='CoordinateDouble builds geometry using a set of 3D coordinates. CoordinateDouble is used by IndexedFaceSet IndexedLineSet LineSet and PointSet. CoordinateDouble is also used by NurbsPositionInterpolator and NurbsOrientationInterpolator.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#CoordinateDouble ' >
<ProtoInterface>
<field name='pointtype='MFVec3faccessType='initializeOnly'
 appinfo='Substitute MFVec3f for MFVec3d to provide VRML 97 support' >
<!-- Specification definition: MFVec3d [in,out] point [] (-∞,∞) -->
</field>
<field name='set_pointtype='MFVec3faccessType='inputOnly'/>
<field name='point_changedtype='MFVec3faccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Coordinate>
<IS>
<connect nodeField='pointprotoField='point'/>
<connect nodeField='set_pointprotoField='set_point'/>
<connect nodeField='point_changedprotoField='point_changed'/>
</IS>
</Coordinate>
<!-- no metadata holder, since there is no exposedField SFNode in VRML 97. metadata SFNode simply sits in the ProtoInterface. Run-time instantiation support may vary. -->
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsCurveappinfo='NurbsCurve is a 3D curve analogous to NurbsPatchSurface. The container controlPoint field is a Coordinate or CoordinateDouble node.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsCurve ' >
<ProtoInterface>
<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' >
<Coordinate containerField='controlPoint'/>
</field>
<field name='tessellationtype='SFInt32value='0accessType='initializeOnly'
 appinfo='range (-∞,∞)' />

<field name='weighttype='MFDoubleaccessType='initializeOnly'
 appinfo='range (0,∞)' >
<!-- default is empty array -->
</field>
<field name='closedtype='SFBoolvalue='falseaccessType='initializeOnly'/>
<field name='knottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='ordertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_tessellationtype='SFInt32accessType='inputOnly'/>
<field name='tessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- ROUTE information for NurbsCurveLineSet node:  [from NurbsCurveScript.pointIndex to set_coordIndex ] -->
<IndexedLineSet DEF='NurbsCurveLineSet'>
<!-- ROUTE information for NurbsCurveCoord node:  [from NurbsCurveScript.point to set_point ] -->
<Coordinate DEF='NurbsCurveCoord'/>
</IndexedLineSet>
<!-- only first child of ProtoBody renders -->
<Switch whichChoice='-1'>
<Shape>
<IndexedFaceSet>
<IS>
<connect nodeField='coordprotoField='controlPoint'/>
</IS>
</IndexedFaceSet>
</Shape>
</Switch>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<!-- ROUTE information for NurbsCurveScript node:  [from point to NurbsCurveCoord.set_point ] [from pointIndex to NurbsCurveLineSet.set_coordIndex ] -->
<Script DEF='NurbsCurveScriptdirectOutput='truemustEvaluate='true'
  url=' "NurbsCurve.class" "https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsCurve.class" ' >
<field name='controlPointtype='SFNodeaccessType='initializeOnly'/>
<field name='tessellationtype='SFInt32accessType='initializeOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'/>
<field name='closedtype='SFBoolaccessType='initializeOnly'/>
<field name='knottype='MFDoubleaccessType='initializeOnly'/>
<field name='ordertype='SFInt32accessType='initializeOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_tessellationtype='SFInt32accessType='inputOnly'/>
<field name='tessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='pointtype='MFVec3faccessType='outputOnly'/>
<field name='pointIndextype='MFInt32accessType='outputOnly'/>
<IS>
<connect nodeField='controlPointprotoField='controlPoint'/>
<connect nodeField='tessellationprotoField='tessellation'/>
<connect nodeField='weightprotoField='weight'/>
<connect nodeField='closedprotoField='closed'/>
<connect nodeField='knotprotoField='knot'/>
<connect nodeField='orderprotoField='order'/>
<connect nodeField='set_controlPointprotoField='set_controlPoint'/>
<connect nodeField='controlPoint_changedprotoField='controlPoint_changed'/>
<connect nodeField='set_tessellationprotoField='set_tessellation'/>
<connect nodeField='tessellation_changedprotoField='tessellation_changed'/>
<connect nodeField='set_weightprotoField='set_weight'/>
<connect nodeField='weight_changedprotoField='weight_changed'/>
</IS>
</Script>
< ROUTE  fromNode=' NurbsCurveScript' fromField='point' toNode=' NurbsCurveCoord' toField='set_point'/>
< ROUTE  fromNode=' NurbsCurveScript' fromField='pointIndex' toNode=' NurbsCurveLineSet' toField='set_coordIndex'/>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsCurve2Dappinfo='NurbsCurve2D defines a trimming segment that is part of trimming contour in u-v domain of surface NurbsCurve2D forming a closed contour may be used as Contour2D node.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsCurve2D ' >
<ProtoInterface>
<field name='controlPointtype='MFVec2faccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='tessellationtype='SFInt32value='0accessType='initializeOnly'
 appinfo='range (-∞,∞)' />

<field name='weighttype='MFDoubleaccessType='initializeOnly'
 appinfo='range (0,∞)' >
<!-- default is empty array -->
</field>
<field name='knottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='ordertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='closedtype='SFBoolvalue='falseaccessType='initializeOnly'/>
<field name='set_controlPointtype='MFVec2faccessType='inputOnly'/>
<field name='controlPoint_changedtype='MFVec2faccessType='outputOnly'/>
<field name='set_tessellationtype='SFInt32accessType='inputOnly'/>
<field name='tessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Group DEF='NurbsCurve2DGroup'/>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsOrientationInterpolatorappinfo='NurbsOrientationInterpolator describes a 3D NURBS Curve and outputs interpolated orientation values. The SFNode controlPoint field can contain a single Coordinate or CoordinateDouble node.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsOrientationInterpolator ' >
<ProtoInterface>
<field name='set_fractiontype='SFFloataccessType='inputOnly'
 appinfo='range (-∞,∞)' />

<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' >
<Coordinate containerField='controlPoint'/>
</field>
<field name='knottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='ordertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range (2,∞)' />

<field name='weighttype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='value_changedtype='SFRotationaccessType='outputOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_knottype='MFDoubleaccessType='inputOnly'/>
<field name='knot_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='set_ordertype='SFInt32accessType='inputOnly'/>
<field name='order_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<Script DEF='NurbsOrientationInterpolatorScriptdirectOutput='truemustEvaluate='true'
  url=' "NurbsOrientationInterpolator.class" "https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsOrientationInterpolator.class" ' >
<field name='set_fractiontype='SFFloataccessType='inputOnly'/>
<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' />

<field name='knottype='MFDoubleaccessType='initializeOnly'/>
<field name='ordertype='SFInt32accessType='initializeOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'/>
<field name='value_changedtype='SFRotationaccessType='outputOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_knottype='MFDoubleaccessType='inputOnly'/>
<field name='knot_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='set_ordertype='SFInt32accessType='inputOnly'/>
<field name='order_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<IS>
<connect nodeField='set_fractionprotoField='set_fraction'/>
<connect nodeField='controlPointprotoField='controlPoint'/>
<connect nodeField='knotprotoField='knot'/>
<connect nodeField='orderprotoField='order'/>
<connect nodeField='weightprotoField='weight'/>
<connect nodeField='value_changedprotoField='value_changed'/>
<connect nodeField='set_controlPointprotoField='set_controlPoint'/>
<connect nodeField='controlPoint_changedprotoField='controlPoint_changed'/>
<connect nodeField='set_knotprotoField='set_knot'/>
<connect nodeField='knot_changedprotoField='knot_changed'/>
<connect nodeField='set_orderprotoField='set_order'/>
<connect nodeField='order_changedprotoField='order_changed'/>
<connect nodeField='set_weightprotoField='set_weight'/>
<connect nodeField='weight_changedprotoField='weight_changed'/>
</IS>
</Script>
<!-- Nonrendering holder node for controlPoint Coordinate data -->
<Shape>
<PointSet>
<IS>
<connect nodeField='coordprotoField='controlPoint'/>
</IS>
</PointSet>
</Shape>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsPatchSurfaceappinfo='NurbsPatchSurface defines a contiguous 3D Non- rational Uniform B-Spline (NURBS) Surface.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsPatchSurface ' >
<ProtoInterface>
<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' >
<Coordinate containerField='controlPoint'/>
</field>
<field name='texCoordtype='SFNodeaccessType='initializeOnly'>
<TextureCoordinate/>
</field>
<field name='uTessellationtype='SFInt32value='0accessType='initializeOnly'/>
<field name='vTessellationtype='SFInt32value='0accessType='initializeOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'>
<!-- default is empty array -->
</field>
<field name='solidtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='uClosedtype='SFBoolvalue='falseaccessType='initializeOnly'/>
<field name='uDimensiontype='SFInt32value='0accessType='initializeOnly'/>
<field name='uKnottype='MFDoubleaccessType='initializeOnly'>
<!-- default is empty array -->
</field>
<field name='uOrdertype='SFInt32value='3accessType='initializeOnly'/>
<field name='vClosedtype='SFBoolvalue='falseaccessType='initializeOnly'/>
<field name='vDimensiontype='SFInt32value='0accessType='initializeOnly'/>
<field name='vKnottype='MFDoubleaccessType='initializeOnly'>
<!-- default is empty array -->
</field>
<field name='vOrdertype='SFInt32value='3accessType='initializeOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_texCoordtype='SFNodeaccessType='inputOnly'/>
<field name='texCoord_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_uTessellationtype='SFInt32accessType='inputOnly'/>
<field name='uTessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_vTessellationtype='SFInt32accessType='inputOnly'/>
<field name='vTessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- ROUTE information for NurbsPatchSurfaceFaceSet node:  [from NurbsPatchSurfaceScript.coordIndex to set_coordIndex ] -->
<IndexedFaceSet DEF='NurbsPatchSurfaceFaceSetcreaseAngle='3.14solid='false'>
<IS>
<connect nodeField='texCoordprotoField='texCoord'/>
<connect nodeField='solidprotoField='solid'/>
</IS>
<!-- ROUTE information for NurbsPatchSurfaceCoordinate node:  [from NurbsPatchSurfaceScript.coord to set_point ] -->
<Coordinate DEF='NurbsPatchSurfaceCoordinate'/>
</IndexedFaceSet>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' />

<field name='texCoordtype='SFNodeaccessType='initializeOnly'/>
<field name='uTessellationtype='SFInt32accessType='initializeOnly'/>
<field name='vTessellationtype='SFInt32accessType='initializeOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'/>
<field name='solidtype='SFBoolaccessType='initializeOnly'/>
<field name='uClosedtype='SFBoolaccessType='initializeOnly'/>
<field name='uDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='uKnottype='MFDoubleaccessType='initializeOnly'/>
<field name='uOrdertype='SFInt32accessType='initializeOnly'/>
<field name='vClosedtype='SFBoolaccessType='initializeOnly'/>
<field name='vDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='vKnottype='MFDoubleaccessType='initializeOnly'/>
<field name='vOrdertype='SFInt32accessType='initializeOnly'/>
<field name='coordtype='MFVec3faccessType='outputOnly'/>
<field name='coordIndextype='MFInt32accessType='outputOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_texCoordtype='SFNodeaccessType='inputOnly'/>
<field name='texCoord_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='set_uTessellationtype='SFInt32accessType='inputOnly'/>
<field name='uTessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_vTessellationtype='SFInt32accessType='inputOnly'/>
<field name='vTessellation_changedtype='SFInt32accessType='outputOnly'/>
<IS>
<connect nodeField='controlPointprotoField='controlPoint'/>
<connect nodeField='texCoordprotoField='texCoord'/>
<connect nodeField='uTessellationprotoField='uTessellation'/>
<connect nodeField='vTessellationprotoField='vTessellation'/>
<connect nodeField='weightprotoField='weight'/>
<connect nodeField='solidprotoField='solid'/>
<connect nodeField='uClosedprotoField='uClosed'/>
<connect nodeField='uDimensionprotoField='uDimension'/>
<connect nodeField='uKnotprotoField='uKnot'/>
<connect nodeField='uOrderprotoField='uOrder'/>
<connect nodeField='vClosedprotoField='vClosed'/>
<connect nodeField='vDimensionprotoField='vDimension'/>
<connect nodeField='vKnotprotoField='vKnot'/>
<connect nodeField='vOrderprotoField='vOrder'/>
<connect nodeField='set_controlPointprotoField='set_controlPoint'/>
<connect nodeField='controlPoint_changedprotoField='controlPoint_changed'/>
<connect nodeField='set_texCoordprotoField='set_texCoord'/>
<connect nodeField='texCoord_changedprotoField='texCoord_changed'/>
<connect nodeField='set_uTessellationprotoField='set_uTessellation'/>
<connect nodeField='uTessellation_changedprotoField='uTessellation_changed'/>
<connect nodeField='set_vTessellationprotoField='set_vTessellation'/>
<connect nodeField='vTessellation_changedprotoField='vTessellation_changed'/>
<connect nodeField='set_weightprotoField='set_weight'/>
<connect nodeField='weight_changedprotoField='weight_changed'/>
</IS>
</Script>
< ROUTE  fromNode=' NurbsPatchSurfaceScript' fromField='coord' toNode=' NurbsPatchSurfaceCoordinate' toField='set_point'/>
< ROUTE  fromNode=' NurbsPatchSurfaceScript' fromField='coordIndex' toNode=' NurbsPatchSurfaceFaceSet' toField='set_coordIndex'/>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsPositionInterpolatorappinfo='NurbsPositionInterpolator describes a 3D NURBS Curve and outputs interpolated position values. The SFNode controlPoint field can contain a single Coordinate or CoordinateDouble node.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsPositionInterpolator ' >
<ProtoInterface>
<field name='set_fractiontype='SFFloataccessType='inputOnly'
 appinfo='range (-∞,∞)' />

<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' >
<Coordinate containerField='controlPoint'/>
</field>
<field name='knottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='ordertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range (2,∞)' />

<field name='weighttype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='value_changedtype='SFVec3faccessType='outputOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_knottype='MFDoubleaccessType='inputOnly'/>
<field name='knot_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='set_ordertype='SFInt32accessType='inputOnly'/>
<field name='order_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<Script DEF='NurbsPositionInterpolatorScriptdirectOutput='truemustEvaluate='true'
  url=' "NurbsPositionInterpolator.class" "https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPositionInterpolator.class" ' >
<field name='set_fractiontype='SFFloataccessType='inputOnly'/>
<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' />

<field name='knottype='MFDoubleaccessType='initializeOnly'/>
<field name='ordertype='SFInt32accessType='initializeOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'/>
<field name='value_changedtype='SFVec3faccessType='outputOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_knottype='MFDoubleaccessType='inputOnly'/>
<field name='knot_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='set_ordertype='SFInt32accessType='inputOnly'/>
<field name='order_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<IS>
<connect nodeField='set_fractionprotoField='set_fraction'/>
<connect nodeField='controlPointprotoField='controlPoint'/>
<connect nodeField='knotprotoField='knot'/>
<connect nodeField='orderprotoField='order'/>
<connect nodeField='weightprotoField='weight'/>
<connect nodeField='value_changedprotoField='value_changed'/>
<connect nodeField='set_controlPointprotoField='set_controlPoint'/>
<connect nodeField='controlPoint_changedprotoField='controlPoint_changed'/>
<connect nodeField='set_knotprotoField='set_knot'/>
<connect nodeField='knot_changedprotoField='knot_changed'/>
<connect nodeField='set_orderprotoField='set_order'/>
<connect nodeField='order_changedprotoField='order_changed'/>
<connect nodeField='set_weightprotoField='set_weight'/>
<connect nodeField='weight_changedprotoField='weight_changed'/>
</IS>
</Script>
<!-- Nonrendering holder node for controlPoint Coordinate data -->
<Shape>
<PointSet>
<IS>
<connect nodeField='coordprotoField='controlPoint'/>
</IS>
</PointSet>
</Shape>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsSetappinfo='NurbsSet collects a set of NurbsPatchSurface nodes into a common group and treats NurbsPatchSurface set as a unit during tessellation thereby enforcing tessellation continuity along borders.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsSet ' >
<ProtoInterface>
<field name='addGeometrytype='MFNodeaccessType='inputOnly'
 appinfo='[NurbsPatchSurface]' />

<field name='removeGeometrytype='MFNodeaccessType='inputOnly'
 appinfo='[NurbsPatchSurface]' />

<field name='geometrytype='MFNodeaccessType='initializeOnly'
 appinfo='[NurbsPatchSurface]' >
<!-- default is empty node array -->
</field>
<field name='tessellationScaletype='SFFloatvalue='1.0accessType='initializeOnly'
 appinfo='range (0,∞)' />

<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'
 appinfo='range (-∞,∞)' />

<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'
 appinfo='range [0,∞); [-1 -1 -1]' />

<field name='set_geometrytype='MFNodeaccessType='inputOnly'/>
<field name='geometry_changedtype='MFNodeaccessType='outputOnly'/>
<field name='set_tessellationScaletype='SFFloataccessType='inputOnly'/>
<field name='tessellationScale_changedtype='SFFloataccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Group DEF='NurbsSet'>
<IS>
<connect nodeField='addGeometryprotoField='addGeometry'/>
<connect nodeField='removeGeometryprotoField='removeGeometry'/>
<connect nodeField='geometryprotoField='geometry'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
<connect nodeField='set_geometryprotoField='set_geometry'/>
<connect nodeField='geometry_changedprotoField='geometry_changed'/>
<connect nodeField='set_tessellationScaleprotoField='set_tessellationScale'/>
<connect nodeField='tessellationScale_changedprotoField='tessellationScale_changed'/>
</IS>
</Group>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsSurfaceInterpolatorappinfo='NurbsSurfaceInterpolator describes a 3D NURBS Curve and outputs interpolated position and normal values. The SFNode controlPoint field can contain a single Coordinate or CoordinateDouble node.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsSurfaceInterpolator ' >
<ProtoInterface>
<field name='set_fractiontype='SFVec2faccessType='inputOnly'
 appinfo='range (-∞,∞)' />

<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' >
<Coordinate containerField='controlPoint'/>
</field>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='position_changedtype='SFVec3faccessType='outputOnly'/>
<field name='normal_changedtype='SFVec3faccessType='outputOnly'/>
<field name='uDimensiontype='SFInt32value='0accessType='initializeOnly'
 appinfo='range [0,∞)' />

<field name='uKnottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='uOrdertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='vDimensiontype='SFInt32value='0accessType='initializeOnly'
 appinfo='range [0,∞)' />

<field name='vKnottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='vOrdertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- ROUTE information for NurbsSurfaceInterpolatorFaceSet node:  [from NurbsSurfaceInterpolatorScript.coordIndex to set_coordIndex ] -->
<IndexedFaceSet DEF='NurbsSurfaceInterpolatorFaceSetcreaseAngle='3.14solid='false'>
<!-- ROUTE information for NurbsSurfaceInterpolatorCoordinate node:  [from NurbsSurfaceInterpolatorScript.coord to set_point ] -->
<Coordinate DEF='NurbsSurfaceInterpolatorCoordinate'/>
</IndexedFaceSet>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<field name='controlPointtype='SFNodeaccessType='initializeOnly'/>
<field name='weighttype='MFDoubleaccessType='initializeOnly'/>
<field name='uDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='uKnottype='MFDoubleaccessType='initializeOnly'/>
<field name='uOrdertype='SFInt32accessType='initializeOnly'/>
<field name='vDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='vKnottype='MFDoubleaccessType='initializeOnly'/>
<field name='vOrdertype='SFInt32accessType='initializeOnly'/>
<field name='coordtype='MFVec3faccessType='outputOnly'/>
<field name='coordIndextype='MFInt32accessType='outputOnly'/>
<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<IS>
<connect nodeField='controlPointprotoField='controlPoint'/>
<connect nodeField='weightprotoField='weight'/>
<connect nodeField='uDimensionprotoField='uDimension'/>
<connect nodeField='uKnotprotoField='uKnot'/>
<connect nodeField='uOrderprotoField='uOrder'/>
<connect nodeField='vDimensionprotoField='vDimension'/>
<connect nodeField='vKnotprotoField='vKnot'/>
<connect nodeField='vOrderprotoField='vOrder'/>
<connect nodeField='set_controlPointprotoField='set_controlPoint'/>
<connect nodeField='controlPoint_changedprotoField='controlPoint_changed'/>
<connect nodeField='set_weightprotoField='set_weight'/>
<connect nodeField='weight_changedprotoField='weight_changed'/>
</IS>
</Script>
< ROUTE  fromNode=' NurbsSurfaceInterpolatorScript' fromField='coord' toNode=' NurbsSurfaceInterpolatorCoordinate' toField='set_point'/>
< ROUTE  fromNode=' NurbsSurfaceInterpolatorScript' fromField='coordIndex' toNode=' NurbsSurfaceInterpolatorFaceSet' toField='set_coordIndex'/>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsSweptSurfaceappinfo='NurbsSweptSurface contains a crossSectionCurve [X3DNurbsControlCurveNode] and a trajectoryCurve [NurbsCurve]'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsSweptSurface ' >
<ProtoInterface>
<field name='crossSectionCurvetype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DNurbsControlCurveNode]' >
<!-- put default node here... -->
</field>
<field name='trajectoryCurvetype='SFNodeaccessType='initializeOnly'
 appinfo='[NurbsCurve]' >
<!-- put default node here... -->
</field>
<field name='ccwtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='solidtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='set_crossSectionCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='crossSectionCurve_changedtype='SFNodeaccessType='outputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='set_trajectoryCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[NurbsCurve]' />

<field name='trajectoryCurve_changedtype='SFNodeaccessType='outputOnly'
 appinfo='[NurbsCurve]' />

<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- ROUTE information for NurbsSweptSurfaceFaceSet node:  [from NurbsSweptSurfaceScript.crossSectionCurve_changed to coord ] [from NurbsSweptSurfaceScript.coordIndex to set_coordIndex ] -->
<IndexedFaceSet DEF='NurbsSweptSurfaceFaceSetcreaseAngle='3.14solid='false'>
<IS>
<connect nodeField='ccwprotoField='ccw'/>
<connect nodeField='solidprotoField='solid'/>
</IS>
<Coordinate DEF='NurbsSweptSurfaceCoordinate'/>
</IndexedFaceSet>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<field name='crossSectionCurvetype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='trajectoryCurvetype='SFNodeaccessType='initializeOnly'
 appinfo='[NurbsCurve]' />

<field name='ccwtype='SFBoolaccessType='initializeOnly'/>
<field name='solidtype='SFBoolaccessType='initializeOnly'/>
<field name='set_crossSectionCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='crossSectionCurve_changedtype='SFNodeaccessType='outputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='set_trajectoryCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[NurbsCurve]' />

<field name='trajectoryCurve_changedtype='SFNodeaccessType='outputOnly'
 appinfo='[NurbsCurve]' />

<IS>
<connect nodeField='crossSectionCurveprotoField='crossSectionCurve'/>
<connect nodeField='trajectoryCurveprotoField='trajectoryCurve'/>
<connect nodeField='ccwprotoField='ccw'/>
<connect nodeField='solidprotoField='solid'/>
<connect nodeField='set_crossSectionCurveprotoField='set_crossSectionCurve'/>
<connect nodeField='crossSectionCurve_changedprotoField='crossSectionCurve_changed'/>
<connect nodeField='set_trajectoryCurveprotoField='set_trajectoryCurve'/>
<connect nodeField='trajectoryCurve_changedprotoField='trajectoryCurve_changed'/>
</IS>
</Script>
< ROUTE  fromNode=' NurbsSweptSurfaceScript' fromField='crossSectionCurve_changed' toNode=' NurbsSweptSurfaceFaceSet' toField='coord'/>
< ROUTE  fromNode=' NurbsSweptSurfaceScript' fromField='coordIndex' toNode=' NurbsSweptSurfaceFaceSet' toField='set_coordIndex'/>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsSwungSurfaceappinfo='NurbsSwungSurface contains a profileCurve [X3DNurbsControlCurveNode] and a trajectoryCurve [X3DNurbsControlCurveNode]'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsSwungSurface ' >
<ProtoInterface>
<field name='profileCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='trajectoryCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='ccwtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='solidtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='set_profileCurvetype='SFNodeaccessType='inputOnly'/>
<field name='profileCurve_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_trajectoryCurvetype='SFNodeaccessType='inputOnly'/>
<field name='trajectoryCurve_changedtype='SFNodeaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<!-- ROUTE information for NurbsSwungSurfaceFaceSet node:  [from NurbsSwungSurfaceScript.coordIndex to set_coordIndex ] -->
<IndexedFaceSet DEF='NurbsSwungSurfaceFaceSetcreaseAngle='3.14solid='false'>
<IS>
<connect nodeField='ccwprotoField='ccw'/>
<connect nodeField='solidprotoField='solid'/>
</IS>
<!-- ROUTE information for NurbsSwungSurfaceCoordinate node:  [from NurbsSwungSurfaceScript.coord to set_point ] -->
<Coordinate DEF='NurbsSwungSurfaceCoordinate'/>
</IndexedFaceSet>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<field name='profileCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='trajectoryCurvetype='SFNodeaccessType='inputOnly'
 appinfo='[X3DNurbsControlCurveNode]' />

<field name='ccwtype='SFBoolaccessType='initializeOnly'/>
<field name='solidtype='SFBoolaccessType='initializeOnly'/>
<field name='set_profileCurvetype='SFNodeaccessType='inputOnly'/>
<field name='profileCurve_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_trajectoryCurvetype='SFNodeaccessType='inputOnly'/>
<field name='trajectoryCurve_changedtype='SFNodeaccessType='outputOnly'/>
<IS>
<connect nodeField='profileCurveprotoField='profileCurve'/>
<connect nodeField='trajectoryCurveprotoField='trajectoryCurve'/>
<connect nodeField='ccwprotoField='ccw'/>
<connect nodeField='solidprotoField='solid'/>
<connect nodeField='set_profileCurveprotoField='set_profileCurve'/>
<connect nodeField='profileCurve_changedprotoField='profileCurve_changed'/>
<connect nodeField='set_trajectoryCurveprotoField='set_trajectoryCurve'/>
<connect nodeField='trajectoryCurve_changedprotoField='trajectoryCurve_changed'/>
</IS>
</Script>
< ROUTE  fromNode=' NurbsSwungSurfaceScript' fromField='coord' toNode=' NurbsSwungSurfaceCoordinate' toField='set_point'/>
< ROUTE  fromNode=' NurbsSwungSurfaceScript' fromField='coordIndex' toNode=' NurbsSwungSurfaceFaceSet' toField='set_coordIndex'/>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsTextureCoordinateappinfo='NurbsTextureCoordinate describes a 3D NURBS surface in the parametric domain of its surface host specifying mapping of texture onto the surface. The SFNode controlPoint field can contain a single Coordinate or CoordinateDouble node.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsTextureCoordinate ' >
<ProtoInterface>
<field name='controlPointtype='MFVec2faccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='weighttype='MFFloataccessType='initializeOnly'
 appinfo='range (0,∞)' >
<!-- default is empty array -->
</field>
<field name='uDimensiontype='SFInt32value='0accessType='initializeOnly'
 appinfo='range [0,∞)' />

<field name='uKnottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='uOrdertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='vDimensiontype='SFInt32value='0accessType='initializeOnly'
 appinfo='range [0,∞)' />

<field name='vKnottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='vOrdertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='set_controlPointtype='MFVec2faccessType='inputOnly'/>
<field name='controlPoint_changedtype='MFVec2faccessType='outputOnly'/>
<field name='set_weighttype='MFFloataccessType='inputOnly'/>
<field name='weight_changedtype='MFFloataccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<IndexedLineSet DEF='NurbsTextureCoordinateIlscoordIndex='1 2 3 -1 5 6 7 -1'>
<Coordinate DEF='NurbsTextureCoordinateIlsCoordinate'>
<IS>
<connect nodeField='pointprotoField='controlPoint'/>
</IS>
</Coordinate>
</IndexedLineSet>
<Script DEF='NurbsTextureCoordinateScriptdirectOutput='true'>
<field name='uDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='vDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='ilstype='SFNodeaccessType='initializeOnly'>
<IndexedLineSet USE=' NurbsTextureCoordinateIls'/>
</field>
<field name='localCoordIndextype='MFInt32accessType='initializeOnly'>
<!-- local computations array prior to sending completed event -->
</field>
<IS>
<connect nodeField='uDimensionprotoField='uDimension'/>
<connect nodeField='vDimensionprotoField='vDimension'/>
</IS>
<![CDATA[
          
ecmascript:
function initialize() {
        //Browser.println ('Sorry, your browser does not support NURBS nodes');
        counter = 0;
        number = 0;
        localCoordIndex = new MFInt32();
        localCoordIndex.length = 2*vDimension * uDimension + uDimension + vDimension;

        for(v=0; v<vDimension;v++)
        {
                for(u=0; u<uDimension;u++)
                {
                        localCoordIndex[counter] = number;
                        counter++;
                        number++;
                }
                localCoordIndex[counter] = -1; counter++;
        }

        for(u=0; u<uDimension;u++)
        {
                for(v=0; v<vDimension;v++)
                {
                        localCoordIndex[counter] = v*uDimension + u;
                        counter++;
                        number++;
                }
                localCoordIndex[counter] = -1; counter++;
        }
        ils.set_coordIndex = localCoordIndex;
}

        
]]>
</Script>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='NurbsTrimmedCoordinateappinfo='NurbsTrimmedSurface generates texture coordinates from a Non-rational Uniform B-Spline (NURBS) surface.'  documentation=' https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsTrimmedSurface ' >
<ProtoInterface>
<field name='addTrimmingContourtype='MFNodeaccessType='inputOnly'
 appinfo='Contour2D' />

<field name='removeTrimmingContourtype='MFNodeaccessType='inputOnly'
 appinfo='Contour2D' />

<field name='controlPointtype='SFNodeaccessType='initializeOnly'
 appinfo='[X3DCoordinateNode]' >
<Coordinate containerField='controlPoint'/>
</field>
<field name='texCoordtype='SFNodeaccessType='initializeOnly'
 appinfo='X3DTextureCoordinateNode|NurbsTextureCoordinate' >
<TextureCoordinate/>
</field>
<field name='trimmingContourtype='MFNodeaccessType='initializeOnly'
 appinfo='Contour2D' >
<Contour2D containerField='trimmingContour'/>
</field>
<field name='uTessellationtype='SFInt32value='0accessType='initializeOnly'
 appinfo='range (-∞,∞)' />

<field name='vTessellationtype='SFInt32value='0accessType='initializeOnly'
 appinfo='range (-∞,∞)' />

<field name='weighttype='MFDoubleaccessType='initializeOnly'
 appinfo='range (0,∞)' >
<!-- default is empty array -->
</field>
<field name='solidtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='uClosedtype='SFBoolvalue='falseaccessType='initializeOnly'/>
<field name='uDimensiontype='SFInt32value='0accessType='initializeOnly'
 appinfo='range [0,∞)' />

<field name='uKnottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='uOrdertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='vClosedtype='SFBoolvalue='falseaccessType='initializeOnly'/>
<field name='vDimensiontype='SFInt32value='0accessType='initializeOnly'
 appinfo='range [0,∞)' />

<field name='vKnottype='MFDoubleaccessType='initializeOnly'
 appinfo='range (-∞,∞)' >
<!-- default is empty array -->
</field>
<field name='vOrdertype='SFInt32value='3accessType='initializeOnly'
 appinfo='range [2,∞)' />

<field name='set_controlPointtype='SFNodeaccessType='inputOnly'/>
<field name='controlPoint_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_texCoordtype='SFNodeaccessType='inputOnly'/>
<field name='texCoord_changedtype='SFNodeaccessType='outputOnly'/>
<field name='set_trimmingContourtype='MFNodeaccessType='inputOnly'/>
<field name='trimmingContour_changedtype='MFNodeaccessType='outputOnly'/>
<field name='set_uTessellationtype='SFInt32accessType='inputOnly'/>
<field name='uTessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_vTessellationtype='SFInt32accessType='inputOnly'/>
<field name='vTessellation_changedtype='SFInt32accessType='outputOnly'/>
<field name='set_weighttype='MFDoubleaccessType='inputOnly'/>
<field name='weight_changedtype='MFDoubleaccessType='outputOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='Metadata node only' >
<!-- Specification initialization: NULL node -->
</field>
<field name='localCoordIndextype='MFInt32accessType='initializeOnly'>
<!-- local computations array prior to sending completed event -->
</field>
</ProtoInterface>
<ProtoBody>
<IndexedLineSet DEF='NurbsTextureSurfaceIlscoordIndex='1 2 3 -1 5 6 7 -1'>
<Coordinate DEF='NurbsTextureSurfaceIlsCoordinate'>
<IS>
<connect nodeField='pointprotoField='controlPoint'/>
</IS>
</Coordinate>
</IndexedLineSet>
<Script DEF='NurbsTextureSurfaceScriptdirectOutput='true'>
<field name='uDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='vDimensiontype='SFInt32accessType='initializeOnly'/>
<field name='ilstype='SFNodeaccessType='initializeOnly'>
<IndexedLineSet USE=' NurbsTextureSurfaceIls'/>
</field>
<IS>
<connect nodeField='uDimensionprotoField='uDimension'/>
<connect nodeField='vDimensionprotoField='vDimension'/>
</IS>
<![CDATA[
          
ecmascript:
function initialize() {
    //Browser.println ('Sorry, your browser does not support NURBS nodes');
    counter = 0;
    number = 0;
    localCoordIndex = new MFInt32();
    localCoordIndexlength = 2*vDimension * uDimension + uDimension + vDimension;

    for(v=0; v<vDimension;v++)
    {
            for(u=0; u<uDimension;u++)
            {
                    localCoordIndex[counter] = number;
                    counter++;
                    number++;
            }
            localCoordIndex[counter] = -1; counter++;
    }
    for(u=0; u<uDimension;u++)
    {
            for(v=0; v<vDimension;v++)
            {
                    localCoordIndex[counter] = v*uDimension + u;
                    counter++;
                    number++;
            }
            localCoordIndex[counter] = -1; counter++;
    }
    ils.set_coordIndex = localCoordIndex;
}

        
]]>
</Script>
</ProtoBody>
</ProtoDeclare>
<Shape>
<Appearance>
<Material diffuseColor='0.8 0.6 0.2'/>
</Appearance>
<Text string='"NurbsPrototypes is a" "developmental file for" "Nurbs implementations."'>
<FontStyle justify='"MIDDLE" "MIDDLE"size='0.7'/>
</Text>
</Shape>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: Contour2DGroup, ContourPolyline2DGroup, HideDummy, NurbsCurve2DGroup, NurbsCurveCoord, NurbsCurveLineSet, NurbsCurveScript, NurbsOrientationInterpolatorScript, NurbsPatchSurfaceCoordinate, NurbsPatchSurfaceFaceSet, NurbsPatchSurfaceScript, NurbsPositionInterpolatorScript, NurbsSet, NurbsSurfaceInterpolatorCoordinate, NurbsSurfaceInterpolatorFaceSet, NurbsSurfaceInterpolatorScript, NurbsSweptSurfaceCoordinate, NurbsSweptSurfaceFaceSet, NurbsSweptSurfaceScript, NurbsSwungSurfaceCoordinate, NurbsSwungSurfaceFaceSet, NurbsSwungSurfaceScript, NurbsTextureCoordinateIls, NurbsTextureCoordinateIlsCoordinate, NurbsTextureCoordinateScript, NurbsTextureSurfaceIls, NurbsTextureSurfaceIlsCoordinate, NurbsTextureSurfaceScript, PointHolder, ScriptContourPolyline2D-missingBody

Index for ProtoDeclare definitions: Contour2D, ContourPolyline2D, CoordinateDouble, NurbsCurve, NurbsCurve2D, NurbsOrientationInterpolator, NurbsPatchSurface, NurbsPositionInterpolator, NurbsSet, NurbsSurfaceInterpolator, NurbsSweptSurface, NurbsSwungSurface, NurbsTextureCoordinate, NurbsTrimmedCoordinate
-->

Event Graph ROUTE Table entries with 10 ROUTE connections total, showing X3D event-model relationships for this scene.

Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.

NurbsCurveScript
Script
point
MFVec3f

ROUTE
event to
(1)
NurbsCurveCoord
Coordinate
set_point
MFVec3f
NurbsCurveScript
Script
pointIndex
MFInt32

ROUTE
event to
(1)
NurbsCurveLineSet
IndexedLineSet
set_coordIndex
MFInt32


NurbsPatchSurfaceScript
Script
coord
MFVec3f

ROUTE
event to
(1)
NurbsPatchSurfaceCoordinate
Coordinate
set_point
MFVec3f
NurbsPatchSurfaceScript
Script
coordIndex
MFInt32

ROUTE
event to
(1)
NurbsPatchSurfaceFaceSet
IndexedFaceSet
set_coordIndex
MFInt32


NurbsSurfaceInterpolatorScript
Script
coord
MFVec3f

ROUTE
event to
(1)
NurbsSurfaceInterpolatorCoordinate
Coordinate
set_point
MFVec3f
NurbsSurfaceInterpolatorScript
Script
coordIndex
MFInt32

ROUTE
event to
(1)
NurbsSurfaceInterpolatorFaceSet
IndexedFaceSet
set_coordIndex
MFInt32


NurbsSweptSurfaceScript
Script
crossSectionCurve_changed
SFNode

ROUTE
event to
(1)
NurbsSweptSurfaceFaceSet
IndexedFaceSet
coord
SFNode
NurbsSweptSurfaceScript
Script
coordIndex
MFInt32

ROUTE
event to
(1)
NurbsSweptSurfaceFaceSet
IndexedFaceSet
set_coordIndex
MFInt32


NurbsSwungSurfaceScript
Script
coord
SFNode

ROUTE
event to
(1)
NurbsSwungSurfaceCoordinate
Coordinate
set_point
MFVec3f
NurbsSwungSurfaceScript
Script
coordIndex
MFInt32

ROUTE
event to
(1)
NurbsSwungSurfaceFaceSet
IndexedFaceSet
set_coordIndex
MFInt32


NurbsTextureCoordinateScript
Script
No ROUTE connection found for output from this node.
Contains SFNode field with indirect access to another node. 


NurbsTextureSurfaceScript
Script
No ROUTE connection found for output from this node.
Contains SFNode field with indirect access to another node. 



-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPrototypesIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPrototypes.x3d -->

<!-- Color legend: X3D terminology <X3dNode DEF='idName' field='value'/> matches XML terminology <XmlElement DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoDeclare name='ProtoName'> <field name='fieldName'/> </ProtoDeclare> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->