[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