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); }
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(); }