{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.2",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.2.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "component": [
          {
            "@name":"Navigation",
            "@level":3
          }
        ],
        "meta": [
          {
            "@name":"title",
            "@content":"Web3dTimeline.x3d"
          },
          {
            "@name":"info",
            "@content":"Presenters can edit events under TimelineEventsGroup."
          },
          {
            "@name":"description",
            "@content":"Time line of X3D history with a viewpoint for each milestone. Use PgDown and PgUp to look through each viewpoint. Clicking (selecting) text for any milestone binds that viewpoint, then returns to prior milestone when unclicked (deselected)."
          },
          {
            "@name":"creator",
            "@content":"Don Brutzman, Anita Havele, Johannes Behr, Byounghyun Yoo"
          },
          {
            "@name":"created",
            "@content":"28 July 2008"
          },
          {
            "@name":"modified",
            "@content":"11 September 2024"
          },
          {
            "@name":"Image",
            "@content":"Web3dTimelineEntryView.png"
          },
          {
            "@name":"Image",
            "@content":"Web3dTimelinePanorama.png"
          },
          {
            "@name":"info",
            "@content":"Point paper by Anita Havele and Don Brutzman"
          },
          {
            "@name":"reference",
            "@content":"Declarative3dTimelineSceneUseCaseHaveleBrutzman.pdf"
          },
          {
            "@name":"reference",
            "@content":"Declarative3dTimelineSceneUseCaseHaveleBrutzman.doc"
          },
          {
            "@name":"reference",
            "@content":"http://events.declarative3d.org/Dec3D2012"
          },
          {
            "@name":"info",
            "@content":"Corresponding X3DOM translation by Nils Michaelis of Fraunhofer"
          },
          {
            "@name":"reference",
            "@content":"http://examples.x3dom.org/x3dTimeLine"
          },
          {
            "@name":"reference",
            "@content":"http://examples.x3dom.org/x3dTimeLine/timeline.js"
          },
          {
            "@name":"reference",
            "@content":"http://examples.x3dom.org/x3dTimeLine/timeline.css"
          },
          {
            "@name":"reference",
            "@content":"http://examples.x3dom.org/x3dTimeLine/timestamps.txt"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/Web3dTimeline.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 4.0, 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":"Web3D Timeline"
            }
          },
          { "Background":
            {
              "@groundColor":[1,1,1],
              "@skyColor":[1,1,1]
            }
          },
          { "DirectionalLight":
            {
              "@direction":[0,-0.5,-1]
            }
          },
          { "Viewpoint":
            {
              "@DEF":"OverviewViewpoint",
              "@description":"Web3D Timeline",
              "@orientation":[-0.33,0.94,0,0.4],
              "@position":[18,8,21]
            }
          },
          {
            "#comment":"<Fog visibilityRange='2000'/> <Viewpoint DEF='vp2' description='Starting view' position='3 10 20'/>"
          },
          { "Group":
            {
              "@DEF":"InitialSetupAndPrototype",
              "-children":[
                {
                  "#comment":"floor"
                },
                { "Transform":
                  {
                    "@translation":[0,0,-50],
                    "-children":[
                      { "Shape":
                        {
                          "-appearance":
                            { "Appearance":
                              {
                                "-material":
                                  { "Material":
                                    {
                                      "@diffuseColor":[1,1,1],
                                      "@emissiveColor":[1,1,1]
                                    }
                                  },
                                "-texture":
                                  { "ImageTexture":
                                    {
                                      "@url":["images/lines.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/lines.png"]
                                    }
                                  },
                                "-textureTransform":
                                  { "TextureTransform":
                                    {
                                      "@rotation":1.57
                                    }
                                  }
                              }
                            },
                          "-geometry":
                            { "Box":
                              {
                                "@size":[125,0.01,125]
                              }
                            }
                        }
                      }
                    ]
                  }
                },
                { "ProtoDeclare":
                  {
                    "@name":"TimelineElement",
                    "ProtoInterface": {
                        "field": [
                          {
                            "@name":"name",
                            "@accessType":"inputOutput",
                            "@appinfo":"Name for this timeline element",
                            "@type":"MFString"
                          },
                          {
                            "@name":"title",
                            "@accessType":"inputOutput",
                            "@appinfo":"Displayed title",
                            "@type":"MFString"
                          },
                          {
                            "@name":"description",
                            "@accessType":"inputOutput",
                            "@appinfo":"Viewpoint, Anchor description",
                            "@type":"SFString"
                          },
                          {
                            "@name":"hidden",
                            "@accessType":"inputOutput",
                            "@appinfo":"Whether to hide this entry. TODO: is Viewpoint hidden also?",
                            "@type":"SFBool",
                            "@value":false
                          },
                          {
                            "@name":"imageUrl",
                            "@accessType":"inputOutput",
                            "@appinfo":"\"Link to display image\"",
                            "@type":"MFString"
                          },
                          {
                            "@name":"soundUrl",
                            "@accessType":"inputOutput",
                            "@appinfo":"\"Link to narrative\"",
                            "@type":"MFString"
                          },
                          {
                            "@name":"referenceUrl",
                            "@accessType":"inputOutput",
                            "@appinfo":"\"Link to reference, launched in separate frame\"",
                            "@type":"MFString"
                          },
                          {
                            "@name":"imagePixelHeight",
                            "@accessType":"inputOutput",
                            "@appinfo":"author must initialize",
                            "@type":"SFInt32",
                            "@value":0
                          },
                          {
                            "@name":"imagePixelWidth",
                            "@accessType":"inputOutput",
                            "@appinfo":"author must initialize",
                            "@type":"SFInt32",
                            "@value":0
                          },
                          {
                            "@name":"translation",
                            "@accessType":"inputOutput",
                            "@appinfo":"default value 0 0 0",
                            "@type":"SFVec3f",
                            "@value":[0,0,0]
                          }
                        ]
                    },
                    "ProtoBody": {
                        "-children":[
                          { "Transform":
                            {
                              "@DEF":"RootTransform",
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"translation",
                                      "@protoField":"translation"
                                    }
                                  ]
                              },
                              "-children":[
                                {
                                  "#comment":"TODO try to omit this viewpoint from scene's active list of viewpoints if hidden='true'"
                                },
                                { "Switch":
                                  {
                                    "@DEF":"HideSwitch",
                                    "@whichChoice":0,
                                    "-children":[
                                      { "ViewpointGroup":
                                        {
                                          "@DEF":"TimelineElementViewpointGroup",
                                          "-children":[
                                            {
                                              "#comment":"test ability to hide in BSContact"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "Viewpoint":
                                  {
                                    "@DEF":"TimelineElementViewpoint",
                                    "@position":[2,3,14],
                                    "IS": {
                                        "connect": [
                                          {
                                            "@nodeField":"description",
                                            "@protoField":"description"
                                          }
                                        ]
                                    }
                                  }
                                },
                                { "ProximitySensor":
                                  {
                                    "@DEF":"proximity",
                                    "@center":[0,0,12],
                                    "@size":[40,40,13]
                                  }
                                },
                                { "Transform":
                                  {
                                    "@translation":[-0.2,-0.3,0],
                                    "-children":[
                                      { "Shape":
                                        {
                                          "-appearance":
                                            { "Appearance":
                                              {
                                                "-material":
                                                  { "Material":
                                                    {
                                                      "@DEF":"NameMaterial",
                                                      "@diffuseColor":[0.619608,0.258824,0]
                                                    }
                                                  }
                                              }
                                            },
                                          "-geometry":
                                            { "Text":
                                              {
                                                "IS": {
                                                    "connect": [
                                                      {
                                                        "@nodeField":"string",
                                                        "@protoField":"name"
                                                      }
                                                    ]
                                                },
                                                "-fontStyle":
                                                  { "FontStyle":
                                                    {
                                                      "@family":["SANS"],
                                                      "@justify":["END","FIRST"],
                                                      "@size":1.5,
                                                      "@spacing":0.8
                                                    }
                                                  }
                                              }
                                            }
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "Transform":
                                  {
                                    "@translation":[0.2,0,0],
                                    "-children":[
                                      { "Shape":
                                        {
                                          "-appearance":
                                            { "Appearance":
                                              {
                                                "-material":
                                                  { "Material":
                                                    {
                                                      "@DEF":"TitleMaterial",
                                                      "@diffuseColor":[0,0.184314,0.658824]
                                                    }
                                                  }
                                              }
                                            },
                                          "-geometry":
                                            { "Text":
                                              {
                                                "IS": {
                                                    "connect": [
                                                      {
                                                        "@nodeField":"string",
                                                        "@protoField":"title"
                                                      }
                                                    ]
                                                },
                                                "-fontStyle":
                                                  { "FontStyle":
                                                    {
                                                      "@family":["SANS"],
                                                      "@justify":["BEGIN","FIRST"],
                                                      "@size":0.9
                                                    }
                                                  }
                                              }
                                            }
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "Group":
                                  {
                                    "-children":[
                                      { "TouchSensor":
                                        {
                                          "@DEF":"TouchToView",
                                          "@description":"touch to view"
                                        }
                                      },
                                      { "BooleanFilter":
                                        {
                                          "@DEF":"TouchViewpointSelectBooleanFilter"
                                        }
                                      },
                                      { "ROUTE":
                                        {
                                          "@fromField":"isActive",
                                          "@fromNode":"TouchToView",
                                          "@toField":"set_boolean",
                                          "@toNode":"TouchViewpointSelectBooleanFilter"
                                        }
                                      },
                                      { "ROUTE":
                                        {
                                          "@fromField":"inputTrue",
                                          "@fromNode":"TouchViewpointSelectBooleanFilter",
                                          "@toField":"set_bind",
                                          "@toNode":"TimelineElementViewpoint"
                                        }
                                      },
                                      { "Shape":
                                        {
                                          "@DEF":"TransparentTouchForNameTitleShape",
                                          "-geometry":
                                            { "Box":
                                              {
                                                "@size":[8,3,0.1]
                                              }
                                            },
                                          "-appearance":
                                            { "Appearance":
                                              {
                                                "-material":
                                                  { "Material":
                                                    {
                                                      "@transparency":1
                                                    }
                                                  }
                                              }
                                            }
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "Switch":
                                  {
                                    "@DEF":"TimelineElementSwitch",
                                    "@whichChoice":1,
                                    "-children":[
                                      { "Group":
                                        {
                                          "-children":[
                                            { "Transform":
                                              {
                                                "@DEF":"HideBackgroundTextTransform",
                                                "@scale":[12,8,0.01],
                                                "@translation":[0,3.5,-0.5],
                                                "-children":[
                                                  {
                                                    "#comment":"Hide other TimeLineElement entries that are behind this one"
                                                  },
                                                  { "Shape":
                                                    {
                                                      "-appearance":
                                                        { "Appearance":
                                                          {
                                                            "-material":
                                                              { "Material":
                                                                {
                                                                  "@diffuseColor":[1,1,1]
                                                                }
                                                              }
                                                          }
                                                        },
                                                      "-children":[
                                                        {
                                                          "#comment":"hide next entry, but try not to chop of dates from perspective view"
                                                        }
                                                      ],
                                                      "-geometry":
                                                        { "Box":
                                                          {
                                                            "@size":[0.9,1,0.01]
                                                          }
                                                        }
                                                    }
                                                  }
                                                ]
                                              }
                                            },
                                            { "Transform":
                                              {
                                                "@DEF":"ImageTransform",
                                                "@scale":[8,8,0.01],
                                                "@translation":[-4,1,0],
                                                "-children":[
                                                  { "Anchor":
                                                    {
                                                      "@parameter":["target=Web3dTimelineReferenceFrame"],
                                                      "IS": {
                                                          "connect": [
                                                            {
                                                              "@nodeField":"url",
                                                              "@protoField":"referenceUrl"
                                                            },
                                                            {
                                                              "@nodeField":"description",
                                                              "@protoField":"description"
                                                            }
                                                          ]
                                                      },
                                                      "-children":[
                                                        { "Shape":
                                                          {
                                                            "-appearance":
                                                              { "Appearance":
                                                                {
                                                                  "-material":
                                                                    { "Material":
                                                                      {
                                                                        "@diffuseColor":[1,1,1],
                                                                        "@emissiveColor":[1,1,1]
                                                                      }
                                                                    },
                                                                  "-texture":
                                                                    { "ImageTexture":
                                                                      {
                                                                        "IS": {
                                                                            "connect": [
                                                                              {
                                                                                "@nodeField":"url",
                                                                                "@protoField":"imageUrl"
                                                                              }
                                                                            ]
                                                                        }
                                                                      }
                                                                    }
                                                                }
                                                              },
                                                            "-geometry":
                                                              { "IndexedFaceSet":
                                                                {
                                                                  "@DEF":"ImageIFS",
                                                                  "@coordIndex":[0,1,2,3,-1],
                                                                  "@solid":false,
                                                                  "-coord":
                                                                    { "Coordinate":
                                                                      {
                                                                        "@DEF":"ImageCoordinate"
                                                                      }
                                                                    },
                                                                  "-texCoord":
                                                                    { "TextureCoordinate":
                                                                      {
                                                                        "@point":[0,0,0,1,1,1,1,0]
                                                                      }
                                                                    }
                                                                }
                                                              }
                                                          }
                                                        }
                                                      ]
                                                    }
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        }
                                      },
                                      { "Group":
                                        {
                                          "@DEF":"EmptyNode"
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "BooleanTrigger":
                                  {
                                    "@DEF":"bt"
                                  }
                                },
                                { "IntegerTrigger":
                                  {
                                    "@DEF":"it0",
                                    "@integerKey":0
                                  }
                                },
                                { "IntegerTrigger":
                                  {
                                    "@DEF":"it1",
                                    "@integerKey":1
                                  }
                                },
                                { "ROUTE":
                                  {
                                    "@fromField":"isActive",
                                    "@fromNode":"proximity",
                                    "@toField":"set_boolean",
                                    "@toNode":"it0"
                                  }
                                },
                                { "ROUTE":
                                  {
                                    "@fromField":"triggerValue",
                                    "@fromNode":"it0",
                                    "@toField":"whichChoice",
                                    "@toNode":"TimelineElementSwitch"
                                  }
                                },
                                { "ROUTE":
                                  {
                                    "@fromField":"exitTime",
                                    "@fromNode":"proximity",
                                    "@toField":"set_triggerTime",
                                    "@toNode":"bt"
                                  }
                                },
                                { "ROUTE":
                                  {
                                    "@fromField":"triggerTrue",
                                    "@fromNode":"bt",
                                    "@toField":"set_boolean",
                                    "@toNode":"it1"
                                  }
                                },
                                { "ROUTE":
                                  {
                                    "@fromField":"triggerValue",
                                    "@fromNode":"it1",
                                    "@toField":"whichChoice",
                                    "@toNode":"TimelineElementSwitch"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "#comment":"This embedded Script computes and updates IFS/Coordinate geometry dimensions to match image size"
                          },
                          { "Script":
                            {
                              "@DEF":"TimelineElementScript",
                              "field": [
                                {
                                  "@name":"name",
                                  "@accessType":"inputOutput",
                                  "@type":"MFString"
                                },
                                {
                                  "@name":"imagePixelHeight",
                                  "@accessType":"inputOutput",
                                  "@appinfo":"default value 0",
                                  "@type":"SFInt32"
                                },
                                {
                                  "@name":"imagePixelWidth",
                                  "@accessType":"inputOutput",
                                  "@appinfo":"default value 0",
                                  "@type":"SFInt32"
                                },
                                {
                                  "@name":"hidden",
                                  "@accessType":"inputOutput",
                                  "@appinfo":"Whether to hide this entry. TODO: is Viewpoint hidden also?",
                                  "@type":"SFBool"
                                },
                                {
                                  "@name":"traceEnabled",
                                  "@accessType":"inputOutput",
                                  "@appinfo":"debug trace to Browser output console",
                                  "@type":"SFBool",
                                  "@value":false
                                },
                                {
                                  "@name":"pointArray",
                                  "@accessType":"outputOnly",
                                  "@appinfo":"compute scale based on image pixel height, width",
                                  "@type":"MFVec3f"
                                },
                                {
                                  "@name":"hideSwitchChoice",
                                  "@accessType":"outputOnly",
                                  "@appinfo":"hide node if hidden",
                                  "@type":"SFInt32"
                                },
                                {
                                  "@name":"displayViewpointGroup",
                                  "@accessType":"outputOnly",
                                  "@appinfo":"display Viewpoint if not hidden",
                                  "@type":"SFBool"
                                }
                              ],
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"name",
                                      "@protoField":"name"
                                    },
                                    {
                                      "@nodeField":"imagePixelHeight",
                                      "@protoField":"imagePixelHeight"
                                    },
                                    {
                                      "@nodeField":"imagePixelWidth",
                                      "@protoField":"imagePixelWidth"
                                    },
                                    {
                                      "@nodeField":"hidden",
                                      "@protoField":"hidden"
                                    }
                                  ]
                              },
                              "#sourceCode":[
"",
"",
"ecmascript:",
"",
"function initialize ()",
"{",
"    computePointArray ();",
"",
"    hide ();",
"",
"    tracePrint ('initialization() successful');",
"}",
"function computePointArray ()",
"{",
"    if ((imagePixelHeight <= 0) || (imagePixelWidth <= 0))",
"    {",
"        tracePrint ('cannot compute new scale, imagePixelHeight=' + imagePixelHeight.toString() + ', imagePixelWidth=' + imagePixelWidth.toString());",
"        return;",
"    }",
"    else if (imagePixelHeight < imagePixelWidth)",
"    {",
"        height = imagePixelHeight/imagePixelWidth;",
"        width  = 1.0;",
"    }",
"    else if (imagePixelHeight > imagePixelWidth)",
"    {",
"        height = 1.0;",
"        width  = imagePixelWidth/imagePixelHeight;",
"    }",
"    else // same",
"    {",
"        height = 1.0;",
"        width  = 1.0;",
"    }",
"    p0 = new SFVec3f (0.0,   0.0,    0.0);",
"    p1 = new SFVec3f (0.0,   height, 0.0);",
"    p2 = new SFVec3f (width, height, 0.0);",
"    p3 = new SFVec3f (width, 0.0,    0.0);",
"    pointArray = new MFVec3f (p0, p1, p2, p3);",
"    tracePrint ('computed new ImageCoordinate.point=' + pointArray.toString());",
"",
"    if (hidden)",
"    {",
"        hideSwitchChoice = -1;",
"    }",
"}",
"function set_imagePixelHeight (eventValue)",
"{",
"    computePointArray ();",
"}",
"function set_imagePixelWidth (eventValue)",
"{",
"    computePointArray ();",
"}",
"",
"function set_name (eventValue)",
"{",
"   // input eventValue received for inputOutput field",
"    name = eventValue;",
"}",
"function hide ()",
"{",
"    // input eventValue received for inputOutput field",
"    tracePrint (\"set_hidden: hidden=\" + hidden);",
"    if (hidden)",
"    {",
"         hideSwitchChoice      = -1;",
"         displayViewpointGroup = false;",
"    }",
"    else",
"    {",
"        hideSwitchChoice      = 0;",
"        displayViewpointGroup = true;",
"    }",
"}",
"",
"function set_hidden (eventValue)",
"{",
"    hidden = eventValue;",
"    hide ();",
"}",
"// ================== Trace output functions ==================",
"",
"function tracePrint (outputString)",
"{",
"   // if traceEnabled is true, print outputString on X3D browser console",
"   if (traceEnabled)",
"      Browser.println ('[TimelineElementScript ' + name.toString() + ': ' + outputString.toString() + ']');",
"}",
"function alwaysPrint (outputString)",
"{",
"      // always print outputString on X3D browser console",
"      Browser.println ('[TimelineElementScript ' + name.toString() + ': ' + outputString.toString() + ']');",
"}",
"function set_traceEnabled (eventValue)",
"{",
"      // input eventValue received for inputOutput field",
"      traceEnabled = eventValue;",
"}",
"// ===========================================================",
"",
""
]
                            }
                          },
                          { "ROUTE":
                            {
                              "@fromField":"pointArray",
                              "@fromNode":"TimelineElementScript",
                              "@toField":"point",
                              "@toNode":"ImageCoordinate"
                            }
                          },
                          { "ROUTE":
                            {
                              "@fromField":"hideSwitchChoice",
                              "@fromNode":"TimelineElementScript",
                              "@toField":"whichChoice",
                              "@toNode":"TimelineElementSwitch"
                            }
                          },
                          { "ROUTE":
                            {
                              "@fromField":"displayViewpointGroup",
                              "@fromNode":"TimelineElementScript",
                              "@toField":"displayed",
                              "@toNode":"TimelineElementViewpointGroup"
                            }
                          }
                        ]
                    }
                  }
                }
              ]
            }
          },
          { "Transform":
            {
              "@DEF":"TimelineEventsGroup",
              "@translation":[0,5,0],
              "-children":[
                {
                  "#comment":"Depends on the audience, but Len suggests removal of the following for most audiences: 1) 1997 Community 2) 1999 MPEG 3) 2005 April (membership & IPR) Add x3dom - year? X3D V3.3 (Volume, Units) - 2012"
                },
                {
                  "#comment":"1994"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide1_VRML1.0",
                    "fieldValue": [
                      {
                        "@name":"name",
                        "@value":["1994"]
                      },
                      {
                        "@name":"title",
                        "@value":["SIGGRAPH meeting ","VRML 1.0 Specification"]
                      },
                      {
                        "@name":"description",
                        "@value":"Community effort adapted SGI OpenInventor"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/vrml.banner.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/vrml.banner.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":130
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":560
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/x3d/specifications/vrml/VRML1.0"]
                      }
                    ],
                    "-children":[
                      {
                        "#comment":"ensure MFString referenceUrl value is surrounded by \"quotation marks\""
                      }
                    ]
                  }
                },
                {
                  "#comment":"1997"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide2_VRML2.0",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-15]
                      },
                      {
                        "@name":"name",
                        "@value":["1997"]
                      },
                      {
                        "@name":"title",
                        "@value":["VRML 2.0","Community standard"]
                      },
                      {
                        "@name":"description",
                        "@value":"VRML 2.0 revised the VRML 1 architecture for better performance"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/vrml97.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/vrml97.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":85
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":470
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://new.web3d.org/files/specifications/14772/V2.0"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"1997"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide3_VRML97",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-30]
                      },
                      {
                        "@name":"name",
                        "@value":["1997"]
                      },
                      {
                        "@name":"title",
                        "@value":["VRML 97","International Standard"]
                      },
                      {
                        "@name":"description",
                        "@value":"VRML 2.0 became the VRML 97 ISO International Standard"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/vrml97-0.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/vrml97-0.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":85
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":470
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://new.web3d.org/files/specifications/14772/V2.0"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"1999"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide4_MPEG-4",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-45]
                      },
                      {
                        "@name":"name",
                        "@value":["1999"]
                      },
                      {
                        "@name":"title",
                        "@value":["MPEG-4","Interactive Profile"]
                      },
                      {
                        "@name":"description",
                        "@value":"MPEG-4 adopted an X3D subset for encoding 3D graphics"
                      },
                      {
                        "@name":"hidden",
                        "@value":true
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/mpeg_logo_bw.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/mpeg_logo_bw.gif"]
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/files/specifications/19775-1/V3.2/Part01/MPEG4interactive.html","http://www.ece.cmu.edu/~ee899/project/jie_sem/index.html"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":74
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":256
                      }
                    ],
                    "-children":[
                      {
                        "#comment":"only first available choice in url array will be launched"
                      }
                    ]
                  }
                },
                {
                  "#comment":"2001"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide5_X3dDesign",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-60]
                      },
                      {
                        "@name":"name",
                        "@value":["2001"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D architecture design","Extensible 3D Graphics"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D architecture extensions to VRML defined"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/x3d2-s.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/x3d2-s.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":97
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":154
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/about/faq"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"December 2004"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide6_X3dEncoding",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-75]
                      },
                      {
                        "@name":"name",
                        "@value":["2004","December"]
                      },
                      {
                        "@name":"title",
                        "@value":[".x3d Encoding","XML Validation"]
                      },
                      {
                        "@name":"description",
                        "@value":"XML-X3D"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/X3dSpecificationLogo.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/X3dSpecificationLogo.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":88
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":176
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://www.w3.org/XML/1999/XML-in-10-points.html","https://www.web3d.org/files/specifications/19776-1/V3.2/Part01/X3D_XML.html"]
                      }
                    ],
                    "-children":[
                      {
                        "#comment":"only first available choice in url array will be launched"
                      }
                    ]
                  }
                },
                {
                  "#comment":"2005"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide7_Web3DConsortium",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-90]
                      },
                      {
                        "@name":"name",
                        "@value":["2005","April"]
                      },
                      {
                        "@name":"title",
                        "@value":["Web3D Consortium","Non-profit Membership","Royalty-Free IPR Policy"]
                      },
                      {
                        "@name":"description",
                        "@value":"Web3D Intellectual Property Rights Policy keeps X3D royalty free for any use"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/web3d-Consortium-3dlogo.jpg","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/web3d-Consortium-3dlogo.jpg"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":108
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":214
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/realtime-3d/about/legal"]
                      }
                    ],
                    "-children":[
                      {
                        "#comment":"1072 x 540"
                      }
                    ]
                  }
                },
                {
                  "#comment":"November 2005"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide8_X3dStandard",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-105]
                      },
                      {
                        "@name":"name",
                        "@value":["2005","November"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D Graphics Standard","version 3.0","ISO approved"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D version 3.0"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/X3dSpecificationLogo.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/X3dSpecificationLogo.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":88
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":176
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/documents/specifications/19775-1/V3.0/index.html"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"2006"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide9_SceneAcessInterface",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-120]
                      },
                      {
                        "@name":"name",
                        "@value":["2006","April"]
                      },
                      {
                        "@name":"title",
                        "@value":["Scene Acess Interface:","SAI for JavaScript Java"]
                      },
                      {
                        "@name":"description",
                        "@value":"SAI APIs provide consistent X3D code access using JavaScript or Java"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/X3dAnywhere_150_138.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/X3dAnywhere_150_138.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":138
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":150
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/files/specifications/19777-1/V3.0/Part1/X3D_ECMAScript.html"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"December 2006"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide10_X3dVersion3.1",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-135]
                      },
                      {
                        "@name":"name",
                        "@value":["2006","December"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D","version 3.1"]
                      },
                      {
                        "@name":"description",
                        "@value":"Computer Aided Design (CAD) 3D Textures and Shaders support"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/logo_iso.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/logo_iso.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":58
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":202
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/files/specifications/19775-1/V3.1/index.html"]
                      }
                    ],
                    "-children":[
                      {
                        "#comment":"Web3dBanner.jpg 864 x 432, reduced 216 x 106"
                      }
                    ]
                  }
                },
                {
                  "#comment":"2007"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide11_X3dForWebAuthors",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-150]
                      },
                      {
                        "@name":"name",
                        "@value":["2007","March"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D for Web Authors","Book slides examples","Don Brutzman Leonard Daly"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D for Web Authors book slidesets example scenes and video Don Brutzman and Leonard Daly"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/X3dForWebAuthorsBookCoverScan.400x498.jpg","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/X3dForWebAuthorsBookCoverScan.400x498.jpg"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":125
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":100
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://x3dgraphics.com"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"December 2007"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide12_X3dCompressedBinaryEncoding",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-165]
                      },
                      {
                        "@name":"name",
                        "@value":["2007","December"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D Compressed","Binary Encoding (CBE)","for geometry and data"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D Compressed Binary Encoding provides geometric and XML compression"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/CadTeapot.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/CadTeapot.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":243
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":427
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://web3d.org/x3d/wiki/index.php/X3D_Binary_Compression_Capabilities_and_Plans"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"2008"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide13_X3dEarth",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-180]
                      },
                      {
                        "@name":"name",
                        "@value":["2008","March"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D Earth","Geospatial Component"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D Earth working group has built a Geospatial component for X3D"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/x3d-earth.jpg","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/x3d-earth.jpg"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":368
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":368
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/working-groups/x3d-earth"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"June 2008"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide14_X3dVersion3.2",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-195]
                      },
                      {
                        "@name":"name",
                        "@value":["2008","June"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D","version 3.2"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D v3.2 is the current version of X3D in common use"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/logo_iso.gif","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/logo_iso.gif"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":58
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":202
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/files/specifications/19775-1/V3.2/Part01/Architecture.html"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"February 2009"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide15_DICOM",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-210]
                      },
                      {
                        "@name":"name",
                        "@value":["2009","February"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D and DICOM","Medical standards"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D volume visualization for DICOM"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/DicomLogo.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/DicomLogo.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":105
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":377
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://medical.nema.org"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"March 2010"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide16_X3DOM",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-225]
                      },
                      {
                        "@name":"name",
                        "@value":["2010","March"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3DOM","development begins"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3DOM maps X3D to HTML5"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/X3domTeaser.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/X3domTeaser.png","http://www.x3dom.org/wp-content/uploads/2009/10/teaser.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":370
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":270
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://www.x3dom.org"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"June 2011"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide17_X3dAugmentedReality",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-240]
                      },
                      {
                        "@name":"name",
                        "@value":["2011","June"]
                      },
                      {
                        "@name":"title",
                        "@value":["X3D AR","Augmented Reality"]
                      },
                      {
                        "@name":"description",
                        "@value":"Augmented Reality working group efforts"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/X3dArImage4.jpg","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/X3dArImage4.jpg"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":120
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":168
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["https://www.web3d.org/working-groups/augmented-reality-ar"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"November 2011"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide18_Declarative3D",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-255]
                      },
                      {
                        "@name":"name",
                        "@value":["2011","November"]
                      },
                      {
                        "@name":"title",
                        "@value":["Declarative 3D","W3C Community Group"]
                      },
                      {
                        "@name":"description",
                        "@value":"W3C Community Group efforts for Declarative 3D begin"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/W3cCommunityGroupLogo.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/W3cCommunityGroupLogo.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":91
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":209
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://www.w3.org/community/declarative3d"]
                      }
                    ]
                  }
                },
                {
                  "#comment":"April 2012"
                },
                { "ProtoInstance":
                  {
                    "@name":"TimelineElement",
                    "@DEF":"Slide19_WWW2012",
                    "fieldValue": [
                      {
                        "@name":"translation",
                        "@value":[0,0,-270]
                      },
                      {
                        "@name":"name",
                        "@value":["2012","April"]
                      },
                      {
                        "@name":"title",
                        "@value":["WWW 2012 Workshop","on Declarative 3D"]
                      },
                      {
                        "@name":"description",
                        "@value":"X3D v3.2 is draft international standard"
                      },
                      {
                        "@name":"imageUrl",
                        "@value":["images/Www2012Logo.png","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/images/Www2012Logo.png"]
                      },
                      {
                        "@name":"imagePixelHeight",
                        "@value":170
                      },
                      {
                        "@name":"imagePixelWidth",
                        "@value":348
                      },
                      {
                        "@name":"referenceUrl",
                        "@value":["http://events.declarative3d.org/Dec3D2012"]
                      }
                    ]
                  }
                }
              ]
            }
          },
          {
            "#comment":"Web3D 3D logo"
          },
          { "Transform":
            {
              "@DEF":"trans_web3dlogo",
              "@rotation":[0,1,0,3.14],
              "@scale":[0.7,0.7,0.7],
              "@translation":[14,9.4,12],
              "-children":[
                { "Group":
                  {
                    "-children":[
                      {
                        "#comment":"TODO Animation to spin logo, user-controllable or in different place"
                      },
                      { "Billboard":
                        {
                          "@axisOfRotation":[0,0,0],
                          "-children":[
                            { "Transform":
                              {
                                "@DEF":"Web3dLogoTransform",
                                "@scale":[0.6,0.6,0.6],
                                "-children":[
                                  {
                                    "#comment":"TODO White box behind"
                                  },
                                  { "Anchor":
                                    {
                                      "@parameter":["target=Web3dTimelineReferenceFrame"],
                                      "@url":["https://www.web3d.org"],
                                      "-children":[
                                        { "Inline":
                                          {
                                            "@url":["Web3dLogo.x3d","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/Web3dLogo.x3d","Web3dLogo.wrl","https://www.web3d.org/x3d/content/examples/Basic/Web3dOutreach/Web3dLogo.wrl"]
                                          }
                                        }
                                      ]
                                    }
                                  },
                                  { "OrientationInterpolator":
                                    {
                                      "@DEF":"Web3dLogoSpinner",
                                      "@key":[0,0.3333,0.6667,1],
                                      "@keyValue":[0,1,0,0,0,1,0,2.094395,0,1,0,4.18879,0,1,0,0]
                                    }
                                  },
                                  { "TimeSensor":
                                    {
                                      "@DEF":"Web3dLogoClock",
                                      "@cycleInterval":30,
                                      "@loop":true
                                    }
                                  },
                                  { "ROUTE":
                                    {
                                      "@fromField":"value_changed",
                                      "@fromNode":"Web3dLogoSpinner",
                                      "@toField":"set_rotation",
                                      "@toNode":"Web3dLogoTransform"
                                    }
                                  },
                                  { "ROUTE":
                                    {
                                      "@fromField":"fraction_changed",
                                      "@fromNode":"Web3dLogoClock",
                                      "@toField":"set_fraction",
                                      "@toNode":"Web3dLogoSpinner"
                                    }
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                { "Transform":
                  {
                    "@translation":[0,-6.2,0],
                    "-children":[
                      { "Billboard":
                        {
                          "@axisOfRotation":[0,0,0],
                          "-children":[
                            { "TouchSensor":
                              {
                                "@description":"Select PageUp/PageDown to see each milestone, click on images for detail links"
                              }
                            },
                            { "Shape":
                              {
                                "-geometry":
                                  { "Text":
                                    {
                                      "@string":["Web3D Progress Timeline"],
                                      "-fontStyle":
                                        { "FontStyle":
                                          {
                                            "@justify":["MIDDLE","MIDDLE"],
                                            "@style":"BOLD"
                                          }
                                        }
                                    }
                                  },
                                "-appearance":
                                  { "Appearance":
                                    {
                                      "-material":
                                        { "Material":
                                          {
                                            "@ambientIntensity":0,
                                            "@diffuseColor":[0.337,0.392,0.556],
                                            "@shininess":0
                                          }
                                        }
                                    }
                                  }
                              }
                            },
                            { "Shape":
                              {
                                "-geometry":
                                  { "Box":
                                    {
                                      "@size":[10,3,0.1]
                                    }
                                  },
                                "-appearance":
                                  { "Appearance":
                                    {
                                      "-material":
                                        { "Material":
                                          {
                                            "@transparency":1.0
                                          }
                                        }
                                    }
                                  }
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          },
          {
            "#comment":"start and end at same Viewpoint to enable a consistent Viewpoint tour by browser"
          },
          { "Viewpoint":
            {
              "@USE":"OverviewViewpoint"
            }
          }
        ]
    }
  }
}