[x3d-public] Report on X3DJSONLD, X3DJSAIL conversion work.PLYSTL <-> JSON conversions. Future plans. Program -> DOM

John Carlson yottzumm at gmail.com
Thu May 2 12:43:35 PDT 2019


From: https://en.wikipedia.org/wiki/Document_Object_Model

“Web browsers rely on layout engines to parse HTML into a DOM.”
“When a web page is loaded, the browser creates a Document Object Model of the page, which is an object oriented representation of an HTML document,”

That’s exactly what I mean by DOM and you mean by DOM tree, actually.   Amazing!

So what we have is a conflict between standards and acceptable practice. Guess you’ll have to modify Wikipedia, Leonard.
Please use interface, API, ABI,  or I to refer to interfaces, a model is not an interface, it’s something architectural (like a 3D model or class diagram for example).  DOM API or DOM interface is fine, I’ll bend that far.   They use models in standards because they are architectural. Models should not be used in running code or data structures.  Models are not running code or data, they are something visual, and/or tangible, unless you’re building an architectural system.  This is why you don’t see “Model” in the names used in the DOM API.  Thanks for clarifying that with the standards body and Wikipedia, Leonard!

Now that we’ve clarified that, what should I call a hypermedia object graph?  Note that Document is unacceptable for Movies and 3D animations.  I’ll call it a hyperobject.

From:

http://cyborganthropology.com/Hyperobjects

“Hyperobjects are objects which have a vitality to them but you can't touch them”

Leonard, you may replace DOM with hyperobject in my emails.

“If you can’t use DOM, stomp on another term.” -- JC

Now I’ll confuse everyone including Leonard! Whee!

Thanks, and good afternoon.

John

Sent from Mail for Windows 10

From: Leonard Daly
Sent: Thursday, May 2, 2019 10:36 AM
To: John Carlson
Cc: X3D Graphics public mailing list
Subject: Re: [x3d-public] Report on X3DJSONLD, X3DJSAIL conversion work.PLYSTL <-> JSON conversions. Future plans. Program -> DOM

John,

I was wondering how you converted X3D to DOM (X3D can be expressed in JSON as you and Don have been working on for a few years). 

There are two issues. I can't follow your discussion below so this may be answered (in a manner that I do not understand). Can you provide simple answers for each of these points?

1. DOM is not a file format, but an API. X3D (in JSON or XML) is a file format. How do you handle conversion of a file format to an API? Is the result something that populates the DOM tree? Is it something else? Note that XML -> DOM is a well-defined conversion (and built-in to web browsers) that populates the DOM tree with the data from the XML document. DOM contains data, structure, and methods that are not present in the XML document; but are part of the standard DOM and DOM-tree definition.
2. DOM very explicitly does not allow multi-parents. I think I understand your statements that when converting from a multi-parent structure to one that only allows single parent, you create a copy of the original. This resolves the multi-parent issue into one that may break run-time. As I understand your description: if A & B are parents of node-subtrees and X is DEFed in the A tree and USEd in the B tree; then the A and B trees have distinct copies of X (called X and X'). Do you add mechanisms so that runtime changes to X also change X'?

Unreal (and perhaps Unity) get around this issue (node reuse in a single-parent environment) by making X a class and having each USE of X to be a new instance of that class. Changes to the X class are propagated to all instances. Each instance may define instance-specific methods/data that override those from the inherited class. It is also possible to sub-class X' and add in instance-specific methods/data.

Leonard Daly


Jeff, stop work, I think the X3D Program -> DOM problem is solved with Jupyter notebook. We just need to write or find a kernel for Jupyter notebook. Kernels are found here: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels Jupyter is very cool.  Alexander, can you install a JavaScript and Java kernels in our Jupyter, along with the Python?  Sheesh, I am behind the times.
 
Leonard if that doesn’t satisfy you, I think you were focused on following:
 
To handle multi-parenting in languages that don’t support multi-parenting, I will use DEF/USE as an attribute/property/field/slot, or duplicate that portion of the tree.  I believe I am conforming to how X3D XML is handled. For languages that have multi-parents, I should be handling that, and generating multi-parents and multiple variables (sigh).
 
For example, in  JSON -> STL, that would be an issue.

I believe for JSON -> STL,  I search backwards through previously processed nodes, looking for DEFs, and keep a transform stack, so I generate unique data for each DEF/USE in a different transform.  I forget the details.  You’re welcome to look at the code:
 
https://github.com/coderextreme/X3DJSONLD/src/main/node/convertJsonToStl.js
 
It would likely be possible to do multi-parenting based on using something like what JSON -> STL does, looking up DEFs.  That would mess up my and Don’s pretty indented trees though!  I have solved a similar before by separating out ProtoInstance(just one tag) into separate variables (in my Java serializer, I think).
 
If you have some suggestions for changing my serializers to use more than one variable (some already do use more than one variable, and they can be changed, I would welcome that.  That is, I would do, .addChild(variable) instead of .addChild(constructor().setUSE(…), In many cases, it would just be  matter of finding or keeping track of the DEFs, then inserting the variable associate with that DEF into the children list. TODO.
 
Thanks for the attention. I have not been trying to solve the scenegraph issue in DOM. It’s very possible to solve it with JavaScript, Java and Python (not DOM, XML, EXI, PLY, STL or JSON) by using a DEF value to variable map.  Did I answer your question?  I think your question had more to do with translating to DOM. I believe I would have variable names or DEFs from the source syntax to use for DEFs.  Note that I don’t translate from JavaScript, Java or Python yet to DOM (and probably won’t), I use the X3DJSAIL API for those languages, which translates to XML first.  
 
Don, might the same issue Leonard brings up be in the stylesheet conversion to Java?  Do you solve it there?
 
Leonard, I believe you were addressing this:
 
“I believe I will start work (we probably already have) on Java->DOM, Python->DOM, C/C#/C++->DOM and JavaScript->DOM transpilers. For people who don’t want a full weight of X3DJSAIL or X3DPSAIL.  This will be a valuable addition to X3DJSAIL, should it choose to accept it.  I will call it “PRESAIL”  for now.”
 
This work has been cancelled (above), in favor of Jupyter notebook.  Is there a remaining action when a Program (not data) is the target of a serializer or stylesheet?  Should I (and maybe Don) follow through on the above multiparenting with our serializers to Java, JavaScript and Python (and probably later in C/C#/C++)?
 
Don, can you run X3DJSAIL inside Jupyter?  Jupyter is inside Anaconda, and I think you can install kernels with pip.
 
Thanks,
 
John
 
Sent from Mail for Windows 10
 
From: Leonard Daly
Sent: Wednesday, May 1, 2019 8:24 PM
To: x3d-public at web3d.org
Subject: Re: [x3d-public] Report on X3DJSONLD, X3DJSAIL conversion work. PLYSTL <-> JSON conversions. Future plans. Program -> DOM
 
John,
 
I presume that this is a conversion of X3D content between these various formats. In which case, how can anything convert to DOM because
 
1. DOM is a language-neutral interface (see https://www.w3.org/DOM/#what)
2. DOM does not support elements with multiple parents. Each element can have at most one parent (see second paragraph at https://dom.spec.whatwg.org/#trees or if you don't want the living spec then use https://www.w3.org/TR/dom/#trees).
X3D explicitly allows multi-parenting (through the use of DEF/USE). How does this application resolve the conflict?
 
Leonard Daly
 
X3DJSONLD does the following conversions:
                JSON->DOM
                DOM->XML (borrowed)
                XML->DOM (borrowed)
                DOM->JSON
                DOM->Java
                DOM->Python
                DOM->JavaScript
                PLY->JSON
                STL->JSON
                JSON->STL (not done, not always triangles, needs someone who wants to do tessellation, or can provide a JavaScript library)
                JSON->EXI
                EXI->JSON
 
XD3JSAIL/SourceForge X3D does the following conversions that were added by me
                JSON->DOM (Java version of X3DJSONLD)
                X3DJSAIL->JavaScript 
                DOM->Python (X3DPSAIL)
                DOM->Python (Pure Python—doesn’t do anything)
 
X3DJSAIL does:
                X3DJSAIL->XML
                X3DJSAIL->JSON
                X3DJSAIL->X3D
                X3DJSAIL->ClassicVRML
                X3DJSAIL->VRML97
                X3DJSAIL->HTML
                X3DJSAIL->Java
                X3DJSAIL->ModelMetaMarkdown
                X3DJSAIL->X3dTidy
                X3DJSAIL->X3DOM
                X3DJSAIL->X_ITE
                X3DJSAIL->Cobweb
                X3DJSAIL->EXI
                X3DJSAIL->GZIP
                X3DJSAIL->ZIP
 
Don will likely add toFileJavaScript (replacing my work—I think there may already be a start on a stylesheet) and toFilePython stylesheet conversions to X3DJSAIL.  Is that OK, Don?
Probably I will retain maintenance of all JSON->DOM conversions (JavaScript, Java, C++, X3DJSAIL, X3DOM, X_ITE). (Don uses a stylesheet or strings to generate XML).  I am open to developing JSON->DOM for other languages and improving the C++ version if people are interested.  You should be willing to provide example JSON files (possibly converted with X3D-Edit).   Recommend you use Everit or Ajv for JSON Schema validation, if not X3DJSONLD’s validator (based on Ajv).
 
Ideally I think, Don will take over all serializers, except my DOM->JSON serializer.  I also use a javascript serializer on my web page.
================================================================================================================
What X3DJSONLD could provide for X3DJSAIL and X3DPSAIL (JavaScript)
                PLY->JSON
                STL->JSON
                JSON->STL
 
These conversions are stored under ~/X3DJSONLD/src/main/node:
convertJsonToStl.js
convertPlyToJson.js
convertStlToJson.js
 
The JSON to STL conversion looks at the following X3D JSON indexes
               IndexedFaceSet : function(obj, LDNode) {
                Group : function(obj, LDNode) {
                Shape : function(obj, LDNode) {
                Box : function(obj, LDNode) {
                IndexedTriangleSet : function(obj, LDNode) {
                IndexedTriangleStripSet : function(obj, LDNode) {
                IndexedTriangleFanSet : function(obj, LDNode) {
                IndexedLineSet : function(obj, LDNode) {
                Normal : function(obj, LDNode) {
                Coordinate : function(obj, LDNode) {
                Transform : function(obj, LDNode) {
                "@scale" : function(obj, LDNode) {
                "@rotation" : function(obj, LDNode) {
                "@translation" : function(obj, LDNode) {
                "@normalPerVertex" : function(obj, LDNode) {
                "@size" : function(obj, LDNode) {
                "@vector" : function(obj, LDNode) {
                "@point" : function(obj, LDNode) {
                "@normalIndex" : function(obj, LDNode) {
                "@coordIndex" : function(obj, LDNode) {
                "@index" : function(obj, LDNode) {
 
Note:  There are no colors or textures.
Note:  Sometimes I create more complex polygons than triangles.  This is not in the STL “specification”
 
Suggestions for additional shapes to translate are welcome:
Arc2D ArcClose2D Circle2D Disk2D Polyline2D Polypoint2D Rectangle2D TriangleSet2D
Cone, Cylinder, ElevationGrid,Extrusion,Sphere,Text,GeoElevationGrid (why?),QuadSet,IndexedQuadSet
LineSet PointSet TriangleFanSet TriangleSet TriangleStripSet HAnim
 
I won’t translate the 2D geometry, I think.  I will not translate Points or Lines
I don’t yet know how to translate Cone, Cylinder,*ElevationGrid,Extrusion,Sphere,Text,HAnim (will the standard help?) Help! I can probably handle the other ones. Volunteers are welcome!  Pull requests are welcome!  Suggestions for JavaScript libraries accepted.
 
The ones I can handle, I think are QuadSet, IndexedQuadSet, TriangleFanSet, TriangleSet and TriangleStripSet.
 
Would it be better to take a scenegraph from X3DOM or X_ITE?   Is there documentation for the scenegraphs?
 
The STL to JSON creates a single IndexedFaceSet for all polygons found in the STL file.  No color is handled from the STL file
 
The PLY to JSON file creates IndexedFaceSets and IndexedLineSets.  Any more suggestions or PLY files you want translated?
 
Is there any requirement for JSON -> PLY?
 
Note: I just discovered https://cadexchanger.com/x3d  for X3D to STL conversions.   Add to X3D resources?   I haven’t tried it yet. CADExchanger already mentioned here: http://www.web3d.org/wiki/index.php/STEP_X3D_Translation#Open_Cascade_and_PythonOCC
 
Is there any need for STL conversion beyond CADExchanger (And others)?  I will delete my STL conversions.
 
For my JSON->DOM converter, should I create a python version.
 
I believe I will start work (we probably already have) on Java->DOM, Python->DOM, C/C#/C++->DOM and JavaScript->DOM transpilers. For people who don’t want a full weight of X3DJSAIL or X3DPSAIL.  This will be a valuable addition to X3DJSAIL, should it choose to accept it.  I will call it “PRESAIL”  for now.
 
 



_______________________________________________
x3d-public mailing list
x3d-public at web3d.org
http://web3d.org/mailman/listinfo/x3d-public_web3d.org
 
-- 
Leonard Daly
3D Systems & Cloud Consultant
LA ACM SIGGRAPH Past Chair
President, Daly Realism - Creating the Future 
 

-- 
Leonard Daly
3D Systems & Cloud Consultant
LA ACM SIGGRAPH Past Chair
President, Daly Realism - Creating the Future 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20190502/5b15d39b/attachment-0001.html>


More information about the x3d-public mailing list