[x3d-public] questions on X3DJSAIL usage.

John Carlson yottzumm at gmail.com
Mon May 6 15:23:36 PDT 2019


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 for Windows 10

From: John Carlson
Sent: Monday, May 6, 2019 4:52 PM
To: Brutzman, Donald (Don) (CIV); aono at tut.jp; Leonard Daly
Cc: X3D Graphics public mailing list
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 for Windows 10

From: Brutzman, Donald (Don) (CIV)
Sent: Monday, May 6, 2019 2:18 AM
To: John Carlson; aono at tut.jp
Cc: X3D Graphics public mailing list
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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20190506/24ae8ed1/attachment-0001.html>


More information about the x3d-public mailing list