{ "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":"SatellitePairPrototype.x3d"
          },
          {
            "@name":"description",
            "@content":"A Pair of TRC-170s. A TRC-170 is a long-range SHF communication system. It operates in 3 modes. 1)Direct point-to-point link (< 30 miles). 2) Tropospheric shot (up to 100 or 150 miles, depending on system version). 3) Defraction shot over an a terrain feature or object in the path ( < 50 miles)."
          },
          {
            "@name":"creator",
            "@content":"Mike Hunsberger"
          },
          {
            "@name":"created",
            "@content":"8 May 2001"
          },
          {
            "@name":"modified",
            "@content":"20 October 2019"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatellitePairPrototype.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../../license.html"
          },
          {
            "@name":"translated",
            "@content":"21 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":[
          {
            "#comment":"ExternProtoDeclare definitions must be included verbatim"
          },
          { "ExternProtoDeclare":
            {
              "@name":"BeamCone",
              "@appinfo":"Produce wireframe or transparent beam cones. Typical uses include propeller/thruster water flow or line-of-sight sonar/radar/light beams. Negative range values invert base and apex at same relative location. Default: beam with apex at (0 0 0) and base of radius 1 in x-z plane at (1 0 0).",
              "@url":["../../CommunicationsAndSensors/Beam/BeamConePrototype.x3d#BeamCone","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Beam/BeamConePrototype.x3d#BeamCone","../../CommunicationsAndSensors/Beam/BeamConePrototype.wrl#BeamCone","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Beam/BeamConePrototype.wrl#BeamCone"],
              "field": [
                {
                  "@name":"contact",
                  "@accessType":"inputOnly",
                  "@appinfo":"(communications) is transmitted signal in contact with receiver or (sensor) is a target return detected?",
                  "@type":"SFBool"
                },
                {
                  "@name":"range",
                  "@accessType":"inputOnly",
                  "@appinfo":"distance in meters along x axis",
                  "@type":"SFFloat"
                },
                {
                  "@name":"defaultRange",
                  "@accessType":"initializeOnly",
                  "@appinfo":"distance in meters used until eventIn range sent",
                  "@type":"SFFloat"
                },
                {
                  "@name":"wireframe",
                  "@accessType":"initializeOnly",
                  "@appinfo":"whether wireframe beam is drawn",
                  "@type":"SFBool"
                },
                {
                  "@name":"solid",
                  "@accessType":"initializeOnly",
                  "@appinfo":"whether solid beam is drawn",
                  "@type":"SFBool"
                },
                {
                  "@name":"beamHeightDegrees",
                  "@accessType":"initializeOnly",
                  "@appinfo":"degrees across vertical y axis",
                  "@type":"SFFloat"
                },
                {
                  "@name":"beamWidthDegrees",
                  "@accessType":"initializeOnly",
                  "@appinfo":"degrees across horizontal z axis",
                  "@type":"SFFloat"
                },
                {
                  "@name":"contactColor",
                  "@accessType":"initializeOnly",
                  "@appinfo":"rendering color when contact=true",
                  "@type":"SFColor"
                },
                {
                  "@name":"noContactColor",
                  "@accessType":"initializeOnly",
                  "@appinfo":"rendering color when contact=false",
                  "@type":"SFColor"
                },
                {
                  "@name":"transparency",
                  "@accessType":"inputOutput",
                  "@appinfo":"1 = fully transparent wireframe only",
                  "@type":"SFFloat"
                },
                {
                  "@name":"name",
                  "@accessType":"initializeOnly",
                  "@appinfo":"BeamCone name aids in node identification and tracing",
                  "@type":"SFString"
                },
                {
                  "@name":"traceEnabled",
                  "@accessType":"initializeOnly",
                  "@appinfo":"flag to turn on Script tracing",
                  "@type":"SFBool"
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"SatellitePair",
              "@appinfo":"SatellitePair consists of two TRC170 dishes for long range (up to 100 mile) point-to-point communication. TRC170s can be used in 3 different settings. The first is a direct link of up to 30 miles. The second is a defraction setting over an obstruction in the path. The third is a tropospheric scatter shot of up to 100 miles in which the signal is bounced off the troposphere. This PROTO allows specification for the initial placement of each TSSR. It automatically calculates the correct angle to complete the link.",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"GroundLocation",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[1,1,1]
                    },
                    {
                      "@name":"SatelliteLocation",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Group":
                      {
                        "-children":[
                          { "Transform":
                            {
                              "@DEF":"HighAboveXZTranslation"
                            }
                          },
                          { "Viewpoint":
                            {
                              "@DEF":"GroundViewpoint",
                              "@description":"Ground Station"
                            }
                          },
                          { "Viewpoint":
                            {
                              "@DEF":"SatelliteViewpoint",
                              "@description":"Satellite"
                            }
                          },
                          { "Script":
                            {
                              "@DEF":"TransmitScript",
                              "field": [
                                {
                                  "@name":"transState",
                                  "@accessType":"inputOnly",
                                  "@type":"SFInt32"
                                },
                                {
                                  "@name":"size",
                                  "@accessType":"outputOnly",
                                  "@type":"SFVec3f"
                                }
                              ],
                              "#sourceCode":[
"",
"",
"ecmascript:",
"",
"function initialize ()",
"{",
"\tsize = new SFVec3f(100, 100, 100) ;",
"\tBrowser.println ('TransmitScript initialize() complete') ;",
"}",
"",
"// function name matches eventIn variable name ('hour')",
"// hourValue captures the new value of the ROUTE hour event",
"// minutes is just the current field value",
"",
"function transState (newValue, timestamp)",
"{",
"\ttransmitState = newValue ;",
"\tif (transmitState == 3) {",
"\t\tsize = new SFVec3f(10, 10, 10) ;",
"\t}",
"\telse {",
"\t\tsize = new SFVec3f(100, 100, 100) ;",
"\t}",
"\tBrowser.println ('size\t= ' + size) ;",
"}",
"",
""
]
                            }
                          },
                          { "Script":
                            {
                              "@DEF":"TransmitScript2",
                              "field": [
                                {
                                  "@name":"transState",
                                  "@accessType":"inputOnly",
                                  "@type":"SFInt32"
                                },
                                {
                                  "@name":"size",
                                  "@accessType":"outputOnly",
                                  "@type":"SFVec3f"
                                }
                              ],
                              "#sourceCode":[
"",
"",
"ecmascript:",
"",
"function initialize ()",
"{",
"\tsize = new SFVec3f(100, 100, 100) ;",
"\tBrowser.println ('TransmitScript initialize() complete') ;",
"}",
"",
"// function name matches eventIn variable name ('hour')",
"// hourValue captures the new value of the ROUTE hour event",
"// minutes is just the current field value",
"",
"function transState (newValue, timestamp)",
"{",
"\ttransmitState = newValue ;",
"\tif (transmitState == 3) {",
"\t\tsize = new SFVec3f(10, 10, 10) ;",
"\t}",
"\telse {",
"\t\tsize = new SFVec3f(100, 100, 100) ;",
"\t}",
"\tBrowser.println ('size\t= ' + size) ;",
"}",
"",
""
]
                            }
                          },
                          { "LOD":
                            {
                              "@range":[200000],
                              "-children":[
                                {
                                  "#comment":"TRC 1 Two Transforms. One in the XZ plane, the second in the XY plane. Inlines for the TRC body, stand, and the dome pattern."
                                },
                                { "Transform":
                                  {
                                    "@DEF":"GROUND_TRANSFORM",
                                    "@translation":[-2,0,0],
                                    "IS": {
                                        "connect": [
                                          {
                                            "@nodeField":"translation",
                                            "@protoField":"GroundLocation"
                                          }
                                        ]
                                    },
                                    "-children":[
                                      { "Transform":
                                        {
                                          "@DEF":"Ground_XY_TRANSFORM",
                                          "@translation":[1,5,0],
                                          "-children":[
                                            { "Inline":
                                              {
                                                "@DEF":"GroundBody",
                                                "@url":["SatelliteDish.x3d","../../CommunicationsAndSensors/Satellite/SatelliteDish.x3d","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatelliteDish.x3d","../../CommunicationsAndSensors/Satellite/SatelliteDish.wrl","SatelliteDish.wrl","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatelliteDish.wrl"]
                                              }
                                            },
                                            { "Transform":
                                              {
                                                "@DEF":"GroundCone",
                                                "@translation":[2,0,0],
                                                "-children":[
                                                  { "Group":
                                                    {
                                                      "-children":[
                                                        { "ProtoInstance":
                                                          {
                                                            "@name":"BeamCone",
                                                            "@DEF":"GROUND_BEAMCONE",
                                                            "fieldValue": [
                                                              {
                                                                "@name":"defaultRange",
                                                                "@value":10
                                                              },
                                                              {
                                                                "@name":"beamHeightDegrees",
                                                                "@value":5
                                                              },
                                                              {
                                                                "@name":"beamWidthDegrees",
                                                                "@value":5
                                                              },
                                                              {
                                                                "@name":"transparency",
                                                                "@value":0.2
                                                              },
                                                              {
                                                                "@name":"wireframe",
                                                                "@value":true
                                                              },
                                                              {
                                                                "@name":"solid",
                                                                "@value":true
                                                              },
                                                              {
                                                                "@name":"noContactColor",
                                                                "@value":[0.8,0.1,0.1]
                                                              },
                                                              {
                                                                "@name":"contactColor",
                                                                "@value":[0.3,0.5,0.5]
                                                              }
                                                            ]
                                                          }
                                                        }
                                                      ]
                                                    }
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        }
                                      },
                                      { "Transform":
                                        {
                                          "-children":[
                                            { "Inline":
                                              {
                                                "@DEF":"GroundStand",
                                                "@url":["SatelliteTripod.x3d","../../CommunicationsAndSensors/Satellite/SatelliteTripod.x3d","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatelliteTripod.x3d","../../CommunicationsAndSensors/Satellite/SatelliteTripod.wrl","SatelliteTripod.wrl","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatelliteTripod.wrl"]
                                              }
                                            },
                                            { "LOD":
                                              {
                                                "@range":[500],
                                                "-children":[
                                                  { "Transform":
                                                    {
                                                      "-children":[
                                                        { "Viewpoint":
                                                          {
                                                            "@description":"Ground Station Side View",
                                                            "@position":[0,5,40]
                                                          }
                                                        }
                                                      ]
                                                    }
                                                  },
                                                  { "WorldInfo":
                                                    {
                                                      "@info":["null node for no rendering when distant"]
                                                    }
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "WorldInfo":
                                  {
                                    "@info":["null node for no rendering when distant"]
                                  }
                                }
                              ]
                            }
                          },
                          { "LOD":
                            {
                              "@range":[200000],
                              "-children":[
                                {
                                  "#comment":"TRC 2 Two Transforms. One in the XZ plane, the second in the XY plane. Inlines for the TRC body, stand, and the dome pattern."
                                },
                                { "Transform":
                                  {
                                    "@DEF":"Satellite_TRANSFORM",
                                    "@translation":[-2,0,0],
                                    "IS": {
                                        "connect": [
                                          {
                                            "@nodeField":"translation",
                                            "@protoField":"SatelliteLocation"
                                          }
                                        ]
                                    },
                                    "-children":[
                                      { "Transform":
                                        {
                                          "@scale":[5,5,5],
                                          "-children":[
                                            { "Inline":
                                              {
                                                "@url":["SatelliteBody.x3d","../../CommunicationsAndSensors/Satellite/SatelliteBody.x3d","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatelliteBody.x3d","../../CommunicationsAndSensors/Satellite/SatelliteBody.wrl","SatelliteBody.wrl","https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Satellite/SatelliteBody.wrl"]
                                              }
                                            }
                                          ]
                                        }
                                      },
                                      { "Transform":
                                        {
                                          "@DEF":"Satellite_XY_TRANSFORM",
                                          "@translation":[1,5,0],
                                          "-children":[
                                            { "Transform":
                                              {
                                                "@DEF":"SatelliteCone",
                                                "@translation":[0,-10,0],
                                                "-children":[
                                                  { "Group":
                                                    {
                                                      "-children":[
                                                        { "ProtoInstance":
                                                          {
                                                            "@name":"BeamCone",
                                                            "@DEF":"Satellite_BEAMCONE",
                                                            "fieldValue": [
                                                              {
                                                                "@name":"defaultRange",
                                                                "@value":10
                                                              },
                                                              {
                                                                "@name":"beamHeightDegrees",
                                                                "@value":60
                                                              },
                                                              {
                                                                "@name":"beamWidthDegrees",
                                                                "@value":60
                                                              },
                                                              {
                                                                "@name":"transparency",
                                                                "@value":0.2
                                                              },
                                                              {
                                                                "@name":"wireframe",
                                                                "@value":true
                                                              },
                                                              {
                                                                "@name":"solid",
                                                                "@value":true
                                                              },
                                                              {
                                                                "@name":"noContactColor",
                                                                "@value":[0.8,0.1,0.1]
                                                              },
                                                              {
                                                                "@name":"contactColor",
                                                                "@value":[0.3,0.5,0.5]
                                                              }
                                                            ]
                                                          }
                                                        }
                                                      ]
                                                    }
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        }
                                      },
                                      { "Transform":
                                        {
                                          "-children":[
                                            { "LOD":
                                              {
                                                "@range":[500],
                                                "-children":[
                                                  { "Viewpoint":
                                                    {
                                                      "@description":"Satellite Side View",
                                                      "@position":[0,5,40]
                                                    }
                                                  },
                                                  { "WorldInfo":
                                                    {
                                                      "@info":["null node"]
                                                    }
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  }
                                },
                                { "WorldInfo":
                                  {
                                    "@info":["null node"]
                                  }
                                }
                              ]
                            }
                          },
                          { "Script":
                            {
                              "@DEF":"CalculateAngleScript",
                              "field": [
                                {
                                  "@name":"GroundLocation",
                                  "@accessType":"initializeOnly",
                                  "@type":"SFVec3f"
                                },
                                {
                                  "@name":"SatelliteLocation",
                                  "@accessType":"initializeOnly",
                                  "@type":"SFVec3f"
                                },
                                {
                                  "@name":"Ground_XZangle",
                                  "@accessType":"outputOnly",
                                  "@type":"SFRotation"
                                },
                                {
                                  "@name":"Satellite_XZangle",
                                  "@accessType":"outputOnly",
                                  "@type":"SFRotation"
                                },
                                {
                                  "@name":"beamScale",
                                  "@accessType":"outputOnly",
                                  "@type":"SFVec3f"
                                },
                                {
                                  "@name":"Ground_beamLength",
                                  "@accessType":"outputOnly",
                                  "@type":"SFFloat"
                                },
                                {
                                  "@name":"Satellite_beamLength",
                                  "@accessType":"outputOnly",
                                  "@type":"SFFloat"
                                },
                                {
                                  "@name":"Ground_XYangle",
                                  "@accessType":"outputOnly",
                                  "@type":"SFRotation"
                                },
                                {
                                  "@name":"Satellite_XYangle",
                                  "@accessType":"outputOnly",
                                  "@type":"SFRotation"
                                },
                                {
                                  "@name":"LinkEstablished",
                                  "@accessType":"outputOnly",
                                  "@type":"SFBool"
                                },
                                {
                                  "@name":"Ground_Viewpoint",
                                  "@accessType":"outputOnly",
                                  "@type":"SFVec3f"
                                },
                                {
                                  "@name":"Satellite_Viewpoint",
                                  "@accessType":"outputOnly",
                                  "@type":"SFVec3f"
                                },
                                {
                                  "@name":"Ground_ViewpointAngle",
                                  "@accessType":"outputOnly",
                                  "@type":"SFRotation"
                                },
                                {
                                  "@name":"Satellite_ViewpointAngle",
                                  "@accessType":"outputOnly",
                                  "@type":"SFRotation"
                                }
                              ],
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"GroundLocation",
                                      "@protoField":"GroundLocation"
                                    },
                                    {
                                      "@nodeField":"SatelliteLocation",
                                      "@protoField":"SatelliteLocation"
                                    }
                                  ]
                              },
                              "#sourceCode":[
"",
"",
"ecmascript:",
"",
"function initialize ()",
"{",
"\tBrowser.println ('GroundStation\t=' + GroundLocation) ;",
"\tBrowser.println ('Satellite\t\t=' + SatelliteLocation) ;",
"\tBrowser.println ('TransmitScript initialize() complete') ;",
"\tactive = true ;",
"\tGround_XZangle\t= new SFRotation(0, 1, 0, 0) ;",
"\tSatellite_XZangle\t= new SFRotation(0, 1, 0, 0) ;",
"\tGround_XYangle\t= new SFRotation(0, 0, 1, 0) ;",
"\tSatellite_XYangle\t= new SFRotation(0, 0, 1, 0) ;",
"\tXZangle\t= new SFRotation(0, 1, 0, 0) ;",
"\tXYangle\t= new SFRotation(0, 0, 1, 0) ;",
"\tGround_ViewpointAngle\t= new SFRotation(0, 1, 0, 0) ;",
"\tSatellite_ViewpointAngle\t= new SFRotation(1, 0, 0, 0) ;",
"\tHighAboveViewpointAngle\t= new SFRotation(1, 0, 0, 0) ;\t",
"\tHighAboveTranslationAngle\t= new SFRotation(0, 1, 0, 0) ;",
"",
"\tbeamScale\t\t= new SFVec3f ( ) ;",
"\tcenter\t\t= new SFVec3f ( ) ;",
"\tGround_Viewpoint\t= new SFVec3f ( ) ;",
"\tSatellite_Viewpoint\t= new SFVec3f ( ) ;",
"\tHighAboveViewpoint\t= new SFVec3f ( ) ;",
"\tLinkEstablished\t= true;",
"\t\t",
"\tcompute(active) ;",
"}",
"",
"",
"function compute ( )",
"{",
"\t\tcomputeDistance( ) ;",
"\t\tcomputeXZangle( );",
"\t\tcomputeXYangle( ) ;",
"",
"\tGround_Viewpoint[0]\t= GroundLocation[0] + Math.sin(Ground_XZangle[3] - 1.57)*40;",
"\tGround_Viewpoint[1]\t= GroundLocation[1] + 10;",
"\tGround_Viewpoint[2]\t= GroundLocation[2] +Math.cos(Ground_XZangle[3] - 1.57)*40;",
"print ('Ground_Viewpoint\t'+ Ground_Viewpoint) ;",
"\tGround_ViewpointAngle[3]\t= Ground_XZangle[3] - 1.57 ;",
"",
"\tSatellite_Viewpoint[0]\t= SatelliteLocation[0] ;",
"\tSatellite_Viewpoint[1]\t= SatelliteLocation[1] + 200;",
"\tSatellite_Viewpoint[2]\t= SatelliteLocation[2] ;",
"\tSatellite_ViewpointAngle[3]\t=  -1.57 ;",
"print ('Satellite_Viewpoint\t'+ Satellite_Viewpoint) ;",
"\t",
"}",
"",
"",
"",
"function computeDistance( ) ",
"{",
"\tBrowser.println ('Ground\t=' + GroundLocation) ;",
"\tBrowser.println ('Satellite\t=' + SatelliteLocation) ;",
"\tdeltaX \t= (SatelliteLocation[0] - GroundLocation[0]) ;",
"\tdeltaY \t= (SatelliteLocation[1] - GroundLocation[1]) ;",
"\tdeltaZ \t= (SatelliteLocation[2] - GroundLocation[2]) ;",
"\tdistanceSquared\t= deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ ;",
"\tBrowser.println ('Distance Squared\t=' + distanceSquared) ;",
"\tdistance \t= Math.sqrt(distanceSquared) ;",
"\tBrowser.println ('Distance\t=' + distance) ;",
"",
"\tbeamScale[0] \t= distance/10;",
"\tbeamScale[1]\t= 10;",
"\tbeamScale[2]\t= 10;\t",
"\tBrowser.println ('BeamScale\t=' + beamScale) ;",
"\tGround_beamLength \t= distance -2;\t",
"\tSatellite_beamLength \t= 2000;",
"\tif (distance > 60000/.6*1000) {",
"\t\tLinkEstablished = false;",
"\t\tGround_beamLength = 5000/.6 ;\t",
"\t\tSatellite_beamLength = 5000/.6 ;",
"\t}",
"}",
"",
"function computeXZangle( ) ",
"{",
"\tif (deltaZ == 0) {",
"\t\tdeltaZ = .00000001 ;",
"\t}",
"\t",
"\tangle \t= Math.atan(deltaX/deltaZ) ;",
"\tif (deltaZ < 0) {",
"\t\tGround_XZangle[3] = angle + Math.PI/2;",
"\t}",
"\telse {",
"\t\tGround_XZangle[3] = angle -  Math.PI/2;",
"\t}",
"\tSatellite_XZangle[3]  = 1.57;",
"\t",
"\tBrowser.println ('Angle\t=' + Ground_XZangle[3]) ;",
"\tBrowser.println ('Angle2\t=' + Satellite_XZangle[3]) ;",
"}\t",
"\t\t",
"",
"",
"function computeXYangle( ) ",
"{",
"\tangle \t= Math.asin(deltaY/distance) ;",
"\tGround_XYangle[3] = angle ;",
"\tSatellite_XYangle[3]  = -1.57;",
"\t",
"\tBrowser.println ('AngleXY\t=' + Ground_XYangle[3]) ;",
"\tBrowser.println ('Angle2XY\t=' + Satellite_XYangle[3]) ;",
"}",
"",
""
]
                            }
                          }
                        ]
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Ground_XZangle",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"rotation",
                        "@toNode":"GROUND_TRANSFORM"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Satellite_XZangle",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"rotation",
                        "@toNode":"Satellite_TRANSFORM"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Ground_beamLength",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"range",
                        "@toNode":"GROUND_BEAMCONE"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Ground_XYangle",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"rotation",
                        "@toNode":"Ground_XY_TRANSFORM"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Satellite_XYangle",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"rotation",
                        "@toNode":"Satellite_XY_TRANSFORM"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"LinkEstablished",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"contact",
                        "@toNode":"GROUND_BEAMCONE"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"LinkEstablished",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"contact",
                        "@toNode":"Satellite_BEAMCONE"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Ground_Viewpoint",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"position",
                        "@toNode":"GroundViewpoint"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Satellite_Viewpoint",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"position",
                        "@toNode":"SatelliteViewpoint"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Ground_ViewpointAngle",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"orientation",
                        "@toNode":"GroundViewpoint"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"Satellite_ViewpointAngle",
                        "@fromNode":"CalculateAngleScript",
                        "@toField":"orientation",
                        "@toNode":"SatelliteViewpoint"
                      }
                    }
                  ]
              }
            }
          },
          {
            "#comment":"===================="
          },
          { "WorldInfo":
            {
              "@info":["Authors: Mike Hunsberger","Revised: 30 April 2001","Purpose: Pair of TSSRs","Browser: CosmoPlayer"],
              "@title":"AntennaWorld"
            }
          },
          { "Background":
            {
              "@groundAngle":[1.57079],
              "@groundColor":[1,0.8,0.6,0.6,0.4,0.2],
              "@skyAngle":[0.2],
              "@skyColor":[1,1,1,0.2,0.2,1]
            }
          },
          { "ProtoInstance":
            {
              "@name":"SatellitePair",
              "fieldValue": [
                {
                  "@name":"GroundLocation",
                  "@value":[0,0,0]
                },
                {
                  "@name":"SatelliteLocation",
                  "@value":[-1020000,42000000,-22000000]
                }
              ]
            }
          }
        ]
    }
  }
}