<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN"   "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersiveversion='3.0xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation=' http://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='circa 2000'/>
<meta name='translatedcontent='18 March 2002'/>
<meta name='modifiedcontent='22 December 2005'/>
<meta name='warningcontent='Under development for final version of X3D NURBS nodes'/>
<meta name='warningcontent='Not all NURBS nodes are prototyped here, and these implementations are not yet fully demonstrated.'/>
<meta name='referencecontent=' http://www.web3d.org/technicalinfo/specifications/ISO_IEC_19775/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=' http://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPrototypes.x3d '/>
<meta name='generatorcontent='Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html'/>
</head>
<!--

Index for ProtoDeclare definitions: Contour2D, ContourPolyline2D, CoordinateDouble, NurbsCurve, NurbsCurve2D, NurbsOrientationInterpolator, NurbsPatchSurface, NurbsPositionInterpolator, NurbsSet, NurbsSurfaceInterpolator, NurbsSweptSurface, NurbsSwungSurface, NurbsTextureCoordinate, NurbsTrimmedCoordinate
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
-->
<Scene>
<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=' http://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=' http://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=' http://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=' http://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>
<!-- NurbsCurveLineSet ROUTE:  [from NurbsCurveScript.pointIndex to set_coordIndex ] -->
<IndexedLineSet DEF='NurbsCurveLineSet'>
<!-- NurbsCurveCoord ROUTE:  [from NurbsCurveScript.point to set_point ] -->
<Coordinate DEF='NurbsCurveCoord'/>
</IndexedLineSet>
<!-- only first child of ProtoBody renders -->
<Switch whichChoice='-1'>
<Shape>
<IndexedFaceSet>
<IS>
<connect nodeField='coordinateprotoField='controlPoint'/>
</IS>
</IndexedFaceSet>
</Shape>
</Switch>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<!-- NurbsCurveScript ROUTEs:  [from point to NurbsCurveCoord.set_point ] [from pointIndex to NurbsCurveLineSet.set_coordIndex ] -->
<Script DEF='NurbsCurveScriptdirectOutput='truemustEvaluate='true'
  url=' "NurbsCurve.class" "http://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='NurbsCurveScriptfromField='pointtoNode='NurbsCurveCoordtoField='set_point'/>
<ROUTE fromNode='NurbsCurveScriptfromField='pointIndextoNode='NurbsCurveLineSettoField='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=' http://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=' http://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" "http://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=' http://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>
<!-- NurbsPatchSurfaceFaceSet ROUTE:  [from NurbsPatchSurfaceScript.coordIndex to set_coordIndex ] -->
<IndexedFaceSet DEF='NurbsPatchSurfaceFaceSetcreaseAngle='3.14solid='false'>
<IS>
<connect nodeField='texCoordprotoField='texCoord'/>
<connect nodeField='solidprotoField='solid'/>
</IS>
<!-- NurbsPatchSurfaceCoordinate ROUTE:  [from NurbsPatchSurfaceScript.coord to set_point ] -->
<Coordinate DEF='NurbsPatchSurfaceCoordinate'/>
</IndexedFaceSet>
<!-- Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI) -->
<!-- NurbsPatchSurfaceScript ROUTEs:  [from coord to NurbsPatchSurfaceCoordinate.set_point ] [from coordIndex to NurbsPatchSurfaceFaceSet.set_coordIndex ] -->
<Script DEF='NurbsPatchSurfaceScriptdirectOutput='truemustEvaluate='true'
  url=' "NurbsPatchSurface.class" "http://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPatchSurface.class" '>
<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='NurbsPatchSurfaceScriptfromField='coordtoNode='NurbsPatchSurfaceCoordinatetoField='set_point'/>
<ROUTE fromNode='NurbsPatchSurfaceScriptfromField='coordIndextoNode='NurbsPatchSurfaceFaceSettoField='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=' http://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" "http://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=' http://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=' http://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