<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">John,</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">I presume that this is a conversion of
      X3D content between these various formats. In which case, how can
      anything convert to DOM because</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">
      <ol>
        <li>DOM is a language-neutral interface (see
          <a class="moz-txt-link-freetext" href="https://www.w3.org/DOM/#what">https://www.w3.org/DOM/#what</a>)</li>
        <li>DOM does not support elements with multiple parents. Each
          element can have at most one parent (see second paragraph at
          <a class="moz-txt-link-freetext" 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 class="moz-txt-link-freetext" href="https://www.w3.org/TR/dom/#trees">https://www.w3.org/TR/dom/#trees</a>).<br>
        </li>
      </ol>
      <p>X3D explicitly allows multi-parenting (through the use of
        DEF/USE). How does this application resolve the conflict?</p>
      <p><br>
      </p>
      <p>Leonard Daly<br>
      </p>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <blockquote type="cite"
      cite="mid:5cca2b54.1c69fb81.6bd9.6ca0@mx.google.com">
      <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:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.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>
      <div class="WordSection1">
        <p class="MsoNormal">X3DJSONLD does the following conversions:</p>
        <p class="MsoNormal">                JSON->DOM</p>
        <p class="MsoNormal">                DOM->XML (borrowed)</p>
        <p class="MsoNormal">                XML->DOM (borrowed)</p>
        <p class="MsoNormal">                DOM->JSON</p>
        <p class="MsoNormal">                DOM->Java</p>
        <p class="MsoNormal">                DOM->Python</p>
        <p class="MsoNormal">                DOM->JavaScript</p>
        <p class="MsoNormal">                PLY->JSON</p>
        <p class="MsoNormal">                STL->JSON</p>
        <p class="MsoNormal">                JSON->STL (not done, not
          always triangles, needs someone who wants to do tessellation,
          or can provide a JavaScript library)</p>
        <p class="MsoNormal">                JSON->EXI</p>
        <p class="MsoNormal">                EXI->JSON</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">XD3JSAIL/SourceForge X3D does the following
          conversions that were added by me</p>
        <p class="MsoNormal">                JSON->DOM (Java version
          of X3DJSONLD)</p>
        <p class="MsoNormal">                X3DJSAIL->JavaScript </p>
        <p class="MsoNormal">                DOM->Python (X3DPSAIL)</p>
        <p class="MsoNormal">                DOM->Python (Pure
          Python—doesn’t do anything)</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">X3DJSAIL does:</p>
        <p class="MsoNormal">                X3DJSAIL->XML</p>
        <p class="MsoNormal">                X3DJSAIL->JSON</p>
        <p class="MsoNormal">                X3DJSAIL->X3D</p>
        <p class="MsoNormal">                X3DJSAIL->ClassicVRML</p>
        <p class="MsoNormal">                X3DJSAIL->VRML97</p>
        <p class="MsoNormal">                X3DJSAIL->HTML</p>
        <p class="MsoNormal">                X3DJSAIL->Java</p>
        <p class="MsoNormal">               
          X3DJSAIL->ModelMetaMarkdown</p>
        <p class="MsoNormal">                X3DJSAIL->X3dTidy</p>
        <p class="MsoNormal">                X3DJSAIL->X3DOM</p>
        <p class="MsoNormal">                X3DJSAIL->X_ITE</p>
        <p class="MsoNormal">                X3DJSAIL->Cobweb</p>
        <p class="MsoNormal">                X3DJSAIL->EXI</p>
        <p class="MsoNormal">                X3DJSAIL->GZIP</p>
        <p class="MsoNormal">                X3DJSAIL->ZIP</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">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?</p>
        <p class="MsoNormal">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).</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Ideally I think, Don will take over all
          serializers, except my DOM->JSON serializer.  I also use a
          javascript serializer on my web page.</p>
        <p class="MsoNormal">================================================================================================================</p>
        <p class="MsoNormal">What X3DJSONLD could provide for X3DJSAIL
          and X3DPSAIL (JavaScript)</p>
        <p class="MsoNormal">                PLY->JSON</p>
        <p class="MsoNormal">                STL->JSON</p>
        <p class="MsoNormal">                JSON->STL</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">These conversions are stored under
          ~/X3DJSONLD/src/main/node:</p>
        <p class="MsoNormal">convertJsonToStl.js</p>
        <p class="MsoNormal">convertPlyToJson.js</p>
        <p class="MsoNormal">convertStlToJson.js</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The JSON to STL conversion looks at the
          following X3D JSON indexes</p>
        <p class="MsoNormal">               IndexedFaceSet :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                Group : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                Shape : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                Box : function(obj, LDNode)
          {<o:p></o:p></p>
        <p class="MsoNormal">                IndexedTriangleSet :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                IndexedTriangleStripSet :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                IndexedTriangleFanSet :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                IndexedLineSet :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                Normal : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                Coordinate : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                Transform : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@scale" : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@rotation" : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@translation" :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@normalPerVertex" :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@size" : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@vector" : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@point" : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@normalIndex" :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@coordIndex" :
          function(obj, LDNode) {<o:p></o:p></p>
        <p class="MsoNormal">                "@index" : function(obj,
          LDNode) {<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Note:  There are no colors or textures.<o:p></o:p></p>
        <p class="MsoNormal">Note:  Sometimes I create more complex
          polygons than triangles.  This is not in the STL
          “specification”<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Suggestions for additional shapes to
          translate are welcome:<o:p></o:p></p>
        <p class="MsoNormal">Arc2D ArcClose2D Circle2D Disk2D Polyline2D
          Polypoint2D Rectangle2D TriangleSet2D<o:p></o:p></p>
        <p class="MsoNormal">Cone, Cylinder,
          ElevationGrid,Extrusion,Sphere,Text,GeoElevationGrid
          (why?),QuadSet,IndexedQuadSet<o:p></o:p></p>
        <p class="MsoNormal">LineSet PointSet TriangleFanSet TriangleSet
          TriangleStripSet HAnim<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">I won’t translate the 2D geometry, I
          think.  I will not translate Points or Lines<o:p></o:p></p>
        <p class="MsoNormal">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.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><span
style="color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%">The
            ones I can handle, I think are QuadSet, IndexedQuadSet,
            TriangleFanSet, TriangleSet and TriangleStripSet.<o:p></o:p></span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Would it be better to take a scenegraph
          from X3DOM or X_ITE?   Is there documentation for the
          scenegraphs?<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The STL to JSON creates a single
          IndexedFaceSet for all polygons found in the STL file.  No
          color is handled from the STL file<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The PLY to JSON file creates
          IndexedFaceSets and IndexedLineSets.  Any more suggestions or
          PLY files you want translated?<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Is there any requirement for JSON ->
          PLY?<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Note: I just discovered <a
            href="https://cadexchanger.com/x3d" moz-do-not-send="true">https://cadexchanger.com/x3d</a> 
          for X3D to STL conversions.   Add to X3D resources?   I
          haven’t tried it yet. CADExchanger already mentioned here: <a
href="http://www.web3d.org/wiki/index.php/STEP_X3D_Translation#Open_Cascade_and_PythonOCC"
            moz-do-not-send="true">http://www.web3d.org/wiki/index.php/STEP_X3D_Translation#Open_Cascade_and_PythonOCC</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Is there any need for STL conversion beyond
          CADExchanger (And others)?  I will delete my STL conversions.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">For my JSON->DOM converter, should I
          create a python version.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">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.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
x3d-public mailing list
<a class="moz-txt-link-abbreviated" href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a>
<a class="moz-txt-link-freetext" href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a>
</pre>
    </blockquote>
    <p><br>
    </p>
    <div class="moz-signature">-- <br>
      <font class="tahoma,arial,helvetica san serif" color="#333366">
        <font size="+1"><b>Leonard Daly</b></font><br>
        3D Systems & Cloud Consultant<br>
        LA ACM SIGGRAPH Past Chair<br>
        President, Daly Realism - <i>Creating the Future</i>
      </font></div>
  </body>
</html>