[x3d-public] [x3dom-users] More on X3D script to X3DOM scripting...conversionprogram beginning. Help is welcome.

John Carlson yottzumm at gmail.com
Sun Jan 3 13:56:32 PST 2016


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.

JSON to X3D converter: source code for testing: https://github.com/coderextreme/X3DJSONLD/blob/master/json2x3d.js <https://github.com/coderextreme/X3DJSONLD/blob/master/json2x3d.js>

Updated X3D JSON loader library: https://github.com/coderextreme/X3DJSONLD/blob/master/X3DJSONLD.js <https://github.com/coderextreme/X3DJSONLD/blob/master/X3DJSONLD.js>

Prototype Expander (alpha): https://github.com/coderextreme/X3DJSONLD/blob/master/PrototypeExpander.js <https://github.com/coderextreme/X3DJSONLD/blob/master/PrototypeExpander.js>

Script Converter for X3DOM (pre-alpha…need help please): https://github.com/coderextreme/X3DJSONLD/blob/master/Script.js <https://github.com/coderextreme/X3DJSONLD/blob/master/Script.js>

GUI for above: https://github.com/coderextreme/X3DJSONLD/blob/master/index.html <https://github.com/coderextreme/X3DJSONLD/blob/master/index.html>

Running example of above: http://coderextreme.net/X3DJSONLD/ <http://coderextreme.net/X3DJSONLD/> (use FireFox)

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

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


More information about the x3d-public mailing list