<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Yes, the second is what I’m trying to achieve with a symbol table.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:Leonard.Daly@realism.com">Leonard Daly</a><br><b>Sent: </b>Wednesday, May 8, 2019 8:18 PM<br><b>To: </b><a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>Re: [x3d-public] questions on X3DJSAIL usage.</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John,<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Are you referring to:<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>DOM does not support elements with multiple parents. Each element can have at most one parent (see second paragraph at <a 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 href="https://www.w3.org/TR/dom/#trees">https://www.w3.org/TR/dom/#trees</a>).<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>and for X3D<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p><a 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><o:p> </o:p></p><p>Leonard Daly</p><p><o:p> </o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><div><p class=MsoNormal>Leonard, can you repost the link to the standard where it talks about the multiparent (not parent reference) situation when setting the USE field.<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I do feel we can serialize a multiparent tree using a symbol table <o:p></o:p></p><div><p class=MsoNormal><a href="https://en.m.wikipedia.org/wiki/Symbol_table">https://en.m.wikipedia.org/wiki/Symbol_table</a><o:p></o:p></p></div><p class=MsoNormal>.   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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><div><div><p class=MsoNormal>On Wed, May 8, 2019 at 5:16 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><p class=MsoNormal style='margin-left:40.8pt'>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?<o:p></o:p></p></div></div><div><p class=MsoNormal style='margin-left:40.8pt'><o:p> </o:p></p><div><div><p class=MsoNormal style='margin-left:40.8pt'>On Wed, May 8, 2019 at 11:25 AM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><p class=MsoNormal style='margin-left:45.6pt'>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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">http://www.HelloWorldExample.net</a>") \<br>> <br>>       .setName("reference") \<br>> <br>>      ) \<br>> <br>>      .addMeta(meta() \<br>> <br>>       .setContent("<a href="http://www.web3D.org" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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">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">brutzman@nps.edu</a>>; <a href="mailto:aono@tut.jp" target="_blank">aono@tut.jp</a> <mailto:<a href="mailto:aono@tut.jp" target="_blank">aono@tut.jp</a>>; Leonard Daly <mailto:<a href="mailto:Leonard.Daly@realism.com" target="_blank">Leonard.Daly@realism.com</a>><br>> *Cc: *X3D Graphics public mailing list <mailto:<a href="mailto:x3d-public@web3d.org" target="_blank">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" target="_blank">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">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">yottzumm@gmail.com</a>>; <a href="mailto:aono@tut.jp" target="_blank">aono@tut.jp</a> <mailto:<a href="mailto:aono@tut.jp" target="_blank">aono@tut.jp</a>><br>> *Cc: *X3D Graphics public mailing list <mailto:<a href="mailto:x3d-public@web3d.org" target="_blank">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" target="_blank">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">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" target="_blank">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">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" target="_blank">http://faculty.nps.edu/brutzman</a><o:p></o:p></p></blockquote></div></div></blockquote></div></div><p class=MsoNormal><br><br><o:p></o:p></p><pre>_______________________________________________</pre><pre>x3d-public mailing list</pre><pre><a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a></pre><pre><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></pre></blockquote><p><o:p> </o:p></p><p class=MsoNormal>-- <br><b><span style='font-size:13.5pt;color:#333366'>Leonard Daly</span></b><span style='color:#333366'><br>3D Systems & Cloud Consultant<br>LA ACM SIGGRAPH Past Chair<br>President, Daly Realism - <i>Creating the Future</i> </span><o:p></o:p></p><p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p></div></body></html>