public static IValueIn CreateValueInput(this IPluginHost host, InputAttribute attribute, Type type) { attribute = NormalizePinAttribute(attribute, type); IValueIn result = null; host.CreateValueInput(attribute.Name, attribute.Dimension, attribute.DimensionNames, (TSliceMode)attribute.SliceMode, (TPinVisibility)attribute.Visibility, out result); switch (attribute.Dimension) { case 2: result.SetSubType2D(attribute.MinValue, attribute.MaxValue, attribute.StepSize, attribute.DefaultValues[0], attribute.DefaultValues[1], attribute.IsBang, attribute.IsToggle, attribute.AsInt); break; case 3: result.SetSubType3D(attribute.MinValue, attribute.MaxValue, attribute.StepSize, attribute.DefaultValues[0], attribute.DefaultValues[1], attribute.DefaultValues[2], attribute.IsBang, attribute.IsToggle, attribute.AsInt); break; case 4: result.SetSubType4D(attribute.MinValue, attribute.MaxValue, attribute.StepSize, attribute.DefaultValues[0], attribute.DefaultValues[1], attribute.DefaultValues[2], attribute.DefaultValues[3], attribute.IsBang, attribute.IsToggle, attribute.AsInt); break; default: result.SetSubType(attribute.MinValue, attribute.MaxValue, attribute.StepSize, attribute.DefaultValue, attribute.IsBang, attribute.IsToggle, attribute.AsInt); break; } result.Order = attribute.Order; result.AutoValidate = attribute.AutoValidate; return(result); }
public void Configurate(IPluginConfig Input) { if (Input == FPinCountPin || Input == FPinCountCons) { double countPin; double countCons; FPinCountPin.GetValue(0, out countPin); FPinCountCons.GetValue(0, out countCons); // delete all pins. for (int i = 0; i < FInputPinList.Count; i++) { IValueIn pinToDelete = FInputPinList[i]; FHost.DeletePin(pinToDelete); } for (int i = 0; i < FSelectPinList.Count; i++) { IValueIn pinToDelete = FSelectPinList[i]; FHost.DeletePin(pinToDelete); } for (int i = 0; i < FOutputPinList.Count; i++) { IValueOut pinToDelete = FOutputPinList[i]; FHost.DeletePin(pinToDelete); } FInputPinList.Clear(); FSelectPinList.Clear(); FOutputPinList.Clear(); // create new pins. for (int i = 0; i < countCons; i++) { for (int j = 0; j < countPin; j++) { IValueIn inputPin; FHost.CreateValueInput("Input " + (i + 1) + "," + (j + 1), 1, null, TSliceMode.Dynamic, TPinVisibility.True, out inputPin); inputPin.SetSubType(double.MinValue, double.MaxValue, 0.01, 0.0, false, false, false); FInputPinList.Add(inputPin); } IValueIn selectPin; FHost.CreateValueInput("Select " + (i + 1), 1, null, TSliceMode.Single, TPinVisibility.True, out selectPin); selectPin.SetSubType(0, double.MaxValue, 1, 1, false, false, true); FSelectPinList.Add(selectPin); } for (int i = 0; i < countPin; i++) { IValueOut outputPin; FHost.CreateValueOutput("Output " + (i + 1), 1, null, TSliceMode.Dynamic, TPinVisibility.True, out outputPin); outputPin.SetSubType(double.MinValue, double.MaxValue, 0.01, 0, false, false, false); FOutputPinList.Add(outputPin); } } }
public void Configurate(IPluginConfig Input) { if (Input == this.FPinInManualTiming) { try { double dblmanual; this.FPinInManualTiming.GetValue(0, out dblmanual); if (dblmanual < 0.5) { if (this.FPinInTime != null) { this.FHost.DeletePin(this.FPinInTime); this.FPinInTime = null; } this.FHost.CreateEnumInput("Clock", TSliceMode.Single, TPinVisibility.True, out this.FPinInDevice); this.FPinInDevice.SetSubType("Clock Input Devices"); } else { if (this.FPinInDevice != null) { this.FHost.DeletePin(this.FPinInDevice); this.FPinInDevice = null; } this.FHost.CreateValueInput("Time", 1, null, TSliceMode.Single, TPinVisibility.True, out this.FPinInTime); this.FPinInTime.SetSubType(0, double.MaxValue, 0.01, 0, false, false, false); } } catch (Exception ex) { this.FHost.Log(TLogType.Error, ex.Message); } } }
public ValueInput(IValueIn pin) { FPin = pin; pin.GetValuePointer(out lenptr, out dataptr); }
public VecBin(IValueIn InValues, IValueIn InBins, int VectorSize) { vecSize = VectorSize; int slicecount = (int)Math.Ceiling((double)InValues.SliceCount / (double)vecSize); bins = new List <List <double> >(); int incr = 0; int binIncr = 0; double tmpBin; int curBin; // while (incr<slicecount || binIncr<InBins.SliceCount) // { // bins.Add(new List<double>()); // // InBins.GetValue(binIncr, out tmpBin); // curBin = (int)Math.Round(tmpBin); // if (curBin<0) // curBin = slicecount; // // double curSlice; // for (int i=0; i<curBin*vecSize; i++) // { // InValues.GetValue((incr*vecSize)+i, out curSlice); // bins[binIncr].Add(curSlice); // } // // incr+=curBin; // if (curBin==0) // incr+=slicecount*vecSize; // binIncr++; // } while (incr < slicecount || (binIncr % InBins.SliceCount) != 0) { int l = 1; InBins.GetValue(binIncr, out tmpBin); curBin = (int)Math.Round(tmpBin); if (curBin < 0) { l = Math.Abs(curBin); curBin = (int)Math.Ceiling(slicecount / (double)l); } double curSlice; for (int _l = 0; _l < l; _l++) { bins.Add(new List <double>()); for (int i = 0; i < curBin * vecSize; i++) { InValues.GetValue((incr * vecSize) + i, out curSlice); bins[bins.Count - 1].Add(curSlice); } incr += curBin; } if (binIncr == 0 && curBin == 0) { incr += slicecount * vecSize; } binIncr++; } }
//called by the plugin the host can create a pin public void CreateValueInput(string Name, int Dimension, string[] DimensionNames, TSliceMode SliceMode, TPinVisibility Visibility, out IValueIn Pin) { Pin = new TValuePin(this, Name, Dimension, DimensionNames, TPinDirection.Input, null, SliceMode, Visibility); AddPin(Pin as TBasePin); }
public void Evaluate(int SpreadMax) { double *oldvals; this.FPinOutput.GetValuePointer(out oldvals); this.FPinOutput.SliceCount = SpreadMax; this.FPinOutIdx.SliceCount = SpreadMax; for (int i = 0; i < this.FPinInMode.Count; i++) { string val; this.FPinInMode[i].GetString(0, out val); this.FModes[i] = (eLTPTakeOverMode)Enum.Parse(typeof(eLTPTakeOverMode), val); } if (this.FPinInPickUpEpsilon.PinIsChanged) { this.FPinInPickUpEpsilon.GetValue(0, out this.FEps); //Keep absolute value here this.FEps = Math.Abs(this.FEps); } if (this.FFirstFrame) { //On first frame, we take the first input only (highest priority) double *ptr; int ptrcnt; this.FPinInputs[0].GetValuePointer(out ptrcnt, out ptr); for (int i = 0; i < SpreadMax; i++) { this.FPinOutput.SetValue(i, ptr[i % ptrcnt]); this.FPinOutIdx.SetValue(i, 0); } this.FFirstFrame = false; } else { bool[] updated = new bool[SpreadMax]; for (int i = 0; i < SpreadMax; i++) { for (int j = 0; j < this.FPinInputs.Count; j++) { if (!updated[i]) { double dblval; this.FPinInputs[j].GetValue(i, out dblval); double oldval = this.FOldValues[j][i % this.FOldValues[j].Length]; double currval = oldvals[i]; if (dblval != oldval) { if (this.FModes[j] == eLTPTakeOverMode.Immediate) { this.FPinOutput.SetValue(i, dblval); this.FPinOutIdx.SetValue(i, j); updated[i] = true; } else { if ((dblval <= currval + this.FEps && oldval >= currval - this.FEps) || (dblval >= currval - this.FEps && oldval <= currval + this.FEps)) { this.FPinOutput.SetValue(i, dblval); this.FPinOutIdx.SetValue(i, j); updated[i] = true; } } } } } } } //Save old values this.FOldValues.Clear(); for (int i = 0; i < this.FPinInputs.Count; i++) { IValueIn pin = this.FPinInputs[i]; double[] dbl = new double[pin.SliceCount]; double *ptr; int ptrcnt; pin.GetValuePointer(out ptrcnt, out ptr); for (int j = 0; j < pin.SliceCount; j++) { dbl[j] = ptr[j]; } this.FOldValues.Add(dbl); } }