Browse Source

Ajout de texte dans l'image

Ajout des lignes à tirets
Ajout de la "prise en compte" (ou plutôt de l'ignore-mode) des <g>
Shikiryu 8 years ago
parent
commit
9568fe25cd
3 changed files with 692 additions and 17 deletions
  1. 596
    0
      Exemple_histogramme.svg
  2. 90
    13
      svgtoimage.php
  3. 6
    4
      test.php

+ 596
- 0
Exemple_histogramme.svg View File

@@ -0,0 +1,596 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+<svg xmlns="http://www.w3.org/2000/svg"
3
+     xmlns:xlink="http://www.w3.org/1999/xlink"
4
+     width="610px" height="460px" viewBox="0 0 610 460">
5
+<title>Figure n°0</title>
6
+<desc>
7
+Creator: GL2PS 1.3.2, (C) 1999-2006 Christophe Geuzaine (geuz@geuz.org)
8
+For: Scilab
9
+CreationDate: Sat Jan  2 18:09:57 2010
10
+</desc>
11
+<defs>
12
+</defs>
13
+<polygon fill="#ffffff" points="0,0 610,0 610,460 0,460"/>
14
+<g>
15
+<polygon fill="#ffffff" points="264.665,144.087 533.75,250.511 264.665,57.5"/>
16
+<polygon fill="#ffffff" points="264.665,144.087 76.25,296.076 264.665,57.5"/>
17
+<polygon fill="#ffffff" points="264.665,144.087 76.25,296.076 533.75,250.511"/>
18
+<polygon fill="#ffffff" points="533.75,250.511 533.75,163.924 264.665,57.5"/>
19
+<polygon fill="#ffffff" points="76.25,296.076 76.25,209.489 264.665,57.5"/>
20
+<polygon fill="#ffffff" points="76.25,296.076 345.335,402.5 533.75,250.511"/>
21
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="285.47,170.436 271.119,164.76 285.47,170.436"/>
22
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="271.119,164.76 261.07,172.866 271.119,164.76"/>
23
+<polygon fill="#00ffff" points="285.47,170.436 275.421,178.542 271.119,164.76"/>
24
+<polygon fill="#00ffff" points="275.421,178.542 261.07,172.866 271.119,164.76"/>
25
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="275.421,178.542 285.47,170.436"/>
26
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="275.421,178.542 285.47,170.436"/>
27
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="261.07,172.866 275.421,178.542"/>
28
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="261.07,172.866 275.421,178.542"/>
29
+<polygon fill="#00ffff" points="285.47,143.842 285.47,170.436 271.119,164.76"/>
30
+<polygon fill="#00ffff" points="261.07,172.866 261.07,146.272 271.119,164.76"/>
31
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="271.119,164.76 271.119,138.166 271.119,164.76"/>
32
+<polygon fill="#00ffff" points="271.119,138.166 285.47,143.842 271.119,164.76"/>
33
+<polygon fill="#00ffff" points="275.421,178.542 275.421,151.948 285.47,170.436"/>
34
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="285.47,170.436 285.47,143.842"/>
35
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="285.47,170.436 285.47,143.842"/>
36
+<polygon fill="#00ffff" points="261.07,146.272 271.119,138.166 271.119,164.76"/>
37
+<polygon fill="#00ffff" points="275.421,151.948 275.421,178.542 261.07,172.866"/>
38
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="261.07,146.272 261.07,172.866"/>
39
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="261.07,146.272 261.07,172.866"/>
40
+<polyline fill="none" stroke="#00ffff" stroke-width="0.5" stroke-dasharray="11,5" points="264.665,144.087 264.665,57.5"/>
41
+<polygon fill="#00ffff" points="275.421,151.948 285.47,143.842 285.47,170.436"/>
42
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="342.875,193.14 328.524,187.464 342.875,193.14"/>
43
+<polygon fill="#00ffff" points="261.07,146.272 275.421,151.948 261.07,172.866"/>
44
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="328.524,187.464 318.475,195.57 328.524,187.464"/>
45
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="275.421,151.948 275.421,178.542 275.421,151.948"/>
46
+<polygon fill="#00ffff" points="342.875,193.14 332.826,201.246 328.524,187.464"/>
47
+<polygon fill="#00ffff" points="332.826,201.246 318.475,195.57 328.524,187.464"/>
48
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="285.47,143.842 271.119,138.166"/>
49
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="285.47,143.842 271.119,138.166 261.07,146.272"/>
50
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="271.119,138.166 261.07,146.272"/>
51
+<polygon fill="#00ffff" points="285.47,143.842 275.421,151.948 271.119,138.166"/>
52
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="332.826,201.246 342.875,193.14"/>
53
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="332.826,201.246 342.875,193.14"/>
54
+<polyline fill="none" stroke="#00ffff" stroke-width="0.5" stroke-dasharray="11,5" points="264.665,144.087 533.75,250.511"/>
55
+<polygon fill="#00ffff" points="275.421,151.948 261.07,146.272 271.119,138.166"/>
56
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="318.475,195.57 332.826,201.246"/>
57
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="318.475,195.57 332.826,201.246"/>
58
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="245.275,202.861 230.924,197.185 245.275,202.861"/>
59
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="275.421,151.948 285.47,143.842 275.421,151.948"/>
60
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="230.924,197.185 220.875,205.291 230.924,197.185"/>
61
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="261.07,146.272 275.421,151.948 261.07,146.272"/>
62
+<polygon fill="#00ffff" points="245.275,202.861 235.226,210.967 230.924,197.185"/>
63
+<polygon fill="#00ffff" points="235.226,210.967 220.875,205.291 230.924,197.185"/>
64
+<polygon fill="#00ffff" points="342.875,144.898 342.875,193.14 328.524,187.464"/>
65
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="235.226,210.967 245.275,202.861"/>
66
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="235.226,210.967 245.275,202.861"/>
67
+<polygon fill="#00ffff" points="318.475,195.57 318.475,147.329 328.524,187.464"/>
68
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="220.875,205.291 235.226,210.967"/>
69
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="220.875,205.291 235.226,210.967"/>
70
+<polygon fill="#00ffff" points="245.275,175.029 245.275,202.861 230.924,197.185"/>
71
+<polygon fill="#00ffff" points="220.875,205.291 220.875,177.459 230.924,197.185"/>
72
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="230.924,197.185 230.924,169.353 230.924,197.185"/>
73
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="328.524,187.464 328.524,139.223 328.524,187.464"/>
74
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="400.279,215.844 385.928,210.168 400.279,215.844"/>
75
+<polygon fill="#00ffff" points="332.826,201.246 332.826,153.005 342.875,193.14"/>
76
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="385.928,210.168 375.879,218.274 385.928,210.168"/>
77
+<polygon fill="#00ffff" points="332.826,153.005 332.826,201.246 318.475,195.57"/>
78
+<polygon fill="#00ffff" points="400.279,215.844 390.231,223.95 385.928,210.168"/>
79
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="385.928,210.168 385.928,199.035 385.928,210.168"/>
80
+<polygon fill="#00ffff" points="390.231,223.95 375.879,218.274 385.928,210.168"/>
81
+<polygon fill="#00ffff" points="235.226,210.967 235.226,183.135 245.275,202.861"/>
82
+<polygon fill="#00ffff" points="230.924,169.353 245.275,175.029 230.924,197.185"/>
83
+<polygon fill="#00ffff" points="400.279,204.711 400.279,215.844 385.928,210.168"/>
84
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="245.275,202.861 245.275,175.029"/>
85
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="245.275,202.861 245.275,175.029"/>
86
+<polygon fill="#00ffff" points="235.226,183.135 235.226,210.967 220.875,205.291"/>
87
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="342.875,193.14 342.875,144.898"/>
88
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="342.875,193.14 342.875,144.898"/>
89
+<polygon fill="#00ffff" points="220.875,177.459 230.924,169.353 230.924,197.185"/>
90
+<polygon fill="#00ffff" points="375.879,218.274 375.879,207.141 385.928,210.168"/>
91
+<polygon fill="#00ffff" points="385.928,199.035 400.279,204.711 385.928,210.168"/>
92
+<polygon fill="#00ffff" points="375.879,207.141 385.928,199.035 385.928,210.168"/>
93
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="220.875,177.459 220.875,205.291"/>
94
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="220.875,177.459 220.875,205.291"/>
95
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="318.475,147.329 318.475,195.57"/>
96
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="318.475,147.329 318.475,195.57"/>
97
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="390.231,223.95 400.279,215.844"/>
98
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="390.231,223.95 400.279,215.844"/>
99
+<polyline fill="none" stroke="#00ffff" stroke-width="0.5" stroke-dasharray="11,5" points="264.665,144.087 76.25,296.076"/>
100
+<polygon fill="#00ffff" points="328.524,139.223 342.875,144.898 328.524,187.464"/>
101
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="375.879,218.274 390.231,223.95"/>
102
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="375.879,218.274 390.231,223.95"/>
103
+<polygon fill="#00ffff" points="318.475,147.329 328.524,139.223 328.524,187.464"/>
104
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="400.279,215.844 400.279,204.711"/>
105
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="400.279,215.844 400.279,204.711"/>
106
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="302.679,225.564 288.328,219.888 302.679,225.564"/>
107
+<polygon fill="#00ffff" points="235.226,183.135 245.275,175.029 245.275,202.861"/>
108
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="375.879,207.141 375.879,218.274"/>
109
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="375.879,207.141 375.879,218.274"/>
110
+<polygon fill="#00ffff" points="390.231,223.95 390.231,212.817 400.279,215.844"/>
111
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="288.328,219.888 278.279,227.994 288.328,219.888"/>
112
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="400.279,204.711 385.928,199.035"/>
113
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="400.279,204.711 385.928,199.035"/>
114
+<polygon fill="#00ffff" points="220.875,177.459 235.226,183.135 220.875,205.291"/>
115
+<polygon fill="#00ffff" points="390.231,212.817 390.231,223.95 375.879,218.274"/>
116
+<polygon fill="#00ffff" points="390.231,212.817 400.279,204.711 400.279,215.844"/>
117
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="235.226,183.135 235.226,210.967 235.226,183.135"/>
118
+<polygon fill="#00ffff" points="302.679,225.564 292.631,233.67 288.328,219.888"/>
119
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="385.928,199.035 375.879,207.141"/>
120
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="385.928,199.035 375.879,207.141"/>
121
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="332.826,153.005 332.826,201.246 332.826,153.005"/>
122
+<polygon fill="#00ffff" points="292.631,233.67 278.279,227.994 288.328,219.888"/>
123
+<polygon fill="#00ffff" points="375.879,207.141 390.231,212.817 375.879,218.274"/>
124
+<polygon fill="#00ffff" points="400.279,204.711 390.231,212.817 385.928,199.035"/>
125
+<polygon fill="#00ffff" points="332.826,153.005 342.875,144.898 342.875,193.14"/>
126
+<polygon fill="#00ffff" points="390.231,212.817 375.879,207.141 385.928,199.035"/>
127
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="245.275,175.029 230.924,169.353"/>
128
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="245.275,175.029 230.924,169.353"/>
129
+<polygon fill="#00ffff" points="318.475,147.329 332.826,153.005 318.475,195.57"/>
130
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="230.924,169.353 220.875,177.459"/>
131
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="230.924,169.353 220.875,177.459"/>
132
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="390.231,212.817 390.231,223.95 390.231,212.817"/>
133
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="292.631,233.67 302.679,225.564"/>
134
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="292.631,233.67 302.679,225.564"/>
135
+<polygon fill="#00ffff" points="245.275,175.029 235.226,183.135 230.924,169.353"/>
136
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="278.279,227.994 292.631,233.67"/>
137
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="278.279,227.994 292.631,233.67"/>
138
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="390.231,212.817 400.279,204.711 390.231,212.817"/>
139
+<polygon fill="#00ffff" points="235.226,183.135 220.875,177.459 230.924,169.353"/>
140
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="375.879,207.141 390.231,212.817 375.879,207.141"/>
141
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="205.079,235.285 190.728,229.609 205.079,235.285"/>
142
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="443.333,232.872 443.333,232.872 443.333,232.872"/>
143
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="190.728,229.609 180.679,237.715 190.728,229.609"/>
144
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="235.226,183.135 245.275,175.029 235.226,183.135"/>
145
+<polygon fill="#00ffff" points="205.079,235.285 195.031,243.391 190.728,229.609"/>
146
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="457.684,238.547 443.333,232.872"/>
147
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="457.684,238.547 443.333,232.872 457.684,238.547 443.333,232.872"/>
148
+<polygon fill="#00ffff" points="195.031,243.391 180.679,237.715 190.728,229.609"/>
149
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="220.875,177.459 235.226,183.135 220.875,177.459"/>
150
+<polygon fill="#00ffff" points="302.679,184.126 302.679,225.564 288.328,219.888"/>
151
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="443.333,232.872 433.284,240.978"/>
152
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="443.333,232.872 433.284,240.978"/>
153
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="443.333,232.872 433.284,240.978 443.333,232.872"/>
154
+<polygon fill="#00ffff" points="278.279,227.994 278.279,186.556 288.328,219.888"/>
155
+<polygon fill="#00ffff" points="457.684,238.547 447.635,246.654 443.333,232.872"/>
156
+<polygon fill="#00ffff" points="457.684,238.547 447.635,246.654 443.333,232.872"/>
157
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="342.875,144.898 328.524,139.223"/>
158
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="342.875,144.898 328.524,139.223"/>
159
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="457.684,238.547 457.684,238.547 457.684,238.547"/>
160
+<polygon fill="#00ffff" points="447.635,246.654 433.284,240.978 443.333,232.872"/>
161
+<polygon fill="#00ffff" points="447.635,246.654 433.284,240.978 443.333,232.872"/>
162
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="195.031,243.391 205.079,235.285"/>
163
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="195.031,243.391 205.079,235.285"/>
164
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="328.524,139.223 318.475,147.329"/>
165
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="328.524,139.223 318.475,147.329"/>
166
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="180.679,237.715 195.031,243.391"/>
167
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="180.679,237.715 195.031,243.391"/>
168
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="288.328,219.888 288.328,178.45 288.328,219.888"/>
169
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="433.284,240.978 433.284,240.978 433.284,240.978"/>
170
+<polygon fill="#00ffff" points="342.875,144.898 332.826,153.005 328.524,139.223"/>
171
+<polygon fill="#00ffff" points="332.826,153.005 318.475,147.329 328.524,139.223"/>
172
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="447.635,246.654 457.684,238.547"/>
173
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="447.635,246.654 457.684,238.547 447.635,246.654 457.684,238.547"/>
174
+<polygon fill="#00ffff" points="292.631,233.67 292.631,192.232 302.679,225.564"/>
175
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="433.284,240.978 447.635,246.654"/>
176
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="433.284,240.978 447.635,246.654"/>
177
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="433.284,240.978 447.635,246.654 433.284,240.978"/>
178
+<polygon fill="#00ffff" points="292.631,192.232 292.631,233.67 278.279,227.994"/>
179
+<text fill="#000000" x="541" y="258" transform="rotate(-0, 541, 258)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
180
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="360.084,248.268 345.733,242.592 360.084,248.268"/>
181
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="332.826,153.005 342.875,144.898 332.826,153.005"/>
182
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="302.679,225.564 302.679,184.126"/>
183
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="302.679,225.564 302.679,184.126"/>
184
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.733,242.592 335.684,250.698 345.733,242.592"/>
185
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="318.475,147.329 332.826,153.005 318.475,147.329"/>
186
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="447.635,246.654 447.635,246.654 447.635,246.654"/>
187
+<polygon fill="#00ffff" points="360.084,248.268 350.035,256.374 345.733,242.592"/>
188
+<polygon fill="#00ffff" points="288.328,178.45 302.679,184.126 288.328,219.888"/>
189
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="278.279,186.556 278.279,227.994"/>
190
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="278.279,186.556 278.279,227.994"/>
191
+<polygon fill="#00ffff" points="350.035,256.374 335.684,250.698 345.733,242.592"/>
192
+<polygon fill="#00ffff" points="278.279,186.556 288.328,178.45 288.328,219.888"/>
193
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="533.75,250.511 539.75,252.884"/>
194
+<polygon fill="#00ffff" points="360.084,227.858 360.084,248.268 345.733,242.592"/>
195
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="350.035,256.374 360.084,248.268"/>
196
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="350.035,256.374 360.084,248.268"/>
197
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.733,242.592 345.733,222.182 345.733,242.592"/>
198
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="335.684,250.698 350.035,256.374"/>
199
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="335.684,250.698 350.035,256.374"/>
200
+<polygon fill="#00ffff" points="335.684,250.698 335.684,230.288 345.733,242.592"/>
201
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="292.631,192.232 292.631,233.67 292.631,192.232"/>
202
+<polygon fill="#00ffff" points="292.631,192.232 302.679,184.126 302.679,225.564"/>
203
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="262.484,257.989 248.133,252.313 262.484,257.989"/>
204
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="248.133,252.313 238.084,260.419 248.133,252.313"/>
205
+<polygon fill="#00ffff" points="278.279,186.556 292.631,192.232 278.279,227.994"/>
206
+<polygon fill="#00ffff" points="345.733,222.182 360.084,227.858 345.733,242.592"/>
207
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="525.899,256.844 529.499,258.268"/>
208
+<polygon fill="#00ffff" points="262.484,257.989 252.435,266.095 248.133,252.313"/>
209
+<polygon fill="#00ffff" points="335.684,230.288 345.733,222.182 345.733,242.592"/>
210
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="360.084,248.268 360.084,227.858"/>
211
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="360.084,248.268 360.084,227.858"/>
212
+<polygon fill="#00ffff" points="205.079,156.738 205.079,235.285 190.728,229.609"/>
213
+<polygon fill="#00ffff" points="252.435,266.095 238.084,260.419 248.133,252.313"/>
214
+<polygon fill="#00ffff" points="350.035,256.374 350.035,235.964 360.084,248.268"/>
215
+<polygon fill="#00ffff" points="180.679,237.715 180.679,159.168 190.728,229.609"/>
216
+<polygon fill="#00ffff" points="350.035,235.964 350.035,256.374 335.684,250.698"/>
217
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="335.684,230.288 335.684,250.698"/>
218
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="335.684,230.288 335.684,250.698"/>
219
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="252.435,266.095 262.484,257.989"/>
220
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="252.435,266.095 262.484,257.989"/>
221
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="238.084,260.419 252.435,266.095"/>
222
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="238.084,260.419 252.435,266.095"/>
223
+<polygon fill="#00ffff" points="350.035,235.964 360.084,227.858 360.084,248.268"/>
224
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="518.049,263.177 521.649,264.601"/>
225
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="302.679,184.126 288.328,178.45"/>
226
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="302.679,184.126 288.328,178.45"/>
227
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="164.884,267.709 150.533,262.033 164.884,267.709"/>
228
+<polygon fill="#00ffff" points="335.684,230.288 350.035,235.964 335.684,250.698"/>
229
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="288.328,178.45 278.279,186.556"/>
230
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="288.328,178.45 278.279,186.556"/>
231
+<polygon fill="#00ffff" points="195.031,243.391 195.031,164.844 205.079,235.285"/>
232
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="360.084,227.858 345.733,222.182"/>
233
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="360.084,227.858 345.733,222.182"/>
234
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="403.138,265.296 403.138,264.059 403.138,265.296"/>
235
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="150.533,262.033 140.484,270.139 150.533,262.033"/>
236
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="350.035,235.964 350.035,256.374 350.035,235.964"/>
237
+<polygon fill="#00ffff" points="195.031,164.844 195.031,243.391 180.679,237.715"/>
238
+<polygon fill="#00ffff" points="302.679,184.126 292.631,192.232 288.328,178.45"/>
239
+<polygon fill="#00ffff" points="403.138,264.059 417.489,269.735 403.138,265.296"/>
240
+<polygon fill="#00ffff" points="262.484,222.117 262.484,257.989 248.133,252.313"/>
241
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.733,222.182 335.684,230.288"/>
242
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.733,222.182 335.684,230.288"/>
243
+<polygon fill="#00ffff" points="164.884,267.709 154.835,275.815 150.533,262.033"/>
244
+<polygon fill="#00ffff" points="292.631,192.232 278.279,186.556 288.328,178.45"/>
245
+<polygon fill="#00ffff" points="393.089,272.165 403.138,264.059 403.138,265.296"/>
246
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="417.489,270.972 403.138,265.296 417.489,270.972"/>
247
+<polygon fill="#00ffff" points="154.835,275.815 140.484,270.139 150.533,262.033"/>
248
+<polygon fill="#00ffff" points="360.084,227.858 350.035,235.964 345.733,222.182"/>
249
+<polygon fill="#00ffff" points="417.489,269.735 417.489,270.972 403.138,265.296"/>
250
+<polygon fill="#00ffff" points="238.084,260.419 238.084,224.547 248.133,252.313"/>
251
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="190.728,229.609 190.728,151.062 190.728,229.609"/>
252
+<polygon fill="#00ffff" points="350.035,235.964 335.684,230.288 345.733,222.182"/>
253
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="403.138,265.296 393.089,273.402 403.138,265.296"/>
254
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="417.489,269.735 403.138,264.059"/>
255
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="417.489,269.735 403.138,264.059"/>
256
+<polygon fill="#00ffff" points="393.089,273.402 393.089,272.165 403.138,265.296"/>
257
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="510.198,269.51 513.798,270.934"/>
258
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="248.133,252.313 248.133,216.441 248.133,252.313"/>
259
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="403.138,264.059 393.089,272.165"/>
260
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="403.138,264.059 393.089,272.165"/>
261
+<polygon fill="#00ffff" points="417.489,270.972 407.44,279.078 403.138,265.296"/>
262
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="292.631,192.232 302.679,184.126 292.631,192.232"/>
263
+<polygon fill="#00ffff" points="407.44,279.078 393.089,273.402 403.138,265.296"/>
264
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="417.489,270.972 417.489,269.735"/>
265
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="417.489,270.972 417.489,269.735"/>
266
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="154.835,275.815 164.884,267.709"/>
267
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="154.835,275.815 164.884,267.709"/>
268
+<polygon fill="#00ffff" points="417.489,269.735 407.44,277.841 403.138,264.059"/>
269
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="278.279,186.556 292.631,192.232 278.279,186.556"/>
270
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="350.035,235.964 360.084,227.858 350.035,235.964"/>
271
+<polygon fill="#00ffff" points="407.44,277.841 393.089,272.165 403.138,264.059"/>
272
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="140.484,270.139 154.835,275.815"/>
273
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="140.484,270.139 154.835,275.815"/>
274
+<polygon fill="#00ffff" points="407.44,277.841 417.489,269.735 417.489,270.972"/>
275
+<text fill="#000000" x="510" y="284" transform="rotate(-0, 510, 284)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">50</text>
276
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="335.684,230.288 350.035,235.964 335.684,230.288"/>
277
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="393.089,272.165 393.089,273.402"/>
278
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="393.089,272.165 393.089,273.402"/>
279
+<polygon fill="#00ffff" points="252.435,266.095 252.435,230.223 262.484,257.989"/>
280
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="205.079,235.285 205.079,156.738"/>
281
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="205.079,235.285 205.079,156.738"/>
282
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="407.44,279.078 417.489,270.972"/>
283
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="407.44,279.078 417.489,270.972"/>
284
+<polygon fill="#00ffff" points="393.089,272.165 407.44,277.841 393.089,273.402"/>
285
+<polygon fill="#00ffff" points="252.435,230.223 252.435,266.095 238.084,260.419"/>
286
+<polygon fill="#00ffff" points="407.44,279.078 407.44,277.841 417.489,270.972"/>
287
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="262.484,257.989 262.484,222.117"/>
288
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="262.484,257.989 262.484,222.117"/>
289
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="393.089,273.402 407.44,279.078"/>
290
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="393.089,273.402 407.44,279.078"/>
291
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="407.44,277.841 417.489,269.735 407.44,277.841"/>
292
+<polygon fill="#00ffff" points="407.44,277.841 407.44,279.078 393.089,273.402"/>
293
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="180.679,159.168 180.679,237.715"/>
294
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="180.679,159.168 180.679,237.715"/>
295
+<polygon fill="#00ffff" points="248.133,216.441 262.484,222.117 248.133,252.313"/>
296
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="502.347,275.843 508.347,278.216"/>
297
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="393.089,272.165 407.44,277.841 393.089,272.165"/>
298
+<polygon fill="#00ffff" points="238.084,224.547 248.133,216.441 248.133,252.313"/>
299
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="319.889,280.692 305.538,275.016 319.889,280.692"/>
300
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="238.084,224.547 238.084,260.419"/>
301
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="238.084,224.547 238.084,260.419"/>
302
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="305.538,275.016 295.489,283.122 305.538,275.016"/>
303
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="407.44,277.841 407.44,279.078 407.44,277.841"/>
304
+<polygon fill="#00ffff" points="319.889,280.692 309.84,288.798 305.538,275.016"/>
305
+<polygon fill="#00ffff" points="309.84,288.798 295.489,283.122 305.538,275.016"/>
306
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="195.031,164.844 195.031,243.391 195.031,164.844"/>
307
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="305.538,275.016 305.538,259.554 305.538,275.016"/>
308
+<polygon fill="#00ffff" points="190.728,151.062 205.079,156.738 190.728,229.609"/>
309
+<polygon fill="#00ffff" points="319.889,265.23 319.889,280.692 305.538,275.016"/>
310
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="494.497,282.175 498.097,283.599"/>
311
+<polygon fill="#00ffff" points="252.435,230.223 262.484,222.117 262.484,257.989"/>
312
+<polygon fill="#00ffff" points="180.679,159.168 190.728,151.062 190.728,229.609"/>
313
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="264.665,57.5 533.75,163.924"/>
314
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="252.435,230.223 252.435,266.095 252.435,230.223"/>
315
+<polygon fill="#00ffff" points="295.489,283.122 295.489,267.66 305.538,275.016"/>
316
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="309.84,288.798 319.889,280.692"/>
317
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="309.84,288.798 319.889,280.692"/>
318
+<polygon fill="#00ffff" points="238.084,224.547 252.435,230.223 238.084,260.419"/>
319
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="295.489,283.122 309.84,288.798"/>
320
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="295.489,283.122 309.84,288.798"/>
321
+<polygon fill="#00ffff" points="305.538,259.554 319.889,265.23 305.538,275.016"/>
322
+<polygon fill="#00ffff" points="295.489,267.66 305.538,259.554 305.538,275.016"/>
323
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="222.289,290.413 207.938,284.737 222.289,290.413"/>
324
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="319.889,280.692 319.889,265.23"/>
325
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="319.889,280.692 319.889,265.23"/>
326
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="207.938,284.737 197.889,292.843 207.938,284.737"/>
327
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="486.646,288.508 490.246,289.932"/>
328
+<polygon fill="#00ffff" points="195.031,164.844 205.079,156.738 205.079,235.285"/>
329
+<text fill="#000000" x="61" y="298" transform="rotate(-0, 61, 298)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
330
+<polygon fill="#00ffff" points="222.289,290.413 212.24,298.519 207.938,284.737"/>
331
+<polygon fill="#00ffff" points="309.84,288.798 309.84,273.336 319.889,280.692"/>
332
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="295.489,267.66 295.489,283.122"/>
333
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="295.489,267.66 295.489,283.122"/>
334
+<polygon fill="#00ffff" points="180.679,159.168 195.031,164.844 180.679,237.715"/>
335
+<polygon fill="#00ffff" points="212.24,298.519 197.889,292.843 207.938,284.737"/>
336
+<polygon fill="#00ffff" points="309.84,273.336 309.84,288.798 295.489,283.122"/>
337
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="262.484,222.117 248.133,216.441"/>
338
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="262.484,222.117 248.133,216.441 238.084,224.547"/>
339
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="248.133,216.441 238.084,224.547"/>
340
+<polygon fill="#00ffff" points="309.84,273.336 319.889,265.23 319.889,280.692"/>
341
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="319.889,265.23 305.538,259.554"/>
342
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="319.889,265.23 305.538,259.554"/>
343
+<polygon fill="#00ffff" points="262.484,222.117 252.435,230.223 248.133,216.441"/>
344
+<polygon fill="#00ffff" points="164.884,181.122 164.884,267.709 150.533,262.033"/>
345
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="533.75,163.924 533.75,250.511"/>
346
+<polygon fill="#00ffff" points="295.489,267.66 309.84,273.336 295.489,283.122"/>
347
+<polygon fill="#00ffff" points="252.435,230.223 238.084,224.547 248.133,216.441"/>
348
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="212.24,298.519 222.289,290.413"/>
349
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="212.24,298.519 222.289,290.413"/>
350
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="305.538,259.554 295.489,267.66"/>
351
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="305.538,259.554 295.489,267.66"/>
352
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,296.076 70.25,293.703"/>
353
+<polygon fill="#00ffff" points="140.484,270.139 140.484,183.552 150.533,262.033"/>
354
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="478.796,294.841 482.396,296.265"/>
355
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="197.889,292.843 212.24,298.519"/>
356
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="197.889,292.843 212.24,298.519"/>
357
+<polygon fill="#00ffff" points="319.889,265.23 309.84,273.336 305.538,259.554"/>
358
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="309.84,273.336 309.84,288.798 309.84,273.336"/>
359
+<polygon fill="#00ffff" points="309.84,273.336 295.489,267.66 305.538,259.554"/>
360
+<polygon fill="#00ffff" points="222.289,261.344 222.289,290.413 207.938,284.737"/>
361
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="252.435,230.223 262.484,222.117 252.435,230.223"/>
362
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,296.076 71.4796,299.924"/>
363
+<text fill="#000000" x="62" y="306" transform="rotate(-0, 62, 306)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
364
+<polygon fill="#00ffff" points="197.889,292.843 197.889,263.774 207.938,284.737"/>
365
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="238.084,224.547 252.435,230.223 238.084,224.547"/>
366
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="207.938,284.737 207.938,255.668 207.938,284.737"/>
367
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,291.953 72.65,290.529"/>
368
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="362.943,297.72 362.943,292.772 362.943,297.72"/>
369
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="309.84,273.336 319.889,265.23 309.84,273.336"/>
370
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="377.294,303.396 362.943,297.72 377.294,303.396"/>
371
+<polygon fill="#00ffff" points="154.835,275.815 154.835,189.228 164.884,267.709"/>
372
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="295.489,267.66 309.84,273.336 295.489,267.66"/>
373
+<text fill="#000000" x="478" y="309" transform="rotate(-0, 478, 309)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">100</text>
374
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="87.4619,300.511 84.5996,302.819"/>
375
+<polygon fill="#00ffff" points="154.835,189.228 154.835,275.815 140.484,270.139"/>
376
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="362.943,297.72 352.894,305.826 362.943,297.72"/>
377
+<polygon fill="#00ffff" points="362.943,292.772 377.294,298.448 362.943,297.72"/>
378
+<polygon fill="#00ffff" points="377.294,298.448 377.294,303.396 362.943,297.72"/>
379
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="470.945,301.174 476.945,303.547"/>
380
+<polygon fill="#00ffff" points="352.894,300.878 362.943,292.772 362.943,297.72"/>
381
+<polygon fill="#00ffff" points="377.294,303.396 367.245,311.502 362.943,297.72"/>
382
+<text fill="#000000" x="56" y="286" transform="rotate(-0, 56, 286)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">20</text>
383
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,287.83 72.65,286.406"/>
384
+<polygon fill="#00ffff" points="352.894,305.826 352.894,300.878 362.943,297.72"/>
385
+<polygon fill="#00ffff" points="367.245,311.502 352.894,305.826 362.943,297.72"/>
386
+<polygon fill="#00ffff" points="212.24,298.519 212.24,269.45 222.289,290.413"/>
387
+<polygon fill="#00ffff" points="207.938,255.668 222.289,261.344 207.938,284.737"/>
388
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="222.289,290.413 222.289,261.344"/>
389
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="222.289,290.413 222.289,261.344"/>
390
+<polygon fill="#00ffff" points="212.24,269.45 212.24,298.519 197.889,292.843"/>
391
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="150.533,262.033 150.533,175.446 150.533,262.033"/>
392
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="377.294,298.448 362.943,292.772"/>
393
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="377.294,298.448 362.943,292.772"/>
394
+<polygon fill="#00ffff" points="197.889,263.774 207.938,255.668 207.938,284.737"/>
395
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="377.294,303.396 377.294,298.448"/>
396
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="377.294,303.396 377.294,298.448"/>
397
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="98.6737,304.945 95.8115,307.254"/>
398
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,209.489 264.665,57.5"/>
399
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="362.943,292.772 352.894,300.878"/>
400
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="362.943,292.772 352.894,300.878"/>
401
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,283.707 70.25,281.334"/>
402
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="197.889,263.774 197.889,292.843"/>
403
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="197.889,263.774 197.889,292.843"/>
404
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="367.245,311.502 377.294,303.396"/>
405
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="367.245,311.502 377.294,303.396"/>
406
+<polygon fill="#00ffff" points="377.294,298.448 367.245,306.554 362.943,292.772"/>
407
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="463.094,307.507 466.694,308.931"/>
408
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="352.894,300.878 352.894,305.826"/>
409
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="352.894,300.878 352.894,305.826"/>
410
+<polygon fill="#00ffff" points="367.245,306.554 377.294,298.448 377.294,303.396"/>
411
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="352.894,305.826 367.245,311.502"/>
412
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="352.894,305.826 367.245,311.502"/>
413
+<polygon fill="#00ffff" points="367.245,306.554 352.894,300.878 362.943,292.772"/>
414
+<polygon fill="#00ffff" points="367.245,311.502 367.245,306.554 377.294,303.396"/>
415
+<polygon fill="#00ffff" points="352.894,300.878 367.245,306.554 352.894,305.826"/>
416
+<polygon fill="#00ffff" points="367.245,306.554 367.245,311.502 352.894,305.826"/>
417
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="279.694,313.117 265.343,307.441 279.694,313.117"/>
418
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="109.886,309.379 107.023,311.688"/>
419
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="205.079,156.738 190.728,151.062"/>
420
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="205.079,156.738 190.728,151.062"/>
421
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="164.884,267.709 164.884,181.122"/>
422
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="164.884,267.709 164.884,181.122"/>
423
+<polygon fill="#00ffff" points="212.24,269.45 222.289,261.344 222.289,290.413"/>
424
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="265.343,307.441 255.294,315.547 265.343,307.441"/>
425
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,279.583 72.65,278.16"/>
426
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="190.728,151.062 180.679,159.168"/>
427
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="190.728,151.062 180.679,159.168"/>
428
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="367.245,306.554 377.294,298.448 367.245,306.554"/>
429
+<polygon fill="#00ffff" points="279.694,313.117 269.645,321.223 265.343,307.441"/>
430
+<polygon fill="#00ffff" points="197.889,263.774 212.24,269.45 197.889,292.843"/>
431
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="212.24,269.45 212.24,298.519 212.24,269.45"/>
432
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="140.484,183.552 140.484,270.139"/>
433
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="140.484,183.552 140.484,270.139"/>
434
+<polygon fill="#00ffff" points="205.079,156.738 195.031,164.844 190.728,151.062"/>
435
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="352.894,300.878 367.245,306.554 352.894,300.878"/>
436
+<polygon fill="#00ffff" points="269.645,321.223 255.294,315.547 265.343,307.441"/>
437
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="367.245,306.554 367.245,311.502 367.245,306.554"/>
438
+<polygon fill="#00ffff" points="195.031,164.844 180.679,159.168 190.728,151.062"/>
439
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="455.244,313.84 458.844,315.264"/>
440
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="121.097,313.814 116.327,317.662"/>
441
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,275.46 72.65,274.036"/>
442
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="222.289,261.344 207.938,255.668"/>
443
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="222.289,261.344 207.938,255.668"/>
444
+<text fill="#000000" x="55" y="273" transform="rotate(-0, 55, 273)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">40</text>
445
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="269.645,321.223 279.694,313.117"/>
446
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="269.645,321.223 279.694,313.117"/>
447
+<text fill="#000000" x="102" y="324" transform="rotate(-0, 102, 324)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">50</text>
448
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="207.938,255.668 197.889,263.774"/>
449
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="207.938,255.668 197.889,263.774"/>
450
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="195.031,164.844 205.079,156.738 195.031,164.844"/>
451
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="255.294,315.547 269.645,321.223"/>
452
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="255.294,315.547 269.645,321.223"/>
453
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="180.679,159.168 195.031,164.844 180.679,159.168"/>
454
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="154.835,189.228 154.835,275.815 154.835,189.228"/>
455
+<polygon fill="#00ffff" points="222.289,261.344 212.24,269.45 207.938,255.668"/>
456
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="132.309,318.248 129.447,320.557"/>
457
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,271.337 70.25,268.964"/>
458
+<polygon fill="#00ffff" points="279.694,284.048 279.694,313.117 265.343,307.441"/>
459
+<polygon fill="#00ffff" points="212.24,269.45 197.889,263.774 207.938,255.668"/>
460
+<polygon fill="#00ffff" points="150.533,175.446 164.884,181.122 150.533,262.033"/>
461
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="447.393,320.173 450.993,321.596"/>
462
+<polygon fill="#00ffff" points="140.484,183.552 150.533,175.446 150.533,262.033"/>
463
+<polygon fill="#00ffff" points="255.294,315.547 255.294,286.478 265.343,307.441"/>
464
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="265.343,307.441 265.343,278.372 265.343,307.441"/>
465
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="212.24,269.45 222.289,261.344 212.24,269.45"/>
466
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="143.521,322.682 140.659,324.991"/>
467
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,267.214 72.65,265.79"/>
468
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="197.889,263.774 212.24,269.45 197.889,263.774"/>
469
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="533.75,250.511 345.335,402.5"/>
470
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="533.75,250.511 345.335,402.5"/>
471
+<polygon fill="#00ffff" points="154.835,189.228 164.884,181.122 164.884,267.709"/>
472
+<polygon fill="#00ffff" points="269.645,321.223 269.645,292.154 279.694,313.117"/>
473
+<text fill="#000000" x="38" y="245" transform="rotate(0, 38, 245)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Z</text>
474
+<polygon fill="#00ffff" points="265.343,278.372 279.694,284.048 265.343,307.441"/>
475
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="279.694,313.117 279.694,284.048"/>
476
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="279.694,313.117 279.694,284.048"/>
477
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="439.542,326.506 445.542,328.879"/>
478
+<polygon fill="#00ffff" points="269.645,292.154 269.645,321.223 255.294,315.547"/>
479
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="154.733,327.116 151.871,329.425"/>
480
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,263.091 72.65,261.667"/>
481
+<polygon fill="#00ffff" points="255.294,286.478 265.343,278.372 265.343,307.441"/>
482
+<polygon fill="#00ffff" points="140.484,183.552 154.835,189.228 140.484,270.139"/>
483
+<text fill="#000000" x="447" y="334" transform="rotate(-0, 447, 334)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">150</text>
484
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="255.294,286.478 255.294,315.547"/>
485
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="255.294,286.478 255.294,315.547"/>
486
+<text fill="#000000" x="55" y="261" transform="rotate(-0, 55, 261)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">60</text>
487
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,258.967 70.25,256.594"/>
488
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="337.099,335.82 322.747,330.144 337.099,335.82"/>
489
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="165.945,331.551 161.175,335.399"/>
490
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="431.692,332.838 435.292,334.262"/>
491
+<polygon fill="#00ffff" points="269.645,292.154 279.694,284.048 279.694,313.117"/>
492
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="322.747,330.144 322.747,322.104 322.747,330.144 312.699,338.251 322.747,330.144"/>
493
+<polygon fill="#00ffff" points="337.099,327.78 337.099,335.82 322.747,330.144"/>
494
+<polygon fill="#00ffff" points="337.099,335.82 327.05,343.926 322.747,330.144"/>
495
+<polygon fill="#00ffff" points="255.294,286.478 269.645,292.154 255.294,315.547"/>
496
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="269.645,292.154 269.645,321.223 269.645,292.154"/>
497
+<polygon fill="#00ffff" points="322.747,322.104 337.099,327.78 322.747,330.144"/>
498
+<polygon fill="#00ffff" points="327.05,343.926 312.699,338.251 322.747,330.144"/>
499
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,254.844 72.65,253.42"/>
500
+<polygon fill="#00ffff" points="312.699,330.21 322.747,322.104 322.747,330.144"/>
501
+<polygon fill="#00ffff" points="312.699,338.251 312.699,330.21 322.747,330.144"/>
502
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="177.157,335.985 174.295,338.294"/>
503
+<text fill="#000000" x="141" y="341" transform="rotate(-0, 141, 341)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">100</text>
504
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="279.694,284.048 265.343,278.372"/>
505
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="279.694,284.048 265.343,278.372"/>
506
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,296.076 76.25,209.489"/>
507
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,296.076 76.25,209.489"/>
508
+<text fill="#000000" x="471" y="342" transform="rotate(0, 471, 342)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">X</text>
509
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="337.099,335.82 337.099,327.78"/>
510
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="337.099,335.82 337.099,327.78"/>
511
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="327.05,343.926 337.099,335.82"/>
512
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="327.05,343.926 337.099,335.82"/>
513
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="423.841,339.171 427.441,340.595"/>
514
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="265.343,278.372 255.294,286.478"/>
515
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="265.343,278.372 255.294,286.478"/>
516
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,250.721 72.65,249.297"/>
517
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="337.099,327.78 322.747,322.104"/>
518
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="337.099,327.78 322.747,322.104"/>
519
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="312.699,338.251 327.05,343.926"/>
520
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="312.699,338.251 327.05,343.926"/>
521
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="188.369,340.419 185.506,342.728"/>
522
+<polygon fill="#00ffff" points="279.694,284.048 269.645,292.154 265.343,278.372"/>
523
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="322.747,322.104 312.699,330.21"/>
524
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="322.747,322.104 312.699,330.21 312.699,338.251"/>
525
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="312.699,330.21 312.699,338.251"/>
526
+<polygon fill="#00ffff" points="269.645,292.154 255.294,286.478 265.343,278.372"/>
527
+<polygon fill="#00ffff" points="327.05,335.886 337.099,327.78 337.099,335.82"/>
528
+<polygon fill="#00ffff" points="327.05,343.926 327.05,335.886 337.099,335.82"/>
529
+<polygon fill="#00ffff" points="337.099,327.78 327.05,335.886 322.747,322.104"/>
530
+<polygon fill="#00ffff" points="327.05,335.886 327.05,343.926 312.699,338.251"/>
531
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,246.598 70.25,244.225"/>
532
+<text fill="#000000" x="56" y="249" transform="rotate(-0, 56, 249)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">80</text>
533
+<polygon fill="#00ffff" points="327.05,335.886 312.699,330.21 322.747,322.104"/>
534
+<polygon fill="#00ffff" points="312.699,330.21 327.05,335.886 312.699,338.251"/>
535
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="199.581,344.854 196.718,347.163"/>
536
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="415.991,345.504 419.591,346.928"/>
537
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="269.645,292.154 279.694,284.048 269.645,292.154"/>
538
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="255.294,286.478 269.645,292.154 255.294,286.478"/>
539
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="327.05,335.886 337.099,327.78 327.05,335.886 327.05,343.926 327.05,335.886"/>
540
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,242.475 72.65,241.051"/>
541
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="312.699,330.21 327.05,335.886 312.699,330.21"/>
542
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.335,402.5 76.25,296.076"/>
543
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,296.076 345.335,402.5"/>
544
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="210.792,349.288 206.022,353.136"/>
545
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="164.884,181.122 150.533,175.446"/>
546
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="164.884,181.122 150.533,175.446 140.484,183.552"/>
547
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="150.533,175.446 140.484,183.552"/>
548
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="408.14,351.837 414.14,354.21"/>
549
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,238.351 72.65,236.928"/>
550
+<polygon fill="#00ffff" points="164.884,181.122 154.835,189.228 150.533,175.446"/>
551
+<polygon fill="#00ffff" points="154.835,189.228 140.484,183.552 150.533,175.446"/>
552
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="222.004,353.722 219.142,356.031"/>
553
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,234.228 70.25,231.855"/>
554
+<text fill="#000000" x="186" y="359" transform="rotate(-0, 186, 359)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">150</text>
555
+<text fill="#000000" x="416" y="360" transform="rotate(-0, 416, 360)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">200</text>
556
+<text fill="#000000" x="50" y="236" transform="rotate(-0, 50, 236)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">100</text>
557
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="154.835,189.228 164.884,181.122 154.835,189.228"/>
558
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="400.289,358.17 403.889,359.594"/>
559
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="233.216,358.157 230.354,360.466"/>
560
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="140.484,183.552 154.835,189.228 140.484,183.552"/>
561
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,230.105 72.65,228.681"/>
562
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="244.428,362.591 241.566,364.9"/>
563
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="392.439,364.503 396.039,365.927"/>
564
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,225.982 72.65,224.558"/>
565
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="255.64,367.025 250.87,370.874"/>
566
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,221.859 70.25,219.486"/>
567
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="384.588,370.836 388.188,372.259"/>
568
+<text fill="#000000" x="50" y="224" transform="rotate(-0, 50, 224)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">120</text>
569
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="266.852,371.46 263.99,373.769"/>
570
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,217.735 72.65,216.312"/>
571
+<text fill="#000000" x="177" y="373" transform="rotate(0, 177, 373)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">Y</text>
572
+<text fill="#000000" x="231" y="377" transform="rotate(-0, 231, 377)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">200</text>
573
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="278.064,375.894 275.201,378.203"/>
574
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,213.612 72.65,212.188"/>
575
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="376.737,377.169 382.737,379.542"/>
576
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="76.25,209.489 70.25,207.116"/>
577
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="289.276,380.328 286.413,382.637"/>
578
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="368.887,383.501 372.487,384.925"/>
579
+<text fill="#000000" x="50" y="212" transform="rotate(-0, 50, 212)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">140</text>
580
+<text fill="#000000" x="384" y="385" transform="rotate(-0, 384, 385)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">250</text>
581
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="300.487,384.763 295.717,388.611"/>
582
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="311.699,389.197 308.837,391.506"/>
583
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="361.036,389.834 364.636,391.258"/>
584
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="322.911,393.631 320.049,395.94"/>
585
+<text fill="#000000" x="276" y="395" transform="rotate(-0, 276, 395)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">250</text>
586
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="353.185,396.167 356.785,397.591"/>
587
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="334.123,398.066 331.261,400.375"/>
588
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.335,402.5 351.335,404.873"/>
589
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.335,402.5 340.564,406.348"/>
590
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.335,315.913 533.75,163.924"/>
591
+<text fill="#000000" x="353" y="410" transform="rotate(-0, 353, 410)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">300</text>
592
+<text fill="#000000" x="320" y="412" transform="rotate(-0, 320, 412)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">300</text>
593
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.335,315.913 76.25,209.489"/>
594
+<polyline fill="none" stroke="#000000" stroke-width="0.5" points="345.335,315.913 345.335,402.5"/>
595
+</g>
596
+</svg>

+ 90
- 13
svgtoimage.php View File

@@ -3,6 +3,8 @@
3 3
 // prendre en compte l'opacité grâce à imagecolorallocatealpha ?
4 4
 // pour les rectangles avec point ou tiret http://fr.php.net/manual/fr/function.imagesetstyle.php
5 5
 // ajout de title
6
+// ajout de <text fill="#000000" x="541" y="258" transform="rotate(-0, 541, 258)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
7
+
6 8
 
7 9
 include 'log.php';
8 10
 
@@ -19,7 +21,7 @@ class SVGTOIMAGE{
19 21
 	protected $_desc;
20 22
 	private $transparentColor = array(0,0,255);
21 23
 	public $_debug = true; // change to false to stop debug mode
22
-	
24
+
23 25
 	/* array of color names => hex color 
24 26
 		because some svg creator uses them
25 27
 		*/
@@ -209,6 +211,23 @@ class SVGTOIMAGE{
209 211
 	}
210 212
 	
211 213
 	/*
214
+	 * return an array to use with imagesetstyle 
215
+	 * @param allocatecolorimage 
216
+	 * @return array 
217
+	 */
218
+	private function _getDashedStroke($full, $empty, $color){
219
+		$tiret = array();
220
+		for($i=0;$i<$full;$i++){
221
+			$tiret[] = $color;
222
+		}
223
+		for($i=0;$i<$empty;$i++){
224
+			$tiret[] = IMG_COLOR_TRANSPARENT;
225
+		}
226
+		if($this->_debug) $this->_log->message('nouveaux tirets : '.implode('-', $tiret));
227
+		return $tiret;
228
+	}
229
+	
230
+	/*
212 231
 	 * add the given image from svg to the final image
213 232
 	 * @param simpleXMLElement
214 233
 	 * @return imagecopy
@@ -332,12 +351,14 @@ class SVGTOIMAGE{
332 351
 		$strokeWidth = 1;
333 352
 		$fill = '';
334 353
 		$stroke = '';
354
+		$strokeDasharray = '';
335 355
 		foreach($pathNode->attributes() as $name=>$value){
336 356
 			switch($name){
337 357
 				case 'd': case 'points': $path = $value; break;
338 358
 				case 'stroke': $stroke = $value; break;
339 359
 				case 'fill': $fill = ($value == 'none') ? '' : $value; break;
340 360
 				case 'stroke-width' : $strokeWidth = $value; break;
361
+				case 'stroke-dasharray' : $strokeDasharray = $value; break;
341 362
 				case 'style' : if(strripos($value, 'display: none') || strripos($value, 'display:none')) return; break;
342 363
 			}
343 364
 		}
@@ -351,13 +372,18 @@ class SVGTOIMAGE{
351 372
 		else $this->_log->message('épaisseur du trait à : '.$this->_parseInt($strokeWidth));
352 373
 		$colorStroke = $stroke != '' ? $this->_allocateColor((string)$stroke) : $this->_allocateColor('black');
353 374
 		$colorFill = $fill != '' ? $this->_allocateColor((string)$fill) : $this->_allocateColor('black');
375
+		if($strokeDasharray != ''){
376
+			$strokeDasharray = explode(',', $strokeDasharray);
377
+			imagesetstyle ( $this->_image , $this->_getDashedStroke($strokeDasharray[0], $strokeDasharray[1], $colorStroke ));
378
+		}else
379
+			imagesetstyle ( $this->_image , $this->_getDashedStroke(10, 0, $colorStroke ));
380
+			
354 381
 		$lastOpe = '';
355 382
 		
356 383
 		$pathArray = split('[ ,]', $path); //explode(' ', $path);
357 384
 		$nbArray = count($pathArray);
358 385
 		$nbLine = (($nbArray-1)/2)-1;
359
-		if($this->_debug) $this->_log->message($nbLine.' lignes à dessiner sur un path de '.$nbArray);
360
-		//for($i = 2; $i < $nbArray; ){
386
+
361 387
 		$i = 0;
362 388
 		$lastX = 0;
363 389
 		$lastY = 0;
@@ -372,7 +398,7 @@ class SVGTOIMAGE{
372 398
 			}elseif(substr($pathArray[$i], 0, 1) == 'L'){
373 399
 				$newX = $this->_parseInt($pathArray[$i]);
374 400
 				$newY = $this->_parseInt($pathArray[$i+1]);
375
-				$this->_drawLine($lastX , $lastY , $newX , $newY , $colorStroke);
401
+				$this->_drawLine($lastX , $lastY , $newX , $newY , IMG_COLOR_STYLED);
376 402
 				$lastOpe = 'L';
377 403
 				$lastX = $newX;
378 404
 				$lastY = $newY;
@@ -380,14 +406,14 @@ class SVGTOIMAGE{
380 406
 
381 407
 			}elseif(substr($pathArray[$i], 0, 1) == 'H'){
382 408
 				$newX = $this->_parseInt($pathArray[$i]);
383
-				$this->_drawLine($lastX , $lastY , $newX , $lastY , $colorStroke);
409
+				$this->_drawLine($lastX , $lastY , $newX , $lastY , IMG_COLOR_STYLED);
384 410
 				$lastOpe = 'H';
385 411
 				$lastX = $newX;
386 412
 				$i++;
387 413
 
388 414
 			}elseif(substr($pathArray[$i], 0, 1) == 'V'){
389 415
 				$newY = $this->_parseInt($pathArray[$i]);
390
-				$this->_drawLine($lastX , $lastY , $lastX , $newY , $colorStroke);
416
+				$this->_drawLine($lastX , $lastY , $lastX , $newY , IMG_COLOR_STYLED);
391 417
 				$lastY = $newY;
392 418
 				$lastOpe = 'V';
393 419
 				$i++;
@@ -431,20 +457,20 @@ class SVGTOIMAGE{
431 457
 					case 'L': 
432 458
 						$newX = $this->_parseInt($pathArray[$i]);
433 459
 						$newY = $this->_parseInt($pathArray[$i+1]);
434
-						$this->_drawLine($lastX , $lastY , $newX , $newY , $colorStroke);
460
+						$this->_drawLine($lastX , $lastY , $newX , $newY , IMG_COLOR_STYLED);
435 461
 						$lastX = $newX;
436 462
 						$lastY = $newY;
437 463
 						$i=$i+2; 
438 464
 						break;
439 465
 					case 'H': 
440 466
 						$newX = $this->_parseInt($pathArray[$i]);
441
-						$this->_drawLine($lastX , $lastY , $newX , $lastY , $colorStroke);
467
+						$this->_drawLine($lastX , $lastY , $newX , $lastY , IMG_COLOR_STYLED);
442 468
 						$lastX = $newX;
443 469
 						$i++;
444 470
 				 		break;
445 471
 					case 'V': 
446 472
 						$newY = $this->_parseInt($pathArray[$i]);
447
-						$this->_drawLine($lastX , $lastY , $lastX , $newY , $colorStroke);
473
+						$this->_drawLine($lastX , $lastY , $lastX , $newY , IMG_COLOR_STYLED);
448 474
 						$lastY = $newY;
449 475
 						$i++;
450 476
 						break;
@@ -462,7 +488,7 @@ class SVGTOIMAGE{
462 488
 				}
463 489
 
464 490
 			}elseif(substr($pathArray[$i], 0, 1) == 'Z'){
465
-				$this->_drawLine($lastX , $lastY , $this->_parseInt($pathArray[0]) , $this->_parseInt($pathArray[1]) , $colorStroke);
491
+				$this->_drawLine($lastX , $lastY , $this->_parseInt($pathArray[0]) , $this->_parseInt($pathArray[1]) , IMG_COLOR_STYLED);
466 492
 				$lastOpe = 'Z'; //utile?
467 493
 				$i++;
468 494
 			}else 
@@ -472,6 +498,7 @@ class SVGTOIMAGE{
472 498
 		imagecolordeallocate( $this->_image, $colorStroke);
473 499
 		imagecolordeallocate( $this->_image, $colorFill);
474 500
 		imagesetthickness ( $this->_image , 1 );
501
+		imagesetstyle ( $this->_image , $this->_getDashedStroke(10, 0, $colorStroke ));
475 502
 	}
476 503
 	
477 504
 	/*
@@ -520,6 +547,43 @@ class SVGTOIMAGE{
520 547
 	}
521 548
 	
522 549
 	/*
550
+	 * add text in the final image <text fill="#000000" x="541" y="258" transform="rotate(-0, 541, 258)" font-size="10" font-family="SansSerif" font-style="normal" font-weight="normal">0</text>
551
+	 * @param SimpleXMLElement
552
+	 * @return 
553
+	 */
554
+	private function _parseText($textNode){
555
+		$x = 0;
556
+		$y = 0;
557
+		$r = 0;
558
+		$strokeWidth = 1;
559
+		$fill = '';
560
+		$fontSize = 10;
561
+		$fontFamily = 'SansSerif';
562
+		$fontStyle = 'normal';
563
+		$fontWeight = 'normal';
564
+		foreach($textNode->attributes() as $name => $value){
565
+			switch($name){
566
+				case 'x': $x = $value; break;
567
+				case 'y': $y = $value; break;
568
+				//case 'r': $r = $value; break; // todo
569
+				case 'fill': $fill = $value; break;
570
+				case 'font-size': $fontSize = $value; break;
571
+				case 'font-family': $fontFamily = $value; break;
572
+				case 'font-style': $fontStyle = $value; break;
573
+				case 'font-weight': $fontWeight = $value; break;
574
+			}
575
+		}
576
+		if($textNode == '')
577
+			return;
578
+			
579
+		$colorStroke = $this->_allocateColor((string)$fill);
580
+		
581
+		imagestring ( $this->_image , 2 , $x , $y , $textNode , $fill );
582
+		
583
+		imagecolordeallocate( $this->_image, $colorStroke);
584
+	}
585
+	
586
+	/*
523 587
 	 * add a rectangle to the final image
524 588
 	 * @param simpleXMLElement
525 589
 	 * @return a nice rectangle !
@@ -533,6 +597,7 @@ class SVGTOIMAGE{
533 597
 		$fill = '';
534 598
 		$stroke = '';
535 599
 		$strokeWidth = 1;
600
+		$strokeDasharray = '';
536 601
 		foreach($rectNode->attributes() as $name => $value){
537 602
 			switch($name){
538 603
 				// imagesetstyle  (pour dotted, dashed etc)
@@ -544,6 +609,7 @@ class SVGTOIMAGE{
544 609
 				case 'fill': $fill = ($value == 'none') ? '' : $value; break;
545 610
 				case 'stroke': $stroke = $value; break;
546 611
 				case 'stroke-width' : $strokeWidth = $value; break;
612
+				case 'stroke-dasharray' : $strokeDasharray = $value; break;
547 613
 				case 'style' : if(strripos($value, 'display: none') || strripos($value, 'display:none')) return; break;
548 614
 			}
549 615
 		}
@@ -552,16 +618,23 @@ class SVGTOIMAGE{
552 618
 		$colorStroke = $this->_allocateColor((string)$stroke);
553 619
 		$colorFill = $this->_allocateColor((string)$fill);
554 620
 		$thickness = imagesetthickness( $this->_image , (int)$strokeWidth );
621
+		if($strokeDasharray != ''){
622
+			$strokeDasharray = explode(',', $strokeDasharray);
623
+			imagesetstyle ( $this->_image , $this->_getDashedStroke($strokeDasharray[0], $strokeDasharray[1], $colorStroke ));
624
+		}else
625
+			imagesetstyle ( $this->_image , $this->_getDashedStroke(10, 0, $colorStroke ));
626
+		
555 627
 		if($this->_debug && !$thickness) $this->_log->error('Erreur dans la mise en place de l\'épaisseur du trait');
556 628
 		if($this->_debug) $this->_log->message('Rectangle - x : '.$x.' - y : '.$y.' - width : '.$width.' - height : '.$height.' - fill : '.$colorFill[0].'-'.$colorFill[1].'-'.$colorFill[2].' - stroke : '.$colorStroke[0].'-'.$colorStroke[1].'-'.$colorStroke[2]);
557 629
 		if($fill == ''){
558
-			imagerectangle($this->_image , $x , $y , $x+$width , $y+$height, $colorStroke); 
630
+			imagerectangle($this->_image , $x , $y , $x+$width , $y+$height, IMG_COLOR_STYLED); 
559 631
 		}else{
560 632
 			imagefilledrectangle ($this->_image , $x , $y , $x+$width , $y+$height, $colorFill );
561 633
 		}
562 634
 		imagecolordeallocate($this->_image,$colorStroke);
563 635
 		imagecolordeallocate($this->_image,$colorFill);
564 636
 		imagesetthickness ( $this->_image , 1 );
637
+		imagesetstyle ( $this->_image , $this->_getDashedStroke(10, 0, $colorStroke ));
565 638
 	}
566 639
 	
567 640
 	/*
@@ -640,8 +713,12 @@ class SVGTOIMAGE{
640 713
 			$this->_parsePolygon($element);
641 714
 		if($element->getName() == 'polyline')
642 715
 			$this->_parsePath($element);
643
-		if($element->getName() == 'title')
644
-			$this->_parseTitle($element);
716
+		if($element->getName() == 'g')
717
+			$this->_parseGroup($element);
718
+		if($element->getName() == 'text')
719
+			$this->_parseText($element);
720
+		//if($element->getName() == 'title')
721
+		//	$this->_parseTitle($element);
645 722
 		if($element->getName() == 'desc' && $this->_showDesc)
646 723
 			$this->_desc = $element;
647 724
 	}

+ 6
- 4
test.php View File

@@ -26,18 +26,20 @@ $svg = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="600" height
26 26
 <circle cx="50" cy="50" r="50" fill="turquoise" stroke="#000"></circle>
27 27
 <circle cx="100" cy="50" r="40" stroke="#000" stroke-width="2" fill="none"/>
28 28
 <image x="170" y="277" width="48" height="66" preserveAspectRatio="none" href="http://labs.shikiryu.com/experimental-cut/images/pieces/1.png" style="cursor: move; opacity: 1; " r="90" opacity="1" transform="rotate(21.91207728 194 310)"></image>
29
-<path d="M50 50 V150 H150 L200 50 Z" stroke="red" stroke-width="3" />
29
+<path d="M50 50 V150 H150 L200 50 Z" stroke="red" stroke-width="3" stroke-dasharray="2,2" />
30 30
 <polygon points="60,150 160,60 260,150 210,250 110,250"  stroke="red" stroke-width="3"/>
31 31
 
32 32
 <polyline stroke="gray" stroke-width="5" 
33 33
     points="80,250 80,280 60,280 60,310 80,310 80,340 40,340 40,370 80,370 80,400 20,400 20,430 80,430" />
34 34
 </svg>';
35 35
 
36
-$svgtoimage = SVGTOIMAGE::parse($svg);
36
+//$svgtoimage = SVGTOIMAGE::parse($svg);
37 37
 //$svgtoimage = new SVGTOIMAGE($svg);
38
+//$svgtoimage = SVGTOIMAGE::load('france.svg');
39
+$svgtoimage = SVGTOIMAGE::load('Exemple_histogramme.svg');
38 40
 //$svgtoimage = SVGTOIMAGE::load('basic.svg');
39 41
 $svgtoimage->setShowDesc();
40
-$svgtoimage->setWidth(300);
41
-$svgtoimage->setHeight(512);
42
+//$svgtoimage->setWidth(300);
43
+//$svgtoimage->setHeight(512);
42 44
 //header('Content-type: image/png');
43 45
 echo $svgtoimage->toImage();

Loading…
Cancel
Save