<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;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.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;}
/* List Definitions */
@list l0
        {mso-list-id:402605436;
        mso-list-type:hybrid;
        mso-list-template-ids:-930175702 -1 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>I suggest a way to call initialize() in the pipelining tree after all initialize fields have been set.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></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:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Friday, April 26, 2019 4:44 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>RE: Status, X3DPSAIL</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I believe this error has been “conquered.” But not ideally.  We need some way to implement initializeOnly.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Friday, April 26, 2019 3:57 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>RE: Status, X3DPSAIL<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Additional error:<o:p></o:p></p><p class=MsoNormal>processSingleScene.pythonValidation:<o:p></o:p></p><p class=MsoNormal>     [echo] processSingleScene.python C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors\Chapter01TechnicalOverview\HelloTriangle.future.py<o:p></o:p></p><p class=MsoNormal>     [echo] Loading X3D model as .py program, if successful then saving as round-trip .x3d version:<o:p></o:p></p><p class=MsoNormal>     [exec] org.web3d.x3d.sai.InvalidFieldException: IndexedFaceSet containing Coordinate nodel with 3 values must also include coordIndex field<o:p></o:p></p><p class=MsoNormal>     [exec] org.web3d.x3d.sai.InvalidFieldException: IndexedFaceSet containing Coordinate nodel with 3 values must also include coordIndex field<o:p></o:p></p><p class=MsoNormal>     [exec]     at org.web3d.x3d.jsail.Geometry3D.IndexedFaceSetObject.validate(IndexedFaceSetObject.java:3492)<o:p></o:p></p><p class=MsoNormal>     [exec]     at org.web3d.x3d.jsail.Shape.ShapeObject.validate(ShapeObject.java:1517)<o:p></o:p></p><p class=MsoNormal>     [exec]     at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:683)<o:p></o:p></p><p class=MsoNormal>     [exec]     at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:3526)<o:p></o:p></p><p class=MsoNormal>     [exec]     at org.web3d.x3d.jsail.Core.X3DObject.toFileX3D(X3DObject.java:777)<o:p></o:p></p><p class=MsoNormal>     [exec] Traceback (most recent call last):<o:p></o:p></p><p class=MsoNormal>     [exec]   File "C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors\Chapter01TechnicalOverview\HelloTriangle.future.py", line 71, in <module><o:p></o:p></p><p class=MsoNormal>     [exec]     X3D0.toFileX3D("/x3d-code/www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter01TechnicalOverview/HelloTriangle_RoundTrip.x3d")<o:p></o:p></p><p class=MsoNormal>     [exec]   File "jnius\jnius_export_class.pxi", line 766, in jnius.JavaMethod.__call__<o:p></o:p></p><p class=MsoNormal>     [exec]   File "jnius\jnius_export_class.pxi", line 843, in jnius.JavaMethod.call_method<o:p></o:p></p><p class=MsoNormal>     [exec]   File "jnius\jnius_utils.pxi", line 91, in jnius.check_exception<o:p></o:p></p><p class=MsoNormal>     [exec] jnius.JavaException: JVM exception occurred: IndexedFaceSet containing Coordinate nodel with 3 values must also include coordIndex field<o:p></o:p></p><p class=MsoNormal>     [exec] Result: 1<o:p></o:p></p><p class=MsoNormal>     [echo] =====================<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Error appears here (somewhere here):<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>   .setScene(Scene() \<o:p></o:p></p><p class=MsoNormal>    .addChild(Shape() \<o:p></o:p></p><p class=MsoNormal>     .setGeometry(IndexedFaceSet(coordIndex = [0,1,2]) \<o:p></o:p></p><p class=MsoNormal>      .setCoord(Coordinate() \<o:p></o:p></p><p class=MsoNormal>       .setPoint(MFVec3f([0,0,0,1,0,0,0.5,1,0])) \<o:p></o:p></p><p class=MsoNormal>      ) \<o:p></o:p></p><p class=MsoNormal>     ) \<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Note that coordIndex is initializeOnly, so it is passed as a parameter to the IndexedFaceSetObject constructor.  I can try using setCoordIndex, but that’s not the right semantics for the X3D. Suggest handling coordIndex in the parameters to the constructor, but I don’t know what to pass as a parameter to the Java constructor.  Maybe look up how **kwargs is done with pyjnius passing to Java.  I suspect some kind of map.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Meanwhile, if we don’t want to change the Java API to handle kwargs in the constructor parameters, we will need to change our PyJNIus serializer to handle initializeOnly a different way (with set). I do not believe this is a major issue, just a little tweaking.  I will keep the research API as is, using kwargs in the constructor.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Friday, April 26, 2019 3:39 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>Status, X3DPSAIL<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=1 type=1><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>We conquered most of the attribute errors.   There might be one or a few left in the X3dForWebAuthors folder.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>Outstanding error 1:<o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>$ python foo.py<o:p></o:p></p><p class=MsoNormal>Traceback (most recent call last):<o:p></o:p></p><p class=MsoNormal>  File "foo.py", line 8, in <module><o:p></o:p></p><p class=MsoNormal>    .setIS(IS() \<o:p></o:p></p><p class=MsoNormal>  File "jnius\jnius_export_class.pxi", line 760, in jnius.JavaMethod.__call__<o:p></o:p></p><p class=MsoNormal>  File "jnius\jnius_conversion.pxi", line 78, in jnius.populate_args<o:p></o:p></p><p class=MsoNormal>  File "jnius\jnius_utils.pxi", line 205, in jnius.check_assignable_from<o:p></o:p></p><p class=MsoNormal>jnius.JavaException: Invalid instance of 'org/web3d/x3d/jsail/X3DConcreteNode' passed for a 'org/web3d/x3d/sai/Core/X3DNode'<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Code:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>$ cat foo.py<o:p></o:p></p><p class=MsoNormal>import classpath<o:p></o:p></p><p class=MsoNormal>from org.web3d.x3d.jsail.Core.ProtoBodyObject import ProtoBodyObject as ProtoBody<o:p></o:p></p><p class=MsoNormal>from org.web3d.x3d.jsail.Core.ISObject import ISObject as IS<o:p></o:p></p><p class=MsoNormal>from org.web3d.x3d.jsail.Grouping.TransformObject import TransformObject as Transform<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>ProtoBody() \<o:p></o:p></p><p class=MsoNormal>  .addChild(Transform() \<o:p></o:p></p><p class=MsoNormal>   .setIS(IS() \<o:p></o:p></p><p class=MsoNormal>   ) \<o:p></o:p></p><p class=MsoNormal>  )<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is because setIS returns an X3DConcreteNode (in X3DConcreteNode) and the X3DConcreteNode is not a X3DNode, despite the fact that TransformObject derives from X3DNode.    Suggest cast to X3DNode or adding additional addChild methods with additional types as parameters to ProtoBodyObject.java. Casts are seen throughout the X3DJSAIL code for addChild.  Perhaps it would be preferable to add methods which avoid casts in application code (ok in library).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>What do you think?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Will start python execution process to report on additional errors (mostly stack overflows, I think).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>