@@ -174,11 +174,22 @@ private void ProcessTimerTick(object sender, ElapsedEventArgs e)
174
174
175
175
private void DrawDataToGraph ( )
176
176
{
177
+ var startTime = RelativeToDataTime ( graphOffset ) ;
178
+ var endTime = RelativeToDataTime ( graphOffset + 1 / graphZoomfactor ) ;
179
+
177
180
foreach ( var info in ValidSensorInfos )
178
181
{
182
+ var startIdx = ( int ) Math . Floor ( info . DataList . FindLerpIndex ( startTime ) ) ;
183
+ var endIdx = ( int ) Math . Ceiling ( info . DataList . FindLerpIndex ( endTime ) ) ;
184
+
185
+ startIdx = Math . Max ( startIdx , 0 ) ;
186
+ endIdx = Math . Min ( endIdx , info . DataList . Count - 1 ) ;
187
+
179
188
var points = new StylusPointCollection ( ) ;
180
- foreach ( var dataPoint in info . DataList )
189
+ for ( int i = startIdx ; i <= endIdx ; i ++ )
181
190
{
191
+ SensorData dataPoint = info . DataList [ i ] ;
192
+
182
193
var xFactor = ( dataPoint . DateTime - dataStartTime ) . TotalMilliseconds / dataTimeInMillisec ;
183
194
var yFactor = 1 - GetValue ( dataPoint ) / maxValue ;
184
195
@@ -238,9 +249,14 @@ private double GetValue(SensorData data)
238
249
return ( double ) propInfo . GetValue ( data ) ;
239
250
}
240
251
252
+ private DateTime RelativeToDataTime ( double relTime )
253
+ {
254
+ return dataStartTime + TimeSpan . FromMilliseconds ( dataTimeInMillisec * relTime ) ;
255
+ }
256
+
241
257
private void JumpToRelPos ( double pos )
242
258
{
243
- currentDataTime = dataStartTime + TimeSpan . FromMilliseconds ( dataTimeInMillisec * pos ) ;
259
+ currentDataTime = RelativeToDataTime ( pos ) ;
244
260
DrawTimeStroke ( ) ;
245
261
}
246
262
0 commit comments