{ "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": {
        "meta": [
          {
            "@name":"title",
            "@content":"AnimatedViewpointRecorderExample.x3d"
          },
          {
            "@name":"description",
            "@content":"Example authoring use of AnimatedViewpointRecorder prototype. Each tour recording output goes to the console, where it must be cut/pasted for further use. See AnimatedViewpointRecorderSample for sample output."
          },
          {
            "@name":"creator",
            "@content":"Don Brutzman, Ken Curtin, Duane Davis, Christos Kalogrias"
          },
          {
            "@name":"created",
            "@content":"9 November 2003"
          },
          {
            "@name":"modified",
            "@content":"28 November 2019"
          },
          {
            "@name":"reference",
            "@content":"AnimatedViewpointRecorderPrototype.x3d"
          },
          {
            "@name":"reference",
            "@content":"AnimatedViewpointRecorderSample.x3d"
          },
          {
            "@name":"subject",
            "@content":"recording animated viewpoint tour"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/AnimatedViewpointRecorderExample.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../../license.html"
          },
          {
            "@name":"translated",
            "@content":"26 March 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":"AnimatedViewpointRecorderExample.x3d"
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"AnimatedViewpointRecorder",
              "@appinfo":"AnimatedViewpointRecorder captures view position and orientation tour to create a guided tour animation. The recording output goes to the browser console where the .x3d (or .x3dv) output can be cut/pasted for further use.",
              "@url":["AnimatedViewpointRecorderPrototype.x3d#AnimatedViewpointRecorder","https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/AnimatedViewpointRecorderPrototype.x3d#AnimatedViewpointRecorder","AnimatedViewpointRecorderPrototype.wrl#AnimatedViewpointRecorder","https://www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/AnimatedViewpointRecorderPrototype.wrl#AnimatedViewpointRecorder"],
              "field": [
                {
                  "@name":"start",
                  "@accessType":"inputOnly",
                  "@appinfo":"Set start=true to commence recording viewpoint position/orientation.",
                  "@type":"SFBool"
                },
                {
                  "@name":"stop",
                  "@accessType":"inputOnly",
                  "@appinfo":"Set stop=true to finish recording viewpoint position/orientation. Resulting VRML is added to scene resulting X3D and VRML is output to console.",
                  "@type":"SFBool"
                },
                {
                  "@name":"samplingInterval",
                  "@accessType":"initializeOnly",
                  "@appinfo":"default 0.1 seconds",
                  "@type":"SFTime"
                },
                {
                  "@name":"outputX3D",
                  "@accessType":"initializeOnly",
                  "@appinfo":"whether to output .x3d syntax on browser console",
                  "@type":"SFBool"
                },
                {
                  "@name":"outputClassicVRML",
                  "@accessType":"initializeOnly",
                  "@appinfo":"whether to output .x3d syntax on browser console",
                  "@type":"SFBool"
                },
                {
                  "@name":"filterDeadTime",
                  "@accessType":"initializeOnly",
                  "@appinfo":"TODO not yet implemented",
                  "@type":"SFBool"
                }
              ]
            }
          },
          { "Viewpoint":
            {
              "@description":"Entry view: start/stop recording"
            }
          },
          { "Inline":
            {
              "@DEF":"HelloWorld",
              "@url":["../../../HelloWorld.x3d","https://www.web3d.org/x3d/content/examples/Basic/HelloWorld.x3d","../../../HelloWorld.wrl","https://www.web3d.org/x3d/content/examples/Basic/HelloWorld.wrl"]
            }
          },
          { "ProtoInstance":
            {
              "@name":"AnimatedViewpointRecorder",
              "@DEF":"AnimatedViewpointRecorderTest"
            }
          },
          { "Group":
            {
              "@DEF":"RecordingControls",
              "-children":[
                { "Transform":
                  {
                    "@translation":[-3,0,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["Touch text to start","recording new","view animation"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@DEF":"CenterJustify",
                                      "@justify":["MIDDLE","MIDDLE"],
                                      "@size":0.5
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "-material":
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.2,0.8,0.2],
                                      "@transparency":0.5
                                    }
                                  }
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "@DEF":"TransparentBox",
                          "-geometry":
                            { "Box":
                              {
                                "@size":[3,1.75,0.01]
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "-material":
                                  { "Material":
                                    {
                                      "@transparency":1
                                    }
                                  }
                              }
                            }
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"StartTouch",
                          "@description":"touch to start recording"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"StartTouch",
                          "@toField":"start",
                          "@toNode":"AnimatedViewpointRecorderTest"
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@translation":[3,0,0],
                    "-children":[
                      { "Shape":
                        {
                          "-geometry":
                            { "Text":
                              {
                                "@string":["Touch to stop","recording new","view animation"],
                                "-fontStyle":
                                  { "FontStyle":
                                    {
                                      "@USE":"CenterJustify"
                                    }
                                  }
                              }
                            },
                          "-appearance":
                            { "Appearance":
                              {
                                "-material":
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.8,0.2,0.2],
                                      "@transparency":0.5
                                    }
                                  }
                              }
                            }
                        }
                      },
                      { "Shape":
                        {
                          "@USE":"TransparentBox"
                        }
                      },
                      { "TouchSensor":
                        {
                          "@DEF":"StopTouch",
                          "@description":"touch to stop recording"
                        }
                      },
                      { "ROUTE":
                        {
                          "@fromField":"isActive",
                          "@fromNode":"StopTouch",
                          "@toField":"stop",
                          "@toNode":"AnimatedViewpointRecorderTest"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        ]
    }
  }
}