author | Edouard Tisserant |
Thu, 05 May 2022 11:52:24 +0200 | |
changeset 3470 | b36754171535 |
child 3474 | 3ba74350237d |
permissions | -rw-r--r-- |
3470
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
1 |
// widget_xygraph.ysl2 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
2 |
widget_desc("XYGraph") { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
3 |
longdesc |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
4 |
|| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
5 |
XYGraph draws a cartesian trend graph re-using styles given for axis, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
6 |
grid/marks, legends and curves. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
7 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
8 |
Elements labeled "x_axis" and "y_axis" are svg:groups containg: |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
9 |
- "axis_label" svg:text gives style an alignment for axis labels. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
10 |
- "interval_major_mark" and "interval_minor_mark" are svg elements to be |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
11 |
duplicated along axis line to form intervals marks. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
12 |
- "axis_line" svg:path is the axis line. Paths must be intersect and their |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
13 |
bounding box is the chart wall. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
14 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
15 |
Elements labeled "curve_0", "curve_1", ... are paths whose styles are used |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
16 |
to draw curves corresponding to data from variables passed as HMI tree paths. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
17 |
"curve_0" is mandatory. HMI variables outnumbering given curves are ignored. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
18 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
19 |
|| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
20 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
21 |
shortdesc > Cartesian trend graph showing values of given variables over time |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
22 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
23 |
path name="value" count="1+" accepts="HMI_INT,HMI_REAL" > value |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
24 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
25 |
arg name="size" accepts="int" > buffer size |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
26 |
arg name="xformat" count="optional" accepts="string" > format string for X label |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
27 |
arg name="yformat" count="optional" accepts="string" > format string for Y label |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
28 |
arg name="ymin" count="optional" accepts="int,real" > minimum value foe Y axis |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
29 |
arg name="ymax" count="optional" accepts="int,real" > maximum value for Y axis |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
30 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
31 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
32 |
widget_class("XYGraph") { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
33 |
|| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
34 |
frequency = 1; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
35 |
init() { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
36 |
[this.x_size, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
37 |
this.x_format, this.y_format] = this.args; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
38 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
39 |
// Min and Max given with paths are meant to describe visible range, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
40 |
// not to clip data. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
41 |
this.clip = false; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
42 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
43 |
let y_min = -Infinity, y_max = Infinity; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
44 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
45 |
// Compute visible Y range by merging fixed curves Y ranges |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
46 |
for(let minmax of this.minmaxes){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
47 |
if(minmax){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
48 |
let [min,max] = minmax; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
49 |
if(min < y_min) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
50 |
y_min = min; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
51 |
if(max > y_max) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
52 |
y_max = max; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
53 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
54 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
55 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
56 |
if(y_min !== -Infinity && y_max !== Infinity){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
57 |
this.fixed_y_range = true; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
58 |
} else { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
59 |
this.fixed_y_range = false; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
60 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
61 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
62 |
this.ymin = y_min; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
63 |
this.ymax = y_max; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
64 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
65 |
this.curves = []; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
66 |
this.init_specific(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
67 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
68 |
this.reference = new ReferenceFrame( |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
69 |
[[this.x_interval_minor_mark, this.x_interval_major_mark], |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
70 |
[this.y_interval_minor_mark, this.y_interval_major_mark]], |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
71 |
[this.y_axis_label, this.x_axis_label], |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
72 |
[this.x_axis_line, this.y_axis_line], |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
73 |
[this.x_format, this.y_format]); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
74 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
75 |
// create <clipPath> path and attach it to widget |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
76 |
clipPath = document.createElementNS(xmlns,"clipPath"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
77 |
clipPathPath = document.createElementNS(xmlns,"path"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
78 |
clipPathPathDattr = document.createAttribute("d"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
79 |
clipPathPathDattr.value = this.reference.getClipPathPathDattr(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
80 |
clipPathPath.setAttributeNode(clipPathPathDattr); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
81 |
clipPath.appendChild(clipPathPath); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
82 |
this.element.appendChild(clipPath); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
83 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
84 |
// assign created clipPath to clip-path property of curves |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
85 |
for(let curve of this.curves){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
86 |
curve.setAttribute("clip-path", "url(#" + clipPath.id + ")"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
87 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
88 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
89 |
this.curves_data = []; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
90 |
this.max_data_length = this.args[0]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
91 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
92 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
93 |
dispatch(value,oldval, index) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
94 |
// naive local buffer impl. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
95 |
// data is updated only when graph is visible |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
96 |
// TODO: replace with separate recording |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
97 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
98 |
this.curves_data[index].push(value); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
99 |
let data_length = this.curves_data[index].length; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
100 |
let ymin_damaged = false; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
101 |
let ymax_damaged = false; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
102 |
let overflow; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
103 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
104 |
if(data_length > this.max_data_length){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
105 |
// remove first item |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
106 |
overflow = this.curves_data[index].shift(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
107 |
data_length = data_length - 1; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
108 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
109 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
110 |
if(!this.fixed_y_range){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
111 |
ymin_damaged = overflow <= this.ymin; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
112 |
ymax_damaged = overflow >= this.ymax; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
113 |
if(value > this.ymax){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
114 |
ymax_damaged = false; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
115 |
this.ymax = value; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
116 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
117 |
if(value < this.ymin){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
118 |
ymin_damaged = false; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
119 |
this.ymin = value; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
120 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
121 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
122 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
123 |
// recompute X range based on curent time ad buffer depth |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
124 |
// TODO: get PLC time instead of browser time |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
125 |
const d = new Date(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
126 |
let time = d.getTime(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
127 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
128 |
// FIXME: this becomes wrong when graph is not visible and updated all the time |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
129 |
[this.xmin, this.xmax] = [time - data_length*1000/this.frequency, time]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
130 |
let Xlength = this.xmax - this.xmin; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
131 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
132 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
133 |
// recompute curves "d" attribute |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
134 |
// FIXME: use SVG getPathData and setPathData when available. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
135 |
// https://svgwg.org/specs/paths/#InterfaceSVGPathData |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
136 |
// https://github.com/jarek-foksa/path-data-polyfill |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
137 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
138 |
let [base_point, xvect, yvect] = this.reference.getBaseRef(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
139 |
this.curves_d_attr = |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
140 |
zip(this.curves_data, this.curves).map(function([data,curve]){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
141 |
let new_d = data.map(function([y, i]){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
142 |
// compute curve point from data, ranges, and base_ref |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
143 |
let x = Xmin + i * Xlength / data_length; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
144 |
let xv = vectorscale(xvect, (x - Xmin) / Xlength); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
145 |
let yv = vectorscale(yvect, (y - Ymin) / Ylength); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
146 |
let px = base_point.x + xv.x + yv.x; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
147 |
let py = base_point.y + xv.y + yv.y; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
148 |
if(!this.fixed_y_range){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
149 |
if(ymin_damaged && y > this.ymin) this.ymin = y; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
150 |
if(xmin_damaged && x > this.xmin) this.xmin = x; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
151 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
152 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
153 |
return " " + px + "," + py; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
154 |
}); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
155 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
156 |
new_d.unshift("M "); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
157 |
new_d.push(" z"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
158 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
159 |
return new_d.join(''); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
160 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
161 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
162 |
// computed curves "d" attr is applied to svg curve during animate(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
163 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
164 |
this.request_animate(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
165 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
166 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
167 |
animate(){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
168 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
169 |
// move marks and update labels |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
170 |
this.reference.applyRanges([this.XRange, this.YRange]); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
171 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
172 |
// apply computed curves "d" attributes |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
173 |
for(let [curve, d_attr] of zip(this.curves, this.curves_d_attr)){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
174 |
curve.setAttribute("d", d_attr); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
175 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
176 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
177 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
178 |
|| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
179 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
180 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
181 |
widget_defs("XYGraph") { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
182 |
labels(""" |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
183 |
/x_interval_minor_mark |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
184 |
/x_axis_line |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
185 |
/x_interval_major_mark |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
186 |
/x_axis_label |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
187 |
/y_interval_minor_mark |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
188 |
/y_axis_line |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
189 |
/y_interval_major_mark |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
190 |
/y_axis_label""") |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
191 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
192 |
| init_specific() { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
193 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
194 |
// collect all curve_n labelled children |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
195 |
foreach "$hmi_element/*[regexp:test(@inkscape:label,'^curve_[0-9]+$')]" { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
196 |
const "label","@inkscape:label"; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
197 |
const "id","@id"; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
198 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
199 |
// detect non-unique names |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
200 |
if "$hmi_element/*[not($id = @id) and @inkscape:label=$label]"{ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
201 |
error > XYGraph id="«$id»", label="«$label»" : elements with data_n label must be unique. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
202 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
203 |
| this.curves[«substring(@inkscape:label, 7)»] = id("«@id»"); /* «@inkscape:label» */ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
204 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
205 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
206 |
| } |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
207 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
208 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
209 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
210 |
emit "declarations:XYGraph" |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
211 |
|| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
212 |
function lineFromPath(path_elt) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
213 |
let start = path_elt.getPointAtLength(0); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
214 |
let end = path_elt.getPointAtLength(path_elt.getTotalLength()); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
215 |
return [start, new DOMPoint(end.x - start.x , end.y - start.y)]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
216 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
217 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
218 |
function vector(p1, p2) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
219 |
return new DOMPoint(p2.x - p1.x , p2.y - p1.y); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
220 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
221 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
222 |
function vectorscale(p1, p2) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
223 |
return new DOMPoint(p2 * p1.x , p2 * p1.y); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
224 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
225 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
226 |
function move_elements_to_group(elements) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
227 |
let newgroup = document.createElementNS(xmlns,"g"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
228 |
for(let element of elements){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
229 |
element.parentElement().removeChild(element); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
230 |
newgroup.appendChild(element); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
231 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
232 |
return newgroup; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
233 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
234 |
function getLinesIntesection(l1, l2) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
235 |
/* |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
236 |
Compute intersection of two lines |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
237 |
================================= |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
238 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
239 |
^ l2vect |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
240 |
/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
241 |
/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
242 |
/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
243 |
l1start ----------X--------------> l1vect |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
244 |
/ intersection |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
245 |
/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
246 |
/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
247 |
l2start |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
248 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
249 |
intersection = l1start + l1vect * a |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
250 |
intersection = l2start + l2vect * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
251 |
==> solve : "l1start + l1vect * a = l2start + l2vect * b" to find a and b and then intersection |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
252 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
253 |
(1) l1start.x + l1vect.x * a = l2start.x + l2vect.x * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
254 |
(2) l1start.y + l1vect.y * a = l2start.y + l2vect.y * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
255 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
256 |
// express a |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
257 |
(1) a = (l2start.x + l2vect.x * b) / (l1start.x + l1vect.x) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
258 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
259 |
// substitute a to have only b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
260 |
(1+2) l1start.y + l1vect.y * (l2start.x + l2vect.x * b) / (l1start.x + l1vect.x) = l2start.y + l2vect.y * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
261 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
262 |
// expand to isolate b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
263 |
(2) l1start.y + (l1vect.y * l2start.x) / (l1start.x + l1vect.x) + (l1vect.y * l2vect.x * b) / (l1start.x + l1vect.x) = l2start.y + l2vect.y * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
264 |
(2) l1start.y + (l1vect.y * l2start.x) / (l1start.x + l1vect.x) - l2start.y = l2vect.y * b - (l1vect.y * l2vect.x * b) / (l1start.x + l1vect.x) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
265 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
266 |
// factorize b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
267 |
(2) l1start.y + (l1vect.y * l2start.x) / (l1start.x + l1vect.x) - l2start.y = b * (l2vect.y - (l1vect.y * l2vect.x ) / (l1start.x + l1vect.x)) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
268 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
269 |
// extract b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
270 |
(2) b = (l1start.y + (l1vect.y * l2start.x) / (l1start.x + l1vect.x) - l2start.y) / ((l2vect.y - (l1vect.y * l2vect.x ) / (l1start.x + l1vect.x))) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
271 |
*/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
272 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
273 |
let [l1start, l1vect] = l1; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
274 |
let [l1start, l2vect] = l2; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
275 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
276 |
let b = (l1start.y + (l1vect.y * l2start.x) / (l1start.x + l1vect.x) - l2start.y) / ((l2vect.y - (l1vect.y * l2vect.x ) / (l1start.x + l1vect.x))); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
277 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
278 |
return new DOMPoint(l2start.x + l2vect.x * b, l2start.y + l2vect.y * b); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
279 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
280 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
281 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
282 |
// From https://stackoverflow.com/a/48293566 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
283 |
function *zip (...iterables){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
284 |
let iterators = iterables.map(i => i[Symbol.iterator]() ) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
285 |
while (true) { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
286 |
let results = iterators.map(iter => iter.next() ) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
287 |
if (results.some(res => res.done) ) return |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
288 |
else yield results.map(res => res.value ) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
289 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
290 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
291 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
292 |
class ReferenceFrame { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
293 |
constructor( |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
294 |
// [[Xminor,Xmajor], [Yminor,Ymajor]] |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
295 |
marks, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
296 |
// [Xlabel, Ylabel] |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
297 |
labels, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
298 |
// [Xline, Yline] |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
299 |
lines, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
300 |
// [Xformat, Yformat] printf-like formating strings |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
301 |
formats |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
302 |
){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
303 |
this.axes = zip(labels,marks,lines,formats).map((...args) => new Axis(...args)); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
304 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
305 |
let [lx,ly] = this.axes.map(axis => axis.line); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
306 |
let [[xstart, xvect], [ystart, yvect]] = [lx,ly]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
307 |
let base_point = this.getBasePoint(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
308 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
309 |
// setup clipping for curves |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
310 |
this.clipPathPathDattr = |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
311 |
"m " + base_point.x + "," + base_point.y + " " |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
312 |
+ xvect.x + "," + xvect.y + " " |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
313 |
+ yvect.x + "," + yvect.y + " " |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
314 |
+ -xvect.x + "," + -xvect.y + " " |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
315 |
+ -yvect.x + "," + -yvect.y + " z"; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
316 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
317 |
this.base_ref = [base_point, xvect, yvect]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
318 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
319 |
for(let axis of this.axes){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
320 |
axis.setBasePoint(base_point); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
321 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
322 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
323 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
324 |
getBaseRef(){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
325 |
return this.base_ref; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
326 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
327 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
328 |
getClipPathPathDattr(){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
329 |
return this.clipPathPathDattr; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
330 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
331 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
332 |
applyRanges(ranges){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
333 |
for(let [range,axis] of zip(ranges,this.axes)){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
334 |
axis.applyRange(range); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
335 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
336 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
337 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
338 |
getBasePoint() { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
339 |
let [[xstart, xvect], [ystart, yvect]] = this.axes.map(axis => axis.line); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
340 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
341 |
/* |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
342 |
Compute graph clipping region base point |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
343 |
======================================== |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
344 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
345 |
Clipping region is a parallelogram containing axes lines, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
346 |
and whose sides are parallel to axes line respectively. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
347 |
Given axes lines are not starting at the same point, hereafter is |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
348 |
calculus of parallelogram base point. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
349 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
350 |
^ given Y axis |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
351 |
/ / |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
352 |
/ / |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
353 |
/ / |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
354 |
xstart /---------/--------------> given X axis |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
355 |
/ / |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
356 |
/ / |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
357 |
/---------/-------------- |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
358 |
base_point ystart |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
359 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
360 |
base_point = xstart + yvect * a |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
361 |
base_point = ystart + xvect * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
362 |
==> solve : "xstart + yvect * a = ystart + xvect * b" to find a and b and then base_point |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
363 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
364 |
(1) xstart.x + yvect.x * a = ystart.x + xvect.x * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
365 |
(2) xstart.y + yvect.y * a = ystart.y + xvect.y * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
366 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
367 |
// express a |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
368 |
(1) a = (ystart.x + xvect.x * b) / (xstart.x + yvect.x) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
369 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
370 |
// substitute a to have only b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
371 |
(1+2) xstart.y + yvect.y * (ystart.x + xvect.x * b) / (xstart.x + yvect.x) = ystart.y + xvect.y * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
372 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
373 |
// expand to isolate b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
374 |
(2) xstart.y + (yvect.y * ystart.x) / (xstart.x + yvect.x) + (yvect.y * xvect.x * b) / (xstart.x + yvect.x) = ystart.y + xvect.y * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
375 |
(2) xstart.y + (yvect.y * ystart.x) / (xstart.x + yvect.x) - ystart.y = xvect.y * b - (yvect.y * xvect.x * b) / (xstart.x + yvect.x) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
376 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
377 |
// factorize b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
378 |
(2) xstart.y + (yvect.y * ystart.x) / (xstart.x + yvect.x) - ystart.y = b * (xvect.y - (yvect.y * xvect.x ) / (xstart.x + yvect.x)) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
379 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
380 |
// extract b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
381 |
(2) b = (xstart.y + (yvect.y * ystart.x) / (xstart.x + yvect.x) - ystart.y) / ((xvect.y - (yvect.y * xvect.x ) / (xstart.x + yvect.x))) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
382 |
*/ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
383 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
384 |
let b = (xstart.y + (yvect.y * ystart.x) / (xstart.x + yvect.x) - ystart.y) / ((xvect.y - (yvect.y * xvect.x ) / (xstart.x + yvect.x))); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
385 |
let base_point = new DOMPoint(ystart.x + xvect.x * b, ystart.y + xvect.y * b); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
386 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
387 |
// // compute given origin |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
388 |
// // from drawing : given_origin = xstart - xvect * b |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
389 |
// let given_origin = new DOMPoint(xstart.x - xvect.x * b, xstart.y - xvect.y * b); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
390 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
391 |
return base_point; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
392 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
393 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
394 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
395 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
396 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
397 |
class Axis { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
398 |
constructor(label, marks, line, format){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
399 |
this.lineElement = line; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
400 |
this.line = lineFromPath(line); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
401 |
this.format = format; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
402 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
403 |
this.label = label; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
404 |
this.marks = marks; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
405 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
406 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
407 |
// add transforms for elements sliding along the axis line |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
408 |
for(let [elementname,element] of zip(["minor", "major", "label"],[...marks,label])){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
409 |
for(let name of ["base","slide"]){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
410 |
let transform = svg_root.createSVGTransform(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
411 |
element.transform.baseVal.appendItem(transform); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
412 |
this[elementname+"_"+name+"_transform"]=transform; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
413 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
414 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
415 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
416 |
// group marks an labels together |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
417 |
let parent = line.parentElement() |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
418 |
marks_group = move_elements_to_group(marks); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
419 |
marks_and_label_group = move_elements_to_group([marks_group_use, label]); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
420 |
group = move_elements_to_group([marks_and_label_group,line]); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
421 |
parent.appendChild(group); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
422 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
423 |
// Add transforms to group |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
424 |
for(let name of ["base","origin"]){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
425 |
let transform = svg_root.createSVGTransform(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
426 |
group.transform.baseVal.appendItem(transform); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
427 |
this[name+"_transform"]=transform; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
428 |
}; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
429 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
430 |
this.group = group; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
431 |
this.marks_group = marks_group; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
432 |
this.marks_and_label_group = marks_and_label_group; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
433 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
434 |
this.mlg_clones = []; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
435 |
this.last_mark_count = 0; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
436 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
437 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
438 |
setBasePoint(base_point){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
439 |
// move Axis to base point |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
440 |
let [start, _vect] = this.lineElement; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
441 |
let v = vector(start, base_point); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
442 |
this.base_transform.setTranslate(v.x, v.y); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
443 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
444 |
// Move marks and label to base point. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
445 |
// _|_______ _|________ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
446 |
// | ' | ==> ' |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
447 |
// | 0 0 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
448 |
// | | |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
449 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
450 |
for(let [markname,mark] of zip(["minor", "major"],this.marks)){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
451 |
let transform = this[markname+"_base_transform"]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
452 |
let pos = vector( |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
453 |
// Marks are expected to be paths |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
454 |
// paths are expected to be lines |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
455 |
// intersection with axis line is taken |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
456 |
// as reference for mark position |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
457 |
base_point, getLinesIntesection( |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
458 |
this.line, lineFromPath(mark))); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
459 |
this[markname+"_base_transform"].setTranslate(-pos.x, -pos.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
460 |
if(markname == "major"){ // label follow major mark |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
461 |
this.label_base_transform.setTranslate(-pos.x, -pos.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
462 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
463 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
464 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
465 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
466 |
applyOriginAndUnitVector(offset, unit_vect){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
467 |
// offset is a representing position of an |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
468 |
// axis along the opposit axis line, expressed in major marks units |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
469 |
// unit_vect is the translation in between to major marks |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
470 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
471 |
// ^ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
472 |
// | unit_vect |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
473 |
// |<---> |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
474 |
// _________|__________> |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
475 |
// ^ | ' | ' | ' |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
476 |
// |yoffset | 1 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
477 |
// | | |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
478 |
// v xoffset| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
479 |
// X<------>| |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
480 |
// base_point |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
481 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
482 |
// move major marks and label to first positive mark position |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
483 |
let v = vectorscale(unit_vect, offset+1); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
484 |
this.label_slide_transform.setTranslate(v.x, v.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
485 |
this.major_slide_transform.setTranslate(v.x, v.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
486 |
// move minor mark to first half positive mark position |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
487 |
let h = vectorscale(unit_vect, offset+0.5); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
488 |
this.minor_slide_transform.setTranslate(h.x, h.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
489 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
490 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
491 |
applyRange(min, max){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
492 |
let range = max - min; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
493 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
494 |
// compute how many units for a mark |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
495 |
// |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
496 |
// - Units are expected to be an order of magnitude smaller than range, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
497 |
// so that marks are not too dense and also not too sparse. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
498 |
// Order of magnitude of range is log10(range) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
499 |
// |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
500 |
// - Units are necessarily power of ten, otherwise it is complicated to |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
501 |
// fill the text in labels... |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
502 |
// Unit is pow(10, integer_number ) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
503 |
// |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
504 |
// - To transform order of magnitude to an integer, floor() is used. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
505 |
// This results in a count of mark fluctuating in between 10 and 100. |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
506 |
// |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
507 |
// - To spare resources result is better in between 5 and 50, |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
508 |
// and log10(5) is substracted to order of magnitude to obtain this |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
509 |
// log10(5) ~= 0.69897 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
510 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
511 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
512 |
let unit = Math.pow(10, Math.floor(Math.log10(range)-0.69897)); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
513 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
514 |
// TODO: for time values (ms), units may be : |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
515 |
// 1 -> ms |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
516 |
// 10 -> s/100 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
517 |
// 100 -> s/10 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
518 |
// 1000 -> s |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
519 |
// 60000 -> min |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
520 |
// 3600000 -> hour |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
521 |
// ... |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
522 |
// |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
523 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
524 |
// Compute position of origin along axis [0...range] |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
525 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
526 |
// min < 0, max > 0, offset = -min |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
527 |
// _____________|________________ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
528 |
// ... -3 -2 -1 |0 1 2 3 4 ... |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
529 |
// <--offset---> ^ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
530 |
// |_original |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
531 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
532 |
// min > 0, max > 0, offset = 0 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
533 |
// |________________ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
534 |
// |6 7 8 9 10... |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
535 |
// ^ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
536 |
// |_original |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
537 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
538 |
// min < 0, max < 0, offset = max-min (range) |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
539 |
// _____________|_ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
540 |
// ... -5 -4 -3 |-2 |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
541 |
// <--offset---> ^ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
542 |
// |_original |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
543 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
544 |
let offset = (max>=0 && min>=0) ? 0 : ( |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
545 |
(max<0 && min<0) ? range : -min); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
546 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
547 |
// compute unit vector |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
548 |
let [_start, vect] = this.line; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
549 |
let unit_vect = vectorscale(vect, unit/range); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
550 |
let [umin, umax, uoffset] = [min,max,offset].map(val => Math.round(val/unit)); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
551 |
let mark_count = umax-umin; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
552 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
553 |
// apply unit vector to marks and label |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
554 |
this.label_and_marks.applyOriginAndUnitVector(offset, unit_vect); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
555 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
556 |
// duplicate marks and labels as needed |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
557 |
let current_mark_count = this.mlg_clones.length; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
558 |
for(let i = current_mark_count; i <= mark_count; i++){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
559 |
// cloneNode() label and add a svg:use of marks in a new group |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
560 |
let newgroup = document.createElementNS(xmlns,"g"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
561 |
let transform = svg_root.createSVGTransform(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
562 |
let newlabel = cloneNode(this.label); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
563 |
let newuse = document.createElementNS(xmlns,"use"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
564 |
let newuseAttr = document.createAttribute("xlink:href"); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
565 |
newuseAttr.value = "#"+this.marks_group.id; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
566 |
newuse.setAttributeNode(newuseAttr.value); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
567 |
newgroup.transform.baseVal.appendItem(transform); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
568 |
newgroup.appendChild(newlabel); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
569 |
newgroup.appendChild(newuse); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
570 |
this.mlg_clones.push([tranform,newgroup]); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
571 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
572 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
573 |
// move marks and labels, set labels |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
574 |
for(let u = 0; u <= mark_count; u++){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
575 |
let i = 0; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
576 |
let val = (umin + u) * unit; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
577 |
let vec = vectorscale(unit_vect, offset + val); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
578 |
let text = this.format ? sprintf(this.format, val) : val.toString(); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
579 |
if(u == uoffset){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
580 |
// apply offset to original marks and label groups |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
581 |
this.origin_transform.setTranslate(vec.x, vec.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
582 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
583 |
// update original label text |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
584 |
this.label_and_mark.label.textContent = text; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
585 |
} else { |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
586 |
let [transform,element] = this.mlg_clones[i++]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
587 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
588 |
// apply unit vector*N to marks and label groups |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
589 |
transform.setTranslate(vec.x, vec.x); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
590 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
591 |
// update label text |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
592 |
element.getElementsByTagName("tspan")[0].textContent = text; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
593 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
594 |
// Attach to group if not already |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
595 |
if(i >= this.last_mark_count){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
596 |
this.group.appendChild(element); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
597 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
598 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
599 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
600 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
601 |
// dettach marks and label from group if not anymore visible |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
602 |
for(let i = current_mark_count; i < this.last_mark_count; i++){ |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
603 |
let [transform,element] = this.mlg_clones[i]; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
604 |
this.group.removeChild(element); |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
605 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
606 |
|
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
607 |
this.last_mark_count = current_mark_count; |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
608 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
609 |
} |
b36754171535
SVGHMI: Add premature implementation of XY chart.
Edouard Tisserant
parents:
diff
changeset
|
610 |
|| |