<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I have implemented an array of array loader which will handle cases like this, Clement.  I just don’t know what it will do when you have an array of array of non-primitives.  Please test extensively.<div class=""><br class=""></div><div class="">JSON to X3D converter: source code for testing: <a href="https://github.com/coderextreme/X3DJSONLD/blob/master/json2x3d.js" class="">https://github.com/coderextreme/X3DJSONLD/blob/master/json2x3d.js</a></div><div class=""><br class=""></div><div class="">Updated X3D JSON loader library: <a href="https://github.com/coderextreme/X3DJSONLD/blob/master/X3DJSONLD.js" class="">https://github.com/coderextreme/X3DJSONLD/blob/master/X3DJSONLD.js</a></div><div class=""><br class=""></div><div class="">Prototype Expander (alpha): <a href="https://github.com/coderextreme/X3DJSONLD/blob/master/PrototypeExpander.js" class="">https://github.com/coderextreme/X3DJSONLD/blob/master/PrototypeExpander.js</a></div><div class=""><br class=""></div><div class="">Script Converter for X3DOM (pre-alpha…need help please): <a href="https://github.com/coderextreme/X3DJSONLD/blob/master/Script.js" class="">https://github.com/coderextreme/X3DJSONLD/blob/master/Script.js</a></div><div class=""><br class=""></div><div class="">GUI for above: <a href="https://github.com/coderextreme/X3DJSONLD/blob/master/index.html" class="">https://github.com/coderextreme/X3DJSONLD/blob/master/index.html</a></div><div class=""><br class=""></div><div class="">Running example of above: <a href="http://coderextreme.net/X3DJSONLD/" class="">http://coderextreme.net/X3DJSONLD/</a> (use FireFox)</div><div class=""><br class=""></div><div class="">John<br class=""><div><blockquote type="cite" class=""><div class="">On Dec 21, 2015, at 1:19 AM, Clement IGONET <<a href="mailto:clement@igonet.fr" class="">clement@igonet.fr</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">That's better. So, the mistake is in my side.<br class="">Thank you!<br class=""><br class="">Clement.<br class=""><br class="">On Mon, Dec 21, 2015 at 1:21 AM, John Carlson <<a href="mailto:yottzumm@gmail.com" class="">yottzumm@gmail.com</a>> wrote:<br class=""><blockquote type="cite" class="">What happens when you make it an array instead of an array of arrays?<br class=""><br class=""><br class=""><br class="">Thanks,<br class=""><br class=""><br class=""><br class="">Sent from Mail for Windows 10<br class=""><br class=""><br class=""><br class=""><br class="">From: Clement IGONET<br class="">Sent: Sunday, December 20, 2015 4:49 PM<br class="">To: John Carlson<br class="">Cc: X3D Graphics public mailing list; x3dom mlist<br class="">Subject: Re: [x3d-public] More on X3D script to X3DOM<br class="">scripting...conversionprogram beginning. Help is welcome.<br class=""><br class=""><br class=""><br class="">geometry crossSection is missing testing with X3Djson of my own:<br class=""><br class=""><br class=""><br class="">{<br class=""><br class="">    "X3D": {<br class=""><br class="">        "@profile": "Immersive",<br class=""><br class="">        "@version": 3.3,<br class=""><br class="">        "@xsd:noNamespaceSchemaLocation":<br class=""><br class="">"<a href="http://www.web3d.org/specifications/x3d-3.3.xsd" class="">http://www.web3d.org/specifications/x3d-3.3.xsd</a>",<br class=""><br class="">        "Scene": {<br class=""><br class="">            "-children": [{<br class=""><br class="">                    "Transform": {<br class=""><br class="">                        "@translation": [0, 20, 0],<br class=""><br class="">                        "-children": [{<br class=""><br class="">                                "Group": {<br class=""><br class="">                                    "@class": "buildingPart",<br class=""><br class="">                                    "-children": [{<br class=""><br class="">                                            "Shape": {<br class=""><br class="">                                                "-appearance": [{<br class=""><br class="">                                                        "Appearance": {<br class=""><br class="">                                                            "-material": [{<br class=""><br class=""><br class=""><br class="">"Material": {<br class=""><br class=""><br class=""><br class="">"@diffuseColor": [null, null, null],<br class=""><br class=""><br class=""><br class="">"@transparency": 0.6<br class=""><br class="">                                                                    }<br class=""><br class="">                                                                }]<br class=""><br class="">                                                        }<br class=""><br class="">                                                    }],<br class=""><br class="">                                                "-geometry": [{<br class=""><br class="">                                                        "Extrusion": {<br class=""><br class="">                                                            "@convex":<br class="">false,<br class=""><br class=""><br class=""><br class="">"@creaseAngle": 0.785,<br class=""><br class=""><br class=""><br class="">"@crossSection": [[-39.94663841462567, -39.472313797352705],<br class=""><br class="">[-26.98130996805282, -33.99040391371091], [-24.13471984587026,<br class=""><br class="">-37.8377483755381], [0.5505538701044541, -27.385425271266268],<br class=""><br class="">[-2.2960362520781055, -23.538080809439077], [3.5528168882482545,<br class=""><br class="">-21.058433944731174], [24.424104619198804, -12.21843727668515],<br class=""><br class="">[30.10616537155961, -9.816626861538039], [33.00835295692408,<br class=""><br class="">-13.752927264140247], [57.671387687309995, -3.3117236526628173],<br class=""><br class="">[54.791439085954146, 0.6023377651406799], [68.37945912269265,<br class=""><br class="">6.351115472687708], [41.848349624970105, 42.33379373503747],<br class=""><br class="">[28.28256857382039, 36.59613552028483], [25.22470809249468,<br class=""><br class="">40.74370628361037], [0.561673362108766, 30.30250267213294],<br class=""><br class="">[3.58617536742154, 26.199409879194917], [-2.2293192968918842,<br class=""><br class="">23.73088250728141], [-23.078368042253633, 14.913124824824184],<br class=""><br class="">[-28.81602625779635, 12.477955931293877], [-31.907245218295344,<br class=""><br class="">16.67000466579701], [-56.614757918278684, 6.206562067940691],<br class=""><br class="">[-53.501299972190886, 1.992274348638849], [-66.47774791234822,<br class=""><br class="">-3.500755027797344], [-39.94663841462567, -39.472313797352705]],<br class=""><br class="">                                                            "@solid": false,<br class=""><br class="">                                                            "@endCap":<br class="">false,<br class=""><br class="">                                                            "@spine":<br class=""><br class="">[0, 0, 0, 0, 55, 0]<br class=""><br class="">                                                        }<br class=""><br class="">                                                    }]<br class=""><br class="">                                            }<br class=""><br class="">(...)<br class=""><br class=""><br class=""><br class="">And after converting to xml X3D with X3DJSONLD:<br class=""><br class=""><br class=""><br class=""><!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN"<br class=""><br class="">"<a href="http://www.web3d.org/specifications/x3d-3.3.dtd" class="">http://www.web3d.org/specifications/x3d-3.3.dtd</a>"><X3D><Scene><br class=""><br class="">  <X3D profile='Immersive' version='3.3'<br class=""><br class="">xsd:noNamespaceSchemaLocation='<a href="http://www.web3d.org/specifications/x3d-3.3.xsd'" class="">http://www.web3d.org/specifications/x3d-3.3.xsd'</a>><br class=""><br class="">    <Scene><br class=""><br class="">         <Transform translation='0 20 0'><br class=""><br class="">              <Group class='buildingPart'><br class=""><br class="">                   <Shape><br class=""><br class="">                        <Appearance><br class=""><br class="">                             <Material diffuseColor='' transparency='0.6'><br class=""><br class="">                             </Material><br class=""><br class="">                        </Appearance><br class=""><br class="">                        <Extrusion convex='false' creaseAngle='0.785'<br class=""><br class="">crossSection='' solid='false' endCap='false' spine='0 0 0 0 55 0'><br class=""><br class="">                        </Extrusion><br class=""><br class="">                   </Shape><br class=""><br class="">(...)<br class=""><br class=""><br class=""><br class="">On Sat, Dec 19, 2015 at 6:26 AM, John Carlson <<a href="mailto:yottzumm@gmail.com" class="">yottzumm@gmail.com</a>> wrote:<br class=""><br class=""><blockquote type="cite" class="">Start of a Script Expander for X3D JSON — X3D -> X3DOM scripting.  I have<br class="">no<br class=""></blockquote><br class=""><blockquote type="cite" class="">clue how initialization, shutdown or event processing will work.<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">This code is currently a MESS.  This is not an example of how I like to<br class=""></blockquote><br class=""><blockquote type="cite" class="">present myself and I present it here in order to stimulate someone else to<br class=""></blockquote><br class=""><blockquote type="cite" class="">help with X3D bits I have little knowledge of.  I will continue working on<br class=""></blockquote><br class=""><blockquote type="cite" class="">this, but some guidance would be welcome.<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">John<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class=""><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/Script.js" class="">https://github.com/coderextreme/X3DJSONLD/blob/master/Script.js</a><br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">// X3D JSON Script Expander<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">var content = '';<br class=""></blockquote><br class=""><blockquote type="cite" class="">// read content into buffer<br class=""></blockquote><br class=""><blockquote type="cite" class="">process.stdin.resume();<br class=""></blockquote><br class=""><blockquote type="cite" class="">process.stdin.on('data', function(buf) { content += buf.toString(); });<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">function Package(package, name) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.initializers = [];<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.getters = {};<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.setters = {};<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.values = {};<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.types = {};<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.packages = {};<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof package === 'undefined' || package.name === "") {<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof name === 'undefined') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.name = "";<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else {<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.name = name;<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else {<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof name === 'undefined') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.name = package.name;<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else {<br class=""></blockquote><br class=""><blockquote type="cite" class="">this.name = package.name+'.'+name;<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.packages[name] = this;<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">// initialize children packages<br class=""></blockquote><br class=""><blockquote type="cite" class="">// add package to parent so you can find the package without full path<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">Package.prototype.find = function (name) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof this.packages[name] === 'undefined') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">// there is no package, so global package<br class=""></blockquote><br class=""><blockquote type="cite" class="">return new Package(undefined, name);<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else {<br class=""></blockquote><br class=""><blockquote type="cite" class="">return this.packages[name];<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">function processPrototypes(object, clazz, package) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var p;<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof object === "object") {<br class=""></blockquote><br class=""><blockquote type="cite" class="">for (p in object) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var name = object[p]["@name"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof name === 'undefined') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">name = object[p]["@DEF"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (p.toLowerCase() === 'script') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var script = new Package(package, name);<br class=""></blockquote><br class=""><blockquote type="cite" class="">processPrototypes(object[p], clazz, script);<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else if (p.toLowerCase() === 'route') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">processRoutes(object[p], clazz, package);<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else if (p.toLowerCase() === 'field' && object['@language'] !== 'GLSL')<br class="">{<br class=""></blockquote><br class=""><blockquote type="cite" class="">processFields(object[p], package);<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('var ' +  package.name +  ' = function(' +<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.initializers.join(', ') + ') {');<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('var that = this;');<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('this.setters = {};');<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('this.getters = {};');<br class=""></blockquote><br class=""><blockquote type="cite" class="">for (var v in package.values) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (package.types[v].indexOf("MF") === 0) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('var that.' + v + ' = ['+ package.values[v] + '];');<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else {<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('var that.' + v + ' = '+ package.values[v] + ';');<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">for (var v in package.getters) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('this.getters.' + v +  ' = function () { return that.' +  v +<br class="">';<br class=""></blockquote><br class=""><blockquote type="cite" class="">};');<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">processSource(object['#sourceText'], clazz, package);<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push('}');<br class=""></blockquote><br class=""><blockquote type="cite" class="">processPrototypes(object[p], clazz, package);<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else if (p.toLowerCase() === '@use') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var name = object["@USE"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">object["@USE"] = name;<br class=""></blockquote><br class=""><blockquote type="cite" class="">// object[p] is not an object<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else if (p.toLowerCase() === '@def') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var name = object["@DEF"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">object["@DEF"] = name;<br class=""></blockquote><br class=""><blockquote type="cite" class="">// object[p] is not an object<br class=""></blockquote><br class=""><blockquote type="cite" class="">} else {<br class=""></blockquote><br class=""><blockquote type="cite" class="">processPrototypes(object[p], clazz, package);<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">function processRoutes(routes, clazz, package) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push("this.runRoute = function() {");<br class=""></blockquote><br class=""><blockquote type="cite" class="">var r;<br class=""></blockquote><br class=""><blockquote type="cite" class="">for (r in routes) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var route = routes[r];<br class=""></blockquote><br class=""><blockquote type="cite" class="">var fromNode = route["@fromNode"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">var fromField = route["@fromField"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">var toNode = route["@toNode"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">var toField = route["@toField"];<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class="">clazz.push(package.name+'.this.'+toNode+'.setters.'+toField+'('+package.name+'.this.'+fromNode+'.getters.'+fromField+'());');<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push("};");<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">function processFields(fields, package) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var f;<br class=""></blockquote><br class=""><blockquote type="cite" class="">for (f in fields) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var object = fields[f];<br class=""></blockquote><br class=""><blockquote type="cite" class="">var name = object["@name"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.types[name] = object["@type"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">switch(object['@accessType']) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">case 'initializeOnly':<br class=""></blockquote><br class=""><blockquote type="cite" class="">// these should be in order, so it's an array<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.initializers.push(name);<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.values[name] = object["@value"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">break;<br class=""></blockquote><br class=""><blockquote type="cite" class="">case 'inputOutput':<br class=""></blockquote><br class=""><blockquote type="cite" class="">// setters should be looked up by name<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.setters[name] = object;<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.getters[name] = object;<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.values[name] = object["@value"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">break;<br class=""></blockquote><br class=""><blockquote type="cite" class="">case 'inputOnly':<br class=""></blockquote><br class=""><blockquote type="cite" class="">// setters should be looked up by name<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.setters[name] = object;<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.values[name] = object["@value"];<br class=""></blockquote><br class=""><blockquote type="cite" class="">break;<br class=""></blockquote><br class=""><blockquote type="cite" class="">case 'outputOnly':<br class=""></blockquote><br class=""><blockquote type="cite" class="">break;<br class=""></blockquote><br class=""><blockquote type="cite" class="">package.getters[name] = object;<br class=""></blockquote><br class=""><blockquote type="cite" class="">default:<br class=""></blockquote><br class=""><blockquote type="cite" class="">break;<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">function processSource(lines, clazz, package) {<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof lines !== 'undefined') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var functions = lines.join("\n").split("function");<br class=""></blockquote><br class=""><blockquote type="cite" class="">var f;<br class=""></blockquote><br class=""><blockquote type="cite" class="">for (var f = 1; f < functions.length; f++) {  // skip ecmascript:<br class=""></blockquote><br class=""><blockquote type="cite" class="">var func = functions[f];<br class=""></blockquote><br class=""><blockquote type="cite" class="">var sp = func.indexOf('(');<br class=""></blockquote><br class=""><blockquote type="cite" class="">var name = func.substr(0, sp).trim();<br class=""></blockquote><br class=""><blockquote type="cite" class="">var funcvar = 'this.' + name;  //  a non setter function<br class=""></blockquote><br class=""><blockquote type="cite" class="">if (typeof package.setters[name] !== 'undefined') {<br class=""></blockquote><br class=""><blockquote type="cite" class="">funcvar = 'this.setters.' + name; // a setter function<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">clazz.push(funcvar + ' = function ' + func.substr(sp));<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class="">}<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">process.stdin.on('end', function() {<br class=""></blockquote><br class=""><blockquote type="cite" class="">var object = JSON.parse(content);<br class=""></blockquote><br class=""><blockquote type="cite" class="">var clazz = [];<br class=""></blockquote><br class=""><blockquote type="cite" class="">processPrototypes(object, clazz, new Package());<br class=""></blockquote><br class=""><blockquote type="cite" class="">console.log(clazz.join('\n'));<br class=""></blockquote><br class=""><blockquote type="cite" class="">//console.log(JSON.stringify(object, null, 2));<br class=""></blockquote><br class=""><blockquote type="cite" class="">});<br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><blockquote type="cite" class="">_______________________________________________<br class=""></blockquote><br class=""><blockquote type="cite" class="">x3d-public mailing list<br class=""></blockquote><br class=""><blockquote type="cite" class=""><a href="mailto:x3d-public@web3d.org" class="">x3d-public@web3d.org</a><br class=""></blockquote><br class=""><blockquote type="cite" class=""><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" class="">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br class=""></blockquote><br class=""><blockquote type="cite" class=""><br class=""></blockquote><br class=""><br class=""></blockquote><br class="">------------------------------------------------------------------------------<br class="">_______________________________________________<br class="">X3dom-users mailing list<br class=""><a href="mailto:X3dom-users@lists.sourceforge.net" class="">X3dom-users@lists.sourceforge.net</a><br class="">https://lists.sourceforge.net/lists/listinfo/x3dom-users<br class=""></div></div></blockquote></div><br class=""></div></body></html>