<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">John,</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Are you referring to:</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">DOM does not support elements with
      multiple parents. Each element can have at most one parent (see
      second paragraph at <a class="moz-txt-link-freetext"
        href="https://dom.spec.whatwg.org/#trees">https://dom.spec.whatwg.org/#trees</a>
      or if you don't want the living spec then use <a
        class="moz-txt-link-freetext"
        href="https://www.w3.org/TR/dom/#trees">https://www.w3.org/TR/dom/#trees</a>).</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">and for X3D<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">
      <p><a class="moz-txt-link-freetext"
href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#DEFL_USESemantics">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#DEFL_USESemantics</a></p>
      <p>"The USE statement does not create a copy of the node. Instead,
        the same node is inserted into the scene graph a second time,
        resulting in the node having multiple parents..."</p>
      <p><br>
      </p>
      <p>Leonard Daly<br>
      </p>
      <p><br>
      </p>
    </div>
    <blockquote type="cite"
cite="mid:CAGC3UEnxuU_xyinNprKVJy0AgvRcX6qBoEVS3=5PSG4xr+dN9g@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div>
        <div dir="auto">Leonard, can you repost the link to the standard
          where it talks about the multiparent (not parent reference)
          situation when setting the USE field.</div>
      </div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">I do feel we can serialize a multiparent tree
        using a symbol table
        <div><a href="https://en.m.wikipedia.org/wiki/Symbol_table"
            moz-do-not-send="true">https://en.m.wikipedia.org/wiki/Symbol_table</a></div>
        .   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.</div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">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.</div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">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.</div>
      <div dir="auto"><br>
      </div>
      <div>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Wed, May 8, 2019 at 5:16
            PM John Carlson <<a href="mailto:yottzumm@gmail.com"
              moz-do-not-send="true">yottzumm@gmail.com</a>> wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div>
              <div dir="auto">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?</div>
            </div>
            <div><br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">On Wed, May 8, 2019 at
                  11:25 AM Brutzman, Donald (Don) (CIV) <<a
                    href="mailto:brutzman@nps.edu" target="_blank"
                    moz-do-not-send="true">brutzman@nps.edu</a>>
                  wrote:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0 0 0
                  .8ex;border-left:1px #ccc solid;padding-left:1ex">OK
                  thanks John, I now see where you are going on this.<br>
                  <br>
                  The existing .setUse(someDefString) method simply
                  applies a string to the scene graph.<br>
                  <br>
                  Next: I am renaming your DEF label to avoid
                  ambiguity.  For your constructs<br>
                  <br>
                          MaterialLightBlue = None;<br>
                  ...<br>
                          .setMaterial(MaterialLightBlue =
                  Material().setDEF("MaterialLightBlueLabel").setDiffuseColor([0.1,0.5,1])<br>
                  ...<br>
                         
                  .setAppearance(Appearance().setMaterial(MaterialLightBlue)<br>
                  ...<br>
                  <br>
                  the third line could be rewritten today as<br>
                  <br>
                         
.setAppearance(Appearance().setMaterial(Material().setUSE(MaterialLightBlue.getDEF())<br>
                  <br>
                  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.<br>
                  <br>
                  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.<br>
                  <br>
                  <br>
                  On 5/6/2019 3:23 PM, John Carlson wrote:<br>
                  > Here’s a an example removing setUSE().  See uses
                  of MaterialLightBlue.<br>
                  > <br>
                  > import classpath<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Core.X3DObject import
                  X3DObject as X3D<br>
                  > <br>
                  > from org.web3d.x3d.jsail.fields.SFStringObject
                  import SFStringObject as SFString<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Core.headObject import
                  headObject as head<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Core.metaObject import
                  metaObject as meta<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Core.SceneObject import
                  SceneObject as Scene<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Grouping.GroupObject
                  import GroupObject as Group<br>
                  > <br>
                  > from
                  org.web3d.x3d.jsail.Navigation.ViewpointObject import
                  ViewpointObject as Viewpoint<br>
                  > <br>
                  > from org.web3d.x3d.jsail.fields.SFVec3fObject
                  import SFVec3fObject as SFVec3f<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Grouping.TransformObject
                  import TransformObject as Transform<br>
                  > <br>
                  > from org.web3d.x3d.jsail.fields.SFRotationObject
                  import SFRotationObject as SFRotation<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Shape.ShapeObject import
                  ShapeObject as Shape<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Geometry3D.SphereObject
                  import SphereObject as Sphere<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Shape.AppearanceObject
                  import AppearanceObject as Appearance<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Shape.MaterialObject
                  import MaterialObject as Material<br>
                  > <br>
                  > from org.web3d.x3d.jsail.fields.SFColorObject
                  import SFColorObject as SFColor<br>
                  > <br>
                  > from
                  org.web3d.x3d.jsail.Texturing.ImageTextureObject
                  import ImageTextureObject as ImageTexture<br>
                  > <br>
                  > from org.web3d.x3d.jsail.fields.MFStringObject
                  import MFStringObject as MFString<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Text.TextObject import
                  TextObject as Text<br>
                  > <br>
                  > from org.web3d.x3d.jsail.Text.FontStyleObject
                  import FontStyleObject as FontStyle<br>
                  > <br>
                  > MaterialLightBlue = None;<br>
                  > <br>
                  > X3D0 = X3D() \<br>
                  > <br>
                  >     .setProfile("Immersive") \<br>
                  > <br>
                  >     .setVersion("3.3") \<br>
                  > <br>
                  >     .setHead(head() \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.x3d") \<br>
                  > <br>
                  >       .setName("title") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("Simple X3D scene example:
                  Hello World!") \<br>
                  > <br>
                  >       .setName("description") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("30 October 2000") \<br>
                  > <br>
                  >       .setName("created") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("28 July 2015") \<br>
                  > <br>
                  >       .setName("modified") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("Don Brutzman") \<br>
                  > <br>
                  >       .setName("creator") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.tall.png") \<br>
                  > <br>
                  >       .setName("Image") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
                    href="http://en.wikipedia.org/wiki/Hello_world"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://en.wikipedia.org/wiki/Hello_world</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
href="https://en.wikipedia.org/wiki/Hello#.22Hello.2C_World.22_computer_program"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://en.wikipedia.org/wiki/Hello#.22Hello.2C_World.22_computer_program</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
                    href="https://en.wikipedia.org/wiki/%5C"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://en.wikipedia.org/wiki/\</a>"Hello,_World!\"_program")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
href="http://en.wikibooks.org/w/index.php?title=Computer_Programming/Hello_world"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://en.wikibooks.org/w/index.php?title=Computer_Programming/Hello_world</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
                    href="http://www.HelloWorldExample.net"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.HelloWorldExample.net</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a href="http://www.web3D.org"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3D.org</a>") \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
                    href="http://www.web3d.org/realtime-3d/news/internationalization-x3d"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3d.org/realtime-3d/news/internationalization-x3d</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
                    href="http://www.web3d.org/x3d/content/examples/HelloWorld.x3d"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3d.org/x3d/content/examples/HelloWorld.x3d</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
href="http://X3dGraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://X3dGraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes</a>")
                  \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
href="http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter01TechnicalOverview/HelloWorld.x3d"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter01TechnicalOverview/HelloWorld.x3d</a>")
                  \<br>
                  > <br>
                  >       .setName("identifier") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("<a
                    href="http://www.web3d.org/x3d/content/examples/license.html"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3d.org/x3d/content/examples/license.html</a>")
                  \<br>
                  > <br>
                  >       .setName("license") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("X3D-Edit 3.3, <a
                    href="https://savage.nps.edu/X3D-Edit"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://savage.nps.edu/X3D-Edit</a>")
                  \<br>
                  > <br>
                  >       .setName("generator") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  > # Alternate encodings: VRML97, X3D ClassicVRML
                  Encoding, X3D Compressed Binary Encoding (CBE), X3DOM,
                  JSON<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.wrl") \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.x3dv") \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.x3db") \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.xhtml") \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >      .addMeta(meta() \<br>
                  > <br>
                  >       .setContent("HelloWorld.json") \<br>
                  > <br>
                  >       .setName("reference") \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >     ) \<br>
                  > <br>
                  >     .setScene(Scene() \<br>
                  > <br>
                  > # Example scene to illustrate X3D nodes and
                  fields (XML elements and attributes)<br>
                  > <br>
                  >      .addChild(Group() \<br>
                  > <br>
                  >       .addChild(Viewpoint() \<br>
                  > <br>
                  >        .setDEF("ViewUpClose") \<br>
                  > <br>
                  >        .setCenterOfRotation([0,-1,0]) \<br>
                  > <br>
                  >        .setDescription("Hello world!") \<br>
                  > <br>
                  >        .setPosition([0,-1,7]) \<br>
                  > <br>
                  >       ) \<br>
                  > <br>
                  >       .addChild(Transform() \<br>
                  > <br>
                  >        .setRotation([0,1,0,3]) \<br>
                  > <br>
                  >        .addChild(Shape() \<br>
                  > <br>
                  >         .setGeometry(Sphere() \<br>
                  > <br>
                  >         ) \<br>
                  > <br>
                  >         .setAppearance(Appearance() \<br>
                  > <br>
                  >          .setMaterial(MaterialLightBlue =
                  Material() \<br>
                  > <br>
                  >           .setDEF("MaterialLightBlue") \<br>
                  > <br>
                  >           .setDiffuseColor([0.1,0.5,1]) \<br>
                  > <br>
                  >          ) \<br>
                  > <br>
                  >          .setTexture(ImageTexture() \<br>
                  > <br>
                  >           .setDEF("ImageCloudlessEarth") \<br>
                  > <br>
                  >          
                  .setUrl(["earth-topo.png","earth-topo.jpg","earth-topo-small.gif","<a
href="http://www.web3d.org/x3d/content/examples/Basic/earth-topo.png"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3d.org/x3d/content/examples/Basic/earth-topo.png</a>","<a
href="http://www.web3d.org/x3d/content/examples/Basic/earth-topo.jpg"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3d.org/x3d/content/examples/Basic/earth-topo.jpg</a>","<a
href="http://www.web3d.org/x3d/content/examples/Basic/earth-topo-small.gif"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://www.web3d.org/x3d/content/examples/Basic/earth-topo-small.gif</a>"])
                  \<br>
                  > <br>
                  >          ) \<br>
                  > <br>
                  >         ) \<br>
                  > <br>
                  >        ) \<br>
                  > <br>
                  >       ) \<br>
                  > <br>
                  >       .addChild(Transform() \<br>
                  > <br>
                  >        .setTranslation([0,-2,0]) \<br>
                  > <br>
                  >        .addChild(Shape() \<br>
                  > <br>
                  >         .setGeometry(Text() \<br>
                  > <br>
                  >          .setDEF("TextMessage") \<br>
                  > <br>
                  >          .setString(["Hello","world!"]) \<br>
                  > <br>
                  >          .setFontStyle(FontStyle() \<br>
                  > <br>
                  >           .setJustify(["MIDDLE","MIDDLE"]) \<br>
                  > <br>
                  >          ) \<br>
                  > <br>
                  >         ) \<br>
                  > <br>
                  >         .setAppearance(Appearance() \<br>
                  > <br>
                  >          .setMaterial(MaterialLightBlue)<br>
                  > <br>
                  >          ) \<br>
                  > <br>
                  >         ) \<br>
                  > <br>
                  >        ) \<br>
                  > <br>
                  >       ) \<br>
                  > <br>
                  >      ) \<br>
                  > <br>
                  >     ) \<br>
                  > <br>
                  > X3D0.toFileX3D("HelloWorld_RoundTrip.x3d")<br>
                  > <br>
                  > Sent from Mail <<a
                    href="https://go.microsoft.com/fwlink/?LinkId=550986"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://go.microsoft.com/fwlink/?LinkId=550986</a>>
                  for Windows 10<br>
                  > <br>
                  > *From: *John Carlson <mailto:<a
                    href="mailto:yottzumm@gmail.com" target="_blank"
                    moz-do-not-send="true">yottzumm@gmail.com</a>><br>
                  > *Sent: *Monday, May 6, 2019 4:52 PM<br>
                  > *To: *Brutzman, Donald (Don) (CIV) <mailto:<a
                    href="mailto:brutzman@nps.edu" target="_blank"
                    moz-do-not-send="true">brutzman@nps.edu</a>>; <a
                    href="mailto:aono@tut.jp" target="_blank"
                    moz-do-not-send="true">aono@tut.jp</a> <mailto:<a
                    href="mailto:aono@tut.jp" target="_blank"
                    moz-do-not-send="true">aono@tut.jp</a>>; Leonard
                  Daly <mailto:<a
                    href="mailto:Leonard.Daly@realism.com"
                    target="_blank" moz-do-not-send="true">Leonard.Daly@realism.com</a>><br>
                  > *Cc: *X3D Graphics public mailing list
                  <mailto:<a href="mailto:x3d-public@web3d.org"
                    target="_blank" moz-do-not-send="true">x3d-public@web3d.org</a>><br>
                  > *Subject: *RE: questions on X3DJSAIL usage.<br>
                  > <br>
                  > Leonard, can you explain for us how we can write
                  an SAI program avoiding setUSE()?  Apparently, my
                  explanations aren’t getting through.<br>
                  > <br>
                  > John<br>
                  > <br>
                  > Sent from Mail <<a
                    href="https://go.microsoft.com/fwlink/?LinkId=550986"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">https://go.microsoft.com/fwlink/?LinkId=550986</a>>
                  for Windows 10<br>
                  > <br>
                  > *From: *Brutzman, Donald (Don) (CIV) <mailto:<a
                    href="mailto:brutzman@nps.edu" target="_blank"
                    moz-do-not-send="true">brutzman@nps.edu</a>><br>
                  > *Sent: *Monday, May 6, 2019 2:18 AM<br>
                  > *To: *John Carlson <mailto:<a
                    href="mailto:yottzumm@gmail.com" target="_blank"
                    moz-do-not-send="true">yottzumm@gmail.com</a>>; <a
                    href="mailto:aono@tut.jp" target="_blank"
                    moz-do-not-send="true">aono@tut.jp</a> <mailto:<a
                    href="mailto:aono@tut.jp" target="_blank"
                    moz-do-not-send="true">aono@tut.jp</a>><br>
                  > *Cc: *X3D Graphics public mailing list
                  <mailto:<a href="mailto:x3d-public@web3d.org"
                    target="_blank" moz-do-not-send="true">x3d-public@web3d.org</a>><br>
                  > *Subject: *Re: questions on X3DJSAIL usage.<br>
                  > <br>
                  > On 5/4/2019 4:15 PM, John Carlson wrote:<br>
                  > <br>
                  >  > 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.<br>
                  > <br>
                  >  ><br>
                  > <br>
                  >  > Thanks!<br>
                  > <br>
                  >  ><br>
                  > <br>
                  >  > John<br>
                  > <br>
                  > Hmmm, perhaps I'm not understanding your
                  question... but here is an attempt at a simple
                  answer.  Plus some additional syntactic sugar.<br>
                  > <br>
                  > 1. I think a programmer utilizes setUSE()
                  whenever you need to set a USE value on a node.<br>
                  > <br>
                  > Example excerpts:<br>
                  > <br>
                  > <a
href="http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter01TechnicalOverview"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter01TechnicalOverview</a><br>
                  > <br>
                  > HelloWorld.x3d<br>
                  > <br>
                  >         <Transform translation='0 -2 0'><br>
                  > <br>
                  >           <Shape><br>
                  > <br>
                  >             <Text DEF='TextMessage'
                  string='"Hello" "world!"'><br>
                  > <br>
                  >               <FontStyle justify='"MIDDLE"
                  "MIDDLE"'/><br>
                  > <br>
                  >             </Text><br>
                  > <br>
                  >             <Appearance><br>
                  > <br>
                  >               <Material
                  USE='MaterialLightBlue'/><br>
                  > <br>
                  >             </Appearance><br>
                  > <br>
                  >           </Shape><br>
                  > <br>
                  >         </Transform><br>
                  > <br>
                  > HelloWorld.java<br>
                  > <br>
                  >         .addChild(new
                  TransformObject().setTranslation(0.0f,-2.0f,0.0f)<br>
                  > <br>
                  >           .addChild(new ShapeObject()<br>
                  > <br>
                  >             .setGeometry(new
                  TextObject("TextMessage").setString(new
                  MFStringObject("\"Hello\" \"world!\""))<br>
                  > <br>
                  >               .setFontStyle(new
                  FontStyleObject().setJustify(FontStyleObject.JUSTIFY_MIDDLE_MIDDLE)))<br>
                  > <br>
                  >             .setAppearance(new AppearanceObject()<br>
                  > <br>
                  >               .setMaterial(new
                  MaterialObject().setUSE("MaterialLightBlue")))))));<br>
                  > <br>
                  > HelloWorld.py<br>
                  > <br>
                  >        .addChild(Transform() \<br>
                  > <br>
                  >         .setTranslation(SFVec3f([0,-2,0])) \<br>
                  > <br>
                  >         .addChild(Shape() \<br>
                  > <br>
                  >          .setGeometry(Text() \<br>
                  > <br>
                  >           .setDEF(SFString("TextMessage")) \<br>
                  > <br>
                  >          
                  .setString(MFString(["Hello","world!"])) \<br>
                  > <br>
                  >           .setFontStyle(FontStyle() \<br>
                  > <br>
                  >           
                  .setJustify(MFString(["MIDDLE","MIDDLE"])) \<br>
                  > <br>
                  >           ) \<br>
                  > <br>
                  >          ) \<br>
                  > <br>
                  >          .setAppearance(Appearance() \<br>
                  > <br>
                  >           .setMaterial(Material() \<br>
                  > <br>
                  >            .setUSE(SFString("MaterialLightBlue"))
                  \<br>
                  > <br>
                  >           ) \<br>
                  > <br>
                  >          ) \<br>
                  > <br>
                  >         ) \<br>
                  > <br>
                  >        )<br>
                  > <br>
                  > 2. Note that if we start putting field
                  adjustments on the same line, the structure for .java
                  and .py are nearly identical.<br>
                  > <br>
                  > Other syntax tightening is further possible in
                  .py version:<br>
                  > <br>
                  > - no apparent need to wrap SFString() in python
                  syntax<br>
                  > <br>
                  > - I suspect that MFString() wrapping is also
                  superfluous, hopefully we can just use
                  ["Hello","world!"]<br>
                  > <br>
                  > - Similarly might try replacing SFVec3f([0,-2,0])
                  with [0,-2,0] - we're getting more Pythonic now!<br>
                  > <br>
                  > - indenting with two space characters makes
                  scene-graph structure more evident.<br>
                  > <br>
                  > 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.<br>
                  > <br>
                  > 4. Am further noticing from above that the
                  following single-string .java construct<br>
                  > <br>
                  >                  .setString(new
                  MFStringObject("\"Hello\" \"world!\""))<br>
                  > <br>
                  > is more readable as a String array instead:<br>
                  > <br>
                  >                  .setString(new
                  MFStringObject(new String[] {"Hello","world!"}))<br>
                  > <br>
                  > or even more simply as:<br>
                  > <br>
                  >                  .setString(new String[]
                  {"Hello","world!"})<br>
                  > <br>
                  > 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.<br>
                  > <br>
                  > 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.<br>
                  > <br>
                  > all the best, Don<br>
                  > <br>
                  > -- <br>
                  > <br>
                  > Don Brutzman  Naval Postgraduate School, Code
                  USW/Br       <a href="mailto:brutzman@nps.edu"
                    target="_blank" moz-do-not-send="true">brutzman@nps.edu</a><br>
                  > <br>
                  > Watkins 270,  MOVES Institute, Monterey CA
                  93943-5000 USA   +1.831.656.2149<br>
                  > <br>
                  > X3D graphics, virtual worlds, navy robotics <a
                    href="http://faculty.nps.edu/brutzman"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://faculty.nps.edu/brutzman</a><br>
                  > <br>
                  <br>
                  <br>
                  all the best, Don<br>
                  -- <br>
                  Don Brutzman  Naval Postgraduate School, Code USW/Br 
                       <a href="mailto:brutzman@nps.edu" target="_blank"
                    moz-do-not-send="true">brutzman@nps.edu</a><br>
                  Watkins 270,  MOVES Institute, Monterey CA 93943-5000
                  USA   +1.831.656.2149<br>
                  X3D graphics, virtual worlds, navy robotics <a
                    href="http://faculty.nps.edu/brutzman"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://faculty.nps.edu/brutzman</a><br>
                </blockquote>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
x3d-public mailing list
<a class="moz-txt-link-abbreviated" href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a>
<a class="moz-txt-link-freetext" href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a>
</pre>
    </blockquote>
    <p><br>
    </p>
    <div class="moz-signature">-- <br>
      <font class="tahoma,arial,helvetica san serif" color="#333366">
        <font size="+1"><b>Leonard Daly</b></font><br>
        3D Systems & Cloud Consultant<br>
        LA ACM SIGGRAPH Past Chair<br>
        President, Daly Realism - <i>Creating the Future</i>
      </font></div>
  </body>
</html>