//public PixelRope(Pixel1D logicalDevice) // : base(logicalDevice) //{ // logicalDevice.PixelChanged += (sender, e) => // { // // Handles brightness as well // var hsv = new HSV(e.NewColor); // hsv.Value = hsv.Value * e.NewBrightness; // var color = hsv.Color; // if (System.Threading.Monitor.TryEnter(lockObject)) // { // try // { // PixelOutputPort.SendPixelValue(e.Channel, new PhysicalDevice.PixelRGBByte(color.R, color.G, color.B)); // } // finally // { // System.Threading.Monitor.Exit(lockObject); // } // } // else // log.Warn("Missed PixelChanged in PixelRope"); // }; // logicalDevice.MultiPixelChanged += (sender, e) => // { // var values = new PhysicalDevice.PixelRGBByte[e.NewValues.Length]; // for (int i = 0; i < e.NewValues.Length; i++) // { // var hsv = new HSV(e.NewValues[i].Color); // hsv.Value = hsv.Value * e.NewValues[i].Brightness; // var color = hsv.Color; // values[i] = new PixelRGBByte(color.R, color.G, color.B); // } // if (System.Threading.Monitor.TryEnter(lockObject)) // { // try // { // PixelOutputPort.SendPixelsValue(e.StartChannel, values); // } // finally // { // System.Threading.Monitor.Exit(lockObject); // } // } // else // log.Warn("Missed send to PixelRope"); // }; //} //public Pixel1D(VirtualPixel1D2 logicalDevice, int startVirtualPosition, int positions) // : base(logicalDevice) //{ // // this.pixelData = new ColorBrightness[positions]; // //logicalDevice.OutputData.Subscribe(x => // //{ // // SetFromIData(x); // // Output(); // //}); // //SetFromIData(logicalDevice.CurrentData); // logicalDevice.AddPixelDevice(startVirtualPosition, positions, x => // { // var values = new PhysicalDevice.PixelRGBByte[x.Length]; // for (int i = 0; i < x.Length; i++) // { // var color = x[i]; // values[i] = new PixelRGBByte(color.R, color.G, color.B); // } // lock (this.lockObject) // { // PixelOutputPort.SendPixelsValue(0, values); // } // }); // //logicalDevice.AddPixelDevice(startVirtualPosition, positions, (sender, e) => // // { // // // Handles brightness as well // // var color = BaseLight.GetColorFromColorBrightness(e.NewColor, e.NewBrightness); // // lock (this.lockObject) // // { // // PixelOutputPort.SendPixelValue(e.Channel, new PhysicalDevice.PixelRGBByte(color.R, color.G, color.B)); // // } // // }, (sender, e) => // // { // // var values = new PhysicalDevice.PixelRGBByte[e.NewValues.Length]; // // for (int i = 0; i < e.NewValues.Length; i++) // // { // // var color = BaseLight.GetColorFromColorBrightness(e.NewValues[i].Color, e.NewValues[i].Brightness); // // values[i] = new PixelRGBByte(color.R, color.G, color.B); // // } // // lock (this.lockObject) // // { // // PixelOutputPort.SendPixelsValue(e.StartChannel, values); // // } // // }); //} public Pixel1D(VirtualPixel1D3 logicalDevice, int startVirtualPosition = 0, int? positions = null, bool reverse = false) : base(logicalDevice) { if (!positions.HasValue) positions = logicalDevice.Pixels; logicalDevice.AddPixelDevice(startVirtualPosition, positions.Value, reverse, pixels => { lock (this.lockObject) { PixelOutputPort.SendPixelsValue(0, pixels, pixels.Length); } }); }