aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.CodeGeneration/Tango.CodeGeneration.csproj
blob: 41413f4bd01ac6cb632a34344aab0608570e8f75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.ExceptionServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace RealTimeGraphEx.FastGraphs
{
    public class RealTimeGraphExMultiLineErase : RealTimeGraphExMultiLineScroll
    {

        #region Cross Thread Fields

        protected Color _markerColor;
        protected bool _showMarker;
        protected bool _endReached;
        protected int _currentReplaceIndex;

        #endregion

        #region Constructors

        public RealTimeGraphExMultiLineErase()
            : base()
        {

        }

        #endregion

        #region Properties


        /// <summary>
        /// Gets or sets the graph marker color.
        /// </summary>
        public Color MarkerColor
        {
            get { return (Color)GetValue(MarkerColorProperty); }
            set { SetValue(MarkerColorProperty, value); }
        }
        public static readonly DependencyProperty MarkerColorProperty =
            DependencyProperty.Register("MarkerBrush", typeof
"w"> PropertyMetadata(Colors.Red, new PropertyChangedCallback(CrossModelChanged))); /// <summary> /// Gets or sets whether to display the marker on the graph. /// </summary> public bool ShowMarker { get { return (bool)GetValue(ShowMarkerProperty); } set { SetValue(ShowMarkerProperty, value); } } public static readonly DependencyProperty ShowMarkerProperty = DependencyProperty.Register("ShowMarker", typeof(bool), typeof(RealTimeGraphExMultiLineErase), new PropertyMetadata(true, new PropertyChangedCallback(CrossModelChanged))); #endregion #region Override Methods protected override void OnSetCrossThreadFields() { base.OnSetCrossThreadFields(); this.Dispatcher.Invoke(() => { _markerColor = MarkerColor; _showMarker = ShowMarker; }, System.Windows.Threading.DispatcherPriority.Send); } protected override void OnClearGraph() { base.OnClearGraph(); _currentReplaceIndex = 0; _endReached = false; } protected internal override void OnRenderGraph() { if (_graphController != null && _graphController.dataSeriesCollection.Count > 0 && _graphController.TotalPoints > 0 && _width > 1 && _height > 1) { var pointsCollection = _graphController.GetAndClearAllPoints(); if (!_isPaused) { for (int i = 0; i < pointsCollection[0].Count; i++) { if (xValueCounter <= _width) { if (!_endReached) { for (int j = 0; j < pointsCollection.Count; j++) { double value = pointsCollection[j][i]; NormalizeValue(ref value); _graphPolygons[j].Add(value); } xValueCounter += _scaleFactor; } else { for (int j = 0; j < pointsCollection.Count; j++) { double value = pointsCollection[j][i]; NormalizeValue(ref value); _graphPolygons[j].Replace(value, _currentReplaceIndex); if (j == pointsCollection.Count - 1) { _currentReplaceIndex++; for (int k = 0; k < _markers.Count; k++) { if (_markers[k] == _currentReplaceIndex) { _markers.RemoveAt(k); k--; } } } } xValueCounter += _scaleFactor; if (_currentReplaceIndex > _graphPolygons[0].Count - 1) { xValueCounter = 0; _currentReplaceIndex = 0; } } } else { _endReached = true; xValueCounter = 0; for (int j = 0; j < pointsCollection.Count; j++) { double value = pointsCollection[j][i]; NormalizeValue(ref value); _graphPolygons[j].Replace(value, _currentReplaceIndex); if (j == pointsCollection.Count - 1) { _currentReplaceIndex++; } } xValueCounter += _scaleFactor; } } } updateCounter++; if (updateCounter >= 1) { updateCounter = 0; if (!_disableRendering) { WriteableBitmap bmp = BitmapFactory.New((int)_mainWidth, (int)_mainHeight); bmp.Clear(Colors.Transparent); OnDrawVisuals(bmp); bmp.Freeze(); img.Dispatcher.BeginInvoke(new Action(() => { img.Source = bmp; }), System.Windows.Threading.DispatcherPriority.Send); } } } } protected override void OnPushMarker() { if (_currentReplaceIndex != 0) { _markers.Add(_currentReplaceIndex); } } [HandleProcessCorruptedStateExceptions] protected override void OnDrawVisuals(WriteableBitmap bmp) { if (_graphController == null) return; base.OnDrawVisuals(bmp); var polygon = _graphPolygons[0]; double scale = _width / polygon.Count; //Draw marker if (_showMarker) { if (_currentReplaceIndex > 0) { try { double x = ((_currentReplaceIndex * scale) + _offSetX); bmp.DrawLine((int)x, 0, (int)x, (int)_mainHeight, _markerColor); } catch { Debug.WriteLine("[RealTimeGraphExMultiLineErase] [OnDrawVisuals] Error on drawing marker!"); } } } } #endregion } }