[x3d-public] questions on X3DJSAIL usage.

John Carlson yottzumm at gmail.com
Wed May 8 15:51:48 PDT 2019


Leonard, can you repost the link to the standard where it talks about the
multiparent (not parent reference) situation when setting the USE field.

I do feel we can serialize a multiparent tree using a symbol table
https://en.m.wikipedia.org/wiki/Symbol_table
.   I have been discussing potential solutions in my emails, as has
Leonard.  We have 3-4 solutions, where a symbol table is preferred for
JavaScript translator programs.   I am not sure about import/export and
stylesheets as I have not looked into those.   Leonard suggested 1) a deep
copy and 2) subclassing the USE node from the DEF node.

According to your SAI code, setUSE can only take a string, not a node,
hence my suggestion to (nearly) obliviate setUSE, if indeed we support
multiparent.

Another option is to set a flag somewhere when you write out a DEF, so the
next time you reach the DEF node, you will print out a USE.  Again, I am
not sure if stylesheets handle these.

On Wed, May 8, 2019 at 5:16 PM John Carlson <yottzumm at gmail.com> wrote:

> Leonard pointed out that setting USE according to the standard created a
> multiparent situation.  I was merely trying to respond to that.   Perhaps
> the standard needs changing?
>
> On Wed, May 8, 2019 at 11:25 AM Brutzman, Donald (Don) (CIV) <
> brutzman at nps.edu> wrote:
>
>> OK thanks John, I now see where you are going on this.
>>
>> The existing .setUse(someDefString) method simply applies a string to the
>> scene graph.
>>
>> Next: I am renaming your DEF label to avoid ambiguity.  For your
>> constructs
>>
>>         MaterialLightBlue = None;
>> ...
>>         .setMaterial(MaterialLightBlue =
>> Material().setDEF("MaterialLightBlueLabel").setDiffuseColor([0.1,0.5,1])
>> ...
>>         .setAppearance(Appearance().setMaterial(MaterialLightBlue)
>> ...
>>
>> the third line could be rewritten today as
>>
>>
>> .setAppearance(Appearance().setMaterial(Material().setUSE(MaterialLightBlue.getDEF())
>>
>> Programming hint: the key to thinking about any scene graph you construct
>> programmatically is to consider how it will serialize out to the .x3d or
>> .x3dv file encoding.  That is how I disambiguate mysterious cases.
>>
>> Looking forward: the approach you describe is pretty interesting.  I
>> think the way you have written it, each occurrence of MaterialLightBlue
>> would be written out explicitly and the results would have the DEF value of
>> MaterialLightBlueLabel recurring multiple times (thus causing a duplicate
>> DEF error in the .x3d file).  Might other utility methods be possible?  Not
>> yet clear...  So it is not clear that a further approach is yet achievable
>> but certainly worth thinking about.  Thanks.
>>
>>
>> On 5/6/2019 3:23 PM, John Carlson wrote:
>> > Here’s a an example removing setUSE().  See uses of MaterialLightBlue.
>> >
>> > import classpath
>> >
>> > from org.web3d.x3d.jsail.Core.X3DObject import X3DObject as X3D
>> >
>> > from org.web3d.x3d.jsail.fields.SFStringObject import SFStringObject as
>> SFString
>> >
>> > from org.web3d.x3d.jsail.Core.headObject import headObject as head
>> >
>> > from org.web3d.x3d.jsail.Core.metaObject import metaObject as meta
>> >
>> > from org.web3d.x3d.jsail.Core.SceneObject import SceneObject as Scene
>> >
>> > from org.web3d.x3d.jsail.Grouping.GroupObject import GroupObject as
>> Group
>> >
>> > from org.web3d.x3d.jsail.Navigation.ViewpointObject import
>> ViewpointObject as Viewpoint
>> >
>> > from org.web3d.x3d.jsail.fields.SFVec3fObject import SFVec3fObject as
>> SFVec3f
>> >
>> > from org.web3d.x3d.jsail.Grouping.TransformObject import
>> TransformObject as Transform
>> >
>> > from org.web3d.x3d.jsail.fields.SFRotationObject import
>> SFRotationObject as SFRotation
>> >
>> > from org.web3d.x3d.jsail.Shape.ShapeObject import ShapeObject as Shape
>> >
>> > from org.web3d.x3d.jsail.Geometry3D.SphereObject import SphereObject as
>> Sphere
>> >
>> > from org.web3d.x3d.jsail.Shape.AppearanceObject import AppearanceObject
>> as Appearance
>> >
>> > from org.web3d.x3d.jsail.Shape.MaterialObject import MaterialObject as
>> Material
>> >
>> > from org.web3d.x3d.jsail.fields.SFColorObject import SFColorObject as
>> SFColor
>> >
>> > from org.web3d.x3d.jsail.Texturing.ImageTextureObject import
>> ImageTextureObject as ImageTexture
>> >
>> > from org.web3d.x3d.jsail.fields.MFStringObject import MFStringObject as
>> MFString
>> >
>> > from org.web3d.x3d.jsail.Text.TextObject import TextObject as Text
>> >
>> > from org.web3d.x3d.jsail.Text.FontStyleObject import FontStyleObject as
>> FontStyle
>> >
>> > MaterialLightBlue = None;
>> >
>> > X3D0 = X3D() \
>> >
>> >     .setProfile("Immersive") \
>> >
>> >     .setVersion("3.3") \
>> >
>> >     .setHead(head() \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.x3d") \
>> >
>> >       .setName("title") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("Simple X3D scene example: Hello World!") \
>> >
>> >       .setName("description") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("30 October 2000") \
>> >
>> >       .setName("created") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("28 July 2015") \
>> >
>> >       .setName("modified") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("Don Brutzman") \
>> >
>> >       .setName("creator") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.tall.png") \
>> >
>> >       .setName("Image") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("http://en.wikipedia.org/wiki/Hello_world") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> https://en.wikipedia.org/wiki/Hello#.22Hello.2C_World.22_computer_program")
>> \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("https://en.wikipedia.org/wiki/\"Hello,_World!\"_program")
>> \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> http://en.wikibooks.org/w/index.php?title=Computer_Programming/Hello_world")
>> \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("http://www.HelloWorldExample.net") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("http://www.web3D.org") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> http://www.web3d.org/realtime-3d/news/internationalization-x3d") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> http://www.web3d.org/x3d/content/examples/HelloWorld.x3d") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> http://X3dGraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes")
>> \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter01TechnicalOverview/HelloWorld.x3d")
>> \
>> >
>> >       .setName("identifier") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("
>> http://www.web3d.org/x3d/content/examples/license.html") \
>> >
>> >       .setName("license") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit") \
>> >
>> >       .setName("generator") \
>> >
>> >      ) \
>> >
>> > # Alternate encodings: VRML97, X3D ClassicVRML Encoding, X3D Compressed
>> Binary Encoding (CBE), X3DOM, JSON
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.wrl") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.x3dv") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.x3db") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.xhtml") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >      .addMeta(meta() \
>> >
>> >       .setContent("HelloWorld.json") \
>> >
>> >       .setName("reference") \
>> >
>> >      ) \
>> >
>> >     ) \
>> >
>> >     .setScene(Scene() \
>> >
>> > # Example scene to illustrate X3D nodes and fields (XML elements and
>> attributes)
>> >
>> >      .addChild(Group() \
>> >
>> >       .addChild(Viewpoint() \
>> >
>> >        .setDEF("ViewUpClose") \
>> >
>> >        .setCenterOfRotation([0,-1,0]) \
>> >
>> >        .setDescription("Hello world!") \
>> >
>> >        .setPosition([0,-1,7]) \
>> >
>> >       ) \
>> >
>> >       .addChild(Transform() \
>> >
>> >        .setRotation([0,1,0,3]) \
>> >
>> >        .addChild(Shape() \
>> >
>> >         .setGeometry(Sphere() \
>> >
>> >         ) \
>> >
>> >         .setAppearance(Appearance() \
>> >
>> >          .setMaterial(MaterialLightBlue = Material() \
>> >
>> >           .setDEF("MaterialLightBlue") \
>> >
>> >           .setDiffuseColor([0.1,0.5,1]) \
>> >
>> >          ) \
>> >
>> >          .setTexture(ImageTexture() \
>> >
>> >           .setDEF("ImageCloudlessEarth") \
>> >
>> >
>> .setUrl(["earth-topo.png","earth-topo.jpg","earth-topo-small.gif","
>> http://www.web3d.org/x3d/content/examples/Basic/earth-topo.png","
>> http://www.web3d.org/x3d/content/examples/Basic/earth-topo.jpg","
>> http://www.web3d.org/x3d/content/examples/Basic/earth-topo-small.gif"]) \
>> >
>> >          ) \
>> >
>> >         ) \
>> >
>> >        ) \
>> >
>> >       ) \
>> >
>> >       .addChild(Transform() \
>> >
>> >        .setTranslation([0,-2,0]) \
>> >
>> >        .addChild(Shape() \
>> >
>> >         .setGeometry(Text() \
>> >
>> >          .setDEF("TextMessage") \
>> >
>> >          .setString(["Hello","world!"]) \
>> >
>> >          .setFontStyle(FontStyle() \
>> >
>> >           .setJustify(["MIDDLE","MIDDLE"]) \
>> >
>> >          ) \
>> >
>> >         ) \
>> >
>> >         .setAppearance(Appearance() \
>> >
>> >          .setMaterial(MaterialLightBlue)
>> >
>> >          ) \
>> >
>> >         ) \
>> >
>> >        ) \
>> >
>> >       ) \
>> >
>> >      ) \
>> >
>> >     ) \
>> >
>> > X3D0.toFileX3D("HelloWorld_RoundTrip.x3d")
>> >
>> > Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
>> Windows 10
>> >
>> > *From: *John Carlson <mailto:yottzumm at gmail.com>
>> > *Sent: *Monday, May 6, 2019 4:52 PM
>> > *To: *Brutzman, Donald (Don) (CIV) <mailto:brutzman at nps.edu>;
>> aono at tut.jp <mailto:aono at tut.jp>; Leonard Daly <mailto:
>> Leonard.Daly at realism.com>
>> > *Cc: *X3D Graphics public mailing list <mailto:x3d-public at web3d.org>
>> > *Subject: *RE: questions on X3DJSAIL usage.
>> >
>> > Leonard, can you explain for us how we can write an SAI program
>> avoiding setUSE()?  Apparently, my explanations aren’t getting through.
>> >
>> > John
>> >
>> > Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
>> Windows 10
>> >
>> > *From: *Brutzman, Donald (Don) (CIV) <mailto:brutzman at nps.edu>
>> > *Sent: *Monday, May 6, 2019 2:18 AM
>> > *To: *John Carlson <mailto:yottzumm at gmail.com>; aono at tut.jp <mailto:
>> aono at tut.jp>
>> > *Cc: *X3D Graphics public mailing list <mailto:x3d-public at web3d.org>
>> > *Subject: *Re: questions on X3DJSAIL usage.
>> >
>> > On 5/4/2019 4:15 PM, John Carlson wrote:
>> >
>> >  > I’m waiting for a response on whether I should stop using setUSE()
>> (except in cases where > 1 fields are used in a node) in programs using
>> X3DJSAIL.
>> >
>> >  >
>> >
>> >  > Thanks!
>> >
>> >  >
>> >
>> >  > John
>> >
>> > Hmmm, perhaps I'm not understanding your question... but here is an
>> attempt at a simple answer.  Plus some additional syntactic sugar.
>> >
>> > 1. I think a programmer utilizes setUSE() whenever you need to set a
>> USE value on a node.
>> >
>> > Example excerpts:
>> >
>> >
>> http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter01TechnicalOverview
>> >
>> > HelloWorld.x3d
>> >
>> >         <Transform translation='0 -2 0'>
>> >
>> >           <Shape>
>> >
>> >             <Text DEF='TextMessage' string='"Hello" "world!"'>
>> >
>> >               <FontStyle justify='"MIDDLE" "MIDDLE"'/>
>> >
>> >             </Text>
>> >
>> >             <Appearance>
>> >
>> >               <Material USE='MaterialLightBlue'/>
>> >
>> >             </Appearance>
>> >
>> >           </Shape>
>> >
>> >         </Transform>
>> >
>> > HelloWorld.java
>> >
>> >         .addChild(new TransformObject().setTranslation(0.0f,-2.0f,0.0f)
>> >
>> >           .addChild(new ShapeObject()
>> >
>> >             .setGeometry(new TextObject("TextMessage").setString(new
>> MFStringObject("\"Hello\" \"world!\""))
>> >
>> >               .setFontStyle(new
>> FontStyleObject().setJustify(FontStyleObject.JUSTIFY_MIDDLE_MIDDLE)))
>> >
>> >             .setAppearance(new AppearanceObject()
>> >
>> >               .setMaterial(new
>> MaterialObject().setUSE("MaterialLightBlue")))))));
>> >
>> > HelloWorld.py
>> >
>> >        .addChild(Transform() \
>> >
>> >         .setTranslation(SFVec3f([0,-2,0])) \
>> >
>> >         .addChild(Shape() \
>> >
>> >          .setGeometry(Text() \
>> >
>> >           .setDEF(SFString("TextMessage")) \
>> >
>> >           .setString(MFString(["Hello","world!"])) \
>> >
>> >           .setFontStyle(FontStyle() \
>> >
>> >            .setJustify(MFString(["MIDDLE","MIDDLE"])) \
>> >
>> >           ) \
>> >
>> >          ) \
>> >
>> >          .setAppearance(Appearance() \
>> >
>> >           .setMaterial(Material() \
>> >
>> >            .setUSE(SFString("MaterialLightBlue")) \
>> >
>> >           ) \
>> >
>> >          ) \
>> >
>> >         ) \
>> >
>> >        )
>> >
>> > 2. Note that if we start putting field adjustments on the same line,
>> the structure for .java and .py are nearly identical.
>> >
>> > Other syntax tightening is further possible in .py version:
>> >
>> > - no apparent need to wrap SFString() in python syntax
>> >
>> > - I suspect that MFString() wrapping is also superfluous, hopefully we
>> can just use ["Hello","world!"]
>> >
>> > - Similarly might try replacing SFVec3f([0,-2,0]) with [0,-2,0] - we're
>> getting more Pythonic now!
>> >
>> > - indenting with two space characters makes scene-graph structure more
>> evident.
>> >
>> > 3. Spent the day refactoring the X3D Examples Archive projects from
>> Netbeans plain-old freeform projects to Netbeans Java freeform projects.
>> This doesn't limit any functionality but it does make Java experimentation
>> much simpler... menu items now include Compile/Run/Debug options.
>> >
>> > 4. Am further noticing from above that the following single-string
>> .java construct
>> >
>> >                  .setString(new MFStringObject("\"Hello\" \"world!\""))
>> >
>> > is more readable as a String array instead:
>> >
>> >                  .setString(new MFStringObject(new String[]
>> {"Hello","world!"}))
>> >
>> > or even more simply as:
>> >
>> >                  .setString(new String[] {"Hello","world!"})
>> >
>> > Have improved X3dToJava.xslt conversions to simplify accordingly.  Will
>> rerun all java conversions tonight and hopefully redeploy Web3D example
>> archives tomorrow.  Then retest python build tomorrow night.
>> >
>> > Also will redeploy X3DJSAIL with this improvement tonight.  Have also
>> added initial PointProperties validation for X3Dv4, included source in
>> full.jar for IDE javadoc/debugging, and fixed a number of X3DLoaderDOM
>> geospatial errors.
>> >
>> > 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
>> >
>>
>>
>> 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 --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20190508/f93f3d97/attachment-0001.html>


More information about the x3d-public mailing list