[x3d-public] working on JavaScript SAI example, without an SAI

John Carlson yottzumm at gmail.com
Mon Jan 13 19:09:58 PST 2020


Okay, I see a lot of problems straight off the bat.   There's this thing
called the execution context which I am not too familiar with as the first
parameter on the constructors.  I'm not quite sure where I'm going to get
that from.   Please start editing the code below to give me a flavor of
what I have to do.

On Mon, Jan 13, 2020 at 6:38 PM John Carlson <yottzumm at gmail.com> wrote:

> Here's the current scenegraph as JavaScript:
>
> I'm going to download the latest from X_ITE.
>
> John
>
>
> X3D = require('X3Dautoclass');
> var X3D0 =  new X3D({profile:"Immersive",version:"3.3"}
>       /* x3dVersionComparisonTest for this model:
> supportsX3dVersion(X3DObject.VERSION_3_0)=true */
> ,
>       new head({}
>         /* comment #1 */
>
>         /* comment #2 */
>
>         /* comment #3 */
>
>         /* comment #4 */
> ,
>         new component({name:"Navigation",level:3}),
>         new component({name:"Shaders",level:1}),
>         new component({name:"CADGeometry",level:2}),
>         new component({name:"DIS",level:2}),
>         new component({name:"H-Anim",level:1}),
>         new component({name:"Grouping",level:1}),
>         new component({name:"Layering",level:1}),
>         new
> unit({name:"AngleUnitConversion",category:"angle",conversionFactor:1.0}),
>         new
> unit({name:"LengthUnitConversion",category:"length",conversionFactor:1.0}),
>         new
> unit({name:"ForceFromPoundsToNewtons",category:"force",conversionFactor:4.4482}),
>         new meta({content:"HelloWorldProgramOutput.x3d",name:"title"}),
>         new meta({content:"continued development and testing in
> progress",name:"info"}),
>         new meta({content:"Example HelloWorldProgram creates an X3D model
> using the X3D Java Scene Access Interface Library
> (X3DJSAIL)",name:"description"}),
>         new meta({content:"
> https://www.web3d.org/specifications/java/X3DJSAIL.html
> ",name:"reference"}),
>         new
> meta({content:"HelloWorldProgramOutput.java",name:"generator"}),
>         new meta({content:"6 September 2016",name:"created"}),
>         new meta({content:"12 January 2020",name:"modified"}),
>         new meta({content:"X3D Java Scene Access Interface Library
> (X3DJSAIL)",name:"generator"}),
>         new meta({content:"
> https://www.web3d.org/specifications/java/examples/HelloWorldProgram.java
> ",name:"generator"}),
>         new meta({content:"Netbeans http://www.netbeans.org
> ",name:"generator"}),
>         new meta({content:"Don Brutzman",name:"creator"}),
>         new meta({content:"
> https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/java/examples/HelloWorldProgramOutput.x3d
> ",name:"reference"}),
>         new meta({content:"Console output, ClassicVRML encoding, VRML97
> encoding and pretty-print documentation:",name:"reference"}),
>         new meta({content:"HelloWorldProgramOutput.txt",name:"reference"}),
>         new
> meta({content:"HelloWorldProgramOutput.x3dv",name:"reference"}),
>         new meta({content:"HelloWorldProgramOutput.wrl",name:"reference"}),
>         new
> meta({content:"HelloWorldProgramOutput.html",name:"reference"}),
>         new meta({content:"
> https://savage.nps.edu/X3dValidator?url=https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d
> ",name:"reference"}),
>         new meta({content:"
> https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d
> ",name:"identifier"}),
>         new meta({content:"../license.html",name:"license"})),
>       new Scene({},
>         new ViewpointGroup({description:"Available viewpoints"},
>           new Viewpoint({DEF:"DefaultView",description:"Hello X3DJSAIL"}),
>           new Viewpoint({DEF:"TopDownView",description:"top-down view from
> above",orientation:[1,0,0,-1.570796],position:[0,100,0]})),
>         new
> NavigationInfo({type:["EXAMINE","FLY","ANY"],avatarSize:[0.25,1.6,0.75],transitionType:["LINEAR"]}),
>         new WorldInfo({DEF:"WorldInfoDEF",title:"HelloWorldProgram
> produced by X3D Java SAI Library (X3DJSAIL)"}),
>         new WorldInfo({USE:"WorldInfoDEF"}),
>         new WorldInfo({USE:"WorldInfoDEF"}),
>         new
> MetadataString({DEF:"scene.addChildMetadata",name:"test",value:["Top-level
> root Metadata node beneath Scene needs to be one of '-children' in JSON
> encoding"]}),
>         new LayerSet({DEF:"scene.addChildLayerSetTest",order:[0]}),
>         new Transform({DEF:"LogoGeometryTransform",translation:[0,1.5,0]},
>           new Anchor({description:"select for X3D Java SAI Library
> (X3DJSAIL) description",url:["../X3DJSAIL.html","
> https://www.web3d.org/specifications/java/X3DJSAIL.html"]},
>             new Shape({DEF:"BoxShape"},
>               new Appearance({},
>                 new
> Material({DEF:"GreenMaterial",diffuseColor:[0,1,1],emissiveColor:[0.8,0,0],transparency:0.1}),
>                 new
> ImageTexture({url:["images/X3dJavaSceneAccessInterfaceSaiLibrary.png","
> https://www.web3d.org/specifications/java/examples/images/X3dJavaSceneAccessInterfaceSaiLibrary.png
> "]})),
>               new
> Box({DEF:"test-NMTOKEN_regex.0123456789",cssClass:"untextured"})))),
>         new Shape({DEF:"LineShape"},
>           new Appearance({},
>             new Material({emissiveColor:[0.6,0.19607843,0.8]})),
>           new IndexedLineSet({coordIndex:[0,1,2,3,4,0]}
>             /* Coordinate 3-tuple point count: 6 */
> ,
>             new
> Coordinate({point:[0,1.5,0,2,1.5,0,2,1.5,-2,-2,1.5,-2,-2,1.5,0,0,1.5,0]}))),
>         new
> PositionInterpolator({DEF:"BoxPathAnimator",key:[0,0.125,0.375,0.625,0.875,1],keyValue:[0,1.5,0,2,1.5,0,2,1.5,-2,-2,1.5,-2,-2,1.5,0,0,1.5,0]}),
>         new TimeSensor({DEF:"OrbitClock",cycleInterval:8.0,loop:true}),
>         new
> ROUTE({fromField:"fraction_changed",fromNode:"OrbitClock",toField:"set_fraction",toNode:"BoxPathAnimator"}),
>         new
> ROUTE({fromField:"value_changed",fromNode:"BoxPathAnimator",toField:"set_translation",toNode:"LogoGeometryTransform"}),
>         new Transform({DEF:"TextTransform",translation:[0,-1.5,0]},
>           new Shape({},
>             new Appearance({},
>               new Material({USE:"GreenMaterial"})),
>             new Text({string:["X3D Java","SAI Library","X3DJSAIL"]}
>               /* Comment example A, plain quotation marks: He said,
> \"Immel did it!\" */
>
>               /* Comment example B, XML character entities: He said,
> "Immel did it!" */
> ,
>               new MetadataSet({name:"EscapedQuotationMarksMetadataSet"},
>                 new MetadataString({name:"quotesTestC",value:["MFString
> example C, backslash-escaped quotes: He said, \"Immel did it!\""]}),
>                 new MetadataString({name:"extraChildTest",value:["checks
> MetadataSetObject addValue() method"]})),
>               new
> FontStyle({family:["SERIF"],justify:["MIDDLE","MIDDLE"]}))),
>           new Collision({}
>             /* test containerField='proxy' */
> ,
>             new Shape({DEF:"ProxyShape"}
>               /* alternative XML encoding: Text string='\"One, Two,
> Comment\" \"\" \"He said, \\"Immel did it!\\"\"' */
>
>               /* alternative XML encoding: Text string='\"One, Two,
> Comment\" \"\" \"He said, \\"Immel did it!\\"\" \"\"' */
>
>               /* alternative Java source: .setString(new String [] {\"One,
> Two, Comment\", \"\", \"He said, \\\"Immel did it!\\\"\"}) */
>
>               /* reference:
> https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/StringArrayEncodingExamplesIndex.html
> */
> ,
>               new Text({string:["One, Two, Text","","He said, \"Immel did
> it!\" \"\""]})))
>           /* It's a beautiful world */
>
>           /* ... for you! */
>
>           /* https://en.wikipedia.org/wiki/Beautiful_World_(Devo_song) */
> )
>         /* repeatedly spin 180 degrees as a readable special effect */
> ,
>         new
> OrientationInterpolator({DEF:"SpinInterpolator",key:[0,0.5,1],keyValue:[0,1,0,4.712389,0,1,0,0,0,1,0,1.5707964]}),
>         new TimeSensor({DEF:"SpinClock",cycleInterval:5.0,loop:true}),
>         new
> ROUTE({fromField:"fraction_changed",fromNode:"SpinClock",toField:"set_fraction",toNode:"SpinInterpolator"}),
>         new
> ROUTE({fromField:"value_changed",fromNode:"SpinInterpolator",toField:"rotation",toNode:"TextTransform"}),
>         new Group({DEF:"BackgroundGroup"},
>           new Background({DEF:"GradualBackground"}),
>           new Script({DEF:"colorTypeConversionScript"},
>             new
> field({type:field.TYPE_SFCOLOR,name:"colorInput",accessType:field.ACCESSTYPE_INPUTONLY}),
>             new
> field({type:field.TYPE_MFCOLOR,name:"colorsOutput",accessType:field.ACCESSTYPE_OUTPUTONLY}),
>
> `
> ecmascript:
>
> function colorInput (eventValue) // Example source code
> {
>    colorsOutput = new MFColor(eventValue); // assigning value sends output
> event
> // Browser.print('colorInput=' + eventValue + ', colorsOutput=' +
> colorsOutput + '\\n');
> }
>
> `),
>           new
> ColorInterpolator({DEF:"ColorAnimator",key:[0,0.5,1],keyValue:[0.9411765,1,1,0.29411766,0,0.50980395,0.9411765,1,1]}
>             /* AZURE to INDIGO and back again */
> ),
>           new TimeSensor({DEF:"ColorClock",cycleInterval:60.0,loop:true}),
>           new
> ROUTE({fromField:"colorsOutput",fromNode:"colorTypeConversionScript",toField:"skyColor",toNode:"GradualBackground"}),
>           new
> ROUTE({fromField:"value_changed",fromNode:"ColorAnimator",toField:"colorInput",toNode:"colorTypeConversionScript"}),
>           new
> ROUTE({fromField:"fraction_changed",fromNode:"ColorClock",toField:"set_fraction",toNode:"ColorAnimator"})),
>         new ProtoDeclare({name:"ArtDeco01Material",appinfo:"tooltip:
> ArtDeco01Material prototype is a Material node"},
>           new ProtoInterface({},
>             new
> field({type:field.TYPE_SFSTRING,name:"description",accessType:field.ACCESSTYPE_INPUTOUTPUT,appinfo:"tooltip
> for descriptionField",value:"ArtDeco01Material prototype is a Material
> node"}),
>             new
> field({type:field.TYPE_SFBOOL,name:"enabled",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"true"})),
>           new ProtoBody({}
>             /* Initial node of ProtoBody determines prototype node type */
> ,
>             new
> Material({ambientIntensity:0.25,diffuseColor:[0.282435,0.085159,0.134462],shininess:0.127273,specularColor:[0.276305,0.11431,0.139857]})
>             /* [HelloWorldProgram diagnostic] should be connected to scene
> graph: artDeco01ProtoDeclare.getNodeType()=\"Material\" */
>
>             /* presence of follow-on TouchSensor shows that additional
> nodes are allowed in ProtoBody after initial node, regardless of node types
> */
> ,
>             new TouchSensor({description:"within ProtoBody"},
>               new IS({},
>                 new
> connect({nodeField:"description",protoField:"description"}),
>                 new
> connect({nodeField:"enabled",protoField:"enabled"}))))),
>         new ExternProtoDeclare({name:"ArtDeco02Material",appinfo:"this is
> a different Material node",url:["
> http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3d#ArtDeco02Material
> ","
> http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3dv#ArtDeco02Material
> "]}
>           /* [HelloWorldProgram diagnostic]
> artDeco02ExternProtoDeclare.getNodeType()=\"ERROR_UNKNOWN_EXTERNPROTODECLARE_NODE_TYPE:
> ExternProtoDeclare name='ArtDeco02Material' type cannot be remotely
> accessed at run time. TODO X3DJSAIL needs to add further capability that
> retrieves the ExternProtoDeclare file.\" */
> ,
>           new
> field({type:field.TYPE_SFSTRING,name:"description",accessType:field.ACCESSTYPE_INPUTOUTPUT,appinfo:"tooltip
> for descriptionField"}))
>         /* Tested ArtDeco01ProtoInstance, ArtDeco02ProtoInstance for
> improper node type when ProtoInstance is added in wrong place */
> ,
>         new Shape({DEF:"TestShape1"},
>           new Appearance({DEF:"TestAppearance1"}
>             /* ArtDeco01Material prototype goes here... TODO ensure
> setContainerField is handled in exported Java */
> ,
>             new ProtoInstance({name:"ArtDeco01Material"}
>               /* [HelloWorldProgram diagnostic]
> ArtDeco01ProtoInstance.getNodeType()=\"Material\" */
> ,
>               new fieldValue({name:"description",value:"ArtDeco01Material
> can substitute for a Material node"}))),
>           new Sphere({radius:0.001})),
>         new Shape({DEF:"TestShape2"},
>           new Appearance({DEF:"TestAppearance2"}
>             /* ArtDeco02Material prototype goes here... TODO ensure
> setContainerField is handled in exported Java */
> ,
>             new
> ProtoInstance({DEF:"ArtDeco02MaterialDEF",name:"ArtDeco02Material"}
>               /* [HelloWorldProgram diagnostic]
> ArtDeco02ProtoInstance.getNodeType()=\"ERROR_UNKNOWN_EXTERNPROTODECLARE_NODE_TYPE:
> ExternProtoDeclare name='ArtDeco02Material' type cannot be remotely
> accessed at run time. TODO X3DJSAIL needs to add further capability that
> retrieves the ExternProtoDeclare file.\" */
> ,
>               new fieldValue({name:"description",value:"ArtDeco02Material
> can substitute for another Material node"}))),
>           new Cone({bottomRadius:0.001,height:0.001})),
>         new Shape({DEF:"TestShape3"},
>           new Appearance({DEF:"TestAppearance3"}
>             /* ArtDeco02Material ProtoInstance USE goes here. Note that
> name field is NOT defined as part of ProtoInstance USE. */
> ,
>             new ProtoInstance({USE:"ArtDeco02MaterialDEF"})),
>           new Cylinder({height:0.001,radius:0.001})),
>         new Inline({DEF:"inlineSceneDef",url:["someOtherScene.x3d","
> https://www.web3d.org/specifications/java/examples/someOtherScene.x3d"]}),
>         new
> IMPORT({AS:"WorldInfoDEF2",importedDEF:"WorldInfoDEF",inlineDEF:"inlineSceneDef"}),
>         new EXPORT({AS:"WorldInfoDEF3",localDEF:"WorldInfoDEF"}),
>         new ProtoDeclare({name:"MaterialModulator",appinfo:"mimic a
> Material node and modulate fields as an animation effect",documentation:"
> http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulatorIndex.html
> "},
>           new ProtoInterface({},
>             new
> field({type:field.TYPE_SFBOOL,name:"enabled",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"true"}),
>             new
> field({type:field.TYPE_SFCOLOR,name:"diffuseColor",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"0
> 0 0"}),
>             new
> field({type:field.TYPE_SFCOLOR,name:"emissiveColor",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"0.05
> 0.05 0.5"}),
>             new
> field({type:field.TYPE_SFCOLOR,name:"specularColor",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"0
> 0 0"}),
>             new
> field({type:field.TYPE_SFFLOAT,name:"transparency",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"0.0"}),
>             new
> field({type:field.TYPE_SFFLOAT,name:"shininess",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"0.0"}),
>             new
> field({type:field.TYPE_SFFLOAT,name:"ambientIntensity",accessType:field.ACCESSTYPE_INPUTOUTPUT,value:"0.0"})),
>           new ProtoBody({},
>             new Material({DEF:"MaterialNode"},
>               new IS({},
>                 new
> connect({nodeField:"diffuseColor",protoField:"diffuseColor"}),
>                 new
> connect({nodeField:"emissiveColor",protoField:"emissiveColor"}),
>                 new
> connect({nodeField:"specularColor",protoField:"specularColor"}),
>                 new
> connect({nodeField:"transparency",protoField:"transparency"}),
>                 new
> connect({nodeField:"shininess",protoField:"shininess"}),
>                 new
> connect({nodeField:"ambientIntensity",protoField:"ambientIntensity"})))
>             /* Only first node (the node type) is renderable, others are
> along for the ride */
> ,
>             new Script({DEF:"MaterialModulatorScript"},
>               new
> field({type:field.TYPE_SFBOOL,name:"enabled",accessType:field.ACCESSTYPE_INPUTOUTPUT}),
>               new
> field({type:field.TYPE_SFCOLOR,name:"diffuseColor",accessType:field.ACCESSTYPE_INPUTOUTPUT}),
>               new
> field({type:field.TYPE_SFCOLOR,name:"newColor",accessType:field.ACCESSTYPE_OUTPUTONLY}),
>               new
> field({type:field.TYPE_SFTIME,name:"clockTrigger",accessType:field.ACCESSTYPE_INPUTONLY}),
>               new IS({},
>                 new connect({nodeField:"enabled",protoField:"enabled"}),
>                 new
> connect({nodeField:"diffuseColor",protoField:"diffuseColor"})),
>
> `
> ecmascript:
> function initialize ()
> {
>     newColor = diffuseColor; // start with correct color
> }
> function set_enabled (newValue)
> {
> enabled = newValue;
> }
> function clockTrigger (timeValue)
> {
>     if (!enabled) return;
>     red   = newColor.r;
>     green = newColor.g;
>     blue  = newColor.b;
>
>     // note different modulation rates for each color component, % is
> modulus operator
>     newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue +
> 0.04) % 1);
> if (enabled)
> {
> Browser.print ('diffuseColor=(' + red + ',' + green + ',' + blue + ')
> newColor=' + newColor.toString() + '\\n');
> }
> }
>
> `)))
>         /* Test success: declarative statement
> createDeclarativeShapeTests() */
> ,
>         new Group({DEF:"DeclarativeGroupExample"},
>           new Shape({},
>             new
> MetadataString({DEF:"FindableMetadataStringTest",name:"findThisNameValue",value:["test
> case"]}),
>             new Appearance({DEF:"DeclarativeAppearanceExample"}
>               /* DeclarativeMaterialExample gets overridden by
> subsequently added MaterialModulator ProtoInstance */
> ,
>               new
> ProtoInstance({DEF:"MyMaterialModulator",name:"MaterialModulator"})),
>             new Cone({bottom:false,bottomRadius:0.05,height:0.1}))
>           /* Test success: declarativeGroup.addChild() singleton pipeline
> method */
> )
>         /* Test success: declarative statement addChild() */
>
>         /* Test success:
> x3dModel.findNodeByDEF(DeclarativeAppearanceExample) = <Appearance
> DEF='DeclarativeAppearanceExample'/> i.e. <Appearance
> DEF='DeclarativeAppearanceExample'> <!- - DeclarativeMaterialExample gets
> overridden by subsequently added MaterialModulator ProtoInstance - ->
> <ProtoInstance DEF='MyMaterialModulator' name='MaterialModulator'
> containerField='material'/> </Appearance> */
>
>         /* Test success:
> x3dModel.findElementByNameValue(findThisNameValue) = <MetadataString
> DEF='FindableMetadataStringTest' name='findThisNameValue' value='\"test
> case\"'/> */
>
>         /* Test success:
> x3dModel.findElementByNameValue(\"ArtDeco01Material\", \"ProtoDeclare\")
> found */
>
>         /* Test success:
> x3dModel.findElementByNameValue(\"MaterialModulator\", \"ProtoDeclare\")
> found */
>
>         /* Test success:
> x3dModel.findElementByNameValue(\"MaterialModulator\", \"ProtoInstance\")
> found */
> ,
>         new Group({DEF:"TestFieldObjectsGroup"}
>           /* testFieldObjects() results */
>
>           /* SFBool default=true, true=true, false=false, negate()=true */
>
>           /* MFBool default=, initial=true false true, negate()=false true
> false */
>
>           /* SFFloat default=0.0, initial=1.0, setValue(2)=2.0,
> setValue(3.0f)=3.0, setValue(4.0)=4.0 */
>
>           /* MFFloat default=, initial=1 2 3, append(5)=1 2 3 5,
> inserts(3,4)(0,0)=0 1 2 3 4 5, append(6)=0 1 2 3 4 5 6, size()=7 */
>
>           /* ... get1Value[3]=3.0, remove[1]=0 2 3 4 5 6,
> set1Value(0,10)=10 2 3 4 5 6, multiply(2)=20 4 6 8 10 12, clear= */
>
>           /* SFVec3f default=0 0 0, initial=1 2 3, setValue=4 5 6,
> multiply(2)=8 10 12, normalize()=0.45584232 0.5698029 0.68376344, regex
> matches()=true */
>
>           /* regex test SFVec3f().matches(\"1 2 3\")=true, regex test
> SFVec3f().matches(\"1 2 3 4\")=false, regex test
> (SFRotationObject.matches(\"0 0 0 0\")=true, failure detecting illegal
> (zero axis) rotation value */
> ),
>         new Sound({location:[0,1.6,0]}
>           /* set sound-ellipsoid location height at 1.6m to match typical
> avatar height */
> ,
>           new AudioClip({description:"chimes",url:["chimes.wav","
> https://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/chimes.wav
> "]}
>             /* Scene example fragment from
> https://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/default.x3d
> */
> )),
>         new Sound({location:[0,1.6,0]}
>           /* set sound-ellipsoid location height at 1.6m to match typical
> avatar height */
> ,
>           new MovieTexture({description:"mpgsys.mpg from ConformanceNist
> suite",url:["mpgsys.mpg","
> https://www.web3d.org/x3d/content/examples/ConformanceNist/Appearance/MovieTexture/mpgsys.mpg
> "]}
>             /* Scene example fragment from
> https://www.web3d.org/x3d/content/examples/ConformanceNist/Appearance/MovieTexture/mpeg1-systems.x3d
> */
>
>             /* Expected containerField='source', allowed containerField
> values=\"texture\" \"source\" \"back\" \"bottom\" \"front\" \"left\"
> \"right\" \"top\" \"backTexture\" \"bottomTexture\" \"frontTexture\"
> \"leftTexture\" \"rightTexture\" \"topTexture\" \"watchList\" */
> ))
>         /* Test success: AnchorObject.isNode()=true,
> siteAnchor.isNode()=true */
>
>         /* Test success: AnchorObject.isStatement()=false,
> siteAnchor.isStatement()=false */
>
>         /* Test success: ROUTEObject.isNode()=false,
> orbitPositionROUTE.isNode()=false */
>
>         /* Test success: ROUTEObject.isStatement()=true,
> orbitPositionROUTE.isStatement()=true */
>
>         /* Test success: CommentsBlock.isNode()=false,
> testComments.isNode()=false */
>
>         /* Test failure: CommentsBlock.isStatement()=true,
> testComments.isStatement()=true */
> ,
>         new Shape({DEF:"ExtrusionShape"}
>           /* ExampleExtrusion isCrossSectionClosed()=true,
> crossSection='[1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0]' */
>
>           /* ExampleExtrusion isSpineClosed()=false, spine='[0.0, 0.0,
> 0.0, 0.0, 1.0, 0.0]' */
> ,
>           new Appearance({DEF:"TransparentAppearance"},
>             new Material({transparency:1.0})),
>           new Extrusion({DEF:"ExampleExtrusion"})),
>         new Group({}
>           /* Test MFNode children array as an ordered list consisting of
> comments, statements, ProtoInstance and nodes */
> ,
>           new ProtoDeclare({name:"NewWorldInfo"},
>             new ProtoInterface({},
>               new
> field({type:field.TYPE_SFSTRING,name:"description",accessType:field.ACCESSTYPE_INITIALIZEONLY})),
>             new ProtoBody({},
>               new WorldInfo({}))),
>           new ProtoInstance({DEF:"Proto1",name:"NewWorldInfo"},
>             new fieldValue({name:"description",value:"testing 1 2 3"})),
>           new Group({DEF:"Node2"}
>             /* intentionally empty */
> ),
>           new ProtoInstance({DEF:"Proto3",name:"NewWorldInfo"}),
>           new Transform({DEF:"Node4"}
>             /* intentionally empty */
> )
>           /* Test satisfactorily creates MFNode children array as an
> ordered list with mixed content */
> ),
>         new ProtoDeclare({name:"ShaderProto"},
>           new ProtoBody({},
>             new ProgramShader({}))),
>         new Shape({},
>           new Appearance({}
>             /* Test MFNode shaders array as an ordered list consisting of
> comments, ProtoInstance and nodes */
>
>             /* Test satisfactorily creates MFNode shaders array as an
> ordered list with mixed content */
> ,
>             new ProgramShader({DEF:"TestShader1"},
>               new ShaderProgram({DEF:"TestShader2"})),
>             new ProtoInstance({DEF:"TestShader3",name:"ShaderProto"}),
>             new ComposedShader({DEF:"TestShader4"},
>               new ShaderPart({DEF:"TestShader5"})))),
>         new Transform({DEF:"SpecialtyNodes"},
>           new CADLayer({},
>             new CADAssembly({},
>               new CADPart({},
>                 new CADFace({})))),
>           new EspduTransform({geoSystem:["GD","WE"]}),
>           new ReceiverPdu({geoSystem:["GD","WE"]}),
>           new SignalPdu({geoSystem:["GD","WE"]}),
>           new TransmitterPdu({geoSystem:["GD","WE"]}),
>           new DISEntityManager({},
>             new DISEntityTypeMapping({})))))      ;
> X3D0.toFileX3D("examples/HelloWorldProgramOutput.new.x3d");
> X3D0.toFileJSON("examples/HelloWorldProgramOutput.new.json");
>
> On Mon, Jan 13, 2020 at 3:40 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> Ant build script (All found on X3D sourceforge project):
>>
>> www.web3d.org/x3d/stylesheets/node/build.xml
>>
>> (recommend "all" target). In that folder, run
>>
>> ant all to compile and run the test, but first, look at hand generated
>> example:
>>
>> Example for those creating the node.js SAI library: (very buggy)
>> www.web3d.org/x3d/stylesheets/node/examples/HelloWorldProgramOutput.js
>>
>> Code that ultimately needs work:
>>
>> www.web3d.org/x3d/stylesheets/node/JavaScriptSerializer.js
>>
>> Discussion:
>> Does this look like a good style in the examples file?
>> Does the style match the standard JavaScript SAI?
>> What is needed to standardize JavaScript SAI for X3Dv4?
>> How fast can we get a Hello World roundtrip working?
>>
>> This is primarily a build integration release.  Please integrate the
>> build.xml all target with the stylesheets build.xml.  Thanks, Don!
>>
>> Don, I see your way ahead of me, integrating this into everything.
>>
>> Can someone point me at a working JavaScript SAI?
>>
>> Thanks,
>>
>> John
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200113/63434351/attachment-0001.html>


More information about the x3d-public mailing list