{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.0",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.0.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "component": [
          {
            "@name":"NURBS",
            "@level":4
          }
        ],
        "meta": [
          {
            "@name":"title",
            "@content":"NurbsPrototypes.x3d"
          },
          {
            "@name":"description",
            "@content":"Non-Uniform Rational B-Spline (NURBS) prototype definitions."
          },
          {
            "@name":"creator",
            "@content":"Original blaxxun definitions heavily modified, X3D specification revisions by Don Brutzman, Charles Adams, Jeffrey Weekley and Alan Shaffer NPS."
          },
          {
            "@name":"translator",
            "@content":"Don Brutzman"
          },
          {
            "@name":"created",
            "@content":"1 January 2000"
          },
          {
            "@name":"translated",
            "@content":"18 March 2002"
          },
          {
            "@name":"modified",
            "@content":"20 October 2019"
          },
          {
            "@name":"warning",
            "@content":"Under development for final version of X3D NURBS nodes"
          },
          {
            "@name":"warning",
            "@content":"Not all NURBS nodes are prototyped here, and these implementations are not yet fully demonstrated."
          },
          {
            "@name":"reference",
            "@content":"https://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/nurbs.html"
          },
          {
            "@name":"reference",
            "@content":"http://www.blaxxun.com/vrml/protos/nurbs.wrl"
          },
          {
            "@name":"reference",
            "@content":"NurbsPrototypesOriginal.x3d.txt"
          },
          {
            "@name":"reference",
            "@content":"javadoc/index.html"
          },
          {
            "@name":"subject",
            "@content":"NURBS Prototypes"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPrototypes.x3d"
          },
          {
            "@name":"generator",
            "@content":"Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../../license.html"
          },
          {
            "@name":"translated",
            "@content":"20 April 2026"
          },
          {
            "@name":"generator",
            "@content":"X3dToJson.xslt, https://www.web3d.org/x3d/stylesheets/X3dToJson.html"
          },
          {
            "@name":"reference",
            "@content":"X3D JSON encoding: https://www.web3d.org/wiki/index.php/X3D_JSON_Encoding"
          }
        ]
    },
    "Scene": {
        "-children":[
          { "WorldInfo":
            {
              "@title":"NurbsPrototypes.x3d"
            }
          },
          { "ProtoDeclare":
            {
              "@name":"Contour2D",
              "@appinfo":"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":"addChildren",
                      "@accessType":"inputOnly",
                      "@appinfo":"[NurbsCurve|ContourPolyline2D]",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"removeChildren",
                      "@accessType":"inputOnly",
                      "@appinfo":"[NurbsCurve|ContourPolyline2D]",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"children",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[NurbsCurve|ContourPolyline2D]",
                      "@type":"MFNode",
                      "-children":[
                        {
                          "#comment":"default is empty node array"
                        }
                      ]
                    },
                    {
                      "@name":"set_children",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"children_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Group":
                      {
                        "@DEF":"Contour2DGroup",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"addChildren",
                                "@protoField":"addChildren"
                              },
                              {
                                "@nodeField":"removeChildren",
                                "@protoField":"removeChildren"
                              },
                              {
                                "@nodeField":"children",
                                "@protoField":"children"
                              },
                              {
                                "@nodeField":"set_children",
                                "@protoField":"set_children"
                              },
                              {
                                "@nodeField":"children_changed",
                                "@protoField":"children_changed"
                              }
                            ]
                        }
                      }
                    },
                    {
                      "#comment":"consider adding a Script here to check that the children nodes are solely of type NurbsCurve2D and/or ContourPolyline2D"
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"ContourPolyline2D",
              "@appinfo":"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":"point",
                      "@accessType":"initializeOnly",
                      "@type":"MFVec2f",
                      "-children":[
                        {
                          "#comment":"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."
                        }
                      ]
                    },
                    {
                      "@name":"set_point",
                      "@accessType":"inputOnly",
                      "@type":"MFVec2f"
                    },
                    {
                      "@name":"point_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFVec2f"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    {
                      "#comment":"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",
                        "-children":[
                          { "Switch":
                            {
                              "@DEF":"HideDummy",
                              "@whichChoice":-1,
                              "-children":[
                                { "Shape":
                                  {
                                    "-geometry":
                                      { "Extrusion":
                                        {
                                          "@DEF":"PointHolder",
                                          "IS": {
                                              "connect": [
                                                {
                                                  "@nodeField":"crossSection",
                                                  "@protoField":"point"
                                                }
                                              ]
                                          }
                                        }
                                      }
                                  }
                                }
                              ]
                            }
                          },
                          { "Script":
                            {
                              "@DEF":"ScriptContourPolyline2D-missingBody",
                              "@directOutput":true,
                              "field": [
                                {
                                  "@name":"PointHolder",
                                  "@accessType":"initializeOnly",
                                  "@type":"SFNode",
                                  "-children":[
                                    { "Extrusion":
                                      {
                                        "@USE":"PointHolder"
                                      }
                                    }
                                  ]
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"CoordinateDouble",
              "@appinfo":"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":"point",
                      "@accessType":"initializeOnly",
                      "@appinfo":"Substitute MFVec3f for MFVec3d to provide VRML 97 support",
                      "@type":"MFVec3f",
                      "-children":[
                        {
                          "#comment":"Specification definition: MFVec3d [in,out] point [] (-∞,∞)"
                        }
                      ]
                    },
                    {
                      "@name":"set_point",
                      "@accessType":"inputOnly",
                      "@type":"MFVec3f"
                    },
                    {
                      "@name":"point_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFVec3f"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Coordinate":
                      {
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"point",
                                "@protoField":"point"
                              },
                              {
                                "@nodeField":"set_point",
                                "@protoField":"set_point"
                              },
                              {
                                "@nodeField":"point_changed",
                                "@protoField":"point_changed"
                              }
                            ]
                        }
                      }
                    },
                    {
                      "#comment":"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."
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsCurve",
              "@appinfo":"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":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DCoordinateNode]",
                      "@type":"SFNode",
                      "-children":[
                        { "Coordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"tessellation",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (0,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"closed",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"knot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"order",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_tessellation",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"tessellation_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedLineSet":
                      {
                        "@DEF":"NurbsCurveLineSet",
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsCurveCoord"
                            }
                          }
                      }
                    },
                    {
                      "#comment":"only first child of ProtoBody renders"
                    },
                    { "Switch":
                      {
                        "@whichChoice":-1,
                        "-children":[
                          { "Shape":
                            {
                              "-geometry":
                                { "IndexedFaceSet":
                                  {
                                    "IS": {
                                        "connect": [
                                          {
                                            "@nodeField":"coord",
                                            "@protoField":"controlPoint"
                                          }
                                        ]
                                    }
                                  }
                                }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsCurveScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbsCurve.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsCurve.class"],
                        "field": [
                          {
                            "@name":"controlPoint",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"tessellation",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"weight",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"closed",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"knot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"order",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"set_controlPoint",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"controlPoint_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_tessellation",
                            "@accessType":"inputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"tessellation_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"set_weight",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"weight_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"point",
                            "@accessType":"outputOnly",
                            "@type":"MFVec3f"
                          },
                          {
                            "@name":"pointIndex",
                            "@accessType":"outputOnly",
                            "@type":"MFInt32"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"controlPoint",
                                "@protoField":"controlPoint"
                              },
                              {
                                "@nodeField":"tessellation",
                                "@protoField":"tessellation"
                              },
                              {
                                "@nodeField":"weight",
                                "@protoField":"weight"
                              },
                              {
                                "@nodeField":"closed",
                                "@protoField":"closed"
                              },
                              {
                                "@nodeField":"knot",
                                "@protoField":"knot"
                              },
                              {
                                "@nodeField":"order",
                                "@protoField":"order"
                              },
                              {
                                "@nodeField":"set_controlPoint",
                                "@protoField":"set_controlPoint"
                              },
                              {
                                "@nodeField":"controlPoint_changed",
                                "@protoField":"controlPoint_changed"
                              },
                              {
                                "@nodeField":"set_tessellation",
                                "@protoField":"set_tessellation"
                              },
                              {
                                "@nodeField":"tessellation_changed",
                                "@protoField":"tessellation_changed"
                              },
                              {
                                "@nodeField":"set_weight",
                                "@protoField":"set_weight"
                              },
                              {
                                "@nodeField":"weight_changed",
                                "@protoField":"weight_changed"
                              }
                            ]
                        }
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"point",
                        "@fromNode":"NurbsCurveScript",
                        "@toField":"set_point",
                        "@toNode":"NurbsCurveCoord"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"pointIndex",
                        "@fromNode":"NurbsCurveScript",
                        "@toField":"set_coordIndex",
                        "@toNode":"NurbsCurveLineSet"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsCurve2D",
              "@appinfo":"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":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFVec2f",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"tessellation",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (0,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"knot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"order",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"closed",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"MFVec2f"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFVec2f"
                    },
                    {
                      "@name":"set_tessellation",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"tessellation_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Group":
                      {
                        "@DEF":"NurbsCurve2DGroup"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsOrientationInterpolator",
              "@appinfo":"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_fraction",
                      "@accessType":"inputOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFFloat"
                    },
                    {
                      "@name":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DCoordinateNode]",
                      "@type":"SFNode",
                      "-children":[
                        { "Coordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"knot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"order",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"value_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFRotation"
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_knot",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"knot_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"set_order",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"order_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsOrientationInterpolatorScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbsOrientationInterpolator.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsOrientationInterpolator.class"],
                        "field": [
                          {
                            "@name":"set_fraction",
                            "@accessType":"inputOnly",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"controlPoint",
                            "@accessType":"initializeOnly",
                            "@appinfo":"[X3DCoordinateNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"knot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"order",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"weight",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"value_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFRotation"
                          },
                          {
                            "@name":"set_controlPoint",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"controlPoint_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_knot",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"knot_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"set_order",
                            "@accessType":"inputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"order_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"set_weight",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"weight_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"set_fraction",
                                "@protoField":"set_fraction"
                              },
                              {
                                "@nodeField":"controlPoint",
                                "@protoField":"controlPoint"
                              },
                              {
                                "@nodeField":"knot",
                                "@protoField":"knot"
                              },
                              {
                                "@nodeField":"order",
                                "@protoField":"order"
                              },
                              {
                                "@nodeField":"weight",
                                "@protoField":"weight"
                              },
                              {
                                "@nodeField":"value_changed",
                                "@protoField":"value_changed"
                              },
                              {
                                "@nodeField":"set_controlPoint",
                                "@protoField":"set_controlPoint"
                              },
                              {
                                "@nodeField":"controlPoint_changed",
                                "@protoField":"controlPoint_changed"
                              },
                              {
                                "@nodeField":"set_knot",
                                "@protoField":"set_knot"
                              },
                              {
                                "@nodeField":"knot_changed",
                                "@protoField":"knot_changed"
                              },
                              {
                                "@nodeField":"set_order",
                                "@protoField":"set_order"
                              },
                              {
                                "@nodeField":"order_changed",
                                "@protoField":"order_changed"
                              },
                              {
                                "@nodeField":"set_weight",
                                "@protoField":"set_weight"
                              },
                              {
                                "@nodeField":"weight_changed",
                                "@protoField":"weight_changed"
                              }
                            ]
                        }
                      }
                    },
                    {
                      "#comment":"Nonrendering holder node for controlPoint Coordinate data"
                    },
                    { "Shape":
                      {
                        "-geometry":
                          { "PointSet":
                            {
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"coord",
                                      "@protoField":"controlPoint"
                                    }
                                  ]
                              }
                            }
                          }
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsPatchSurface",
              "@appinfo":"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":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DCoordinateNode]",
                      "@type":"SFNode",
                      "-children":[
                        { "Coordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"texCoord",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode",
                      "-children":[
                        { "TextureCoordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"uTessellation",
                      "@accessType":"initializeOnly",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"vTessellation",
                      "@accessType":"initializeOnly",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"solid",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"uClosed",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"uDimension",
                      "@accessType":"initializeOnly",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"uKnot",
                      "@accessType":"initializeOnly",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"uOrder",
                      "@accessType":"initializeOnly",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"vClosed",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"vDimension",
                      "@accessType":"initializeOnly",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"vKnot",
                      "@accessType":"initializeOnly",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"vOrder",
                      "@accessType":"initializeOnly",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_texCoord",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"texCoord_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_uTessellation",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"uTessellation_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_vTessellation",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"vTessellation_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedFaceSet":
                      {
                        "@DEF":"NurbsPatchSurfaceFaceSet",
                        "@creaseAngle":3.14,
                        "@solid":false,
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"texCoord",
                                "@protoField":"texCoord"
                              },
                              {
                                "@nodeField":"solid",
                                "@protoField":"solid"
                              }
                            ]
                        },
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsPatchSurfaceCoordinate"
                            }
                          }
                      }
                    },
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsPatchSurfaceScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbsPatchSurface.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPatchSurface.class"],
                        "field": [
                          {
                            "@name":"controlPoint",
                            "@accessType":"initializeOnly",
                            "@appinfo":"[X3DCoordinateNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"texCoord",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"uTessellation",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vTessellation",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"weight",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"solid",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"uClosed",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"uDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"uKnot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"uOrder",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vClosed",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"vDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vKnot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"vOrder",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"coord",
                            "@accessType":"outputOnly",
                            "@type":"MFVec3f"
                          },
                          {
                            "@name":"coordIndex",
                            "@accessType":"outputOnly",
                            "@type":"MFInt32"
                          },
                          {
                            "@name":"set_controlPoint",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"controlPoint_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_texCoord",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"texCoord_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_weight",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"weight_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"set_uTessellation",
                            "@accessType":"inputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"uTessellation_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"set_vTessellation",
                            "@accessType":"inputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vTessellation_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFInt32"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"controlPoint",
                                "@protoField":"controlPoint"
                              },
                              {
                                "@nodeField":"texCoord",
                                "@protoField":"texCoord"
                              },
                              {
                                "@nodeField":"uTessellation",
                                "@protoField":"uTessellation"
                              },
                              {
                                "@nodeField":"vTessellation",
                                "@protoField":"vTessellation"
                              },
                              {
                                "@nodeField":"weight",
                                "@protoField":"weight"
                              },
                              {
                                "@nodeField":"solid",
                                "@protoField":"solid"
                              },
                              {
                                "@nodeField":"uClosed",
                                "@protoField":"uClosed"
                              },
                              {
                                "@nodeField":"uDimension",
                                "@protoField":"uDimension"
                              },
                              {
                                "@nodeField":"uKnot",
                                "@protoField":"uKnot"
                              },
                              {
                                "@nodeField":"uOrder",
                                "@protoField":"uOrder"
                              },
                              {
                                "@nodeField":"vClosed",
                                "@protoField":"vClosed"
                              },
                              {
                                "@nodeField":"vDimension",
                                "@protoField":"vDimension"
                              },
                              {
                                "@nodeField":"vKnot",
                                "@protoField":"vKnot"
                              },
                              {
                                "@nodeField":"vOrder",
                                "@protoField":"vOrder"
                              },
                              {
                                "@nodeField":"set_controlPoint",
                                "@protoField":"set_controlPoint"
                              },
                              {
                                "@nodeField":"controlPoint_changed",
                                "@protoField":"controlPoint_changed"
                              },
                              {
                                "@nodeField":"set_texCoord",
                                "@protoField":"set_texCoord"
                              },
                              {
                                "@nodeField":"texCoord_changed",
                                "@protoField":"texCoord_changed"
                              },
                              {
                                "@nodeField":"set_uTessellation",
                                "@protoField":"set_uTessellation"
                              },
                              {
                                "@nodeField":"uTessellation_changed",
                                "@protoField":"uTessellation_changed"
                              },
                              {
                                "@nodeField":"set_vTessellation",
                                "@protoField":"set_vTessellation"
                              },
                              {
                                "@nodeField":"vTessellation_changed",
                                "@protoField":"vTessellation_changed"
                              },
                              {
                                "@nodeField":"set_weight",
                                "@protoField":"set_weight"
                              },
                              {
                                "@nodeField":"weight_changed",
                                "@protoField":"weight_changed"
                              }
                            ]
                        }
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coord",
                        "@fromNode":"NurbsPatchSurfaceScript",
                        "@toField":"set_point",
                        "@toNode":"NurbsPatchSurfaceCoordinate"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coordIndex",
                        "@fromNode":"NurbsPatchSurfaceScript",
                        "@toField":"set_coordIndex",
                        "@toNode":"NurbsPatchSurfaceFaceSet"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsPositionInterpolator",
              "@appinfo":"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_fraction",
                      "@accessType":"inputOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFFloat"
                    },
                    {
                      "@name":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DCoordinateNode]",
                      "@type":"SFNode",
                      "-children":[
                        { "Coordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"knot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"order",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"value_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_knot",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"knot_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"set_order",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"order_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsPositionInterpolatorScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbsPositionInterpolator.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsPositionInterpolator.class"],
                        "field": [
                          {
                            "@name":"set_fraction",
                            "@accessType":"inputOnly",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"controlPoint",
                            "@accessType":"initializeOnly",
                            "@appinfo":"[X3DCoordinateNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"knot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"order",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"weight",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"value_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_controlPoint",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"controlPoint_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_knot",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"knot_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"set_order",
                            "@accessType":"inputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"order_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"set_weight",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"weight_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"set_fraction",
                                "@protoField":"set_fraction"
                              },
                              {
                                "@nodeField":"controlPoint",
                                "@protoField":"controlPoint"
                              },
                              {
                                "@nodeField":"knot",
                                "@protoField":"knot"
                              },
                              {
                                "@nodeField":"order",
                                "@protoField":"order"
                              },
                              {
                                "@nodeField":"weight",
                                "@protoField":"weight"
                              },
                              {
                                "@nodeField":"value_changed",
                                "@protoField":"value_changed"
                              },
                              {
                                "@nodeField":"set_controlPoint",
                                "@protoField":"set_controlPoint"
                              },
                              {
                                "@nodeField":"controlPoint_changed",
                                "@protoField":"controlPoint_changed"
                              },
                              {
                                "@nodeField":"set_knot",
                                "@protoField":"set_knot"
                              },
                              {
                                "@nodeField":"knot_changed",
                                "@protoField":"knot_changed"
                              },
                              {
                                "@nodeField":"set_order",
                                "@protoField":"set_order"
                              },
                              {
                                "@nodeField":"order_changed",
                                "@protoField":"order_changed"
                              },
                              {
                                "@nodeField":"set_weight",
                                "@protoField":"set_weight"
                              },
                              {
                                "@nodeField":"weight_changed",
                                "@protoField":"weight_changed"
                              }
                            ]
                        }
                      }
                    },
                    {
                      "#comment":"Nonrendering holder node for controlPoint Coordinate data"
                    },
                    { "Shape":
                      {
                        "-geometry":
                          { "PointSet":
                            {
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"coord",
                                      "@protoField":"controlPoint"
                                    }
                                  ]
                              }
                            }
                          }
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsSet",
              "@appinfo":"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":"addGeometry",
                      "@accessType":"inputOnly",
                      "@appinfo":"[NurbsPatchSurface]",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"removeGeometry",
                      "@accessType":"inputOnly",
                      "@appinfo":"[NurbsPatchSurface]",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"geometry",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[NurbsPatchSurface]",
                      "@type":"MFNode",
                      "-children":[
                        {
                          "#comment":"default is empty node array"
                        }
                      ]
                    },
                    {
                      "@name":"tessellationScale",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (0,∞)",
                      "@type":"SFFloat",
                      "@value":1.0
                    },
                    {
                      "@name":"bboxCenter",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxSize",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞); [-1 -1 -1]",
                      "@type":"SFVec3f",
                      "@value":[-1,-1,-1]
                    },
                    {
                      "@name":"set_geometry",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"geometry_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"set_tessellationScale",
                      "@accessType":"inputOnly",
                      "@type":"SFFloat"
                    },
                    {
                      "@name":"tessellationScale_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFFloat"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Group":
                      {
                        "@DEF":"NurbsSet",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"addGeometry",
                                "@protoField":"addGeometry"
                              },
                              {
                                "@nodeField":"removeGeometry",
                                "@protoField":"removeGeometry"
                              },
                              {
                                "@nodeField":"geometry",
                                "@protoField":"geometry"
                              },
                              {
                                "@nodeField":"bboxCenter",
                                "@protoField":"bboxCenter"
                              },
                              {
                                "@nodeField":"bboxSize",
                                "@protoField":"bboxSize"
                              },
                              {
                                "@nodeField":"set_geometry",
                                "@protoField":"set_geometry"
                              },
                              {
                                "@nodeField":"geometry_changed",
                                "@protoField":"geometry_changed"
                              },
                              {
                                "@nodeField":"set_tessellationScale",
                                "@protoField":"set_tessellationScale"
                              },
                              {
                                "@nodeField":"tessellationScale_changed",
                                "@protoField":"tessellationScale_changed"
                              }
                            ]
                        }
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsSurfaceInterpolator",
              "@appinfo":"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_fraction",
                      "@accessType":"inputOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFVec2f"
                    },
                    {
                      "@name":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DCoordinateNode]",
                      "@type":"SFNode",
                      "-children":[
                        { "Coordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"position_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"normal_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"uDimension",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"uKnot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"uOrder",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"vDimension",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"vKnot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"vOrder",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedFaceSet":
                      {
                        "@DEF":"NurbsSurfaceInterpolatorFaceSet",
                        "@creaseAngle":3.14,
                        "@solid":false,
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsSurfaceInterpolatorCoordinate"
                            }
                          }
                      }
                    },
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsSurfaceInterpolatorScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbsSurfaceInterpolator.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsSurfaceInterpolator.class"],
                        "field": [
                          {
                            "@name":"controlPoint",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"weight",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"uDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"uKnot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"uOrder",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vKnot",
                            "@accessType":"initializeOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"vOrder",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"coord",
                            "@accessType":"outputOnly",
                            "@type":"MFVec3f"
                          },
                          {
                            "@name":"coordIndex",
                            "@accessType":"outputOnly",
                            "@type":"MFInt32"
                          },
                          {
                            "@name":"set_controlPoint",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"controlPoint_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_weight",
                            "@accessType":"inputOnly",
                            "@type":"MFDouble"
                          },
                          {
                            "@name":"weight_changed",
                            "@accessType":"outputOnly",
                            "@type":"MFDouble"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"controlPoint",
                                "@protoField":"controlPoint"
                              },
                              {
                                "@nodeField":"weight",
                                "@protoField":"weight"
                              },
                              {
                                "@nodeField":"uDimension",
                                "@protoField":"uDimension"
                              },
                              {
                                "@nodeField":"uKnot",
                                "@protoField":"uKnot"
                              },
                              {
                                "@nodeField":"uOrder",
                                "@protoField":"uOrder"
                              },
                              {
                                "@nodeField":"vDimension",
                                "@protoField":"vDimension"
                              },
                              {
                                "@nodeField":"vKnot",
                                "@protoField":"vKnot"
                              },
                              {
                                "@nodeField":"vOrder",
                                "@protoField":"vOrder"
                              },
                              {
                                "@nodeField":"set_controlPoint",
                                "@protoField":"set_controlPoint"
                              },
                              {
                                "@nodeField":"controlPoint_changed",
                                "@protoField":"controlPoint_changed"
                              },
                              {
                                "@nodeField":"set_weight",
                                "@protoField":"set_weight"
                              },
                              {
                                "@nodeField":"weight_changed",
                                "@protoField":"weight_changed"
                              }
                            ]
                        }
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coord",
                        "@fromNode":"NurbsSurfaceInterpolatorScript",
                        "@toField":"set_point",
                        "@toNode":"NurbsSurfaceInterpolatorCoordinate"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coordIndex",
                        "@fromNode":"NurbsSurfaceInterpolatorScript",
                        "@toField":"set_coordIndex",
                        "@toNode":"NurbsSurfaceInterpolatorFaceSet"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsSweptSurface",
              "@appinfo":"NurbsSweptSurface contains a crossSectionCurve [X3DNurbsControlCurveNode] and a trajectoryCurve [NurbsCurve]",
              "@documentation":"https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsSweptSurface",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"crossSectionCurve",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DNurbsControlCurveNode]",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"put default node here..."
                        }
                      ]
                    },
                    {
                      "@name":"trajectoryCurve",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[NurbsCurve]",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"put default node here..."
                        }
                      ]
                    },
                    {
                      "@name":"ccw",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"solid",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"set_crossSectionCurve",
                      "@accessType":"inputOnly",
                      "@appinfo":"[X3DNurbsControlCurveNode]",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"crossSectionCurve_changed",
                      "@accessType":"outputOnly",
                      "@appinfo":"[X3DNurbsControlCurveNode]",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_trajectoryCurve",
                      "@accessType":"inputOnly",
                      "@appinfo":"[NurbsCurve]",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"trajectoryCurve_changed",
                      "@accessType":"outputOnly",
                      "@appinfo":"[NurbsCurve]",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedFaceSet":
                      {
                        "@DEF":"NurbsSweptSurfaceFaceSet",
                        "@creaseAngle":3.14,
                        "@solid":false,
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"ccw",
                                "@protoField":"ccw"
                              },
                              {
                                "@nodeField":"solid",
                                "@protoField":"solid"
                              }
                            ]
                        },
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsSweptSurfaceCoordinate"
                            }
                          }
                      }
                    },
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsSweptSurfaceScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbsSweptSurface.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbsSweptSurface.class"],
                        "field": [
                          {
                            "@name":"crossSectionCurve",
                            "@accessType":"initializeOnly",
                            "@appinfo":"[X3DNurbsControlCurveNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"trajectoryCurve",
                            "@accessType":"initializeOnly",
                            "@appinfo":"[NurbsCurve]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"ccw",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"solid",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"set_crossSectionCurve",
                            "@accessType":"inputOnly",
                            "@appinfo":"[X3DNurbsControlCurveNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"crossSectionCurve_changed",
                            "@accessType":"outputOnly",
                            "@appinfo":"[X3DNurbsControlCurveNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_trajectoryCurve",
                            "@accessType":"inputOnly",
                            "@appinfo":"[NurbsCurve]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"trajectoryCurve_changed",
                            "@accessType":"outputOnly",
                            "@appinfo":"[NurbsCurve]",
                            "@type":"SFNode"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"crossSectionCurve",
                                "@protoField":"crossSectionCurve"
                              },
                              {
                                "@nodeField":"trajectoryCurve",
                                "@protoField":"trajectoryCurve"
                              },
                              {
                                "@nodeField":"ccw",
                                "@protoField":"ccw"
                              },
                              {
                                "@nodeField":"solid",
                                "@protoField":"solid"
                              },
                              {
                                "@nodeField":"set_crossSectionCurve",
                                "@protoField":"set_crossSectionCurve"
                              },
                              {
                                "@nodeField":"crossSectionCurve_changed",
                                "@protoField":"crossSectionCurve_changed"
                              },
                              {
                                "@nodeField":"set_trajectoryCurve",
                                "@protoField":"set_trajectoryCurve"
                              },
                              {
                                "@nodeField":"trajectoryCurve_changed",
                                "@protoField":"trajectoryCurve_changed"
                              }
                            ]
                        }
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"crossSectionCurve_changed",
                        "@fromNode":"NurbsSweptSurfaceScript",
                        "@toField":"coord",
                        "@toNode":"NurbsSweptSurfaceFaceSet"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coordIndex",
                        "@fromNode":"NurbsSweptSurfaceScript",
                        "@toField":"set_coordIndex",
                        "@toNode":"NurbsSweptSurfaceFaceSet"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsSwungSurface",
              "@appinfo":"NurbsSwungSurface contains a profileCurve [X3DNurbsControlCurveNode] and a trajectoryCurve [X3DNurbsControlCurveNode]",
              "@documentation":"https://www.web3d.org/x3d/content/X3dTooltips.html#NurbsSwungSurface",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"profileCurve",
                      "@accessType":"inputOnly",
                      "@appinfo":"[X3DNurbsControlCurveNode]",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"trajectoryCurve",
                      "@accessType":"inputOnly",
                      "@appinfo":"[X3DNurbsControlCurveNode]",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"ccw",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"solid",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"set_profileCurve",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"profileCurve_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_trajectoryCurve",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"trajectoryCurve_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedFaceSet":
                      {
                        "@DEF":"NurbsSwungSurfaceFaceSet",
                        "@creaseAngle":3.14,
                        "@solid":false,
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"ccw",
                                "@protoField":"ccw"
                              },
                              {
                                "@nodeField":"solid",
                                "@protoField":"solid"
                              }
                            ]
                        },
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsSwungSurfaceCoordinate"
                            }
                          }
                      }
                    },
                    {
                      "#comment":"Warning: VRML97-style scripting, not X3D Scene Authoring Interface (SAI)"
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsSwungSurfaceScript",
                        "@directOutput":true,
                        "@mustEvaluate":true,
                        "@url":["NurbSwungSurface.class","https://www.web3d.org/x3d/content/examples/Basic/NURBS/NurbSwungSurface.class"],
                        "field": [
                          {
                            "@name":"profileCurve",
                            "@accessType":"inputOnly",
                            "@appinfo":"[X3DNurbsControlCurveNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"trajectoryCurve",
                            "@accessType":"inputOnly",
                            "@appinfo":"[X3DNurbsControlCurveNode]",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"ccw",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"solid",
                            "@accessType":"initializeOnly",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"set_profileCurve",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"profileCurve_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_trajectoryCurve",
                            "@accessType":"inputOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"trajectoryCurve_changed",
                            "@accessType":"outputOnly",
                            "@type":"SFNode"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"profileCurve",
                                "@protoField":"profileCurve"
                              },
                              {
                                "@nodeField":"trajectoryCurve",
                                "@protoField":"trajectoryCurve"
                              },
                              {
                                "@nodeField":"ccw",
                                "@protoField":"ccw"
                              },
                              {
                                "@nodeField":"solid",
                                "@protoField":"solid"
                              },
                              {
                                "@nodeField":"set_profileCurve",
                                "@protoField":"set_profileCurve"
                              },
                              {
                                "@nodeField":"profileCurve_changed",
                                "@protoField":"profileCurve_changed"
                              },
                              {
                                "@nodeField":"set_trajectoryCurve",
                                "@protoField":"set_trajectoryCurve"
                              },
                              {
                                "@nodeField":"trajectoryCurve_changed",
                                "@protoField":"trajectoryCurve_changed"
                              }
                            ]
                        }
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coord",
                        "@fromNode":"NurbsSwungSurfaceScript",
                        "@toField":"set_point",
                        "@toNode":"NurbsSwungSurfaceCoordinate"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"coordIndex",
                        "@fromNode":"NurbsSwungSurfaceScript",
                        "@toField":"set_coordIndex",
                        "@toNode":"NurbsSwungSurfaceFaceSet"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsTextureCoordinate",
              "@appinfo":"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":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFVec2f",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (0,∞)",
                      "@type":"MFFloat",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"uDimension",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"uKnot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"uOrder",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"vDimension",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"vKnot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"vOrder",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"MFVec2f"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFVec2f"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFFloat"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFFloat"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedLineSet":
                      {
                        "@DEF":"NurbsTextureCoordinateIls",
                        "@coordIndex":[1,2,3,-1,5,6,7,-1],
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsTextureCoordinateIlsCoordinate",
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"point",
                                      "@protoField":"controlPoint"
                                    }
                                  ]
                              }
                            }
                          }
                      }
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsTextureCoordinateScript",
                        "@directOutput":true,
                        "field": [
                          {
                            "@name":"uDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"ils",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode",
                            "-children":[
                              { "IndexedLineSet":
                                {
                                  "@USE":"NurbsTextureCoordinateIls"
                                }
                              }
                            ]
                          },
                          {
                            "@name":"localCoordIndex",
                            "@accessType":"initializeOnly",
                            "@type":"MFInt32",
                            "-children":[
                              {
                                "#comment":"local computations array prior to sending completed event"
                              }
                            ]
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"uDimension",
                                "@protoField":"uDimension"
                              },
                              {
                                "@nodeField":"vDimension",
                                "@protoField":"vDimension"
                              }
                            ]
                        },
                        "#sourceCode":[
"",
"",
"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;",
"}",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"NurbsTrimmedCoordinate",
              "@appinfo":"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":"addTrimmingContour",
                      "@accessType":"inputOnly",
                      "@appinfo":"Contour2D",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"removeTrimmingContour",
                      "@accessType":"inputOnly",
                      "@appinfo":"Contour2D",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"controlPoint",
                      "@accessType":"initializeOnly",
                      "@appinfo":"[X3DCoordinateNode]",
                      "@type":"SFNode",
                      "-children":[
                        { "Coordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"texCoord",
                      "@accessType":"initializeOnly",
                      "@appinfo":"X3DTextureCoordinateNode|NurbsTextureCoordinate",
                      "@type":"SFNode",
                      "-children":[
                        { "TextureCoordinate":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"trimmingContour",
                      "@accessType":"initializeOnly",
                      "@appinfo":"Contour2D",
                      "@type":"MFNode",
                      "-children":[
                        { "Contour2D":
                          {
                          }
                        }
                      ]
                    },
                    {
                      "@name":"uTessellation",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"vTessellation",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"weight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (0,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"solid",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":true
                    },
                    {
                      "@name":"uClosed",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"uDimension",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"uKnot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"uOrder",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"vClosed",
                      "@accessType":"initializeOnly",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"vDimension",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [0,∞)",
                      "@type":"SFInt32",
                      "@value":0
                    },
                    {
                      "@name":"vKnot",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range (-∞,∞)",
                      "@type":"MFDouble",
                      "-children":[
                        {
                          "#comment":"default is empty array"
                        }
                      ]
                    },
                    {
                      "@name":"vOrder",
                      "@accessType":"initializeOnly",
                      "@appinfo":"range [2,∞)",
                      "@type":"SFInt32",
                      "@value":3
                    },
                    {
                      "@name":"set_controlPoint",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"controlPoint_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_texCoord",
                      "@accessType":"inputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"texCoord_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_trimmingContour",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"trimmingContour_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"set_uTessellation",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"uTessellation_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_vTessellation",
                      "@accessType":"inputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"vTessellation_changed",
                      "@accessType":"outputOnly",
                      "@type":"SFInt32"
                    },
                    {
                      "@name":"set_weight",
                      "@accessType":"inputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"weight_changed",
                      "@accessType":"outputOnly",
                      "@type":"MFDouble"
                    },
                    {
                      "@name":"metadata",
                      "@accessType":"inputOutput",
                      "@appinfo":"Metadata node only",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"Specification initialization: NULL node"
                        }
                      ]
                    },
                    {
                      "@name":"localCoordIndex",
                      "@accessType":"initializeOnly",
                      "@type":"MFInt32",
                      "-children":[
                        {
                          "#comment":"local computations array prior to sending completed event"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "IndexedLineSet":
                      {
                        "@DEF":"NurbsTextureSurfaceIls",
                        "@coordIndex":[1,2,3,-1,5,6,7,-1],
                        "-coord":
                          { "Coordinate":
                            {
                              "@DEF":"NurbsTextureSurfaceIlsCoordinate",
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"point",
                                      "@protoField":"controlPoint"
                                    }
                                  ]
                              }
                            }
                          }
                      }
                    },
                    { "Script":
                      {
                        "@DEF":"NurbsTextureSurfaceScript",
                        "@directOutput":true,
                        "field": [
                          {
                            "@name":"uDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"vDimension",
                            "@accessType":"initializeOnly",
                            "@type":"SFInt32"
                          },
                          {
                            "@name":"ils",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode",
                            "-children":[
                              { "IndexedLineSet":
                                {
                                  "@USE":"NurbsTextureSurfaceIls"
                                }
                              }
                            ]
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"uDimension",
                                "@protoField":"uDimension"
                              },
                              {
                                "@nodeField":"vDimension",
                                "@protoField":"vDimension"
                              }
                            ]
                        },
                        "#sourceCode":[
"",
"",
"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;",
"}",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "Shape":
            {
              "-appearance":
                { "Appearance":
                  {
                    "-material":
                      { "Material":
                        {
                          "@diffuseColor":[0.8,0.6,0.2]
                        }
                      }
                  }
                },
              "-geometry":
                { "Text":
                  {
                    "@string":["NurbsPrototypes is a","developmental file for","Nurbs implementations."],
                    "-fontStyle":
                      { "FontStyle":
                        {
                          "@justify":["MIDDLE","MIDDLE"],
                          "@size":0.7
                        }
                      }
                  }
                }
            }
          }
        ]
    }
  }
}