<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii"><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;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle20
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Hi John.  I do appreciate your troubleshooting, thanks.  As ever, am replying when circumstances permit.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I must admit that after a number of minutes looking at this post and related posts, I am not really sure what error you are reporting, nor what X3D scene snippet caused it.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Let’s start with your subject line first: “Container Field alternate values for Shape. Correct in X3DUOM, incorrect in X3DJSAIL.”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>When we go into X3dUnifiedObjectModel-4.0.xml on line 35151<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>      <ConcreteNode name="Shape"><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         <InterfaceDefinition specificationUrl=<a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/shape.html#Shape">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/shape.html#Shape</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                               appinfo="Shape can appear under any grouping node."><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>            <componentInfo name="Shape" level="1"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>            <Inheritance baseType="X3DShapeNode"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><!--field definitions --><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>            <containerField default="children" type="<span style='background:aqua;mso-highlight:aqua'>containerFieldChoicesGroupLODShapeTransform</span>"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>            <ContentModel><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>               <GroupContentModel name="ChildContentModelCore" minOccurs="0"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>               <GroupContentModel name="ShapeChildContentModel" minOccurs="0"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>            </ContentModel><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         </InterfaceDefinition><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      </ConcreteNode><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal>Then line 253<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>      <SimpleType name="<span style='background:aqua;mso-highlight:aqua'>containerFieldChoicesGroupLODShapeTransform</span>"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                   baseType="xs:NMTOKEN"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                   appinfo="containerFieldChoicesGroupLODShapeTransform lists the allowed containerField enumeration values for Shape, Transform and LOD nodes: &#34;children&#34; if parent node has abstract type X3DGroupingNode, otherwise &#34;metadata&#34; default."<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                   documentation=<a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#containerField">https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#containerField</a>><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         <enumeration value="children"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                       appinfo="parent node has abstract type X3DGroupingNode"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         <enumeration value="proxy" appinfo="parent node is Collision"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         <enumeration value="rootNode" appinfo="parent node is GeoLOD"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         <enumeration value="shape" appinfo="parent node is CADFace or CollidableShape"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>         <enumeration value="skin" appinfo="parent node is HAnimHumanoid"/><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      </SimpleType><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>These indicate that Shape might be contained by five different parent nodes, with each case described in appinfo, with corresponding field name <span style='font-family:"Courier New"'>children</span> or <span style='font-family:"Courier New"'>proxy</span> or <span style='font-family:"Courier New"'>rootNode</span> or <span style='font-family:"Courier New"'>shape</span> or <span style='font-family:"Courier New"'>skin</span><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>OK now let’s to into X3DJSAIL Java source and find Shape.java to see if it matches.  Lines 33 and 412:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>package org.web3d.x3d.jsail.Shape;<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'> containerField_ALTERNATE_VALUES = new String[] { "children", "proxy", "shape" }; // type containerFieldChoicesGroupLODShapeTransform<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>So boom: hardest part is accomplished, have isolated a bug.  Somehow we are missing “rootNode” and “skin” enumerations from <span style='font-family:"Courier New"'>containerField_ALTERNATE_VALUES.<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The comment you listed “TODO once recorded” etc. is found in CreateSceneAccessInterfaceJava.xslt on line 3650.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The code block that erroneously defined the necessary values appears immediately after that.  I worked on improving that, with apparent success getting values out of X3DUOM.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Corrected output in Shape.java looks good:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> <span style='font-family:"Courier New"'>containerField_ALTERNATE_VALUES = new String[] { "children", "proxy", "shape", "rootNode", "skin" }; // type containerFieldChoicesGroupLODShapeTransform<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This correction to properly use X3DUOM likely fixed other hidden errors as well.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Also fixed incorrect field defaults: SFBool default is false, SFVec4f/SFVec4d is 0 0 0 1<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’d like to post a new release but other problems are occurring in the build tests that I need to resolve first.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Meanwhile have committed all corrections that I have, hopefully that helps you get farther.  If you would like an intermediate (not fully tested) x3djsail.4.0 jar update, please let me know.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hope this helps.<o:p></o:p></p><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Don Brutzman  Naval Postgraduate School, Code USW/Br        brutzman@nps.edu<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, Navy robotics https://</span> <span style='font-size:10.0pt;font-family:"Courier New"'>faculty.nps.edu/brutzman<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> John Carlson <yottzumm@gmail.com> <br><b>Sent:</b> Saturday, April 16, 2022 11:37 PM<br><b>To:</b> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu>; X3D Graphics public mailing list <x3d-public@web3d.org><br><b>Subject:</b> Re: Container Field alternate values for Shape. Correct in X3DUOM, incorrect in X3DJSAIL.<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>It appears that this is yet to be addressed in the X3DJSAIL stylesheet <o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><!-- TODO once recorded in X3D XML Schema and X3D Object Model, iterate over values and add to array --><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Thanks for looking into/repairing this!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>John<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Sun, Apr 17, 2022 at 1:29 AM 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-right:0in'><div><p class=MsoNormal>I don't think that containerField_ALTERNATE_VALUES is correct for Shape.  This is perhaps related to the other rootNode issue, where rootNode gets overridden by children? <o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Look at X3DUOM possibilities for Shape containerFields.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Thanks for looking into this.   I'm going to start digging in <o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>runone:<br>     [echo] Validate C:\x3d-code\<a href="http://www.web3d.org" target="_blank">www.web3d.org</a>\x3d\content\examples\Basic\Geospatial\SquawLOD023.json with classpath .:/x3d-code/<a href="http://www.web3d.org/x3d/stylesheets/java/jars/X3DJSAIL.4.0.full.jar" target="_blank">www.web3d.org/x3d/stylesheets/java/jars/X3DJSAIL.4.0.full.jar</a><br>     [java] Validating C:\x3d-code\<a href="http://www.web3d.org" target="_blank">www.web3d.org</a>\x3d\content\examples\Basic\Geospatial\SquawLOD023.json<br>     [java] org.web3d.x3d.sai.InvalidFieldValueException: Invalid setContainerFieldOverride() value='rootNode', legal values for Shape are containerField_ALTERNATE_VALUES='"children" "proxy" "shape"'<br>     [java]     at org.web3d.x3d.jsail.X3DConcreteNode.setContainerFieldOverride(X3DConcreteNode.java:401)<br>     [java]     at org.web3d.x3d.jsail.X3DLoaderDOM.toX3dModelInstance(X3DLoaderDOM.java:631)<br>     [java]     at org.web3d.x3d.jsail.X3DLoaderDOM.toX3dModelInstance(X3DLoaderDOM.java:619)<br>     [java]     at org.web3d.x3d.jsail.X3DLoaderDOM.toX3dModelInstance(X3DLoaderDOM.java:619)<br>     [java]     at org.web3d.x3d.jsail.X3DLoaderDOM.toX3dModelInstance(X3DLoaderDOM.java:490)<br>     [java]     at org.web3d.x3d.jsail.X3DLoaderDOM.toX3dModelInstance(X3DLoaderDOM.java:453)<br>     [java]     at Validate.main(Validate.java:18)<br>     [java]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>     [java]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)<br>     [java]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>     [java]     at java.base/java.lang.reflect.Method.invoke(Method.java:568)<br>     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:218)<br>     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:155)<br>     [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:891)<br>     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:231)<br>     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)<br>     [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)<br>     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)<br>     [java]     at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)<br>     [java]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>     [java]     at java.base/java.lang.reflect.Method.invoke(Method.java:568)<br>     [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)<br>     [java]     at org.apache.tools.ant.Task.perform(Task.java:350)<br>     [java]     at org.apache.tools.ant.Target.execute(Target.java:449)<br>     [java]     at org.apache.tools.ant.Target.performTasks(Target.java:470)<br>     [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)<br>     [java]     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:36)<br>     [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:1264)<br>     [java]     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:437)<br>     [java]     at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:106)<br>     [java]     at jdk.internal.reflect.GeneratedMethodAccessor60.invoke(Unknown Source)<br>     [java]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>     [java]     at java.base/java.lang.reflect.Method.invoke(Method.java:568)<br>     [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)<br>     [java]     at org.apache.tools.ant.Task.perform(Task.java:350)<br>     [java]     at java.base/java.util.Vector.forEach(Vector.java:1365)<br>     [java]     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:67)<br>     [java]     at net.sf.antcontrib.logic.ForEach.executeSequential(ForEach.java:178)<br>     [java]     at net.sf.antcontrib.logic.ForEach.execute(ForEach.java:254)<br>     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)<br>     [java]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<o:p></o:p></p></div></div></div></blockquote></div></div></div></body></html>