Hello Karsten,
Here's my new node : PatternSelectArray
It's an idea based on the Max's script PatternSelection.
( http://moi3d.com/forum/index.php?webtag=MOI&msg=6518.11)
code:
// PatternSelectArray
function PatternSelArray()
{
this.addInput("In","pointarray");
this.addOutput("Out","pointarray");
this.addOutput("Elems","number");
this.properties = { pattern:"+-", elems:0 };
}
PatternSelArray.title = "PatternSelArray";
PatternSelArray.desc = "PatternSelArray";
PatternSelArray.prototype.onExecute = function()
{
var output = new pointArray();
var source = this.getInputData(0, new pointArray());
if (this.properties.pattern == '') this.properties.pattern = "+-";
var len = source.getLength();
var cn = 0;
for (i = 0; i < len ; i++) {
if ( this.properties.pattern[cn] === '1' || this.properties.pattern[cn] === '+') {
var source_elem = source.getElement(i);
output.push(source_elem.pt.x,
source_elem.pt.y,
source_elem.pt.z,
source_elem.AngleX,
source_elem.AngleY,
source_elem.AngleZ,
source_elem.Size);
}
cn = (cn < this.properties.pattern.length-1) ? cn+1 : 0;
}
this.properties.elems = output.getLength();
this.setOutputData(0, output);
this.setOutputData(1, output.getLength());
}
LiteGraph.registerNodeType("Arrays/PatternSelArray", PatternSelArray);
In order to use it, it's necessary to add this function definition to the "pointArray" section of the file litegraph.js
code:
pointArray.prototype.getElement = function(n)
{
var shift = n*this.recordLength;
var element = {"pt":this.getPoint(n),
"AngleX":this.data[shift+3],
"AngleY":this.data[shift+4],
"AngleZ":this.data[shift+5],
"Size":this.data[shift+6]};
return element;
}
I hope it can be useful.
Ciao!
Marco.
|