[x3d-public] including ProtoInterface keys in the JSON encoding

Don Brutzman brutzman at nps.edu
Sun Dec 6 17:43:53 PST 2015


Again, great refinement you suggested.

Treating ProtoInterface similarly to ProtoBody seems to work well.

Example attached, please advise.


On 12/6/2015 1:09 PM, Don Brutzman wrote:
> On 12/4/2015 8:55 PM, John Carlson wrote:
>> I was able to get my scripts working loading from either X3D XML -> Cobweb or X3D XML -> JSON -> Cobweb by inlining them.  My scripts don’t use ProtoInterface, so the lack of that didn’t cause an issue.  So the good news is, we have Prototypes and Scripts partially working with X3D JSON and the X3D JSON loader, albeit via XML for now until we can get native tool support.  We do need ProtoInterfaces for a complete tool, but I’m hoping that will come without many more additional changes to my X3D JSON Loader (Don, can you change X3dToJson.xslt to output ProtoInterface keys?  If you like I can be an alias for field Thank you.)
>
> Previously we omitted ProtoInterface keys for terseness.
>
> However it does make more sense to include them, for symmetry with XML encoding and also since author scripts might be adding class attributes or HTML callbacks etc. to elements in the DOM tree.
>
> Added to Issues list of TODO action items, will work on it.
>
> http://www.web3d.org/x3d/stylesheets/X3dToJson.html#Issues

all the best, Don
-- 
Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman at nps.edu
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman
-------------- next part --------------
{ "X3D": {
    "@profile":"Immersive",
    "@version":3.3,
    "@xsd:noNamespaceSchemaLocation":"http://www.web3d.org/specifications/x3d-3.3.xsd",
    "head": {
        "meta": [
          {
            "@name":"title",
            "@content":"ArchPrototype.x3d"
          },
          {
            "@name":"description",
            "@content":"Create an arch. Can modify general parameters: clearSpanWidth, riseHeight, depth, topAbutmentHeight, pierWidth, pierHeight. See the reference file ArchModelingDiagrams.pdf to find further information. See also ArchPrototypeScript_more_readable.js."
          },
          {
            "@name":"description",
            "@content":"Possibility to create shapes related to arch: ArchHalf; IntradosOnly; ArchFilled; ArchHalfFilled; Lintel. See the reference file ArchModelingDiagrams.pdf to find further information."
          },
          {
            "@name":"creator",
            "@content":"Michele Foti, Don Brutzman"
          },
          {
            "@name":"created",
            "@content":"15 December 2014"
          },
          {
            "@name":"modified",
            "@content":"27 November 2015"
          },
          {
            "@name":"reference",
            "@content":"ArchModelingDiagrams.pdf"
          },
          {
            "@name":"reference",
            "@content":"https://en.wikipedia.org/wiki/Arch"
          },
          {
            "@name":"identifier",
            "@content":"http://X3dGraphics.com/examples/X3dForAdvancedModeling/Buildings/ArchPrototype.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../license.html"
          }
        ]
    },
    "Scene": {
        "#comment":[
          "Add any ROUTEs here that connect ProtoInstance to/from prior nodes in Scene (and outside of ProtoDeclare)"
        ],
        "-children":[
          { "ProtoDeclare":
            {
              "@name":"ArchPrototype",
              "@appinfo":"Create an arch. Can modify general parameters: clearSpanWidth, riseHeight, depth, topAbutmentHeight, pierWidth, pierHeight. - Possibility to create shapes related to an arch: ArchHalf; IntradosOnly; ArchFilled; ArchHalfFilled; Lintel. See the reference file ArchModelingDiagrams.pdf to find further information. See also ArchPrototypeScript_more_readable.js.js.",
              "ProtoInterface": {
                  "#comment":[
                    "COLOR OF ARCH",
                    "INPUT PARAMETERS",
                    "General parameters: measures in meters",
                    "Parameters to create to create shapes related to arch: put true to apply"
                  ],
                  "field": [
                    {
                      "@name":"diffuseColor",
                      "@accessType":"inputOutput",
                      "@appinfo":"color of arch",
                      "@type":"SFColor",
                      "@value":[0.2,0.8,0.8]
                    },
                    {
                      "@name":"emissiveColor",
                      "@accessType":"inputOutput",
                      "@appinfo":"color of arch",
                      "@type":"SFColor",
                      "@value":[0.2,0.8,0.8]
                    },
                    {
                      "@name":"clearSpanWidth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"clearSpanWidth: clearSpanWidth must be double of riseHeight to obtain an half circumference",
                      "@type":"SFFloat",
                      "@value":4
                    },
                    {
                      "@name":"riseHeight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"riseHeight: riseHeight must be half of clearSpanWidth to obtain an half circumference",
                      "@type":"SFFloat",
                      "@value":2
                    },
                    {
                      "@name":"depth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"depth",
                      "@type":"SFFloat",
                      "@value":3
                    },
                    {
                      "@name":"topAbutmentHeight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"topAbutmentHeight:topAbutmentHeight=0 means no topAbutment",
                      "@type":"SFFloat",
                      "@value":0.5
                    },
                    {
                      "@name":"pierWidth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"pierWidth:pierWidtht=0 means no pierWidth",
                      "@type":"SFFloat",
                      "@value":0.5
                    },
                    {
                      "@name":"pierHeight",
                      "@accessType":"initializeOnly",
                      "@appinfo":"pierHeight: pierHeight=0 means no pierHeight",
                      "@type":"SFFloat",
                      "@value":1
                    },
                    {
                      "@name":"archHalf",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archHalf: can modify also clearSpanWidth, riseHeight, depth, pierWidth, pierHeight, topAbutmentHeight, archHalfExtensionWidth at purpose, clearSpanWidth measure refers to a full arc, consider clearSpanWidth/2 for the archHalf width",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"archHalfExtensionWidth",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archHalfExtensionWidth: measure in meters, use only if archHalf=true, it is the width of the etension of the abutment of the archHalf. See the reference file ArchModelingDiagrams.pdf to find further information.",
                      "@type":"SFFloat",
                      "@value":0
                    },
                    {
                      "@name":"onlyIntrados",
                      "@accessType":"initializeOnly",
                      "@appinfo":"onlyIntrados: note it is a flat curved surface, can modify also clearSpanWidth, riseHeight, depth at purpose, if needed apply archHalf=true.",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"archFilled",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archFilled: note it is an half cylinder, can modify also clearSpanWidth, riseHeight, depth at purpose.",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"archHalfFilled",
                      "@accessType":"initializeOnly",
                      "@appinfo":"archHalfFilled: note it is a quarter cylinder, can modify also clearSpanWidth, riseHeight, depth at purpose, clearSpanWidth measure refers to a full arc, consider clearSpanWidth/2 for the archHalfFilled width.",
                      "@type":"SFBool",
                      "@value":false
                    },
                    {
                      "@name":"lintel",
                      "@accessType":"initializeOnly",
                      "@appinfo":"lintel: no arc is rendered, but a lintel: topAbutmentHeight on pierHeight, total height is pierHeight + topAbutmentHeight, if needed apply archHalf=true.",
                      "@type":"SFBool",
                      "@value":false
                    }
                  ]
              },
              "ProtoBody": {
                  "#comment":[
                    "First node determines node type of this prototype",
                    "IndexedFaceset creates arch",
                    "Subsequent nodes do not render, but still must be a valid X3D subgraph",
                    "This embedded Script provides the X3D author with additional visibility and control over prototype inputs and outputs"
                  ],
                  "-children":[
                    { "Transform":
                      {
                        "@DEF":"ArchTransform",
                        "-children":[
                          { "Shape":
                            {
                              "@DEF":"Arch",
                              "#comment":[
                                "note that convex='false' (meaning concave geometry) is crucial for this IFS of a geometric chord to render properly"
                              ],
                              "-geometry":[
                                { "IndexedFaceSet":
                                  {
                                    "@DEF":"ArchIndex",
                                    "@convex":false,
                                    "@solid":false,
                                    "-coord":[
                                      { "Coordinate":
                                        {
                                          "@DEF":"ArchChord"
                                        }
                                      }
                                    ]
                                  }
                                }
                              ],
                              "-appearance":[
                                { "Appearance":
                                  {
                                    "-material":[
                                      { "Material":
                                        {
                                          "@DEF":"MaterialNode",
                                          "IS": {
                                              "connect": [
                                                {
                                                  "@nodeField":"emissiveColor",
                                                  "@protoField":"emissiveColor"
                                                },
                                                {
                                                  "@nodeField":"diffuseColor",
                                                  "@protoField":"diffuseColor"
                                                }
                                              ]
                                          }
                                        }
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    { "Script":
                      {
                        "@DEF":"ArchPrototypeScript",
                        "@url":["ArchPrototypeScript.js","http://X3dGraphics.com/examples/X3dForAdvancedModeling/Buildings/ArchPrototypeScript.js"],
                        "#comment":[
                          "INPUT PARAMETERS",
                          "General parameters",
                          "Parameters to create to create shapes related to arch: put true to apply",
                          "OUTPUT PARAMETERS"
                        ],
                        "field": [
                          {
                            "@name":"clearSpanWidth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for clearSpanWidth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"riseHeight",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for riseHeight parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"depth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for depth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"topAbutmentHeight",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for topAbutmentHeight parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"pierWidth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for pierWidth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"pierHeight",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for pierHeight parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"archHalf",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archHalf parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"archHalfExtensionWidth",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archHalfExtensionWidth parameter",
                            "@type":"SFFloat"
                          },
                          {
                            "@name":"onlyIntrados",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for onlyIntrados parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"archFilled",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archFilled parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"archHalfFilled",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for archHalfFilled parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"lintel",
                            "@accessType":"initializeOnly",
                            "@appinfo":"user or default input for lintel parameter",
                            "@type":"SFBool"
                          },
                          {
                            "@name":"computedScale",
                            "@accessType":"outputOnly",
                            "@appinfo":"computedScale: modify scale field - NOTE it is not used to modify the whole arch, but to modify clearSpanWidth, riseHeight, depth. It does not affect topAbutmentHeight, pierWidth, pierHeight, archHalfExtensionWidth",
                            "@type":"SFVec3f"
                          },
                          {
                            "@name":"pointOut",
                            "@accessType":"outputOnly",
                            "@appinfo":"send computed points to the Coordinate node",
                            "@type":"MFVec3f"
                          },
                          {
                            "@name":"indexOut",
                            "@accessType":"outputOnly",
                            "@appinfo":"send computed indices to the IndexedFaceSet node",
                            "@type":"MFInt32"
                          }
                        ],
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"clearSpanWidth",
                                "@protoField":"clearSpanWidth"
                              },
                              {
                                "@nodeField":"riseHeight",
                                "@protoField":"riseHeight"
                              },
                              {
                                "@nodeField":"depth",
                                "@protoField":"depth"
                              },
                              {
                                "@nodeField":"pierWidth",
                                "@protoField":"pierWidth"
                              },
                              {
                                "@nodeField":"topAbutmentHeight",
                                "@protoField":"topAbutmentHeight"
                              },
                              {
                                "@nodeField":"pierHeight",
                                "@protoField":"pierHeight"
                              },
                              {
                                "@nodeField":"archHalf",
                                "@protoField":"archHalf"
                              },
                              {
                                "@nodeField":"archHalfExtensionWidth",
                                "@protoField":"archHalfExtensionWidth"
                              },
                              {
                                "@nodeField":"onlyIntrados",
                                "@protoField":"onlyIntrados"
                              },
                              {
                                "@nodeField":"archFilled",
                                "@protoField":"archFilled"
                              },
                              {
                                "@nodeField":"archHalfFilled",
                                "@protoField":"archHalfFilled"
                              },
                              {
                                "@nodeField":"lintel",
                                "@protoField":"lintel"
                              }
                            ]
                        }
                      }
                    }
                  ],
                  "ROUTE": [
                    {
                      "@fromField":"computedScale",
                      "@fromNode":"ArchPrototypeScript",
                      "@toField":"scale",
                      "@toNode":"ArchTransform"
                    },
                    {
                      "@fromField":"pointOut",
                      "@fromNode":"ArchPrototypeScript",
                      "@toField":"point",
                      "@toNode":"ArchChord"
                    },
                    {
                      "@fromField":"indexOut",
                      "@fromNode":"ArchPrototypeScript",
                      "@toField":"set_coordIndex",
                      "@toNode":"ArchIndex"
                    }
                  ]
              }
            }
          },
          { "ProtoInstance":
            {
              "@name":"ArchPrototype",
              "@DEF":"ArchInstance",
              "fieldValue": [
                {
                  "@name":"diffuseColor",
                  "@value":[0.5,0.3,0.6]
                },
                {
                  "@name":"emissiveColor",
                  "@value":[0.5,0.3,0.6]
                },
                {
                  "@name":"clearSpanWidth",
                  "@value":5
                },
                {
                  "@name":"riseHeight",
                  "@value":2.5
                },
                {
                  "@name":"depth",
                  "@value":2
                },
                {
                  "@name":"topAbutmentHeight",
                  "@value":0.6
                },
                {
                  "@name":"pierWidth",
                  "@value":1
                },
                {
                  "@name":"pierHeight",
                  "@value":2
                }
              ]
            }
          },
          { "Inline":
            {
              "@DEF":"CoordinateAxes",
              "@url":["../../X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.x3d","../../../Savage/Tools/Authoring/CoordinateAxes.x3d","http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.x3d","https://savage.nps.edu/Savage/Tools/Authoring/CoordinateAxes.x3d","../../X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.wrl","../../../Savage/Tools/Authoring/CoordinateAxes.wrl","http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.wrl","https://savage.nps.edu/Savage/Tools/Authoring/CoordinateAxes.wrl"]
            }
          }
        ]
    }
  }
}


More information about the x3d-public mailing list