Parametric design in MoI?

 From:  mkdm
7713.316 In reply to 7713.314 
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.
Attachments:

Image Attachments:
Size: 114.2 KB, Downloaded: 40 times, Dimensions: 1520x822px
Size: 912 KB, Downloaded: 49 times, Dimensions: 1917x1035px