thanks for sharing this great work. I've started to study your changes and saw there are a lot. I think it will take a while, until I understand all the improvements. I've tested also some of my old nodes without number inputs and they all seems to work:-) Only the pushFrame has still the rad/deg conversion problem?
Just finished my supper :) Now I'm ready to explain how to write nodes for the last version of nodeeditor.
this is an example. check the comments
code:
function Star() // let's make a new node
{
this.addInput("Center","pointarray"); // input 0, type: pointarray
this.addInput("Radius","numarray"); // input 1, type: numarray. In fact it's just a common numeric array like [1,2,3,4,5]
this.addInput("Ratio","numarray"); // input 2, type: numarray
this.addInput("Sides","numarray"); // input 3, type: numarray
this.addOutput("Out","objectlist"); // output 0, type: objectlist
this.properties = { mode:["Long","Long","Short"], radius:[1], ratio:[0.4], sides:[5] };
// each node has two types of properties. both of them will stored when you save a .nod file, or clone a node
// there are only one difference: .properties is shown in nodeinfo panel and .internal is hidden
// string arrays like mode:["Long","Long","Short"] will be processed as a droplist. First value "Long" points to selected value. Other ones is available values: "Long", "Short".
// numeric arrays will be processed as numarrays
}
Star.title = "Star"; // default title
Star.desc = "Star"; // legacy litegraph parameter. At the moment I don't use it.
Star.prototype.onExecute = function() // this function will run on node execution command
{
var data = this.processInOut(this.properties.mode[0], this.multiProcess, null, this.properties.radius, this.properties.ratio, this.properties.sides);
// .processInOut function processes input arrays and creates output arrays
// first parameter: (string) array processing mode.
// modes supported:
// Short, Long as described above in my post
// Short+, Long+ same as Short, Long, but objectarray will be processed as one element
// Long# same as Long, but pointarray will be processed as one element
// second parameter: callback function which will be called for processing of each value set (important!)
// other parameters is optional. it's a default values for each input, which will be used if the input is not connected
// you may skip it or set it to null. in this case processInOut function will generate default value automatically.
// autovalue for numarray: [0]
// autovalue for pointarray: (0,0,0)
// autovalue for objectlist: empty objectlist
// if you want to use another values, you need to set them directly like in this example:
// null - autovalue(0,0,0), this.properties.radius - [1], this.properties.ratio - [0.4], this.properties.sides - [5]
// this function returns structure { inputs:[ input0, input1, ... input n], outputs:[output0, output1, ... output n]}
// input0, input1, ... input n - if the input connected, it wil return connected node data
// output0, output1, ... output n - returns concated output data generated by callback function for each output
this.properties.radius = data.inputs[1]; // you can update properties values if input data is changed
this.properties.ratio = data.inputs[2];
this.properties.sides = data.inputs[3];
this.setOutputData(0, data.outputs[0]); // set node output data
}
Star.prototype.multiProcess = function(center, r, rt, s) // callback function which will be called for processing of each value set (center = input0, r = input1, rt = input2, s = input3)
{
// object array data will be sent as objectarray with one object (except Long+ Short+ modes)
// point array data will be sent as pointarray with one object (except Long# mode)
// numarray data will be sent as number
var frame = center.getFrame(); // center.getFrame() = center.getFrame(0);
return [factory( 'polygonstar', frame, frame.evaluate( 0, r, 0 ), s, frame.evaluate( 0, r*rt, 0 ))];
// this function should return array [ output0, output1, ... output n ]
// return [factory( 'polygonstar', frame, frame.evaluate( 0, r, 0 ), s, frame.evaluate( 0, r*rt, 0 ))]
// is the same as
// var outputs = [];
// outputs[0] = factory( 'polygonstar', frame, frame.evaluate( 0, r, 0 ), s, frame.evaluate( 0, r*rt, 0 ));
// return outputs;
// if node has more than one output you nned to set outputs[1], outputs[2] .. etc
// correct output[n] data is objectlist / pointarray / number
}
LiteGraph.registerNodeType("Curves/Star", Star);
many thanks for the commented example. The important information for me at first is the automatic assignment of the sequence of the inputs to the parameters sequence of the callback, I supposed that, but I was not shure.
(// callback function which will be called for processing of each value set (center = input0, r = input1, rt = input2, s = input3) )
Am I right, that I can also direct access to the elements of a numarray with [] ? I can't find a explicit definition of that type!?
Karsten
>Am I right, that I can also direct access to the elements of a numarray with [] ?
Yes, you can access any element. It's just an array like [1,2,3,4,5].
Hello
My Friends I are in confusion.............
I started using Elephant, and I uploaded some applications....
Now, I post pictures of my ui
where you see what I've uploaded ...
Considering the last release of the legendary Max
the question is;
What should I charge, to have the updated features, I can add
that load in my Node Editor without removing what is already
..... or , do I have to remove everything, and in this case what should I enter
I await yours suggestion
regards
al
sorry for my bad English, I hope
I understand my problem
it seems that you use a very old version of the Elephant.(Date 2015). So you should rename your nodeeditor folder to e.g. nodeeditor-old. Than extract the archive and rename the folder nodeeditor.0.77.a to nodeeditor. Copy the folder to /ui of your Moi installation. Your node-files will not work with the new version - if you need them, you can change or dublicate your shortcut-key and can use them also.
v.0.80
Added function updateThisNodeGraph. This function updates node graph without canvas reloading.
Knob, Slider and Output nodes has been rewritten. Now they use updateThisNodeGraph. Significant interface performance boost!
Fixed pointArray.pushFrame deg/rad bug
Changed node connections (lot of graphical changes)
Arrays group renamed to Points
Due lack of time I didn't tested all new graphical features well. Send me a message if you find glitches and bugs.