Example #1
0
        /// <summary>
        /// Creates a new GraphableSensor based on the given Graphablesensor
        /// </summary>
        /// <param name="baseSensor">The sensor to base it on</param>
        /// <param name="lowerTimeBound">The lowest time value allowed</param>
        /// <param name="upperTimeBound">The highest time value allowed</param>
        public GraphableSensor(GraphableSensor baseSensor, DateTime lowerTimeBound, DateTime upperTimeBound)
        {
            Debug.WriteLine("Lower Time Bound {0} Upper Time Bound {1}", lowerTimeBound, upperTimeBound);

            Sensor = baseSensor.Sensor;
            Colour = baseSensor.Colour;

            LowerBound = lowerTimeBound;
            UpperBound = upperTimeBound;

            BoundsSet = true;

            DataPoints = null;
        }
Example #2
0
        /// <summary>
        /// Creates a new GraphableSensor based on the given Graphablesensor
        /// </summary>
        /// <param name="baseSensor">The sensor to base it on</param>
        /// <param name="lowerTimeBound">The lowest time value allowed</param>
        /// <param name="upperTimeBound">The highest time value allowed</param>
        public GraphableSensor(GraphableSensor baseSensor, DateTime lowerTimeBound, DateTime upperTimeBound)
        {
            Debug.WriteLine("Lower Time Bound {0} Upper Time Bound {1}", lowerTimeBound, upperTimeBound);

            Sensor = baseSensor.Sensor;
            Colour = baseSensor.Colour;

            LowerBound = lowerTimeBound;
            UpperBound = upperTimeBound;

            BoundsSet = true;

            DataPoints = null;
        }
Example #3
0
        public static void RenderChartToImage(Chart elementToRender, GraphableSensor[] sensors, int width, int height, bool renderFullDataSeries, string filename)
        {
            if (elementToRender == null)
                return;
            Debug.WriteLine("Turning on immediate invalidate");
            //Force immediate invalidation
            InvalidationHandler.ForceImmediateInvalidate = true;

            Debug.WriteLine("Creating new chart");
            var clone = new Chart();

            clone.Width = clone.Height = double.NaN;
            clone.HorizontalAlignment = HorizontalAlignment.Stretch;
            clone.VerticalAlignment = VerticalAlignment.Stretch;
            clone.Margin = new Thickness();

            clone.Title = elementToRender.Title;
            clone.XAxis = new DateTimeAxis { Title = "Date" };
            clone.YAxis = new LinearAxis { Range = (IRange<double>)elementToRender.YAxis.Range, Title = elementToRender.YAxis.Title };

            for (var i = 0; i < elementToRender.Series.Count; i++)
            {
                var series = elementToRender.Series[i];
                var sensor = sensors[i];

                if (sensor.Sensor.Name != series.DataSeries.Title)
                {
                    Debug.WriteLine("Mismatched titles! Oh Dear!");
                    continue;
                }

                var lineSeries = new LineSeries
                                     {
                                         LineStroke = ((LineSeries)series).LineStroke,
                                         DataSeries =
                                             renderFullDataSeries
                                                 ? new DataSeries<DateTime, float>(sensor.Sensor.Name, sensor.DataPoints)
                                                 : series.DataSeries
                                     };
                clone.Series.Add(lineSeries);
            }

            var size = new Size(width, height);

            Debug.WriteLine("Rendering new chart of size {0}", size);
            clone.Measure(size);
            clone.Arrange(new Rect(size));
            clone.UpdateLayout();

            var renderer = new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Pbgra32);

            renderer.Render(clone);

            var pngEncoder = new PngBitmapEncoder();
            pngEncoder.Frames.Add(BitmapFrame.Create(renderer));

            Debug.WriteLine("Saving to file");
            using (var file = File.Create(filename))
            {
                pngEncoder.Save(file);
            }

            Debug.WriteLine("Turning off immediate invalidate");
            //Reset the invalidation handler
            InvalidationHandler.ForceImmediateInvalidate = false;

            EventLogger.LogInfo(null, "Image Exporter", "Saved graph as image to: " + filename);
        }
Example #4
0
 /// <summary>
 /// Deletes a sensor from the current dataset
 /// </summary>
 /// <param name="gSensor">The sensor to remove</param>
 public void DeleteSensor(GraphableSensor gSensor)
 {
     if (!Common.Confirm("Are you sure?", string.Format("Do you really want to delete {0}?", gSensor.Sensor.Name)))
         return;
     CurrentDataset.DeleteSensor(gSensor.Sensor);
     if (_sensorsToGraph.Contains(gSensor))
         _sensorsToGraph.Remove(gSensor);
     if (SensorsToCheckMethodsAgainst.Contains(gSensor.Sensor))
         SensorsToCheckMethodsAgainst.Remove(gSensor.Sensor);
     _graphableSensors = null;
     NotifyOfPropertyChange(() => GraphableSensors);
 }
Example #5
0
        /// <summary>
        /// Handles when a sensors trace colour is changed
        /// </summary>
        /// <param name="args">The colour change arguments</param>
        /// <param name="owner">The sensor whose colour was changed</param>
        public void ColourChanged(RoutedPropertyChangedEventArgs<Color> args, GraphableSensor owner)
        {
            if (ChartSeries == null)
                return;

            var matchingLineSeries = ChartSeries.FirstOrDefault(x =>
                                                                    {
                                                                        var dataPoints = x.DataSeries as DataSeries<DateTime, float>;
                                                                        return dataPoints != null && dataPoints.Title == owner.Sensor.Name;
                                                                    });

            if (matchingLineSeries == null)
                return;

            Debug.Print("Matched to graphed line series {0} attempting to update", matchingLineSeries.Name);

            matchingLineSeries.LineStroke = new SolidColorBrush(args.NewValue);

            NotifyOfPropertyChange(() => ChartSeries);
        }
Example #6
0
 /// <summary>
 /// Adds a sensor to the graph
 /// </summary>
 /// <param name="graphableSensor">The sensor to add to the graph</param>
 /// <param name="updateGraph">Whether or not to update the graph or not</param>
 public void AddToGraph(GraphableSensor graphableSensor, bool updateGraph = true)
 {
     if (graphableSensor.BoundsSet)
         graphableSensor.RemoveBounds();
     if (_sensorsToGraph.FirstOrDefault(x => x.BoundsSet) != null)
         graphableSensor.SetUpperAndLowerBounds(StartTime, EndTime);
     AddToEditingSensors(graphableSensor);
     _sensorsToGraph.Add(graphableSensor);
     Debug.Print("{0} was added to the graph list", graphableSensor.Sensor);
     DisableFeatures();
     UpdateGraph(_sensorsToGraph.Count < 2);
     //UpdateDetectionMethodGraphableSensors();
     EnableFeatures();
     UpdateUndoRedo();
     NotifyOfPropertyChange(() => UncheckAllSensors);
 }
Example #7
0
 /// <summary>
 /// Adds a sensor to the list of sensors used for editing
 /// </summary>
 /// <param name="graphableSensor">The sensor to add</param>
 public void AddToEditingSensors(GraphableSensor graphableSensor)
 {
     SensorsToCheckMethodsAgainst.Add(graphableSensor.Sensor);
     graphableSensor.Sensor.PropertyChanged += SensorPropertyChanged;
     UpdateDetectionMethodGraphableSensors();
     NotifyOfPropertyChange(() => SensorsForEditing);
     CheckTheseMethodsForThisSensor(_detectionMethods.Where(x => x.IsEnabled), graphableSensor.Sensor);
     UpdateDataTable();
 }
Example #8
0
        /// <summary>
        /// Adds a new meta data object to the sensor
        /// </summary>
        /// <param name="sensor">The sensor to recieve a new meta data object</param>
        /// <param name="keyPressEvent">The key press used to fire the method</param>
        /// <param name="sender">The origin of the event</param>
        public void AddNewMetaData(GraphableSensor sensor, KeyEventArgs keyPressEvent, ComboBox sender)
        {
            if (keyPressEvent.Key != Key.Enter)
                return;

            Debug.Print("Enter key pressed creating new meta data");
            Debug.Print("Sender {0} Sensor {1}", sender, sensor);

            var newMetaData = new SensorMetaData(sender.Text);
            sensor.Sensor.MetaData.Add(newMetaData);
            sensor.Sensor.CurrentMetaData = newMetaData;
        }
Example #9
0
        public void SetUp()
        {
            var rawSensor = new Sensor("Temperature", "Temperature at 30m", 40, 20, "C", 20, null);

            rawSensor.AddState(new SensorState(rawSensor, DateTime.Now));

            _baseDate = DateTime.Now;

            rawSensor.CurrentState.Values.Add(_baseDate, 15);
            rawSensor.CurrentState.Values.Add(_baseDate.AddMinutes(15), 20);
            rawSensor.CurrentState.Values.Add(_baseDate.AddMinutes(30), 25);

            _gSensor = new GraphableSensor(rawSensor);
        }