Пример #1
0
        private void AddSeneorToCanvas(Sensor sensor)
        {
            double             totalX        = floorplanImage.ActualWidth;
            double             totalY        = floorplanImage.ActualHeight;
            TranslateTransform dragTransform = new TranslateTransform();
            // Draw Rectangle
            Rectangle sensorRect = new Rectangle();

            sensorRect.Width           = sensor.sizeX * totalX;
            sensorRect.Height          = sensor.sizeY * totalY;
            sensorRect.Fill            = new SolidColorBrush(SensorType.GetColorFromSensorType(sensor.type));
            sensorRect.Stroke          = new SolidColorBrush(Colors.Black);
            sensorRect.StrokeThickness = 1;
            sensorRect.StrokeDashCap   = PenLineCap.Round;
            double startPosX = (sensorCanvas.ActualWidth - totalX) / 2 + sensor.locX * totalX;
            double startPosY = (sensorCanvas.ActualHeight - totalY) / 2 + sensor.locY * totalY;

            Canvas.SetTop(sensorRect, startPosY);
            Canvas.SetLeft(sensorRect, startPosX);
            Canvas.SetZIndex(sensorRect, 0);
            sensorRect.ManipulationMode       = ManipulationModes.All;
            sensorRect.ManipulationDelta     += Sensor_ManipulationDelta;
            sensorRect.ManipulationCompleted += Sensor_ManipulationCompleted;
            sensorRect.RenderTransform        = dragTransform;
            sensorRect.RightTapped           += Sensor_RightTapped;
            sensorRect.PointerEntered        += Sensor_PointerEnter;
            sensorRect.PointerExited         += Sensor_PointerExited;
            // Draw Text
            TextBlock sensorText = new TextBlock();

            sensorText.Text   = sensor.name;
            sensorText.Height = sensorRect.Height;
            sensorText.Width  = sensorRect.Width;
            Canvas.SetTop(sensorText, startPosY);
            Canvas.SetLeft(sensorText, startPosX);
            Canvas.SetZIndex(sensorText, 0);
            sensorText.ManipulationMode       = ManipulationModes.All;
            sensorText.ManipulationDelta     += Sensor_ManipulationDelta;
            sensorText.RenderTransform        = dragTransform;
            sensorText.ManipulationCompleted += Sensor_ManipulationCompleted;
            sensorText.RightTapped           += Sensor_RightTapped;
            sensorText.PointerEntered        += Sensor_PointerEnter;
            sensorText.PointerExited         += Sensor_PointerExited;
            // Populate Sensor List
            canvasSensorList.Add(new Tuple <Sensor, Rectangle, TextBlock, TranslateTransform>(sensor, sensorRect, sensorText, dragTransform));
            sensorCanvas.Children.Add(sensorRect);
            sensorCanvas.Children.Add(sensorText);
        }
Пример #2
0
        private void dataListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            int maxTime       = 3600 * 2; // 2 hours
            int maxSensor     = 6;        // Maximum 6 sensor drawing
            int timeElapse    = 0;
            int maxTimeElapse = 0;
            int sensorDrawn   = 0;
            List <KeyValuePair <string, int> > sensorLastFiredEventList = _home.GetSensorFireStatusSorted();
            List <KeyValuePair <string, int> > sensorDrawList           = new List <KeyValuePair <string, int> >();

            // Clear Drawing
            foreach (Tuple <Sensor, Rectangle, TextBlock> canvasSensorEntry in canvasSensorList)
            {
                canvasSensorEntry.Item2.Fill    = new SolidColorBrush(Colors.White);
                canvasSensorEntry.Item2.Opacity = 0.998;
            }
            if (dataListView.SelectedIndex == -1)
            {
                return;
            }
            // Find the total timeElapse
            foreach (KeyValuePair <string, int> entry in sensorLastFiredEventList)
            {
                // Already drawn 6
                if (sensorDrawn > maxSensor)
                {
                    break;
                }
                // No event
                if (entry.Value == -1)
                {
                    break;
                }
                // Find time elapse of current entry
                DateTime entryTime = _home.sensorEventCollection.UnfilteredStorage[entry.Value].TimeTag;
                timeElapse = Convert.ToInt32((_home.SelectedEvent.TimeTag - entryTime).TotalSeconds);
                // If Time elapsed greater than max time, stop here
                if (timeElapse > maxTime)
                {
                    break;
                }
                // Otherwise, add it to sensorDrawList
                sensorDrawList.Add(entry);
                // Add Sensor Count
                sensorDrawn++;
            }
            maxTimeElapse = timeElapse + 1;
            timeElapse    = 0;
            foreach (KeyValuePair <string, int> entry in sensorDrawList)
            {
                // Find time elapse of current entry
                DateTime entryTime = _home.sensorEventCollection.UnfilteredStorage[entry.Value].TimeTag;
                timeElapse = Convert.ToInt32((_home.SelectedEvent.TimeTag - entryTime).TotalSeconds);
                // Update Sensor Drawn List
                // Find Tuple in List
                Tuple <Sensor, Rectangle, TextBlock> canvasSensorEntry = canvasSensorList.Find(x => x.Item1.name == entry.Key);
                if (canvasSensorEntry != null)
                {
                    Color sensorTypeColor = SensorType.GetColorFromSensorType(canvasSensorEntry.Item1.type);
                    canvasSensorEntry.Item2.Fill    = new SolidColorBrush(sensorTypeColor);
                    canvasSensorEntry.Item2.Opacity = (1 - ((double)timeElapse) / maxTimeElapse) * 0.6 + 0.4;
                }
            }
            sensorCanvas.InvalidateArrange();
            sensorCanvas.UpdateLayout();
        }