public override bool Sync()
        {
            IsChanged = FAutoValidate ? FNodeIn.PinIsChanged : FNodeIn.Validate();
            if (IsChanged)
            {
                Length = FNodeIn.SliceCount;
                using (var writer = GetWriter())
                {
                    object usI;
                    FNodeIn.GetUpstreamInterface(out usI);
                    var upstreamInterface = usI as IGenericIO;

                    for (int i = 0; i < Length; i++)
                    {
                        int usS;
                        T   result = new T();
                        if (upstreamInterface != null)
                        {
                            FNodeIn.GetUpsreamSlice(i, out usS);
                            IDX11ResourceDataProvider res = (IDX11ResourceDataProvider)upstreamInterface.GetSlice(usS);

                            if (result == null)
                            {
                                res = new T();
                            }
                            result.Assign(res);
                        }
                        writer.Write(result);
                    }
                }
            }
            return(base.Sync());
        }
        //called when data for any output pin is requested
        public void Evaluate(int spreadMax)
        {
            object myData;

            FX.GetUpstreamInterface(out myData);

            if (myData == null)
            {
                return;
            }

            int upSlice;

            FX.GetUpsreamSlice(0, out upSlice);

            var myValueData = myData as IValueData;

            if (myValueData != null)
            {
                double x;
                myValueData.GetValue(upSlice, out x);
                FValueOut[0] = x;
            }

            var myColorData = myData as IColorData;

            if (myColorData != null)
            {
                RGBAColor x;
                myColorData.GetColor(upSlice, out x);
                FColorOut[0] = x;
            }
        }
Esempio n. 3
0
        public override bool Sync()
        {
            IsChanged = FAutoValidate ? FNodeIn.PinIsChanged : FNodeIn.Validate();
            if (IsChanged)
            {
                Length = FNodeIn.SliceCount;
                using (var writer = GetWriter())
                {
                    object usI;
                    FNodeIn.GetUpstreamInterface(out usI);
                    var upstreamInterface = usI as IGenericIO;

                    for (int i = 0; i < Length; i++)
                    {
                        int usS;
                        var result = default(T);
                        if (upstreamInterface != null)
                        {
                            FNodeIn.GetUpsreamSlice(i, out usS);
                            result = (T)upstreamInterface.GetSlice(usS);
                        }
                        writer.Write(result);
                    }
                }
            }
            return(base.Sync());
        }
Esempio n. 4
0
        public override bool Sync()
        {
            var nodeConnectionChanged = FAutoValidate ? FNodeIn.PinIsChanged : FNodeIn.Validate();

            if (nodeConnectionChanged)
            {
                Length = FNodeIn.SliceCount;

                FSubscriptions.ResizeAndDispose(
                    Length,
                    slice =>
                {
                    return(new Subscription <Keyboard, KeyNotification>(
                               keyboard => keyboard.KeyNotifications,
                               (keyboard, n) =>
                    {
                        var keyboardState = this.Buffer[slice];
                        IEnumerable <Keys> keys;
                        switch (n.Kind)
                        {
                        case KeyNotificationKind.KeyDown:
                            var downNotification = n as KeyDownNotification;
                            keys = keyboardState.KeyCodes.Concat(new [] { downNotification.KeyCode });
                            keyboardState = new KeyboardState(keys, keyboard.CapsLock, keyboardState.Time + 1);
                            break;

                        case KeyNotificationKind.KeyUp:
                            var upNotification = n as KeyUpNotification;
                            keys = keyboardState.KeyCodes.Except(new[] { upNotification.KeyCode });
                            keyboardState = new KeyboardState(keys, keyboardState.CapsLock, keyboardState.Time + 1);
                            break;
                        }
                        SetKeyboardState(slice, keyboardState);
                    }
                               ));
                }
                    );

                object usI;
                FNodeIn.GetUpstreamInterface(out usI);
                var stream = usI as MemoryIOStream <Keyboard>;

                for (int i = 0; i < Length; i++)
                {
                    int usS;
                    var keyboard = Keyboard.Empty;
                    if (stream != null)
                    {
                        FNodeIn.GetUpsreamSlice(i, out usS);
                        keyboard = stream[usS];
                    }
                    if (FSubscriptions[i].Update(keyboard))
                    {
                        SetKeyboardState(i, KeyboardState.Empty);
                    }
                }
            }
            return(base.Sync());
        }
Esempio n. 5
0
        public override bool Sync()
        {
            IsChanged = FAutoValidate ? FNodeIn.PinIsChanged : FNodeIn.Validate();
            if (IsChanged)
            {
                Length = FNodeIn.SliceCount;

                FSubscriptions.ResizeAndDispose(
                    Length,
                    slice =>
                {
                    return(new Subscription <Keyboard, KeyNotification>(
                               keyboard => keyboard.KeyNotifications,
                               (keyboard, n) =>
                    {
                        var keyboardState = this.Buffer[slice];
                        IEnumerable <Keys> keys;
                        switch (n.Kind)
                        {
                        case KeyNotificationKind.KeyDown:
                            var downNotification = n as KeyDownNotification;
                            keys = keyboardState.KeyCodes.Concat(new [] { downNotification.KeyCode });
                            keyboardState = new KeyboardState(keys, keyboard.CapsLock, keyboardState.Time + 1);
                            break;

                        case KeyNotificationKind.KeyUp:
                            var upNotification = n as KeyUpNotification;
                            keys = keyboardState.KeyCodes.Except(new[] { upNotification.KeyCode });
                            keyboardState = new KeyboardState(keys, keyboardState.CapsLock, keyboardState.Time + 1);
                            break;
                        }
                        this.Buffer[slice] = keyboardState;
                    }
                               ));
                }
                    );

                using (var writer = GetWriter())
                {
                    object usI;
                    FNodeIn.GetUpstreamInterface(out usI);
                    var upstreamInterface = usI as IGenericIO;

                    for (int i = 0; i < Length; i++)
                    {
                        int usS;
                        var keyboard = Keyboard.Empty;
                        if (upstreamInterface != null)
                        {
                            FNodeIn.GetUpsreamSlice(i, out usS);
                            keyboard = (Keyboard)upstreamInterface.GetSlice(usS);
                        }
                        writer.Write(KeyboardState.Empty);
                        FSubscriptions[i].Update(keyboard);
                    }
                }
            }
            return(base.Sync());
        }
        ISpread <T> GetGenericSpread <T>(object upData)
        {
            var upStream = upData as IInStream <T>;

            if (upStream != null)
            {
                var currentSpread = new Spread <T>(NodeIn.SliceCount);
                var upperSpread   = upStream.ToSpread();
                for (int i = 0; i < NodeIn.SliceCount; i++)
                {
                    int upSlice;
                    NodeIn.GetUpsreamSlice(i, out upSlice);
                    currentSpread[i] = (T)((object)upperSpread[upSlice]);
                }
                return(currentSpread);
            }
            return(null);
        }
Esempio n. 7
0
 public object this[int i]
 {
     get
     {
         if (Connected)
         {
             object usi = GetUpstreamInterface();
             int    ui;
             Pin.GetUpsreamSlice(i, out ui);
             if (usi is IValueData)
             {
                 var    temp = usi as IValueData;
                 double t;
                 temp.GetValue(ui, out t);
                 return(t);
             }
             if (usi is IColorData)
             {
                 var       temp = usi as IColorData;
                 RGBAColor t;
                 temp.GetColor(ui, out t);
                 return(t);
             }
             if (usi is IStringData)
             {
                 var    temp = usi as IStringData;
                 string t;
                 temp.GetString(ui, out t);
                 return(t);
             }
             if (usi is IRawData)
             {
                 var     temp = usi as IRawData;
                 IStream t;
                 temp.GetData(ui, out t);
                 return(t);
             }
             if (usi is IEnumerable <object> )
             {
                 var temp = usi as IEnumerable <object>;
                 return(temp.ToArray()[ui]);
             }
             return(null);
         }
         else
         {
             return(null);
         }
     }
 }
Esempio n. 8
0
        public override bool Sync()
        {
            var nodeConnectionChanged = FAutoValidate ? FNodeIn.PinIsChanged : FNodeIn.Validate();

            if (nodeConnectionChanged)
            {
                Length = FNodeIn.SliceCount;

                FRawMouseWheels.SliceCount = Length;
                FSubscriptions.ResizeAndDispose(
                    Length,
                    slice =>
                {
                    return(new Subscription <Mouse, MouseNotification>(
                               mouse => mouse.MouseNotifications,
                               (mouse, n) =>
                    {
                        var position = new Vector2D(n.Position.X, n.Position.Y);
                        var clientArea = new Vector2D(n.ClientArea.Width - 1, n.ClientArea.Height - 1);
                        var normalizedPosition = VMath.Map(position, Vector2D.Zero, clientArea, new Vector2D(-1, 1), new Vector2D(1, -1), TMapMode.Float);

                        var mouseState = this.Buffer[slice];
                        switch (n.Kind)
                        {
                        case MouseNotificationKind.MouseDown:
                            var downNotification = n as MouseButtonNotification;
                            mouseState = new MouseState(normalizedPosition.x, normalizedPosition.y, mouseState.Buttons | downNotification.Buttons, mouseState.MouseWheel);
                            break;

                        case MouseNotificationKind.MouseUp:
                            var upNotification = n as MouseButtonNotification;
                            mouseState = new MouseState(normalizedPosition.x, normalizedPosition.y, mouseState.Buttons & ~upNotification.Buttons, mouseState.MouseWheel);
                            break;

                        case MouseNotificationKind.MouseMove:
                            mouseState = new MouseState(normalizedPosition.x, normalizedPosition.y, mouseState.Buttons, mouseState.MouseWheel);
                            break;

                        case MouseNotificationKind.MouseWheel:
                            var wheelNotification = n as MouseWheelNotification;
                            FRawMouseWheels[slice] += wheelNotification.WheelDelta;
                            var wheel = (int)Math.Round((float)FRawMouseWheels[slice] / Const.WHEEL_DELTA);
                            mouseState = new MouseState(normalizedPosition.x, normalizedPosition.y, mouseState.Buttons, wheel);
                            break;
                        }
                        SetMouseState(slice, ref mouseState);
                    }
                               ));
                }
                    );

                object usI;
                FNodeIn.GetUpstreamInterface(out usI);
                var upstreamInterface = usI as IGenericIO;

                var emptyMouseState = new MouseState();
                for (int i = 0; i < Length; i++)
                {
                    int usS;
                    var mouse = Mouse.Empty;
                    if (upstreamInterface != null)
                    {
                        FNodeIn.GetUpsreamSlice(i, out usS);
                        mouse = (Mouse)upstreamInterface.GetSlice(usS);
                    }
                    SetMouseState(i, ref emptyMouseState);
                    FSubscriptions[i].Update(mouse);
                }
            }
            return(base.Sync());
        }
Esempio n. 9
0
        //called when data for any output pin is requested
        public void Evaluate(int spreadMax)
        {
            object myData;

            FX.GetUpstreamInterface(out myData);

            if (myData == null)
            {
                FOutput[0] = "not connected";
                return;
            }

            int upSlice;

            FX.GetUpsreamSlice(0, out upSlice);

            var myValueData = myData as IValueData;

            if (myValueData != null)
            {
                double x;
                myValueData.GetValue(upSlice, out x);

                FOutput[0]   = "value: " + x.ToString();
                FValueOut[0] = x;
                return;
            }

            var myStringData = myData as IStringData;

            if (myStringData != null)
            {
                string x;
                myStringData.GetString(upSlice, out x);
                FOutput[0] = "string: " + x.ToString();
                return;
            }

            var myColorData = myData as IColorData;

            if (myColorData != null)
            {
                RGBAColor x;
                myColorData.GetColor(upSlice, out x);

                FOutput[0]   = "color: " + x.ToString();
                FColorOut[0] = x;
                return;
            }

            var myRawData = myData as IRawData;

            if (myRawData != null)
            {
                IStream x;
                myRawData.GetData(upSlice, out x);
                FOutput[0] = "raw: " + x.ToString();
                return;
            }

            var myFooData = myData as IEnumerable <object>;

            if (myFooData != null && myFooData.Any())
            {
                var spread = myFooData.ToSpread();
                FOutput[0] = spread[upSlice].ToString();
                return;
            }

            FLogger.Log(LogType.Debug, myData.ToString());
            FOutput[0] = "unknown data";
        }
Esempio n. 10
0
        public List <object> this[int i]
        {
            get
            {
                if (Connected)
                {
                    object usi   = GetUpstreamInterface();
                    double btemp = 0;
                    BinSizePin.GetValue(i, out btemp);
                    int currbin  = (int)btemp;
                    int curroffs = ConstructBinOffsets()[i];
                    if (currbin < 0)
                    {
                        currbin  = BinSizePin.SliceCount;
                        curroffs = 0;
                    }
                    List <object> res = new List <object>();

                    for (int j = 0; j < currbin; j++)
                    {
                        int ui;
                        Pin.GetUpsreamSlice(curroffs + j, out ui);
                        if (usi is IValueData)
                        {
                            var    temp = usi as IValueData;
                            double t;
                            temp.GetValue(ui, out t);
                            res.Add(t);
                            break;
                        }
                        if (usi is IColorData)
                        {
                            var       temp = usi as IColorData;
                            RGBAColor t;
                            temp.GetColor(ui, out t);
                            res.Add(t);
                            break;
                        }
                        if (usi is IStringData)
                        {
                            var    temp = usi as IStringData;
                            string t;
                            temp.GetString(ui, out t);
                            res.Add(t);
                            break;
                        }
                        if (usi is IRawData)
                        {
                            var     temp = usi as IRawData;
                            IStream t;
                            temp.GetData(ui, out t);
                            res.Add(t);
                            break;
                        }
                        if (usi is IEnumerable <object> )
                        {
                            var temp = usi as IEnumerable <object>;
                            res.Add(temp.ToArray()[ui]);
                            break;
                        }
                        res.Add(null);
                    }
                    return(res);
                }
                else
                {
                    return(null);
                }
            }
        }