Difference between revisions of "Qmaze Rules"
Nick Bannink (talk | contribs) |
Nick Bannink (talk | contribs) |
||
| Line 43: | Line 43: | ||
var obj = app.scene.getObjectByName(obj); | var obj = app.scene.getObjectByName(obj); | ||
} | } | ||
| + | |||
| + | |||
| + | |||
| + | ==Custom decompiler function== | ||
| + | |||
| + | --ADVANCED | ||
| + | |||
| + | To run the custom decompiler you need to Rule in Qmaze similar to how you would call a function. <br> | ||
| + | The action needs to be 'decompiler' and the value can be a string of different variables with values. <br> | ||
| + | First put in a variable name, secondly the value, separated by a ':' <br> | ||
| + | Make sure you always put in 'function:' with your function name <br> | ||
| + | The function with the name you put in here will be called when the decompiler is done <br> | ||
| + | |||
| + | example of a Qmaze Rule: <br> | ||
| + | |||
| + | x3d(object).decompiler = function:testFunc, filename:'x.gltf', name:'test', posX:3, posY:1, posZ:0, rotX:0, rotY:0, rotZ:0 | ||
| + | |||
| + | Include the next code in your Outputscript: <br> | ||
| + | |||
| + | function mydecompiler(obj, val) { | ||
| + | var myMap = new Map(); | ||
| + | val = val.replace(/\s/g, ''); remove all spaces | ||
| + | val = val.replace(/'/g, ''); remove all ' | ||
| + | var res1 = val.split(','); | ||
| + | for(var i = 0; i+1 <= res1.length; i++) { | ||
| + | var res2 = res1[i].split(':'); | ||
| + | myMap.set(res2[0], res2[1]); | ||
| + | } | ||
| + | console.log(myMap); | ||
| + | window[myMap.get("function")](myMap); | ||
| + | } | ||
| + | |||
| + | The following function will be run when the decompiler is done: <br> | ||
| + | |||
| + | function testFunc(myMap){ | ||
| + | myMap.forEach(function(value,key){ | ||
| + | console.log(key + ' = ' + value); | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | Currently this function prints a list in the console of all the different variable names and values <br> | ||
| + | This can be changed into whatever you require <br> | ||
| + | |||
| + | |||
| + | TO DO: make an example function | ||
Revision as of 10:56, 9 April 2019
Using Qmaze rules to call functions
Use the following script to catch the x3d commands given in the qmaze builder rules section.
The rules must be written as:
x3d(object).action = value
action: what action needs to be executed? e.g. changeColor.
object: what object is the subject of change?
value: what value needs to be given to the function?
Place this piece of code in your outputscript:
$(document).ready(function(){
$(qmaze.events).on(qmaze.events.CONSTRAINT, function(e, constraints) {
if (typeof constraints !== "undefined") {
var res = constraints.split(";");
for (var i = 0; i < res.length; i++) {
var regex = new RegExp(/(x3d\((.*?)\)\.(\w+)(\s+)?\=['"]?(.*)['"]?)/gi);
while (result = regex.exec(res[i])) {
var object = result[2],
method = result[3],
value = unescape(result[5]).replace('\, );
console.log('qmaze:'+method+'='+value);
eval(method + '="' + value + '";');
window["my"+method](object, value);
}
}
}
});
var lazyLoadingConstraints = $('input[id$="hfLazyLoading"]').val();
$(qmaze.events).trigger(qmaze.events.CONSTRAINT, [lazyLoadingConstraints]);
});
In your output script you need to declare all the functions called by the qmaze rules.
The functions always need to begin with ' my ' as seen below.
function mysetColor(obj, val) {
obj: is the object in the qmaze rules
val: is the value given in the qmaze rules
the following example is for looking up an object in the scene (v3d)
var obj = app.scene.getObjectByName(obj);
}
Custom decompiler function
--ADVANCED
To run the custom decompiler you need to Rule in Qmaze similar to how you would call a function.
The action needs to be 'decompiler' and the value can be a string of different variables with values.
First put in a variable name, secondly the value, separated by a ':'
Make sure you always put in 'function:' with your function name
The function with the name you put in here will be called when the decompiler is done
example of a Qmaze Rule:
x3d(object).decompiler = function:testFunc, filename:'x.gltf', name:'test', posX:3, posY:1, posZ:0, rotX:0, rotY:0, rotZ:0
Include the next code in your Outputscript:
function mydecompiler(obj, val) {
var myMap = new Map();
val = val.replace(/\s/g, ); remove all spaces
val = val.replace(/'/g, ); remove all '
var res1 = val.split(',');
for(var i = 0; i+1 <= res1.length; i++) {
var res2 = res1[i].split(':');
myMap.set(res2[0], res2[1]);
}
console.log(myMap);
window[myMap.get("function")](myMap);
}
The following function will be run when the decompiler is done:
function testFunc(myMap){
myMap.forEach(function(value,key){
console.log(key + ' = ' + value);
});
}
Currently this function prints a list in the console of all the different variable names and values
This can be changed into whatever you require
TO DO: make an example function