<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:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        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:1567833238;
        mso-list-type:hybrid;
        mso-list-template-ids:746087556 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0D8;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>My approach i am considering taking is:  first, choosing a set of flat meshes to cover sphere, cone, cylinder, generically. After that, we can cover more complicated meshes like extrusions, 2D geometry and NURBS geometry</li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John, <o:p></o:p></p><p class=MsoNormal>Right, in thinking of flat meshes relating to other geometry, I was just thinking about texture mapping, where we somehow tell how to map a 2D planar to a 3D object. <o:p></o:p></p><p class=MsoNormal>Texture coordinates are a field of the geometry that tell which coordinate of the 2D will be applied to which coordinate of the 3D. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>When generating mesh think of the animation where the author may need to know the index of  a point to animate. This animation may depend upon a certain level of point resolution, and that certain features are consistently located within the mesh. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal>Joe <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><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>Tuesday, December 20, 2022 1:37 PM<br><b>To: </b><a href="mailto:christoph.valentin@gmx.at">Christoph Valentin</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] JSON to STL. Function bounties.</p></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Current code is here:</p></div><div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal><a href="https://github.com/coderextreme/JsonToStl">https://github.com/coderextreme/JsonToStl</a></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>It’s a pretty clean project, no real build script (make.sh), needs more test cases.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>If you want to be a contributor, send me your email and specify your license of choice.  Code you work on should include your license in each source file you modify and the main LICENSE file.  If you want to create a python blender scripts to go from X3D to STL, that will be cool too.  I don’t want a lot of confusion about which IDE to use.   I use vim.  Use what you like, but don’t create a lot of dependencies, instead use some you didn’t install like easy to read make.bat file to pair with make.sh.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Remember there’s Git Bash, so you can assume bash will be on the system that git uses.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>My approach i am considering taking is:  first, choosing a set of flat meshes to cover sphere, cone, cylinder, generically. After that, we can cover more complicated meshes like extrusions, 2D geometry and NURBS geometry</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>So i think that sphere might be a grid mesh, cylinder would be 3 meshes, and cone is 3 meshes.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>My plan is to do sphere first, since that will cover my use case.</p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>John</p></div></div><div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Tue, Dec 20, 2022 at 2:58 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:</p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><p class=MsoNormal style='margin-left:4.8pt'>Wondering, is an X3dToStl.xslt code development  planned soon?</p></div><div><p class=MsoNormal style='margin-left:4.8pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:4.8pt'>The other thing i can work on is continuing JSON to Python conversion.</p></div><div><p class=MsoNormal style='margin-left:4.8pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:4.8pt'>Is there something i can write that i will use on a regular basis?</p></div><div><p class=MsoNormal style='margin-left:4.8pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:4.8pt'>Christoph Valentin, what’s the  preferred multiuser web software for X3D?</p></div><div><p class=MsoNormal style='margin-left:4.8pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:4.8pt'>Would syntax highlighting for vim and/or neovim be useful?</p></div><div><p class=MsoNormal style='margin-left:4.8pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:4.8pt'>John</p></div><div><p class=MsoNormal style='margin-left:4.8pt'><o:p> </o:p></p></div><div><div><div><p class=MsoNormal style='margin-left:4.8pt'>On Tue, Dec 20, 2022 at 6:17 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:</p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><div><p class=MsoNormal style='margin-left:9.6pt'>Here are the functions that are planned or implemented in JsonToStl.  Please express which ones you'd like to see implemented next.</p></div><div><p class=MsoNormal style='margin-left:9.6pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:9.6pt'>Thanks!</p></div><div><p class=MsoNormal style='margin-left:9.6pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:9.6pt'>Also, please discuss what type of LICENSE would be required. If at all possible, I'd like to make some money off this, perhaps by setting up a conversion website or patreon.</p></div><div><p class=MsoNormal style='margin-left:9.6pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:9.6pt'>Yes, I'm aware of the STL output in Blender! I'm working on this to enhance X3DJSONLD.  Is conversion to STL still desired?</p></div><div><p class=MsoNormal style='margin-left:9.6pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:9.6pt'>Thanks,<br><br>John</p></div><div><p class=MsoNormal style='margin-left:9.6pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function convertJsonToStl(json) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function initializeLDNode(json, obj) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function findLDNodeInList(use, LDNodeList) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function toNormals(json, LDNodeList, ParentNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                IndexedFaceSet : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Group : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Shape : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Box : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                IndexedTriangleSet : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                IndexedTriangleStripSet : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                IndexedTriangleFanSet : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                IndexedLineSet : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Normal : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Coordinate : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Transform : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@scale" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@rotation" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@translation" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@normalPerVertex" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@size" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@vector" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@point" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@normalIndex" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@coordIndex" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                "@index" : function(obj, LDNode) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function vector_product(u, v) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function normalize(v) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function triangle_normal(a, b, c) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function printNormal(prefix, x, y, z, output, transform) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function printSFVec3f(prefix, x, y, z, output, transform) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function IndexedTriangle(LDNode, output, transform) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>function transformLDNodesToTriangles(LDNode, output, parentTransform) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                IndexedFaceSet: function(LDNode, output, transform) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Box: function(LDNode, output, transform) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                SixSided: function(LDNode, output, transform, x, y, z) {</p></div><div><p class=MsoNormal style='margin-left:9.6pt'>                Square: function(LDNode, output, transform, square) {</p></div></div></div></blockquote></div></div></blockquote></div></div><p class=MsoNormal style='margin-left:9.6pt'>                Triangle: function(LDNode, output, transform, coords) {</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>