@@ -10,7 +10,7 @@ class range
10
10
size_t max_count;
11
11
12
12
template <class type >
13
- range (type &list, int skip = 0 )
13
+ range (type &list, size_t max_size = 0 , size_t cut = 0 )
14
14
{
15
15
max_value = 0 ;
16
16
min_value = 0 ;
@@ -21,26 +21,44 @@ class range
21
21
return ;
22
22
}
23
23
24
- min_value = max_value = list[0 ].front ();
24
+ size_t skip = list[0 ].size () > max_size ? list[0 ].size () - max_size : 0 ;
25
+
26
+ for (size_t i = 0 ; i < list[0 ].size (); i++)
27
+ {
28
+ auto value = list[0 ].front ();
29
+ list[0 ].push (value);
30
+ list[0 ].pop ();
31
+ if (i == skip)
32
+ {
33
+ min_value = max_value = value;
34
+ }
35
+ }
25
36
26
37
for (size_t i = 0 ; i < list.size (); i++)
27
38
{
28
- if (max_count < list[i].size ())
39
+ size_t skip = list[i].size () > max_size ? list[i].size () - max_size : 0 ;
40
+ size_t size = list[i].size () - skip - cut;
41
+ if (max_count < size)
29
42
{
30
- max_count = list[i]. size () - skip ;
43
+ max_count = size;
31
44
}
32
45
for (size_t j = 0 ; j < list[i].size (); j++)
33
46
{
34
- if (max_value < list[i].front () && (j != max_count))
47
+ auto value = list[i].front ();
48
+ list[i].push (value);
49
+ list[i].pop ();
50
+ if (j < skip)
35
51
{
36
- max_value = list[i]. front () ;
52
+ continue ;
37
53
}
38
- else if (min_value > list[i]. front ( ) && (j != max_count ))
54
+ if ((max_value < value ) && (j < list[i]. size () - cut ))
39
55
{
40
- min_value = list[i].front ();
56
+ max_value = value;
57
+ }
58
+ else if ((min_value > value) && (j < list[i].size () - cut))
59
+ {
60
+ min_value = value;
41
61
}
42
- list[i].push (list[i].front ());
43
- list[i].pop ();
44
62
}
45
63
}
46
64
}
@@ -298,11 +316,11 @@ struct line_chart
298
316
299
317
void clear (TFT_eSPI *canvans)
300
318
{
301
- // ·绘制y轴/x轴
319
+ // ·绘制y轴/x轴
302
320
// ·绘制x轴刻度
303
321
auto y_tick_value_template = text ().origin (right).vorigin (vcenter);
304
322
auto x_tick_value_template = text ().origin (center).vorigin (top);
305
- auto r = range (_value, 1 );
323
+ auto r = range (_value, _max_size + 1 , 1 );
306
324
auto m = match_tick (r.max_value , r.min_value , _based_on, _y_max_tick_count, _y_min_tick_count);
307
325
auto w = pix_t (0 );
308
326
auto max_y_tick_pix_width = 0 ;
@@ -416,7 +434,7 @@ struct line_chart
416
434
}
417
435
}
418
436
}
419
- line (x_start, x_end).color (_backgroud).thickness (_x_role_thickness).draw (canvans);
437
+ // line(x_start, x_end).color(_backgroud).thickness(_x_role_thickness).draw(canvans);
420
438
line (y_start, y_end).color (_backgroud).thickness (_y_role_thickness).draw (canvans);
421
439
}
422
440
@@ -428,7 +446,7 @@ struct line_chart
428
446
// ·绘制x轴刻度
429
447
auto y_tick_value_template = text ().origin (right).vorigin (vcenter);
430
448
auto x_tick_value_template = text ().origin (center).vorigin (top);
431
- auto r = range (_value);
449
+ auto r = range (_value, _max_size );
432
450
auto m = match_tick (r.max_value , r.min_value , _based_on, _y_max_tick_count, _y_min_tick_count);
433
451
auto w = pix_t (0 );
434
452
auto max_y_tick_pix_width = 0 ;
@@ -516,17 +534,21 @@ struct line_chart
516
534
auto default_color = _color[std::min (i, _color.size () - 1 )];
517
535
auto show_circle = _show_circle[std::min (i, _show_circle.size () - 1 )];
518
536
std::vector<point> value_point;
537
+ size_t skip = cur.size () > _max_size ? cur.size () - _max_size : 0 ;
519
538
for (int j = 0 ; j < cur.size () - 1 ; j++)
520
539
{
521
540
cur.push (cur.front ());
522
541
auto a = cur.front ();
523
542
cur.pop ();
524
-
543
+ if (j < skip)
544
+ {
545
+ continue ;
546
+ }
525
547
auto b = cur.front ();
526
548
auto ha = pos_t (round ((a - m.start_value ) / m.abs_value * height));
527
549
auto hb = pos_t (round ((b - m.start_value ) / m.abs_value * height));
528
- auto pa = origin (pos_t ((j + x_skip_tick) * x_step + x_offset), -(pos_t )ha);
529
- auto pb = origin (pos_t ((j + x_skip_tick + 1 ) * x_step + x_offset), -(pos_t )hb);
550
+ auto pa = origin (pos_t ((j - skip + x_skip_tick) * x_step + x_offset), -(pos_t )ha);
551
+ auto pb = origin (pos_t ((j - skip + x_skip_tick + 1 ) * x_step + x_offset), -(pos_t )hb);
530
552
line (pa, pb).color (default_color).draw (canvans);
531
553
if (j == 0 )
532
554
{
0 commit comments