コード例 #1
0
        public ReportGraphAdapter(IION ion, DateIndexLookup dil, IEnumerable <SensorDataLogResults> sensorResults, View parent, View leftHandle, View rightHandle)
        {
            this.ion     = ion;
            this.dil     = dil;
            _parent      = parent;
            _leftHandle  = leftHandle;
            _rightHandle = rightHandle;


            foreach (var result in sensorResults)
            {
                records.Add(new ReportGraphRecord(dil, result));
            }

            _leftHandle.Touch += (sender, e) => {
                switch (e.Event.Action)
                {
                case MotionEventActions.Down:
                    _lastLeftX = e.Event.GetX();
                    break;

                case MotionEventActions.Move:
                    var xcoord = _leftHandle.GetX() + (e.Event.GetX() - _lastLeftX);
                    xcoord = xcoord.Clamp(0, _rightHandle.GetX() - _leftHandle.Width);
                    _leftHandle.SetX(xcoord);
                    _leftHandle.Invalidate();
                    NotifyDataSetChanged();
                    leftPercent = (_leftHandle.GetX()) / (float)_parent.Width;
                    NotifyDrag();
                    break;
                }
            };

            _rightHandle.Touch += (sender, e) => {
                switch (e.Event.Action)
                {
                case MotionEventActions.Down:
                    _lastRightX = e.Event.GetX();
                    break;

                case MotionEventActions.Move:
                    var xcoord = _rightHandle.GetX() + (e.Event.GetX() - _lastRightX);
                    xcoord = xcoord.Clamp(_leftHandle.GetX() + _leftHandle.Width, _parent.Width - _rightHandle.Width);
                    _rightHandle.SetX(xcoord);
                    _rightHandle.Invalidate();
                    NotifyDataSetChanged();
                    rightPercent = (_rightHandle.GetX() + _leftHandle.Width) / (float)_parent.Width;
                    NotifyDrag();
                    break;
                }
            };
        }
コード例 #2
0
        // Implemented for IGraphRenderer
        public void Render(Canvas canvas, DateIndexLookup dil, SensorDataLogResults results)
        {
            var sensor  = results.sensor;
            var serial  = sensor.device.serialNumber;
            var indices = dil.count;
            var series  = results.AsLineSeries(dil);

            model.Subtitle = serial.ToString() + "(" + sensor.type.GetTypeString() + ")";

            xAxis.Minimum        = 0;
            xAxis.Maximum        = indices - 1;
            xAxis.MajorStep      = (xAxis.Maximum - xAxis.Minimum) / Math.Min(10, indices);
            xAxis.LabelFormatter = (arg) => {
                var date = dil.GetDateTimeFromIndex((int)arg);
                return(date.ToLongTimeString());
            };

            yAxis.Minimum   = results.minimum.amount;
            yAxis.Maximum   = results.maximum.amount;
            yAxis.MajorStep = (yAxis.Maximum - yAxis.Minimum) / 5;
            if (yAxis.MajorStep == 0)
            {
                yAxis.MajorStep = 1;
            }
            yAxis.LabelFormatter = (arg) => {
                var su = sensor.unit.standardUnit;
                return(SensorUtils.ToFormattedString(su.OfScalar(arg).ConvertTo(sensor.unit)));
            };
            yAxis.Title = sensor.unit.ToString();

            model.Series.Clear();
            foreach (var s in series)
            {
                var colors = sensor.GetColorForSensor(context);
                s.Color = OxyColor.FromUInt32((uint)colors.Item1.ToArgb());
                model.Series.Add(s);
            }

            model.InvalidatePlot(true);

            var widthSpec  = View.MeasureSpec.MakeMeasureSpec(800, MeasureSpecMode.Exactly);
            var heightSpec = View.MeasureSpec.MakeMeasureSpec(400, MeasureSpecMode.Exactly);

            plot.Measure(widthSpec, heightSpec);
            plot.Layout(0, 0, plot.MeasuredWidth, plot.MeasuredHeight);
            plot.Draw(canvas);

            if (plot.Model.GetLastPlotException() != null)
            {
                throw plot.Model.GetLastPlotException();
            }
        }
コード例 #3
0
        // Implemented for IGraphRenderer
        public void Render(Canvas canvas, DateIndexLookup dil, SensorDataLogResults results)
        {
            var sensor  = results.sensor;
            var serial  = sensor.device.serialNumber;
            var indices = dil.count;
            var series  = results.AsLineSeries(dil);

            model.Title    = serial.ToString();
            model.Subtitle = "(" + sensor.type.GetTypeString() + ")";

            xAxis.Minimum   = 0;
            xAxis.Maximum   = indices - 1;
            xAxis.MajorStep = (xAxis.Maximum - xAxis.Minimum) / Math.Min(10, indices);

            yAxis.Minimum   = results.minimum.amount;
            yAxis.Maximum   = results.maximum.amount;
            yAxis.MajorStep = (yAxis.Maximum - yAxis.Minimum) / 5;
            if (yAxis.MajorStep == 0)
            {
                yAxis.MajorStep = 1;
            }

            model.Series.Clear();
            foreach (var s in series)
            {
                var c = sensor.GetColorForSensor(context);
                s.Color = OxyColor.FromUInt32((uint)c.Item1.ToArgb());
                model.Series.Add(s);
            }

            model.InvalidatePlot(true);

            var widthSpec  = View.MeasureSpec.MakeMeasureSpec(800, MeasureSpecMode.Exactly);
            var heightSpec = View.MeasureSpec.MakeMeasureSpec(400, MeasureSpecMode.Exactly);

            plot.Measure(widthSpec, heightSpec);
            plot.Layout(0, 0, plot.MeasuredWidth, plot.MeasuredHeight);
            plot.Draw(canvas);

            if (plot.Model.GetLastPlotException() != null)
            {
                throw plot.Model.GetLastPlotException();
            }
        }
        public static List <LineSeries> AsLineSeries(this SensorDataLogResults results, DateIndexLookup dil)
        {
            var ret = new List <LineSeries>();

            foreach (var id in results.sessionIds)
            {
                var ls = new LineSeries()
                {
                    StrokeThickness       = 1,
                    MarkerType            = MarkerType.Circle,
                    MarkerSize            = 0,
                    MarkerStroke          = OxyColors.Transparent,
                    MarkerStrokeThickness = 1,
                };

                foreach (var dlm in results[id])
                {
                    ls.Points.Add(new DataPoint(dil[dlm.recordedDate], dlm.measurement.ConvertTo(dlm.measurement.unit.standardUnit).amount));
                }

                ret.Add(ls);
            }

            return(ret);
        }
コード例 #5
0
 public ReportGraphRecord(DateIndexLookup dil, SensorDataLogResults results) : base(results)
 {
     this.dil   = dil;
     detailView = true;
     ApplyDateRange(DateTime.FromFileTimeUtc(0), DateTime.Now);
 }