//here we go, thats the method called by vvvv each frame //all data handling should be in here public void Evaluate(int SpreadMax) { //if any of the inputs has changed //recompute the outputs if (FTransformInput.PinIsChanged || FP1Input.PinIsChanged || FP2Input.PinIsChanged || FP3Input.PinIsChanged || FP4Input.PinIsChanged) { //first set slicecounts for all outputs //the incoming int SpreadMax is the maximum slicecount of all input pins, which is a good default FTransformOutput.SliceCount = SpreadMax; //the variables to fill with the input data Matrix4x4 matrixSlice; Vector4D p1Slice; Vector4D p2Slice; Vector4D p3Slice; Vector4D p4Slice; //loop for all slices for (int i = 0; i < SpreadMax; i++) { //read data from inputs FTransformInput.GetMatrix(i, out matrixSlice); FP1Input.GetValue4D(i, out p1Slice.x, out p1Slice.y, out p1Slice.z, out p1Slice.w); FP2Input.GetValue4D(i, out p2Slice.x, out p2Slice.y, out p2Slice.z, out p2Slice.w); FP3Input.GetValue4D(i, out p3Slice.x, out p3Slice.y, out p3Slice.z, out p3Slice.w); FP4Input.GetValue4D(i, out p4Slice.x, out p4Slice.y, out p4Slice.z, out p4Slice.w); //function per slice matrixSlice = VMath.BilerpMatrix(p1Slice, p2Slice, p4Slice, p3Slice) * matrixSlice; //write data to outputs FTransformOutput.SetMatrix(i, matrixSlice); } } }