{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.3",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.3.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "meta": [
          {
            "@name":"title",
            "@content":"ArchPrototype.x3d"
          },
          {
            "@name":"description",
            "@content":"Create an arch. Can modify general parameters: clearSpanWidth, riseHeight, depth, topAbutmentHeight, pierWidth, pierHeight. See the reference file ArchModelingDiagrams.pdf to find further information. See also ArchPrototypeScript_more_readable.js. Possibility to create shapes related to arch: ArchHalf; IntradosOnly; ArchFilled; ArchHalfFilled; Lintel. See the reference file ArchModelingDiagrams.pdf to find further information."
          },
          {
            "@name":"creator",
            "@content":"Michele Foti, Don Brutzman"
          },
          {
            "@name":"created",
            "@content":"15 December 2014"
          },
          {
            "@name":"modified",
            "@content":"16 June 2020"
          },
          {
            "@name":"TODO",
            "@content":"debug local ProtoInstance"
          },
          {
            "@name":"TODO",
            "@content":"add test ArchPrototypeExample"
          },
          {
            "@name":"TODO",
            "@content":"Xj3D Player Issue, bogus error on line 243 of script regarding assignment to MFInt32 value"
          },
          {
            "@name":"reference",
            "@content":"ArchModelingDiagrams.pdf"
          },
          {
            "@name":"reference",
            "@content":"https://en.wikipedia.org/wiki/Arch"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Buildings/ArchPrototype.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../license.html"
          },
          {
            "@name":"translated",
            "@content":"16 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":"ArchPrototype.x3d"
            }
          },
          { "ProtoDeclare":
            {
              "@name":"ArchPrototype",
              "@appinfo":"Create an arch. Can modify general parameters: clearSpanWidth, riseHeight, depth, topAbutmentHeight, pierWidth, pierHeight. - Possibility to create shapes related to an arch: ArchHalf; IntradosOnly; ArchFilled; ArchHalfFilled; Lintel. See the reference file ArchModelingDiagrams.pdf to find further information. See also ArchPrototypeScript_more_readable.js.js.",
              "ProtoInterface": {
                  "-children":[
                    {
                      "#comment":"COLOR OF ARCH"
                    },
                    {
                      "#comment":"INPUT PARAMETERS"
                    },
                    {
                      "#comment":"General parameters: measures in meters"
                    },
                    {
                      "#comment":"Parameters to create shapes related to arch: put true to apply"
                    }
                  ],
                  "field": [
                    {
                      "@name":"diffuseColor",
                      "@accessType":"inputOutput",
                      "@appinfo":"color of arch",
                      "@type":"SFColor",
                      "@value":[0.2,0.8,0.8]
                    },
                    {
                      "@name":"emissiveColor",
                      "@accessType":"inputOutput",
                      "@appinfo":"color of arch",
                      "@type":"SFColor",
                      "@value":[0.2,0.8,0.8]
                    },
                    {
                      "@name":"clearSpanWidth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"clearSpanWidth: clearSpanWidth must be double of riseHeight to obtain an half circumference",
                      "@type":"SFFloat",
                      "@value":4
                    },
                    {
                      "@name":"riseHeight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"riseHeight: riseHeight must be half of clearSpanWidth to obtain an half circumference",
                      "@type":"SFFloat",
                      "@value":2
                    },
                    {
                      "@name":"depth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"depth",
                      "@type":"SFFloat",
                      "@value":3
                    },
                    {
                      "@name":"topAbutmentHeight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"topAbutmentHeight:topAbutmentHeight=0 means no topAbutment",
                      "@type":"SFFloat",
                      "@value":0.5
                    },
                    {
                      "@name":"pierWidth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"pierWidth:pierWidtht=0 means no pierWidth",
                      "@type":"SFFloat",
                      "@value":0.5
                    },
                    {
                      "@name":"pierHeight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"pierHeight: pierHeight=0 means no pierHeight",
                      "@type":"SFFloat",
                      "@value":1
                    },
                    {
                      "@name":"archHalf",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archHalf: can modify also clearSpanWidth, riseHeight, depth, pierWidth, pierHeight, topAbutmentHeight, archHalfExtensionWidth at purpose, clearSpanWidth measure refers to a full arc, consider clearSpanWidth/2 for the archHalf width",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"archHalfExtensionWidth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archHalfExtensionWidth: measure in meters, use only if archHalf=true, it is the width of the etension of the abutment of the archHalf. See the reference file ArchModelingDiagrams.pdf to find further information.",
                      "@type":"SFFloat",
                      "@value":0
                    },
                    {
                      "@name":"onlyIntrados",
                      "@accessType":"initializeOnly",
                      "@appinfo":"onlyIntrados: note it is a flat curved surface, can modify also clearSpanWidth, riseHeight, depth at purpose, if needed apply archHalf=true.",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"archFilled",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archFilled: note it is an half cylinder, can modify also clearSpanWidth, riseHeight, depth at purpose.",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"archHalfFilled",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archHalfFilled: note it is a quarter cylinder, can modify also clearSpanWidth, riseHeight, depth at purpose, clearSpanWidth measure refers to a full arc, consider clearSpanWidth/2 for the archHalfFilled width.",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"lintel",
                      "@accessType":"initializeOnly",
                      "@appinfo":"lintel: no arc is rendered, but a lintel: topAbutmentHeight on pierHeight, total height is pierHeight + topAbutmentHeight, if needed apply archHalf=true.",
                      "@type":"SFBool",
                      "@value":false
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    {
                      "#comment":"First node determines node type of this prototype"
                    },
                    {
                      "#comment":"IndexedFaceset creates arch"
                    },
                    { "Transform":
                      {
                        "@DEF":"ArchTransform",
                        "-children":[
                          { "Shape":
                            {
                              "@DEF":"Arch",
                              "-children":[
                                {
                                  "#comment":"note that convex='false' (meaning concave geometry) is crucial for this IFS of a geometric chord to render properly"
                                }
                              ],
                              "-geometry":
                                { "IndexedFaceSet":
                                  {
                                    "@DEF":"ArchIndex",
                                    "@convex":false,
                                    "@solid":false,
                                    "-coord":
                                      { "Coordinate":
                                        {
                                          "@DEF":"ArchChord"
                                        }
                                      }
                                  }
                                },
                              "-appearance":
                                { "Appearance":
                                  {
                                    "-material":
                                      { "Material":
                                        {
                                          "@DEF":"MaterialNode",
                                          "IS": {
                                              "connect": [
                                                {
                                                  "@nodeField":"emissiveColor",
                                                  "@protoField":"emissiveColor"
                                                },
                                                {
                                                  "@nodeField":"diffuseColor",
                                                  "@protoField":"diffuseColor"
                                                }
                                              ]
                                          }
                                        }
                                      }
                                  }
                                }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "#comment":"Subsequent nodes do not render, but still must be a valid X3D subgraph"
                    },
                    {
                      "#comment":"This embedded Script provides the X3D author with additional visibility and control over prototype inputs and outputs"
                    },
                    { "Script":
                      {
                        "@DEF":"ArchPrototypeScript",
                        "@url":["ArchPrototypeScript.js","https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Buildings/ArchPrototypeScript.js"],
                        "-children":[
                          {
                            "#comment":"INPUT PARAMETERS"
                          },
                          {
                            "#comment":"General parameters"
                          },
                          {
                            "#comment":"Parameters to create to create shapes related to arch: put true to apply"
                          },
                          {
                            "#comment":"OUTPUT PARAMETERS"
                          }
                        ],
                        "field": [
                          {
                            "@name":"clearSpanWidth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for clearSpanWidth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"riseHeight",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for riseHeight parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"depth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for depth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"topAbutmentHeight",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for topAbutmentHeight parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"pierWidth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for pierWidth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"pierHeight",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for pierHeight parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"archHalf",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archHalf parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"archHalfExtensionWidth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archHalfExtensionWidth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"onlyIntrados",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for onlyIntrados parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"archFilled",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archFilled parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"archHalfFilled",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archHalfFilled parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"lintel",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for lintel parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"computedScale",
                            "@accessType":"outputOnly",
                            "@appinfo":"computedScale: modify scale field - NOTE it is not used to modify the whole arch, but to modify clearSpanWidth, riseHeight, depth. It does not affect topAbutmentHeight, pierWidth, pierHeight, archHalfExtensionWidth",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"pointOut",
                            "@accessType":"outputOnly",
                            "@appinfo":"send computed points to the Coordinate node",
                            "@type":"MFVec3f"
                          },
                          {
                            "@name":"indexOut",
                            "@accessType":"outputOnly",
                            "@appinfo":"send computed indices to the IndexedFaceSet node",
                            "@type":"MFInt32"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"clearSpanWidth",
                                "@protoField":"clearSpanWidth"
                              },
                              {
                                "@nodeField":"riseHeight",
                                "@protoField":"riseHeight"
                              },
                              {
                                "@nodeField":"depth",
                                "@protoField":"depth"
                              },
                              {
                                "@nodeField":"pierWidth",
                                "@protoField":"pierWidth"
                              },
                              {
                                "@nodeField":"topAbutmentHeight",
                                "@protoField":"topAbutmentHeight"
                              },
                              {
                                "@nodeField":"pierHeight",
                                "@protoField":"pierHeight"
                              },
                              {
                                "@nodeField":"archHalf",
                                "@protoField":"archHalf"
                              },
                              {
                                "@nodeField":"archHalfExtensionWidth",
                                "@protoField":"archHalfExtensionWidth"
                              },
                              {
                                "@nodeField":"onlyIntrados",
                                "@protoField":"onlyIntrados"
                              },
                              {
                                "@nodeField":"archFilled",
                                "@protoField":"archFilled"
                              },
                              {
                                "@nodeField":"archHalfFilled",
                                "@protoField":"archHalfFilled"
                              },
                              {
                                "@nodeField":"lintel",
                                "@protoField":"lintel"
                              }
                            ]
                        }
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"computedScale",
                        "@fromNode":"ArchPrototypeScript",
                        "@toField":"scale",
                        "@toNode":"ArchTransform"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"pointOut",
                        "@fromNode":"ArchPrototypeScript",
                        "@toField":"point",
                        "@toNode":"ArchChord"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"indexOut",
                        "@fromNode":"ArchPrototypeScript",
                        "@toField":"set_coordIndex",
                        "@toNode":"ArchIndex"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoInstance":
            {
              "@name":"ArchPrototype",
              "@DEF":"ArchInstance",
              "fieldValue": [
                {
                  "@name":"diffuseColor",
                  "@value":[0.5,0.3,0.6]
                },
                {
                  "@name":"emissiveColor",
                  "@value":[0.5,0.3,0.6]
                },
                {
                  "@name":"clearSpanWidth",
                  "@value":5
                },
                {
                  "@name":"riseHeight",
                  "@value":2.5
                },
                {
                  "@name":"depth",
                  "@value":2
                },
                {
                  "@name":"topAbutmentHeight",
                  "@value":0.6
                },
                {
                  "@name":"pierWidth",
                  "@value":1
                },
                {
                  "@name":"pierHeight",
                  "@value":2
                }
              ]
            }
          },
          { "Shape":
            {
              "-geometry":
                { "Text":
                  {
                    "@string":["TODO: internal and external","prototype tests","ArchPrototype.x3d"],
                    "-fontStyle":
                      { "FontStyle":
                        {
                          "@family":["SANS"],
                          "@justify":["MIDDLE","MIDDLE"],
                          "@style":"BOLD"
                        }
                      }
                  }
                },
              "-appearance":
                { "Appearance":
                  {
                    "-material":
                      { "Material":
                        {
                          "@diffuseColor":[0.9,0.9,0.9]
                        }
                      }
                  }
                }
            }
          },
          {
            "#comment":"Add any ROUTEs here that connect ProtoInstance to/from prior nodes in Scene (and outside of ProtoDeclare)"
          },
          { "Inline":
            {
              "@DEF":"CoordinateAxes",
              "@url":["../../X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.x3d","../../../Savage/Tools/Authoring/CoordinateAxes.x3d","https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.x3d","../../X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.wrl","../../../Savage/Tools/Authoring/CoordinateAxes.wrl","https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.wrl","https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/CoordinateAxes.x3d","https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/CoordinateAxes.wrl"]
            }
          }
        ]
    }
  }
}