[x3d-public] Too many errors to report, X3dToJson.xslt -- Please fix 10x duplication also

John Carlson yottzumm at gmail.com
Thu Feb 4 22:54:31 PST 2021


I'll be performing some local tests on the stylesheets there appear to 
be many things to fix.

Don, please compare the JSON output from xslt3 with the output from 
saxon9he.jar/X3DJSAIL.

Here's the command I ran to get the errors (not attached, TL):

./../../node_modules/.bin/xslt3 
-xsl:/c/x3d-code/www.web3d.org/x3d/stylesheets/X3dToJson.xslt 
-s:x3dconnectorProto.x3d -o:x3dconnectorProto.json2

XML and JSON files attached.

Below, possibly related Schematron hints (some false positive?) Please 
explain, since I don't understand these messages, thanks!

*7. Performing X3D Schematron 
<http://www.web3d.org/x3d/tools/schematron/X3dSchematron.html> check...* 
<ProtoInstance name='x3dconnector' DEF='connector1'> <fieldValue 
name='startnode' value=''/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[1]/fieldValue[1], hint] <ProtoInstance 
name='x3dconnector' DEF='connector1'> <fieldValue name='endnode' 
value=''/> has matching ProtoDeclare but no corresponding field match 
for this fieldValue [/X3D/Scene/ProtoInstance[1]/fieldValue[2], hint] 
<ProtoInstance name='x3dconnector' DEF='connector1'> <fieldValue 
name='transnode' value=''/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[1]/fieldValue[3], hint] <ProtoInstance 
name='x3dconnector' DEF='connector1'> <fieldValue name='rotscalenode' 
value=''/> has matching ProtoDeclare but no corresponding field match 
for this fieldValue [/X3D/Scene/ProtoInstance[1]/fieldValue[4], hint] 
<ProtoInstance name='x3dconnector' DEF='connector1'> <fieldValue 
name='set_startpoint' value='0 0 0'/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[1]/fieldValue[5], hint] <ProtoInstance 
name='x3dconnector' DEF='connector1'> <fieldValue name='set_endpoint' 
value='0 0 0'/> has matching ProtoDeclare but no corresponding field 
match for this fieldValue [/X3D/Scene/ProtoInstance[1]/fieldValue[6], 
hint] <ProtoInstance name='x3dconnector' DEF='connector2'> <fieldValue 
name='startnode' value=''/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[2]/fieldValue[1], hint] <ProtoInstance 
name='x3dconnector' DEF='connector2'> <fieldValue name='endnode' 
value=''/> has matching ProtoDeclare but no corresponding field match 
for this fieldValue [/X3D/Scene/ProtoInstance[2]/fieldValue[2], hint] 
<ProtoInstance name='x3dconnector' DEF='connector2'> <fieldValue 
name='transnode' value=''/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[2]/fieldValue[3], hint] <ProtoInstance 
name='x3dconnector' DEF='connector2'> <fieldValue name='rotscalenode' 
value=''/> has matching ProtoDeclare but no corresponding field match 
for this fieldValue [/X3D/Scene/ProtoInstance[2]/fieldValue[4], hint] 
<ProtoInstance name='x3dconnector' DEF='connector2'> <fieldValue 
name='set_startpoint' value='0 0 0'/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[2]/fieldValue[5], hint] <ProtoInstance 
name='x3dconnector' DEF='connector2'> <fieldValue name='set_endpoint' 
value='0 0 0'/> has matching ProtoDeclare but no corresponding field 
match for this fieldValue [/X3D/Scene/ProtoInstance[2]/fieldValue[6], 
hint] <ProtoInstance name='x3dconnector' DEF='connector3'> <fieldValue 
name='startnode' value=''/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[3]/fieldValue[1], hint] <ProtoInstance 
name='x3dconnector' DEF='connector3'> <fieldValue name='endnode' 
value=''/> has matching ProtoDeclare but no corresponding field match 
for this fieldValue [/X3D/Scene/ProtoInstance[3]/fieldValue[2], hint] 
<ProtoInstance name='x3dconnector' DEF='connector3'> <fieldValue 
name='transnode' value=''/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[3]/fieldValue[3], hint] <ProtoInstance 
name='x3dconnector' DEF='connector3'> <fieldValue name='rotscalenode' 
value=''/> has matching ProtoDeclare but no corresponding field match 
for this fieldValue [/X3D/Scene/ProtoInstance[3]/fieldValue[4], hint] 
<ProtoInstance name='x3dconnector' DEF='connector3'> <fieldValue 
name='set_startpoint' value='0 0 0'/> has matching ProtoDeclare but no 
corresponding field match for this fieldValue 
[/X3D/Scene/ProtoInstance[3]/fieldValue[5], hint] <ProtoInstance 
name='x3dconnector' DEF='connector3'> <fieldValue name='set_endpoint' 
value='0 0 0'/> has matching ProtoDeclare but no corresponding field 
match for this fieldValue [/X3D/Scene/ProtoInstance[3]/fieldValue[6], 
hint] X3D Schematron check: *pass*. Good practice is to fix errors and 
warnings wherever possible, and consider silencing harmless 
informational messages, so that important indicators remain noticeable.

================

Interesting, 10-folder increase in JSON output from XML using xslt3.  
normal JSON output using saxon9he.jar is 1/4 the xslt3 size.  Yipes!

Let's figure out what's causing the increase!  We also should consider 
the global effect on disk space due to the upcoming X3D JSON standard.  
Perhaps we should consider using tabs or one space indents instead of 
2-4 spaces in the code in the stylesheet?

As far as I know, I am using the same stylesheet.

It appears like the main problem in the xslt3 output (*json2) is the 
number of ProtoDeclares, which appears to be the 10x factor in number of 
ProtoDeclare's.  Can this be snuffed in the X3dToJson.xslt stylesheet?   
These don't appear in the XML. Thanks!

$ grep ProtoDeclare x3dconnectorProto*json*

x3dconnectorProto.json:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json2:          { "ProtoDeclare":
x3dconnectorProto.json.new:          "ProtoDeclare": {
x3dconnectorProto.new.json:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":
x3dconnectorProto.new.json2:          { "ProtoDeclare":

Let's work on reducing the number of ProtoDeclare's in the xslt3 
generated JSON files, possibly by modifying the X3dToJson.xslt.  I am 
not sure what else to do!   Thanks!

It appears like we might have to special case the stylesheet for the 
stylesheet processor?

John

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20210205/e565eb24/attachment-0001.html>
-------------- next part --------------
{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.3",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.3.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-3.3-JSONSchema.json",
    "head": {
        "meta": [
          {
            "@name":"title",
            "@content":"x3dconnectorProto"
          },
          {
            "@name":"creator",
            "@content":"Lost, Doug Sanden I think"
          },
          {
            "@name":"generator",
            "@content":"manual"
          },
          {
            "@name":"identifier",
            "@content":"https://coderextreme.net/X3DJSONLD/x3dconnectorProto.x3d"
          },
          {
            "@name":"description",
            "@content":"a generic proto to connect two objects"
          },
          {
            "@name":"license",
            "@content":"https://www.web3d.org/x3d/content/examples/license.html"
          },
          {
            "@name":"translated",
            "@content":"05 February 2021"
          },
          {
            "@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":"Connector Proto"
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Viewpoint":
            {
              "@position":[0,0,5],
              "@description":"Only Viewpoint"
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Background":
            {
              "@skyColor":[0.4,0.4,0.4]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"G1",
              "-IllegalChildNodeFieldNameNotFound":[
                { "Shape":
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Appearance":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Material":
                              {
                                "@diffuseColor":[0.7,0.2,0.2]
                              }
                            }
                          ]
                      }
                    ],
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Sphere":
                        {
                          "@radius":0.1
                        }
                      }
                    ]
                }
              ],
              "-IllegalChildNodeFieldNameNotFound":[
                { "PlaneSensor":
                  {
                    "@description":"Grab to move",
                    "@DEF":"PS1"
                  }
                }
              ],
              "-children":[
                { "ROUTE":
                  {
                    "@fromNode":"PS1",
                    "@fromField":"translation_changed",
                    "@toNode":"G1",
                    "@toField":"set_translation"
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"G2",
              "@translation":[1,-1,0.01],
              "-IllegalChildNodeFieldNameNotFound":[
                { "Shape":
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Appearance":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Material":
                              {
                                "@diffuseColor":[0.2,0.7,0.2]
                              }
                            }
                          ]
                      }
                    ],
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Sphere":
                        {
                          "@radius":0.1
                        }
                      }
                    ]
                }
              ],
              "-IllegalChildNodeFieldNameNotFound":[
                { "PlaneSensor":
                  {
                    "@description":"Grab to move",
                    "@offset":[1,-1,0.01],
                    "@DEF":"PS2"
                  }
                }
              ],
              "-children":[
                { "ROUTE":
                  {
                    "@fromNode":"PS2",
                    "@fromField":"translation_changed",
                    "@toNode":"G2",
                    "@toField":"set_translation"
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"G3",
              "@translation":[1,1,0.01],
              "-IllegalChildNodeFieldNameNotFound":[
                { "Shape":
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Appearance":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Material":
                              {
                                "@diffuseColor":[0.2,0.7,0.2]
                              }
                            }
                          ]
                      }
                    ],
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Sphere":
                        {
                          "@radius":0.1
                        }
                      }
                    ]
                }
              ],
              "-IllegalChildNodeFieldNameNotFound":[
                { "PlaneSensor":
                  {
                    "@description":"Grab to move",
                    "@offset":[1,1,0.01],
                    "@DEF":"PS3"
                  }
                }
              ],
              "-children":[
                { "ROUTE":
                  {
                    "@fromNode":"PS3",
                    "@fromField":"translation_changed",
                    "@toNode":"G3",
                    "@toField":"set_translation"
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"G4",
              "@translation":[-1,1,0.01],
              "-IllegalChildNodeFieldNameNotFound":[
                { "Shape":
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Appearance":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Material":
                              {
                                "@diffuseColor":[0.2,0.7,0.2]
                              }
                            }
                          ]
                      }
                    ],
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Sphere":
                        {
                          "@radius":0.1
                        }
                      }
                    ]
                }
              ],
              "-IllegalChildNodeFieldNameNotFound":[
                { "PlaneSensor":
                  {
                    "@description":"Grab to move",
                    "@offset":[-1,1,0.01],
                    "@DEF":"PS4"
                  }
                }
              ],
              "-children":[
                { "ROUTE":
                  {
                    "@fromNode":"PS4",
                    "@fromField":"translation_changed",
                    "@toNode":"G4",
                    "@toField":"set_translation"
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"transC1",
              "-IllegalChildNodeFieldNameNotFound":[
                { "Transform":
                  {
                    "@DEF":"rotscaleC1",
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Shape":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Appearance":
                                "-IllegalChildNodeFieldNameNotFound":[
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.2,0.7,0.7],
                                      "@transparency":0.5
                                    }
                                  }
                                ]
                            }
                          ],
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Cylinder":
                              {
                                "@radius":0.05
                              }
                            }
                          ]
                      }
                    ]
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"transC2",
              "-IllegalChildNodeFieldNameNotFound":[
                { "Transform":
                  {
                    "@DEF":"rotscaleC2",
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Shape":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Appearance":
                                "-IllegalChildNodeFieldNameNotFound":[
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.2,0.7,0.7],
                                      "@transparency":0.5
                                    }
                                  }
                                ]
                            }
                          ],
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Cylinder":
                              {
                                "@radius":0.05
                              }
                            }
                          ]
                      }
                    ]
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "Transform":
            {
              "@DEF":"transC3",
              "-IllegalChildNodeFieldNameNotFound":[
                { "Transform":
                  {
                    "@DEF":"rotscaleC3",
                    "-IllegalChildNodeFieldNameNotFound":[
                      { "Shape":
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Appearance":
                                "-IllegalChildNodeFieldNameNotFound":[
                                  { "Material":
                                    {
                                      "@diffuseColor":[0.2,0.7,0.7],
                                      "@transparency":0.5
                                    }
                                  }
                                ]
                            }
                          ],
                          "-IllegalChildNodeFieldNameNotFound":[
                            { "Cylinder":
                              {
                                "@radius":0.05
                              }
                            }
                          ]
                      }
                    ]
                  }
                }
              ]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ],
        "-children":[
          { "ProtoDeclare":
            {
              "@name":"x3dconnector",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"startnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"endnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"transnode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"rotscalenode",
                      "@accessType":"initializeOnly",
                      "@type":"SFNode"
                    },
                    {
                      "@name":"set_startpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    },
                    {
                      "@name":"set_endpoint",
                      "@accessType":"inputOnly",
                      "@type":"SFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Script":
                      {
                        "@DEF":"S1",
                        "field": [
                          {
                            "@name":"startnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"endnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"transnode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"rotscalenode",
                            "@accessType":"initializeOnly",
                            "@type":"SFNode"
                          },
                          {
                            "@name":"set_startpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"set_endpoint",
                            "@accessType":"inputOnly",
                            "@type":"SFVec3f"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"startnode",
                                "@protoField":"startnode"
                              },
                              {
                                "@nodeField":"endnode",
                                "@protoField":"endnode"
                              },
                              {
                                "@nodeField":"transnode",
                                "@protoField":"transnode"
                              },
                              {
                                "@nodeField":"rotscalenode",
                                "@protoField":"rotscalenode"
                              },
                              {
                                "@nodeField":"set_startpoint",
                                "@protoField":"set_startpoint"
                              },
                              {
                                "@nodeField":"set_endpoint",
                                "@protoField":"set_endpoint"
                              }
                            ]
                        },
                        "#sourceText":[
"",
"            ecmascript:",
"        function recompute(startpoint,endpoint){",
"\t    if (typeof endpoint === 'undefined') {",
"\t\treturn;",
"\t    }",
"            var dif = endpoint.subtract(startpoint);",
"            var dist = dif.length()*0.5;",
"            var dif2 = dif.multiply(0.5);",
"            var norm = dif.normalize();",
"            var transl = startpoint.add(dif2);",
"\t    if (typeof Quaternion !== 'undefined') {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new Quaternion.rotateFromTo(new SFVec3f(0.0,1.0,0.0), norm)",
"\t\t    };",
"\t    } else {",
"\t\t    return {",
"\t\t\t    scale : new SFVec3f(1.0,dist,1.0),",
"\t\t\t    translation : transl,",
"\t\t\t    rotation : new SFRotation(new SFVec3f(0.0,1.0,0.0),norm)",
"\t\t    };",
"\t    }",
"\t}",
"\tfunction recompute_and_route(startpoint, endpoint) {",
"\t      var trafo = recompute(startpoint, endpoint);",
"\t      if (trafo) {",
"\t\t      transnode.translation = trafo.translation;",
"\t\t      rotscalenode.rotation = trafo.rotation;",
"\t\t      rotscalenode.scale = trafo.scale;",
"\t      }",
"\t}",
"        function initialize(){",
"            recompute_and_route(startnode.translation,endnode.translation);",
"        }",
"        function set_startpoint(val,t){",
"            recompute_and_route(val,endnode.translation);",
"        }",
"        function set_endpoint(val,t){",
"            recompute_and_route(startnode.translation,val);",
"        }",
"",
""
]
                      }
                    }
                  ]
              }
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G2",
              "@fromField":"translation_changed",
              "@toNode":"connector1",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G3",
              "@fromField":"translation_changed",
              "@toNode":"connector2",
              "@toField":"set_endpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G1",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_startpoint"
            }
          },
          { "ROUTE":
            {
              "@fromNode":"G4",
              "@fromField":"translation_changed",
              "@toNode":"connector3",
              "@toField":"set_endpoint"
            }
          }
        ]
    }
  }
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x3dconnectorProto.x3d
Type: model/x3d+xml
Size: 8739 bytes
Desc: not available
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20210205/e565eb24/attachment-0001.x3d>


More information about the x3d-public mailing list