<div><div dir="auto">What I think we can do is choose non-SAI setters.   I don’t know how else to solve the problem in python and will have to wait for inspiration, more study, or help with modifying pyjnius.  The zip I provided does not use pyjnius.   I suggest we look into how to produce XML from python “beans.”</div></div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Apr 15, 2019 at 11:23 AM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">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">Am happy to report that both versions of your .py programs are now being produced and published for all models in X3D Examples Archives.<br>
<br>
BLUF: these should greatly help us in continued improvement of X3D Python language-binding syntax.<br>
<br>
Build log (now 10MB) includes X3D validation of RoundTrip scenes and remains updated at<br>
<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/" rel="noreferrer" target="_blank">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/</a><br>
<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/build.python.all.log.txt" rel="noreferrer" target="_blank">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/build.python.all.log.txt</a><br>
<br>
A zip of all autogenerated python models is at<br>
<br>
<a href="http://www.web3d.org/x3d/content/examples/X3dExampleArchivesPythonScenes.zip" rel="noreferrer" target="_blank">http://www.web3d.org/x3d/content/examples/X3dExampleArchivesPythonScenes.zip</a><br>
<a href="http://www.web3d.org/x3d/content/examples/X3dExampleArchivesPythonScenes.zip.MD5" rel="noreferrer" target="_blank">http://www.web3d.org/x3d/content/examples/X3dExampleArchivesPythonScenes.zip.MD5</a><br>
<br>
Example links to python source _.pyv1_ and _.pyv2_ are provided for each scene, for example<br>
<br>
<a href="http://x3dgraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes/" rel="noreferrer" target="_blank">http://x3dgraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes/</a><br>
<a href="http://x3dgraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes/HelloWorldIndex.html" rel="noreferrer" target="_blank">http://x3dgraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes/HelloWorldIndex.html</a><br>
<br>
As before the .future.py versions fail pyjnius because of use of abstract classes.<br>
<br>
On 4/11/2019 6:35 PM, John Carlson wrote:<br>
> This versions is much cleaner than the previous version. Attached zip.<br>
> <br>
> Please review.  We will get comments soon I hope.<br>
> <br>
> John<br>
<br>
John, do you think we should pursue changes to pyJNIus to support abstract classes?<br>
<br>
Or... we could instead eliminate them and fully elaborate each node.  Not convinced that Python programmers might want or need abstract classes in the first place.  Certainly we don't need to implement them in this initial-design phase.<br>
<br>
This is kind of configuration preparation is automatable using X3DUOM, of course.  Excerpts from your zip follows.  You appear to be there already, fully elaborating methods for all fields in all nodes?  Perhaps we should simply test with abstract classes omitted, or defined second?<br>
<br>
[...]<br>
class X3DAppearanceChildNode(X3DNode):<br>
     def __init__(self, **kwargs):<br>
     def metadata(self):<br>
     def metadata(self, value = None):<br>
     def setMetadata(self, metadata = None):<br>
     def addMetadata(self, metadata = None):<br>
     def removeMetadata(self, metadata):<br>
     def getMetadata(self, metadata = None):<br>
     def metadata_changed(self, metadata = None):<br>
     def DEF(self):<br>
     def DEF(self, value = None):<br>
     def setDEF(self, DEF = None):<br>
     def addDEF(self, DEF = None):<br>
     def removeDEF(self, DEF):<br>
     def getDEF(self, DEF = None):<br>
     def DEF_changed(self, DEF = None):<br>
     def USE(self):<br>
     def USE(self, value = None):<br>
     def setUSE(self, USE = None):<br>
     def addUSE(self, USE = None):<br>
     def removeUSE(self, USE):<br>
     def getUSE(self, USE = None):<br>
     def USE_changed(self, USE = None):<br>
     def class_(self):<br>
     def class_(self, value = None):<br>
     def setClass(self, class_ = None):<br>
     def addClass(self, class_ = None):<br>
     def removeClass(self, class_):<br>
     def getClass(self, class_ = None):<br>
     def class_changed(self, class_ = None):<br>
     def comments(self):<br>
     def comments(self, value = None):<br>
     def setComments(self, comments = None):<br>
     def addComments(self, comments = None):<br>
<br>
[...]<br>
class StringSensor(X3DKeyDeviceSensorNode):<br>
     def __init__(self, **kwargs):<br>
     def deletionAllowed(self):<br>
     def deletionAllowed(self, value = True):<br>
     def setDeletionAllowed(self, deletionAllowed = True):<br>
     def addDeletionAllowed(self, deletionAllowed = True):<br>
     def removeDeletionAllowed(self, deletionAllowed):<br>
     def isDeletionAllowed(self, deletionAllowed = True):<br>
     def enabled(self):<br>
     def enabled(self, value = True):<br>
     def setEnabled(self, enabled = True):<br>
     def addEnabled(self, enabled = True):<br>
     def removeEnabled(self, enabled):<br>
     def isEnabled(self, enabled = True):<br>
     def removeEnteredText(self, enteredText):<br>
     def getEnteredText(self, enteredText = None):<br>
     def enteredText_changed(self, enteredText = None):<br>
     def removeFinalText(self, finalText):<br>
     def getFinalText(self, finalText = None):<br>
     def finalText_changed(self, finalText = None):<br>
     def isActive(self, Active = None):<br>
     def metadata(self):<br>
     def metadata(self, value = None):<br>
     def setMetadata(self, metadata = None):<br>
     def addMetadata(self, metadata = None):<br>
     def removeMetadata(self, metadata):<br>
     def getMetadata(self, metadata = None):<br>
     def metadata_changed(self, metadata = None):<br>
     def DEF(self):<br>
     def DEF(self, value = None):<br>
     def setDEF(self, DEF = None):<br>
     def addDEF(self, DEF = None):<br>
     def removeDEF(self, DEF):<br>
     def getDEF(self, DEF = None):<br>
     def DEF_changed(self, DEF = None):<br>
     def USE(self):<br>
     def USE(self, value = None):<br>
     def setUSE(self, USE = None):<br>
     def addUSE(self, USE = None):<br>
     def removeUSE(self, USE):<br>
     def getUSE(self, USE = None):<br>
     def USE_changed(self, USE = None):<br>
     def class_(self):<br>
     def class_(self, value = None):<br>
     def setClass(self, class_ = None):<br>
     def addClass(self, class_ = None):<br>
     def removeClass(self, class_):<br>
     def getClass(self, class_ = None):<br>
     def class_changed(self, class_ = None):<br>
     def comments(self):<br>
     def comments(self, value = None):<br>
     def setComments(self, comments = None):<br>
     def addComments(self, comments = None):<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" rel="noreferrer" target="_blank">http://faculty.nps.edu/brutzman</a><br>
</blockquote></div></div>