Rev 16722 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
15111 | schaersvoo | 1 | #include "canvasdraw.h" |
2 | |||
3 | void add_js_userdraw(char *draw_type,char *stroke_color,double stroke_opacity,int crosshair_size,int arrow_head,int use_offset, char *css_class,int use_snap,int canvas_type,int use_filled,char * fill_color,double fill_opacity,int line_width,char *font_family){ |
||
4 | |||
5 | #define MAX_USERDRAW_PRIMITIVES 59 |
||
15126 | bpr | 6 | static char userdraw_primitives[MAX_USERDRAW_PRIMITIVES][32] = { |
15111 | schaersvoo | 7 | "point","points", /* 0,1 */ |
8 | "crosshair","crosshairs",/* 2,3 */ |
||
9 | "circle","circles",/* 4,5 */ |
||
10 | "segment","segments", /* 6,7 */ |
||
11 | "demiline","halfline","demilines","halflines", /* 8,9,10,11 */ |
||
12 | "line","lines", /* 12,13 */ |
||
13 | "hline","hlines", /* 14,15 */ |
||
14 | "vline","vlines", /* 16,17 */ |
||
15 | "arrow","arrows", /* 18,19 */ |
||
16 | "arrow2","arrows2", /* 20,21 */ |
||
17 | "curvedarrow","curvedarrows",/* 22,23 */ |
||
18 | "curvedarrow2","curvedarrows2", /* 24,25 */ |
||
19 | "freehandline","path","freehandlines","paths", /* 26,27,28,29 */ |
||
20 | "poly","polys",/*poly[3]...polys[9] */ /* 30,31 */ |
||
21 | "polygon","polygons", /* 32,33 */ |
||
22 | "polyline","polylines", /* 34,35 */ |
||
23 | "triangle","triangles", /* 36,37 */ |
||
24 | "rect","rects",/* 38,39 */ |
||
25 | "roundrect","roundrects", /* 40,41*/ |
||
26 | "arc","arcs", /* 42,43 */ |
||
27 | "text", /* 44 */ |
||
28 | "image","images", /* 45 46*/ |
||
29 | "input","inputs", /* 47,48*/ |
||
30 | "clickfill","gridfill","diamondfill","dotfill","hatchfill","textfill",/* 49,50,51,52,53,54 */ |
||
31 | "parallelogram","parallelograms",/* 55,56 */ |
||
32 | "function","functions" /* 57,58 is the same as command "userinput function"*/ |
||
33 | }; |
||
34 | |||
35 | /*1+strlen() of words "point","points",... == 6,7,..*/ |
||
36 | //static int userdraw_primitives_length[MAX_USERDRAW_PRIMITIVES] = {6,7,10,11,7,8,8,9,9,9,10,10,5,6,6,7,6,7,6,7,7,8,12,13,13,14,13,5,14,6,5,6,8,9,9,10,9,10,5,6,10,11,4,5,5,6,7,6,7,19,12,8,10,9,14,15}; |
||
37 | |||
38 | static int userdraw_primitives_length[MAX_USERDRAW_PRIMITIVES] = {6,7,10,11,7,8,8,9,9,9,10,10,5,6,6,7,6,7,6,7,7,8,12,13,13,14,13,5,14,6,5,6,8,9,9,10,9,10,5,6,10,11,4,5,5,6,7,6,7,10,9,12,8,10,9,14,15,9,10}; |
||
15126 | bpr | 39 | int p,n; |
15111 | schaersvoo | 40 | int found = 0; |
41 | int draw_num = -1; |
||
42 | int equal = -1;; |
||
43 | int polynum = -1; |
||
44 | |||
45 | |||
15126 | bpr | 46 | if(strncmp(draw_type,"functions",9) == 0){ |
15111 | schaersvoo | 47 | draw_num = 58; polynum = (int) (draw_type[9]-'0');found = 1; |
17351 | bpr | 48 | // fprintf(stdout,"found polys%d<br>",polynum); |
15111 | schaersvoo | 49 | } |
50 | else |
||
51 | { |
||
15126 | bpr | 52 | if(strncmp(draw_type,"polys",5) == 0){ |
15111 | schaersvoo | 53 | draw_num = 31; polynum = (int) (draw_type[5]-'0');found = 1; |
17351 | bpr | 54 | // fprintf(stdout,"found polys%d<br>",polynum); |
15111 | schaersvoo | 55 | } |
56 | else |
||
57 | { |
||
15126 | bpr | 58 | if( strncmp(draw_type,"poly",4) == 0 && ( strstr(draw_type,"polygon") == NULL && strstr(draw_type,"polyline") == NULL ) ){ |
15111 | schaersvoo | 59 | draw_num = 30; polynum = (int) (draw_type[4]-'0');found = 1; |
17351 | bpr | 60 | // fprintf(stdout,"found poly%d<br>",polynum); |
15111 | schaersvoo | 61 | } |
62 | else |
||
63 | { |
||
64 | for( p = 0; p < MAX_USERDRAW_PRIMITIVES ; p++ ){ |
||
65 | equal = strncmp(userdraw_primitives[p],draw_type,userdraw_primitives_length[p]); |
||
66 | /* remake array: static int userdraw_primitives_length[MAX_USERDRAW_PRIMITIVES]*/ |
||
67 | /* fprintf(stdout,"%d,",1+strlen(userdraw_primitives[p]));*/ |
||
68 | if( equal == 0 ){ |
||
17351 | bpr | 69 | /* fprintf(stdout,"found %s p=%d<br>",userdraw_primitives[p],p);*/ |
15111 | schaersvoo | 70 | draw_num= p;found=1; break; |
71 | } |
||
72 | } |
||
73 | } |
||
74 | } |
||
75 | } |
||
76 | if( found == 0 ){canvas_error("unknown userdraw primitive found...typo?");} |
||
77 | |||
78 | /* begin user_draw() */ |
||
15136 | schaersvoo | 79 | |
15128 | schaersvoo | 80 | /* touchend routine for touch devices */ |
81 | fprintf(js_include_file,"\ |
||
82 | function user_drawstop(evt){\ |
||
83 | if(!user_is_dragging){user_drag(evt);return;};\ |
||
84 | if(user_is_dragging){user_draw(evt);return;};\ |
||
85 | };"); |
||
86 | |||
15111 | schaersvoo | 87 | fprintf(js_include_file,"function user_draw(evt){\ |
88 | if(evt.button == 2){remove_last();return;};\ |
||
89 | var mouse = getMouse(evt,canvas_userdraw);\ |
||
90 | var xy = multisnap_check(mouse.x,mouse.y,use_snap);\ |
||
15128 | schaersvoo | 91 | user_is_dragging = false;\ |
15111 | schaersvoo | 92 | var x = xy[0];var y = xy[1];\ |
93 | if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\ |
||
94 | "); |
||
95 | int temp_reply_format = 22; |
||
96 | switch( draw_num ){ |
||
97 | default: break; |
||
98 | case 0:temp_reply_format = 8;fprintf(js_include_file,"points(x,y,0,0);");break; |
||
99 | case 1:temp_reply_format = 8;fprintf(js_include_file,"points(x,y,0,1);");break; |
||
100 | case 2:temp_reply_format = 8;fprintf(js_include_file,"crosshairs(x,y,0,0);");break; |
||
101 | case 3:temp_reply_format = 8;fprintf(js_include_file,"crosshairs(x,y,0,1);");break; |
||
102 | case 4:temp_reply_format = 10;fprintf(js_include_file,"circles(x,y,0,0);");break; |
||
103 | case 5:temp_reply_format = 10;fprintf(js_include_file,"circles(x,y,0,1);");break; |
||
104 | case 6:temp_reply_format = 11;fprintf(js_include_file,"segments(x,y,0,0);");break; |
||
105 | case 7:temp_reply_format = 11;fprintf(js_include_file,"segments(x,y,0,1);");break; |
||
106 | case 8 ... 9:temp_reply_format = 11;fprintf(js_include_file,"demilines(x,y,0,0);");break; |
||
107 | case 10 ... 11:temp_reply_format = 11;fprintf(js_include_file,"demilines(x,y,0,1);");break; |
||
108 | case 12:temp_reply_format = 11;fprintf(js_include_file,"lines(x,y,0,0);");break; |
||
109 | case 13:temp_reply_format = 11;fprintf(js_include_file,"lines(x,y,0,1);");break; |
||
110 | case 14:temp_reply_format = 11;fprintf(js_include_file,"hlines(x,y,0,0);");break; |
||
111 | case 15:temp_reply_format = 11;fprintf(js_include_file,"hlines(x,y,0,1);");break; |
||
112 | case 16:temp_reply_format = 11;fprintf(js_include_file,"vlines(x,y,0,0);");break; |
||
113 | case 17:temp_reply_format = 11;fprintf(js_include_file,"vlines(x,y,0,1);");break; |
||
114 | case 18:temp_reply_format = 11;fprintf(js_include_file,"arrows(x,y,0,0);");break; |
||
115 | case 19:temp_reply_format = 11;fprintf(js_include_file,"arrows(x,y,0,1);");break; |
||
116 | case 20:temp_reply_format = 11;fprintf(js_include_file,"arrows2(x,y,0,0);");break; |
||
117 | case 21:temp_reply_format = 11;fprintf(js_include_file,"arrows2(x,y,0,1);");break; |
||
118 | case 22:temp_reply_format = 2;fprintf(js_include_file,"curvedarrows(x,y,0,0);");break; |
||
119 | case 23:temp_reply_format = 2;fprintf(js_include_file,"curvedarrows(x,y,0,1);");break; |
||
120 | case 24:temp_reply_format = 2;fprintf(js_include_file,"curvedarrows2(x,y,0,0);");break; |
||
121 | case 25:temp_reply_format = 2;fprintf(js_include_file,"curvedarrows2(x,y,0,1);");break; |
||
122 | case 26 ... 27:temp_reply_format = 6;fprintf(js_include_file,"paths(x,y,0,0);");break; |
||
123 | case 28 ... 29:temp_reply_format = 6;fprintf(js_include_file,"paths(x,y,0,0);");break; |
||
124 | case 30:temp_reply_format = 2;fprintf(js_include_file,"polys(x,y,0,0);");break; |
||
125 | case 31:temp_reply_format = 2;fprintf(js_include_file,"polys(x,y,0,1);");break; |
||
126 | case 32:temp_reply_format = 2;fprintf(js_include_file,"polygon(x,y,0,0);");break; |
||
127 | case 33:temp_reply_format = 2;fprintf(js_include_file,"polygon(x,y,0,1);");break; |
||
128 | case 34:temp_reply_format = 23;fprintf(js_include_file,"polylines(x,y,0,1);");break; |
||
129 | case 35:temp_reply_format = 23;fprintf(js_include_file,"polylines(x,y,0,1);");break; |
||
130 | case 36:temp_reply_format = 2;fprintf(js_include_file,"triangles(x,y,0,0);");break; |
||
131 | case 37:temp_reply_format = 2;fprintf(js_include_file,"triangles(x,y,0,1);");break; |
||
132 | case 38:temp_reply_format = 2;fprintf(js_include_file,"rects(x,y,0,0);");break; |
||
133 | case 39:temp_reply_format = 2;fprintf(js_include_file,"rects(x,y,0,1);");break; |
||
134 | case 40:temp_reply_format = 2;fprintf(js_include_file,"roundrects(x,y,0,0);");break; |
||
135 | case 41:temp_reply_format = 2;fprintf(js_include_file,"roundrects(x,y,0,1);");break; |
||
136 | case 42:temp_reply_format = 25;js_function[JS_FIND_ANGLE] = 1; fprintf(js_include_file,"arcs(x,y,0,0);");break; |
||
137 | case 43:temp_reply_format = 25;js_function[JS_FIND_ANGLE] = 1; fprintf(js_include_file,"arcs(x,y,0,1);");break; |
||
16722 | schaersvoo | 138 | case 44:temp_reply_format = 17;js_function[DRAW_SUBSUP] = 1;fprintf(js_include_file,"text(x,y,0,1);");break; |
15111 | schaersvoo | 139 | case 45:temp_reply_format = 17;fprintf(js_include_file,"images(x,y,0,0);");break; |
140 | case 46:temp_reply_format = 17;fprintf(js_include_file,"images(x,y,0,1);");break; |
||
141 | case 47:temp_reply_format = 27;fprintf(js_include_file,"inputs(x,y,0,0);");break; |
||
142 | case 48:temp_reply_format = 27;fprintf(js_include_file,"inputs(x,y,0,1);");break; |
||
143 | case 49 ... 54 : |
||
144 | /* |
||
15126 | bpr | 145 | "clickfill 49","gridfill 50","diamondfill 51","dotfill 52","hatchfill 53","textfill 54", 49,50,51,52,53,54 |
146 | use_filled ... 0:no fill, 1:fill,2=grid?,3=hatch?,4=diamond?,5=dot?,6=image ? |
||
15111 | schaersvoo | 147 | */ |
148 | temp_reply_format = 10; |
||
149 | fprintf(js_include_file,"clickfill(x,y,0,1);"); |
||
150 | if( draw_num == 49 ){ use_filled = 1;} |
||
151 | else{ |
||
152 | if( draw_num == 50 ){js_function[DRAW_GRIDFILL] = 1;use_filled = 2;} |
||
153 | else{ |
||
154 | if( draw_num == 51 ){js_function[DRAW_DIAMONDFILL] = 1;use_filled = 4;} |
||
155 | else{ |
||
156 | if( draw_num == 52 ){js_function[DRAW_DOTFILL] = 1;use_filled = 5;} |
||
157 | else{ |
||
158 | if( draw_num == 53 ){js_function[DRAW_HATCHFILL] = 1;use_filled = 3;} |
||
159 | else{ |
||
160 | if( draw_num == 54 ){js_function[DRAW_TEXTFILL] = 1;use_filled = 7;}}}}}} |
||
15126 | bpr | 161 | break; |
162 | |||
15111 | schaersvoo | 163 | case 55:temp_reply_format = 2;fprintf(js_include_file,"parallelograms(x,y,0,0);");break; |
164 | case 56:temp_reply_format = 2;fprintf(js_include_file,"parallelograms(x,y,0,1);");break; |
||
165 | case 57 ... 58: |
||
166 | fprintf(stdout,"functions num = %d;",(int) (draw_type[9]-'0')); /* functions4 == 9*/ |
||
167 | if(reply_format == 0 || reply_format != -1){reply_format = 24;} |
||
168 | break; |
||
169 | |||
170 | } |
||
171 | fprintf(js_include_file," return;};"); |
||
172 | |||
173 | if( reply_format == 0 ){reply_format = temp_reply_format;} |
||
174 | |||
175 | /* begin user_drag() */ |
||
176 | fprintf(js_include_file,"function user_drag(evt){\ |
||
177 | var mouse = getMouse(evt,canvas_userdraw);\ |
||
15121 | schaersvoo | 178 | if(isTouch){var xy = multisnap_check(mouse.x,mouse.y,use_snap);};\ |
15128 | schaersvoo | 179 | var x = mouse.x;var y = mouse.y;\ |
180 | user_is_dragging = true;\ |
||
181 | if(x>forbidden_zone[0] && y>forbidden_zone[1]){return;};"); |
||
15111 | schaersvoo | 182 | switch( draw_num ){ |
183 | case 0:fprintf(js_include_file,"return;");break; |
||
184 | case 1:fprintf(js_include_file,"return;");break; |
||
185 | case 2:fprintf(js_include_file,"return;");break; |
||
186 | case 3:fprintf(js_include_file,"return;");break; |
||
187 | case 4:fprintf(js_include_file,"circles(x,y,1,0);return;");break; |
||
188 | case 5:fprintf(js_include_file,"circles(x,y,1,1);return;");break; |
||
189 | case 6:fprintf(js_include_file,"segments(x,y,1,0);");break; |
||
190 | case 7:fprintf(js_include_file,"segments(x,y,1,1);return;");break; |
||
191 | case 8 ... 9:fprintf(js_include_file,"demilines(x,y,1,0);return;");break; |
||
192 | case 10 ... 11:fprintf(js_include_file,"demilines(x,y,1,1);return;");break; |
||
193 | case 12:fprintf(js_include_file,"lines(x,y,1,0);return;");break; |
||
194 | case 13:fprintf(js_include_file,"lines(x,y,1,1);return;");break; |
||
195 | case 14:fprintf(js_include_file,"hlines(x,y,1,0);return;");break; |
||
196 | case 15:fprintf(js_include_file,"hlines(x,y,1,1);return;");break; |
||
197 | case 16:fprintf(js_include_file,"vlines(x,y,1,0);return;");break; |
||
198 | case 17:fprintf(js_include_file,"vlines(x,y,1,1);return;");break; |
||
199 | case 18:fprintf(js_include_file,"arrows(x,y,1,0);return;");break; |
||
200 | case 19:fprintf(js_include_file,"arrows(x,y,1,1);return;");break; |
||
201 | case 20:fprintf(js_include_file,"arrows2(x,y,1,0);return;");break; |
||
202 | case 21:fprintf(js_include_file,"arrows2(x,y,1,1);return;");break; |
||
203 | case 22:fprintf(js_include_file,"curvedarrows(x,y,1,0);return;");break; |
||
204 | case 23:fprintf(js_include_file,"curvedarrows(x,y,1,1);return;");break; |
||
205 | case 24:fprintf(js_include_file,"curvedarrows2(x,y,1,0);return;");break; |
||
206 | case 25:fprintf(js_include_file,"curvedarrows2(x,y,1,1);return;");break; |
||
207 | case 26 ... 27:fprintf(js_include_file,"paths(x,y,1,0);return;");break; |
||
208 | case 28 ... 29:fprintf(js_include_file,"paths(x,y,1,0);return;");break; |
||
209 | case 30:fprintf(js_include_file,"polys(x,y,1,0);return;");break; |
||
210 | case 31:fprintf(js_include_file,"polys(x,y,1,1);return;");break; |
||
211 | case 32:fprintf(js_include_file,"polygon(x,y,1,0);return;");break; |
||
212 | case 33:fprintf(js_include_file,"polygon(x,y,1,1);return;");break; |
||
213 | case 34:fprintf(js_include_file,"polylines(x,y,1,1);return;");break; |
||
214 | case 35:fprintf(js_include_file,"polylines(x,y,1,1);return;");break; |
||
215 | case 36:fprintf(js_include_file,"triangles(x,y,1,0);return;");break; |
||
216 | case 37:fprintf(js_include_file,"triangles(x,y,1,1);return;");break; |
||
217 | case 38:fprintf(js_include_file,"rects(x,y,1,0);return;");break; |
||
218 | case 39:fprintf(js_include_file,"rects(x,y,1,1);return;");break; |
||
219 | case 40:fprintf(js_include_file,"roundrects(x,y,1,0);return;");break; |
||
220 | case 41:fprintf(js_include_file,"roundrects(x,y,1,1);return;");break; |
||
221 | case 42:fprintf(js_include_file,"arcs(x,y,1,0);return;");break; |
||
222 | case 43:fprintf(js_include_file,"arcs(x,y,1,1);return;");break; |
||
223 | case 44:fprintf(js_include_file,"return;");break; |
||
224 | case 45:fprintf(js_include_file,"return;");break; |
||
225 | case 46:fprintf(js_include_file,"return;");break; |
||
226 | case 47:fprintf(js_include_file,"return;");break; |
||
227 | case 48:fprintf(js_include_file,"return;");break; |
||
228 | case 49:fprintf(js_include_file,"return;");break; |
||
229 | case 50:fprintf(js_include_file,"return;");break; |
||
230 | case 51:fprintf(js_include_file,"return;");break; |
||
231 | case 52:fprintf(js_include_file,"return;");break; |
||
232 | case 53:fprintf(js_include_file,"return;");break; |
||
233 | case 54:fprintf(js_include_file,"return;");break; |
||
234 | case 55:fprintf(js_include_file,"parallelograms(x,y,1,0);return;");break; |
||
235 | case 56:fprintf(js_include_file,"parallelograms(x,y,1,1);return;");break; |
||
236 | case 57 ... 58: break; |
||
237 | } |
||
238 | |||
239 | fprintf(js_include_file,"};"); |
||
240 | |||
241 | /* add all stuff needed to draw the selected primitives... */ |
||
242 | switch( draw_num ){ |
||
243 | /* point/points */ |
||
244 | case -1 : break; |
||
245 | case 0 ... 1: |
||
246 | fprintf(js_include_file,"\ |
||
247 | context_userdraw.fillStyle = \"rgba(%s,%.2f)\";\ |
||
248 | function redraw_userdraw(){draw_points();}\ |
||
249 | function remove_last(){if( userdraw_x.length > 0 ){userdraw_x.pop();userdraw_y.pop();draw_points();};return;};\ |
||
250 | function points(x,y,event_which,num){\ |
||
251 | if(event_which == 1){ return; };\ |
||
252 | if( num == 0 ){\ |
||
253 | userdraw_x[0] = x;\ |
||
254 | userdraw_y[0] = y;\ |
||
255 | }else{\ |
||
256 | userdraw_x.push(x);\ |
||
257 | userdraw_y.push(y);\ |
||
258 | };\ |
||
259 | draw_points();\ |
||
260 | };\ |
||
261 | function draw_points(){\ |
||
262 | var len = userdraw_x.length;\ |
||
263 | var radius = 2*(context_userdraw.lineWidth);\ |
||
264 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
265 | var r = 2*Math.PI;\ |
||
266 | for(var p = 0 ; p < len ; p++ ){\ |
||
267 | context_userdraw.beginPath();\ |
||
268 | context_userdraw.arc(userdraw_x[p],userdraw_y[p],radius,0,r,false);\ |
||
269 | context_userdraw.closePath();context_userdraw.fill();\ |
||
270 | };\ |
||
271 | };",stroke_color,stroke_opacity); |
||
272 | break; |
||
273 | /* crosshair /crosshairs */ |
||
274 | case 2 ... 3: |
||
275 | fprintf(js_include_file,"\ |
||
276 | function redraw_userdraw(){draw_crosshairs();};\ |
||
277 | function remove_last(){if( userdraw_x.length > 0 ){userdraw_x.pop();userdraw_y.pop();draw_crosshairs();};return;};\ |
||
278 | function crosshairs(x,y,event_which,num){\ |
||
279 | if(event_which == 1){ return; };\ |
||
280 | if( num == 0 ){\ |
||
281 | userdraw_x[0] = x;\ |
||
282 | userdraw_y[0] = y;\ |
||
283 | }else{\ |
||
284 | userdraw_x.push(x);\ |
||
285 | userdraw_y.push(y);\ |
||
286 | };\ |
||
287 | draw_crosshairs();\ |
||
288 | };\ |
||
289 | function draw_crosshairs(){\ |
||
290 | var crosshair_size = %d;\ |
||
291 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
292 | var x1,x2,y1,y2;\ |
||
293 | var len = userdraw_x.length;\ |
||
294 | for(var p = 0 ; p < len ; p++ ){\ |
||
295 | x1 = userdraw_x[p] - crosshair_size;\ |
||
296 | x2 = userdraw_x[p] + crosshair_size;\ |
||
297 | y1 = userdraw_y[p] - crosshair_size;\ |
||
298 | y2 = userdraw_y[p] + crosshair_size;\ |
||
299 | context_userdraw.beginPath();\ |
||
300 | context_userdraw.moveTo(x1,y1);\ |
||
301 | context_userdraw.lineTo(x2,y2);\ |
||
302 | context_userdraw.closePath();\ |
||
303 | context_userdraw.stroke();\ |
||
304 | context_userdraw.beginPath();\ |
||
305 | context_userdraw.moveTo(x2,y1);\ |
||
306 | context_userdraw.lineTo(x1,y2);\ |
||
307 | context_userdraw.closePath();\ |
||
308 | context_userdraw.stroke();\ |
||
309 | };\ |
||
310 | };",crosshair_size); |
||
311 | break; |
||
312 | /* circle/circles */ |
||
15126 | bpr | 313 | case 4 ... 5 : |
15111 | schaersvoo | 314 | fprintf(js_include_file,"\ |
315 | function redraw_userdraw(){draw_circles();};\ |
||
316 | function remove_last(){if( userdraw_x.length > 0 ){userdraw_x.pop();userdraw_y.pop();userdraw_radius.pop();draw_circles();};return;};\ |
||
317 | function circles(x,y,event_which,num){\ |
||
318 | var last = userdraw_x.length - 1;\ |
||
319 | var xc = userdraw_x[last];\ |
||
320 | var yc = userdraw_y[last];\ |
||
321 | if(event_which == 0){\ |
||
322 | if( xy_cnt == 0 ){\ |
||
323 | if( num == 0 ){\ |
||
324 | userdraw_x[0]=x;userdraw_y[0]=y;userdraw_radius[0]=4;\ |
||
325 | }\ |
||
326 | else\ |
||
327 | {\ |
||
328 | userdraw_x.push(x);userdraw_y.push(y);userdraw_radius.push(4);\ |
||
329 | };\ |
||
330 | };\ |
||
331 | xy_cnt++;\ |
||
332 | }\ |
||
333 | else\ |
||
334 | {\ |
||
335 | if( xy_cnt == 1 ){\ |
||
336 | userdraw_radius[last] = parseInt(Math.sqrt( (x - xc)*(x - xc) + (y - yc)*(y - yc) ));\ |
||
337 | };\ |
||
338 | };\ |
||
339 | if( xy_cnt == 2 ){\ |
||
340 | xy_cnt = 0;\ |
||
341 | if( num == 0 ){\ |
||
342 | userdraw_x = [];userdraw_y = [];\ |
||
343 | userdraw_x[0] = xc;userdraw_y[0] = yc;\ |
||
344 | };\ |
||
345 | };\ |
||
346 | draw_circles();\ |
||
347 | };\ |
||
348 | function draw_circles(){\ |
||
349 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
350 | var len = userdraw_x.length;\ |
||
351 | var r = 2*Math.PI;\ |
||
352 | for(var p = 0 ; p < len ; p++ ){\ |
||
353 | context_userdraw.beginPath();\ |
||
354 | context_userdraw.arc(userdraw_x[p],userdraw_y[p],userdraw_radius[p],0,r,false);\ |
||
355 | context_userdraw.closePath();\ |
||
356 | if(use_filled!=0){context_userdraw.fill();};\ |
||
357 | context_userdraw.stroke();\ |
||
358 | };\ |
||
359 | return;\ |
||
360 | };"); |
||
361 | break; |
||
362 | |||
363 | /* segment/segments */ |
||
15126 | bpr | 364 | case 6 ... 7 : |
15111 | schaersvoo | 365 | fprintf(js_include_file,"\ |
366 | function redraw_userdraw(){draw_segments();};\ |
||
367 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_segments();};return;};\ |
||
368 | function segments(x,y,event_which,num){\ |
||
369 | if(event_which == 0){\ |
||
370 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
371 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
372 | xy_cnt++;\ |
||
373 | }\ |
||
374 | else\ |
||
375 | {\ |
||
376 | if( xy_cnt == 1 ){\ |
||
377 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
378 | draw_segments();\ |
||
379 | userdraw_x.pop();userdraw_y.pop();\ |
||
380 | };\ |
||
381 | };\ |
||
382 | if( xy_cnt == 2 ){\ |
||
383 | xy_cnt = 0;\ |
||
384 | draw_segments();\ |
||
385 | };\ |
||
386 | };\ |
||
387 | function draw_segments(){\ |
||
388 | var len = userdraw_x.length;\ |
||
389 | if( len%%2 == 0 ){\ |
||
390 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
391 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
392 | context_userdraw.beginPath();\ |
||
393 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
394 | context_userdraw.lineTo(userdraw_x[p+1],userdraw_y[p+1]);\ |
||
395 | context_userdraw.closePath();\ |
||
396 | context_userdraw.stroke();\ |
||
397 | };\ |
||
398 | };\ |
||
399 | return;\ |
||
400 | };"); |
||
15126 | bpr | 401 | |
15111 | schaersvoo | 402 | /* "demiline","demilines","halfline","halflines" 8,9,10,11 */ |
403 | case 8 ... 11 : |
||
404 | fprintf(js_include_file,"\ |
||
405 | function redraw_userdraw(){draw_demilines();};\ |
||
406 | function find_inf_point(x1,y1,x2,y2){\ |
||
407 | if(x1<x2+2 && x1>x2-2){if(y1<y2){return [x1,y1,x1,ysize];}else{return [x1,0,x1,y1];};};\ |
||
408 | var rc = (y2 - y1)/(x2 - x1);var q = y1 - (x1)*rc;\ |
||
409 | if( x1 < x2 ){ return [x1,y1,xsize,rc*xsize+q];}else{return [x1,y1,0,q];};\ |
||
410 | };\ |
||
411 | function calc_lines(){\ |
||
412 | var len = userdraw_x.length;\ |
||
413 | var points = find_inf_point(userdraw_x[len-2],userdraw_y[len-2],userdraw_x[len-1],userdraw_y[len-1]);\ |
||
414 | userdraw_x[len-2] = points[0];\ |
||
415 | userdraw_y[len-2] = points[1];\ |
||
416 | userdraw_x[len-1] = points[2];\ |
||
417 | userdraw_y[len-1] = points[3];\ |
||
418 | };\ |
||
419 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_demilines();};return;};\ |
||
420 | function demilines(x,y,event_which,num){\ |
||
421 | if(event_which == 0){\ |
||
422 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
423 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
424 | xy_cnt++;\ |
||
425 | }\ |
||
426 | else\ |
||
427 | {\ |
||
428 | if( xy_cnt == 1 ){\ |
||
429 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
430 | draw_demilines();\ |
||
431 | userdraw_x.pop();userdraw_y.pop();\ |
||
432 | };\ |
||
433 | };\ |
||
434 | if( xy_cnt == 2 ){\ |
||
435 | xy_cnt = 0;\ |
||
436 | calc_lines();\ |
||
437 | draw_demilines();\ |
||
438 | };\ |
||
439 | };\ |
||
440 | function draw_demilines(){\ |
||
441 | var len = userdraw_x.length;\ |
||
442 | if( len %%2 == 0 ){\ |
||
443 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
444 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
445 | context_userdraw.beginPath();\ |
||
446 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
447 | context_userdraw.lineTo(userdraw_x[p+1],userdraw_y[p+1]);\ |
||
448 | context_userdraw.closePath();\ |
||
449 | context_userdraw.stroke();\ |
||
450 | };\ |
||
451 | };\ |
||
452 | return;\ |
||
453 | };"); |
||
454 | break; |
||
455 | /* line/lines */ |
||
15126 | bpr | 456 | case 12 ... 13 : |
15111 | schaersvoo | 457 | fprintf(js_include_file,"\ |
458 | function redraw_userdraw(){calc_lines();draw_lines();};\ |
||
459 | function calc_lines(){\ |
||
460 | var marge = 2;var len = userdraw_x.length;\ |
||
15118 | schaersvoo | 461 | var tmp_x = new Array(len);\ |
462 | var tmp_y = new Array(len);\ |
||
15111 | schaersvoo | 463 | var pp;\ |
464 | for(var p = 0 ; p < len ;p = p+2){\ |
||
465 | pp = p+1;\ |
||
15118 | schaersvoo | 466 | if(userdraw_x[p] < userdraw_x[pp]+marge && userdraw_x[p] > userdraw_x[pp]-marge){\ |
467 | tmp_x[p] = userdraw_x[p];tmp_x[pp] = userdraw_x[pp];\ |
||
468 | tmp_y[p] = 0;tmp_y[pp] = ysize;\ |
||
15111 | schaersvoo | 469 | }\ |
470 | else\ |
||
471 | {\ |
||
15118 | schaersvoo | 472 | if(userdraw_y[p] < userdraw_y[pp]+marge && userdraw_y[p] > userdraw_y[pp]-marge){\ |
473 | tmp_x[p] = 0;tmp_x[pp] = xsize;\ |
||
474 | tmp_y[p] = userdraw_y[p];tmp_y[pp] = userdraw_y[pp];\ |
||
15111 | schaersvoo | 475 | }\ |
476 | else\ |
||
477 | {\ |
||
15118 | schaersvoo | 478 | tmp_x[p] = 0;tmp_x[pp] = xsize;\ |
479 | tmp_y[p] = userdraw_y[p] - (userdraw_x[p])*(userdraw_y[pp] - userdraw_y[p])/(userdraw_x[pp] - userdraw_x[p]);\ |
||
480 | tmp_y[pp] = userdraw_y[p] + (xsize - userdraw_x[p])*(userdraw_y[pp] - userdraw_y[p])/(userdraw_x[pp] - userdraw_x[p]);\ |
||
15111 | schaersvoo | 481 | };\ |
482 | };\ |
||
483 | };\ |
||
15118 | schaersvoo | 484 | return {x:tmp_x,y:tmp_y};\ |
15111 | schaersvoo | 485 | };\ |
486 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_lines();};return;};\ |
||
487 | function lines(x,y,event_which,num){\ |
||
488 | if(event_which == 0){\ |
||
489 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
490 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
491 | xy_cnt++;\ |
||
492 | }\ |
||
493 | else\ |
||
494 | {\ |
||
495 | if( xy_cnt == 1 ){\ |
||
496 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
497 | draw_lines();\ |
||
498 | userdraw_x.pop();userdraw_y.pop();\ |
||
499 | };\ |
||
500 | };\ |
||
501 | if( xy_cnt == 2 ){\ |
||
502 | xy_cnt = 0;\ |
||
503 | draw_lines();\ |
||
504 | };\ |
||
505 | };\ |
||
506 | function draw_lines(){\ |
||
507 | var len = userdraw_x.length;\ |
||
508 | if( len %%2 == 0 ){\ |
||
15118 | schaersvoo | 509 | var xy = calc_lines();\ |
15111 | schaersvoo | 510 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
511 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
512 | context_userdraw.beginPath();\ |
||
15118 | schaersvoo | 513 | context_userdraw.moveTo(xy.x[p],xy.y[p]);\ |
514 | context_userdraw.lineTo(xy.x[p+1],xy.y[p+1]);\ |
||
15111 | schaersvoo | 515 | context_userdraw.closePath();\ |
516 | context_userdraw.stroke();\ |
||
517 | };\ |
||
518 | };\ |
||
519 | return;\ |
||
520 | };"); |
||
521 | break; |
||
522 | /* hline/hlines 14,15 */ |
||
15126 | bpr | 523 | case 14 ... 15: |
15111 | schaersvoo | 524 | fprintf(js_include_file,"\ |
525 | function redraw_userdraw(){draw_hlines();};\ |
||
526 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_hlines();};return;};\ |
||
527 | function hlines(x,y,event_which,num){\ |
||
528 | if(event_which == 0){\ |
||
529 | if( num == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
530 | userdraw_x.push(0);userdraw_y.push(y);\ |
||
531 | userdraw_x.push(xsize);userdraw_y.push(y);\ |
||
532 | draw_hlines();\ |
||
533 | };\ |
||
534 | };\ |
||
535 | function draw_hlines(){\ |
||
536 | var len = userdraw_x.length;\ |
||
537 | if( len %%2 == 0 ){\ |
||
538 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
539 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
540 | context_userdraw.beginPath();\ |
||
541 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
542 | context_userdraw.lineTo(userdraw_x[p+1],userdraw_y[p+1]);\ |
||
543 | context_userdraw.closePath();\ |
||
544 | context_userdraw.stroke();\ |
||
545 | };\ |
||
546 | };\ |
||
547 | return;\ |
||
548 | };"); |
||
549 | |||
550 | break; |
||
551 | /* vline,vlines 16,17 */ |
||
552 | case 16 ... 17: |
||
553 | fprintf(js_include_file,"\ |
||
554 | function redraw_userdraw(){draw_vlines();};\ |
||
555 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_vlines();};return;};\ |
||
556 | function vlines(x,y,event_which,num){\ |
||
557 | if(event_which == 0){\ |
||
558 | if( num == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
559 | userdraw_x.push(x);userdraw_y.push(0);\ |
||
560 | userdraw_x.push(x);userdraw_y.push(ysize);\ |
||
561 | draw_vlines();\ |
||
562 | };\ |
||
563 | };\ |
||
564 | function draw_vlines(){\ |
||
565 | var len = userdraw_x.length;\ |
||
566 | if( len %%2 == 0 ){\ |
||
567 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
568 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
569 | context_userdraw.beginPath();\ |
||
570 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
571 | context_userdraw.lineTo(userdraw_x[p+1],userdraw_y[p+1]);\ |
||
572 | context_userdraw.closePath();\ |
||
573 | context_userdraw.stroke();\ |
||
574 | };\ |
||
575 | };\ |
||
576 | return;};"); |
||
577 | |||
578 | break; |
||
579 | /* arrow/arrows */ |
||
15126 | bpr | 580 | case 18 ... 19 : |
15111 | schaersvoo | 581 | fprintf(js_include_file,"\ |
582 | function redraw_userdraw(){draw_arrows();};\ |
||
583 | context_userdraw.fillStyle = \"rgba(%s,%.2f)\";\ |
||
584 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_arrows();};return;};\ |
||
585 | function arrows(x,y,event_which,num){\ |
||
586 | if(event_which == 0){\ |
||
587 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
588 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
589 | xy_cnt++;\ |
||
590 | }\ |
||
591 | else\ |
||
592 | {\ |
||
593 | if( xy_cnt == 1 ){\ |
||
594 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
595 | draw_arrows();\ |
||
596 | userdraw_x.pop();userdraw_y.pop();\ |
||
597 | };\ |
||
598 | };\ |
||
599 | if( xy_cnt == 2 ){\ |
||
600 | xy_cnt = 0;\ |
||
601 | draw_arrows();\ |
||
602 | };\ |
||
603 | };\ |
||
604 | function draw_arrows(){\ |
||
605 | var arrow_head = %d;\ |
||
606 | var len = userdraw_x.length;\ |
||
607 | var x1,y1,x2,y2,dx,dy,h;\ |
||
608 | if( len%%2 == 0 ){\ |
||
609 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
610 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
15711 | schaersvoo | 611 | x1 = userdraw_x[p];y1 = userdraw_y[p];x2 = userdraw_x[p+1];y2 = userdraw_y[p+1];dx = x2 - x1;dy = y2 - y1;\ |
15111 | schaersvoo | 612 | context_userdraw.save();\ |
15711 | schaersvoo | 613 | context_userdraw.setLineDash([]);\ |
15111 | schaersvoo | 614 | context_userdraw.translate(x2,y2);\ |
615 | context_userdraw.rotate(Math.atan2(dy,dx));\ |
||
616 | context_userdraw.beginPath();\ |
||
617 | context_userdraw.moveTo(0,0);\ |
||
618 | context_userdraw.lineTo(-1*arrow_head,-0.5*arrow_head);\ |
||
619 | context_userdraw.lineTo(-1*arrow_head, 0.5*arrow_head);\ |
||
620 | context_userdraw.closePath();\ |
||
621 | context_userdraw.fill();\ |
||
622 | context_userdraw.stroke();\ |
||
623 | context_userdraw.restore();\ |
||
15711 | schaersvoo | 624 | context_userdraw.beginPath();\ |
625 | context_userdraw.moveTo(x1,y1);\ |
||
626 | context_userdraw.lineTo(x2,y2);\ |
||
627 | context_userdraw.closePath();\ |
||
628 | context_userdraw.stroke();\ |
||
15111 | schaersvoo | 629 | };\ |
630 | };\ |
||
631 | return;\ |
||
632 | };",stroke_color,stroke_opacity,arrow_head); |
||
633 | break; |
||
634 | /* arrow/arrows */ |
||
15126 | bpr | 635 | case 20 ... 21 : |
15111 | schaersvoo | 636 | fprintf(js_include_file,"\ |
637 | function redraw_userdraw(){draw_arrows2();};\ |
||
638 | context_userdraw.fillStyle = \"rgba(%s,%.2f)\";\ |
||
639 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_arrows();};return;};\ |
||
640 | function arrows2(x,y,event_which,num){\ |
||
641 | if(event_which == 0){\ |
||
642 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
643 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
644 | xy_cnt++;\ |
||
645 | }\ |
||
646 | else\ |
||
647 | {\ |
||
648 | if( xy_cnt == 1 ){\ |
||
649 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
650 | draw_arrows2();\ |
||
651 | userdraw_x.pop();userdraw_y.pop();\ |
||
652 | };\ |
||
653 | };\ |
||
654 | if( xy_cnt == 2 ){\ |
||
655 | xy_cnt = 0;\ |
||
656 | draw_arrows2();\ |
||
657 | };\ |
||
658 | };\ |
||
659 | function draw_arrows2(){\ |
||
660 | var arrow_head = %d;\ |
||
661 | var len = userdraw_x.length;\ |
||
662 | var x1,y1,x2,y2,dx,dy,h;\ |
||
663 | if( len%%2 == 0 ){\ |
||
664 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
665 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
666 | context_userdraw.save();\ |
||
667 | x1 = userdraw_x[p];y1 = userdraw_y[p];x2 = userdraw_x[p+1];y2 = userdraw_y[p+1];dx = x2 - x1;dy = y2 - y1;\ |
||
668 | context_userdraw.save();\ |
||
669 | context_userdraw.beginPath();\ |
||
670 | context_userdraw.moveTo(x1,y1);\ |
||
671 | context_userdraw.lineTo(x2,y2);\ |
||
672 | context_userdraw.closePath();\ |
||
673 | context_userdraw.stroke();\ |
||
674 | context_userdraw.translate(x2,y2);\ |
||
675 | context_userdraw.rotate(Math.atan2(dy,dx));\ |
||
676 | context_userdraw.beginPath();\ |
||
677 | context_userdraw.moveTo(0,0);\ |
||
678 | context_userdraw.lineTo(-1*arrow_head,-0.5*arrow_head);\ |
||
679 | context_userdraw.lineTo(-1*arrow_head, 0.5*arrow_head);\ |
||
680 | context_userdraw.closePath();\ |
||
681 | context_userdraw.fill();\ |
||
682 | context_userdraw.stroke();\ |
||
683 | context_userdraw.restore();\ |
||
684 | context_userdraw.translate(x1,y1);\ |
||
685 | context_userdraw.rotate(Math.atan2(-dy,-dx));\ |
||
686 | context_userdraw.beginPath();\ |
||
687 | context_userdraw.moveTo(0,0);\ |
||
688 | context_userdraw.lineTo(-1*arrow_head,-0.5*arrow_head);\ |
||
689 | context_userdraw.lineTo(-1*arrow_head, 0.5*arrow_head);\ |
||
690 | context_userdraw.closePath();\ |
||
691 | context_userdraw.fill();\ |
||
692 | context_userdraw.stroke();\ |
||
693 | context_userdraw.restore();\ |
||
694 | };\ |
||
695 | };\ |
||
696 | return;\ |
||
697 | };",stroke_color,stroke_opacity,arrow_head); |
||
698 | break; |
||
699 | /* curvedarrow/curvedarrows */ |
||
15126 | bpr | 700 | case 22 ... 23: |
15111 | schaersvoo | 701 | fprintf(js_include_file,"\ |
702 | function redraw_userdraw(){draw_curvedarrows();};\ |
||
703 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<3;p++){userdraw_x.pop();userdraw_y.pop();};draw_curvedarrows();};return;};\ |
||
704 | function curvedarrows(x,y,event_which,num){\ |
||
705 | if(event_which == 0){\ |
||
706 | if(num == 0 && xy_cnt == 0){\ |
||
707 | userdraw_x = [];userdraw_y = [];userdraw_x[0] = x;userdraw_y[0] = y;\ |
||
708 | }\ |
||
709 | else\ |
||
710 | {\ |
||
711 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
712 | };\ |
||
713 | xy_cnt++;\ |
||
714 | }\ |
||
715 | else\ |
||
716 | {\ |
||
717 | if( xy_cnt < 3 ){userdraw_x.push(x);userdraw_y.push(y);draw_curvedarrows();userdraw_x.pop();userdraw_y.pop();};\ |
||
718 | if( xy_cnt == 3 ){userdraw_x.pop();userdraw_y.pop();userdraw_x.push(x);userdraw_y.push(y);xy_cnt = 0;draw_curvedarrows();};\ |
||
719 | };\ |
||
720 | };\ |
||
721 | var arrow_head = %d;\ |
||
722 | function draw_curvedarrows(){\ |
||
723 | var len = userdraw_x.length;var x1,y1,x2,y2,x3,y3;\ |
||
724 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
725 | for(var p = 0 ; p < len ; p = p+3){\ |
||
726 | x1 = userdraw_x[p];x2 = userdraw_x[p+1];x3 = userdraw_x[p+2];y1 = userdraw_y[p];y2 = userdraw_y[p+1];y3 = userdraw_y[p+2];\ |
||
727 | var angle1 = Math.atan2(x3 - x2,y3 - y2) + Math.PI;\ |
||
728 | context_userdraw.beginPath();\ |
||
729 | context_userdraw.moveTo(x1,y1);\ |
||
730 | context_userdraw.quadraticCurveTo(x3,y3,x2,y2);\ |
||
731 | context_userdraw.moveTo(x2 - (arrow_head * Math.sin(angle1 - Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 - Math.PI / 6)));\ |
||
732 | context_userdraw.lineTo(x2, y2);\ |
||
733 | context_userdraw.lineTo(x2 - (arrow_head * Math.sin(angle1 + Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 + Math.PI / 6)));\ |
||
734 | context_userdraw.stroke();\ |
||
735 | context_userdraw.closePath();\ |
||
736 | };\ |
||
737 | return;};",arrow_head); |
||
738 | break; |
||
739 | /* curvedarrow2/curvedarrows2 */ |
||
15126 | bpr | 740 | case 24 ... 25: |
15111 | schaersvoo | 741 | fprintf(js_include_file,"\ |
742 | function redraw_userdraw(){draw_curvedarrows2();};\ |
||
743 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<3;p++){userdraw_x.pop();userdraw_y.pop();};draw_curvedarrows2();};return;};\ |
||
744 | function curvedarrows2(x,y,event_which,num){\ |
||
745 | if(event_which == 0){\ |
||
746 | if(num == 0 && xy_cnt == 0){userdraw_x = [];userdraw_y = [];userdraw_x[0] = x;userdraw_y[0] = y;}else{userdraw_x.push(x);userdraw_y.push(y);};xy_cnt++;\ |
||
747 | }\ |
||
748 | else\ |
||
749 | {\ |
||
750 | if( xy_cnt < 3 ){userdraw_x.push(x);userdraw_y.push(y);draw_curvedarrows2();userdraw_x.pop();userdraw_y.pop();};\ |
||
751 | if( xy_cnt == 3 ){userdraw_x.pop();userdraw_y.pop();userdraw_x.push(x);userdraw_y.push(y);xy_cnt = 0;draw_curvedarrows2();};\ |
||
752 | };\ |
||
753 | };\ |
||
754 | var arrow_head = %d;\ |
||
755 | function draw_curvedarrows2(){\ |
||
756 | var len = userdraw_x.length;var x1,y1,x2,y2,x3,y3;\ |
||
757 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
758 | for(var p = 0 ; p < len ; p = p+3){\ |
||
759 | x1 = userdraw_x[p];x2 = userdraw_x[p+1];x3 = userdraw_x[p+2];y1 = userdraw_y[p];y2 = userdraw_y[p+1];y3 = userdraw_y[p+2];\ |
||
760 | var angle1 = Math.atan2(x3 - x2,y3 - y2) + Math.PI;\ |
||
761 | var angle2 = Math.atan2(x3 - x1,y3 - y1) + Math.PI;\ |
||
762 | context_userdraw.beginPath();\ |
||
763 | context_userdraw.moveTo(x1,y1);\ |
||
764 | context_userdraw.moveTo(x1 - (arrow_head * Math.sin(angle2 - Math.PI / 6)),y1 - (arrow_head * Math.cos(angle2 - Math.PI / 6)));\ |
||
765 | context_userdraw.lineTo(x1, y1);\ |
||
766 | context_userdraw.lineTo(x1 - (arrow_head * Math.sin(angle2 + Math.PI / 6)),y1 - (arrow_head * Math.cos(angle2 + Math.PI / 6)));\ |
||
767 | context_userdraw.moveTo(x1,y1);\ |
||
768 | context_userdraw.quadraticCurveTo(x3,y3,x2,y2);\ |
||
769 | context_userdraw.moveTo(x2 - (arrow_head * Math.sin(angle1 - Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 - Math.PI / 6)));\ |
||
770 | context_userdraw.lineTo(x2, y2);\ |
||
771 | context_userdraw.lineTo(x2 - (arrow_head * Math.sin(angle1 + Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 + Math.PI / 6)));\ |
||
772 | context_userdraw.stroke();\ |
||
773 | context_userdraw.closePath();\ |
||
774 | };\ |
||
775 | return;\ |
||
776 | };",arrow_head); |
||
777 | break; |
||
15126 | bpr | 778 | |
15111 | schaersvoo | 779 | /* freehandline/freehandlines/path/paths 0,1 26,27,28,29 */ |
780 | case 26 ... 29: |
||
781 | fprintf(js_include_file,"\ |
||
782 | var stop = 1;\ |
||
783 | function remove_last(){userdraw_x = [];userdraw_y = []; context_userdraw.clearRect(0,0,xsize,ysize);return;};\ |
||
784 | function paths(x,y,event_which,num){\ |
||
785 | if(event_which == 0 && stop == 0 ){stop = 1;return;};\ |
||
786 | if(event_which == 1 && stop == 1 ){return;}; \ |
||
787 | if(event_which == 0 && stop == 1 ){\ |
||
788 | stop = 0;userdraw_x = [];userdraw_y = [];return;};\ |
||
789 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
790 | draw_paths();\ |
||
791 | };\ |
||
792 | function draw_paths(){\ |
||
793 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
794 | var len = userdraw_x.length ;\ |
||
795 | context_userdraw.beginPath();\ |
||
796 | context_userdraw.moveTo(userdraw_x[0],userdraw_y[0]);\ |
||
797 | for(var p = 1 ; p < len ; p++ ){\ |
||
798 | context_userdraw.lineTo(userdraw_x[p],userdraw_y[p]);\ |
||
799 | };\ |
||
800 | if(use_filled!=0){context_userdraw.fill();};\ |
||
801 | context_userdraw.stroke();\ |
||
802 | return;\ |
||
803 | };"); |
||
15126 | bpr | 804 | |
15111 | schaersvoo | 805 | break; |
15126 | bpr | 806 | |
15111 | schaersvoo | 807 | /* poly/polys poly[3]...polys[9] 30,31 */ |
808 | case 30 ... 31: |
||
809 | fprintf(js_include_file,"\ |
||
810 | var polynum = %d;\ |
||
811 | function redraw_userdraw(){draw_polys();};\ |
||
812 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<polynum;p++){userdraw_x.pop();userdraw_y.pop();};draw_polys();};return;};\ |
||
813 | function polys(x,y,event_which,num){\ |
||
814 | if(event_which == 0){\ |
||
815 | if(num == 0 && xy_cnt == 0){\ |
||
816 | userdraw_x = [];userdraw_y = [];\ |
||
817 | userdraw_x[0] = x;userdraw_y[0] = y;\ |
||
818 | }\ |
||
819 | else\ |
||
820 | {\ |
||
821 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
822 | };\ |
||
823 | xy_cnt++;\ |
||
824 | }\ |
||
825 | else\ |
||
826 | {\ |
||
827 | if( xy_cnt < polynum ){\ |
||
828 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
829 | draw_polys();\ |
||
830 | userdraw_x.pop();userdraw_y.pop();\ |
||
831 | };\ |
||
832 | };\ |
||
833 | if( xy_cnt == polynum ){\ |
||
834 | userdraw_x.pop();userdraw_y.pop();\ |
||
835 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
836 | xy_cnt = 0;\ |
||
837 | draw_polys();\ |
||
838 | };\ |
||
839 | };\ |
||
840 | function draw_polys(){\ |
||
15121 | schaersvoo | 841 | var len = userdraw_x.length;\ |
15111 | schaersvoo | 842 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
843 | for(var p = 0 ; p < len ; p = p+polynum){\ |
||
844 | context_userdraw.beginPath();\ |
||
845 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
15121 | schaersvoo | 846 | for( var m = p+1 ;m < p+polynum ; m++){\ |
847 | if(typeof(userdraw_x[m]) !== 'undefined' ){context_userdraw.lineTo(userdraw_x[m],userdraw_y[m]);};};\ |
||
15111 | schaersvoo | 848 | context_userdraw.lineTo(userdraw_x[p],userdraw_y[p]);\ |
15121 | schaersvoo | 849 | context_userdraw.stroke();\ |
15111 | schaersvoo | 850 | context_userdraw.closePath();\ |
851 | if(use_filled!=0){context_userdraw.fill();};\ |
||
852 | };\ |
||
853 | return;\ |
||
854 | };",polynum); |
||
855 | break; |
||
856 | case 32 ... 33: |
||
857 | /* polygon/polygon 32,33 */ |
||
858 | /* multiple polygons are now working as expected : no problems with duplicated/closing points*/ |
||
859 | fprintf(js_include_file,"\ |
||
860 | var poly_closed = [];\ |
||
861 | var do_not_pop = 0;\ |
||
862 | function redraw_userdraw(){do_not_pop = 1;draw_polygon();};\ |
||
863 | function remove_last(){var len = poly_closed.length;if(len > 1 ){var last = poly_closed[len-1]-poly_closed[len-2];for(var p=0;p<last-1;p++){userdraw_x.pop();userdraw_y.pop();};poly_closed.pop();}else{poly_closed = [];userdraw_x = [];userdraw_y = [];};draw_polygon();return;};\ |
||
864 | function check_closed(x1,y1,X,Y){\ |
||
865 | var marge=10;\ |
||
866 | var len = X.length-1;\ |
||
867 | for(var p = 0 ; p < len ; p++){\ |
||
868 | if(x1 < X[p] + marge && x1 > X[p] - marge ){\ |
||
869 | if(y1 < Y[p] + marge && y1 > Y[p] - marge ){\ |
||
870 | return 1;\ |
||
871 | };\ |
||
872 | };\ |
||
873 | };\ |
||
874 | return 0;\ |
||
875 | };\ |
||
876 | \ |
||
877 | function polygon(x,y,event_which,num){\ |
||
878 | do_not_pop = 0;\ |
||
879 | if(event_which == 0){\ |
||
880 | if(num == 0 && xy_cnt == 0){\ |
||
881 | userdraw_x = [];userdraw_y = [];\ |
||
882 | userdraw_x[0] = x;userdraw_y[0] = y;\ |
||
883 | }\ |
||
884 | else\ |
||
885 | {\ |
||
886 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
887 | };\ |
||
888 | xy_cnt++;\ |
||
889 | if( xy_cnt > 2 ){\ |
||
890 | if( check_closed(x,y,userdraw_x,userdraw_y) == 1){\ |
||
891 | poly_closed.push(userdraw_x.length - 1);\ |
||
892 | draw_polygon();\ |
||
893 | xy_cnt = 0;\ |
||
894 | };\ |
||
895 | };\ |
||
896 | }\ |
||
897 | else\ |
||
898 | {\ |
||
899 | if( xy_cnt > 0 ){\ |
||
900 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
901 | draw_polygon();\ |
||
902 | };\ |
||
903 | };\ |
||
904 | };\ |
||
905 | function draw_polygon(){\ |
||
906 | var len = userdraw_x.length;\ |
||
907 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
908 | context_userdraw.beginPath();\ |
||
909 | var begin = 0;\ |
||
910 | context_userdraw.moveTo(userdraw_x[0],userdraw_y[0]);\ |
||
911 | for( var p = 0 ; p < len ; p++){\ |
||
912 | if( poly_closed.indexOf(p) != -1 ){\ |
||
913 | context_userdraw.lineTo(userdraw_x[begin],userdraw_y[begin]);\ |
||
914 | begin = p;\ |
||
915 | context_userdraw.closePath();\ |
||
916 | if(use_filled!=0){context_userdraw.fill();};\ |
||
917 | context_userdraw.stroke();\ |
||
918 | context_userdraw.beginPath();\ |
||
919 | }else{ context_userdraw.lineTo(userdraw_x[p],userdraw_y[p]);};\ |
||
920 | };\ |
||
921 | context_userdraw.lineTo(userdraw_x[begin],userdraw_y[begin]);\ |
||
922 | context_userdraw.closePath();\ |
||
923 | if(use_filled!=0){context_userdraw.fill();};\ |
||
924 | context_userdraw.stroke();\ |
||
925 | if(do_not_pop == 0){ userdraw_x.pop();userdraw_y.pop();};\ |
||
926 | return;\ |
||
927 | };"); |
||
928 | break; |
||
15126 | bpr | 929 | |
930 | /* |
||
931 | polyline/brokenline 34,35 |
||
15111 | schaersvoo | 932 | there is just a single polyline/brokenline possible ! |
933 | */ |
||
934 | case 34 ... 35: |
||
935 | fprintf(js_include_file,"\ |
||
936 | function redraw_userdraw(){draw_polylines();};\ |
||
937 | function remove_last(){if( userdraw_x.length > 0 ){userdraw_x.pop();userdraw_y.pop();draw_polylines();};return;};\ |
||
938 | function polylines(x,y,event_which,num){\ |
||
939 | if(event_which == 0){\ |
||
940 | if(num == 0 && xy_cnt == 0 ){ userdraw_x = [];userdraw_y = [];};\ |
||
941 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
942 | xy_cnt++;\ |
||
943 | }\ |
||
944 | else\ |
||
945 | {\ |
||
946 | if( xy_cnt == 1 ){\ |
||
947 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
948 | userdraw_x.pop();userdraw_y.pop();\ |
||
949 | };\ |
||
950 | };\ |
||
951 | if( xy_cnt == 2 ){xy_cnt = 0;};\ |
||
952 | draw_polylines();\ |
||
953 | };\ |
||
954 | var full_circle = 2*Math.PI;\ |
||
955 | function draw_polylines(){\ |
||
956 | var len = userdraw_x.length;\ |
||
957 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
958 | context_userdraw.beginPath();\ |
||
959 | context_userdraw.moveTo(userdraw_x[0],userdraw_y[0]);\ |
||
960 | for( var p = 0 ; p < len ; p++){\ |
||
961 | context_userdraw.lineTo(userdraw_x[p],userdraw_y[p]);\ |
||
962 | context_userdraw.arc(userdraw_x[p],userdraw_y[p],2,0,full_circle,false);\ |
||
963 | };\ |
||
964 | context_userdraw.stroke();\ |
||
965 | context_userdraw.closePath();\ |
||
966 | if(use_filled != 0 ){if(use_filled!=0){context_userdraw.fill();};};\ |
||
967 | return;\ |
||
968 | };"); |
||
969 | break; |
||
970 | |||
971 | /* triangle/triangles 36,37 */ |
||
972 | case 36 ... 37: |
||
973 | fprintf(js_include_file,"\ |
||
974 | function redraw_userdraw(){draw_triangles();};\ |
||
975 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<3;p++){userdraw_x.pop();userdraw_y.pop();};draw_triangles();};return;};\ |
||
976 | function triangles(x,y,event_which,num){\ |
||
977 | var last = userdraw_x.length - 1;\ |
||
978 | if(event_which == 0){\ |
||
979 | if(num == 0 && xy_cnt == 0){\ |
||
980 | userdraw_x = [];userdraw_y = [];userdraw_x[0] = x;userdraw_y[0] = y;\ |
||
981 | }\ |
||
982 | else\ |
||
983 | {\ |
||
984 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
985 | };\ |
||
986 | xy_cnt++;\ |
||
987 | }\ |
||
988 | else\ |
||
989 | {\ |
||
990 | if( xy_cnt < 3 ){\ |
||
991 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
992 | draw_triangles();\ |
||
993 | userdraw_x.pop();userdraw_y.pop();\ |
||
994 | return;\ |
||
995 | };\ |
||
996 | };\ |
||
997 | if( xy_cnt == 3 ){\ |
||
998 | userdraw_x.pop();userdraw_y.pop();\ |
||
999 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1000 | xy_cnt = 0;\ |
||
1001 | draw_triangles();\ |
||
1002 | };\ |
||
1003 | };\ |
||
1004 | function draw_triangles(){\ |
||
1005 | var len = userdraw_x.length - 1;\ |
||
1006 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
1007 | for(var p = 0 ; p < len ; p = p+3){\ |
||
1008 | context_userdraw.beginPath();\ |
||
1009 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
1010 | for( var m = p+1 ;m < p+3 ; m++){\ |
||
1011 | context_userdraw.lineTo(userdraw_x[m],userdraw_y[m]);\ |
||
1012 | };\ |
||
1013 | context_userdraw.lineTo(userdraw_x[p],userdraw_y[p]);\ |
||
1014 | context_userdraw.closePath();\ |
||
1015 | if(use_filled!=0){context_userdraw.fill();};\ |
||
1016 | context_userdraw.stroke();\ |
||
1017 | };\ |
||
1018 | return;\ |
||
1019 | };"); |
||
1020 | break; |
||
1021 | |||
1022 | /* rect/rects 38,39 : NOT USING A PATH !!*/ |
||
15126 | bpr | 1023 | case 38 ... 39 : |
15111 | schaersvoo | 1024 | fprintf(js_include_file,"\ |
1025 | function redraw_userdraw(){draw_rects();};\ |
||
1026 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_rects();};return;};\ |
||
1027 | function rects(x,y,event_which,num){\ |
||
1028 | if(event_which == 0){\ |
||
1029 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
1030 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1031 | xy_cnt++;\ |
||
1032 | }\ |
||
1033 | else\ |
||
1034 | {\ |
||
1035 | if( xy_cnt == 1 ){\ |
||
1036 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1037 | draw_rects();\ |
||
1038 | userdraw_x.pop();userdraw_y.pop();\ |
||
1039 | };\ |
||
1040 | };\ |
||
1041 | if( xy_cnt == 2 ){\ |
||
1042 | xy_cnt = 0;\ |
||
1043 | draw_rects();\ |
||
1044 | };\ |
||
1045 | };\ |
||
1046 | function draw_rects(){\ |
||
1047 | var len = userdraw_x.length;\ |
||
1048 | if( len %%2 == 0 ){\ |
||
1049 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
1050 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
1051 | context_userdraw.beginPath();\ |
||
1052 | context_userdraw.rect(userdraw_x[p],userdraw_y[p],userdraw_x[p+1]-userdraw_x[p],userdraw_y[p+1]-userdraw_y[p]);\ |
||
1053 | context_userdraw.closePath();\ |
||
1054 | if(use_filled!=0){context_userdraw.fill();};\ |
||
1055 | context_userdraw.stroke();\ |
||
1056 | };\ |
||
1057 | };\ |
||
1058 | return;\ |
||
1059 | };"); |
||
15126 | bpr | 1060 | break; |
15111 | schaersvoo | 1061 | /* roundrect/roundrects 40,41 : NOT USING A PATH !!*/ |
1062 | case 40 ... 41: |
||
1063 | fprintf(js_include_file,"\ |
||
1064 | function redraw_userdraw(){draw_roundrects();};\ |
||
1065 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<2;p++){userdraw_x.pop();userdraw_y.pop();};draw_roundrects();};return;};\ |
||
1066 | function roundrects(x,y,event_which,num){\ |
||
1067 | if(event_which == 0){\ |
||
1068 | if( num == 0 && xy_cnt == 0 ){userdraw_x = [];userdraw_y = [];};\ |
||
1069 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1070 | xy_cnt++;\ |
||
1071 | }\ |
||
1072 | else\ |
||
1073 | {\ |
||
1074 | if( xy_cnt == 1 ){\ |
||
1075 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1076 | draw_roundrects();\ |
||
1077 | userdraw_x.pop();userdraw_y.pop();\ |
||
1078 | };\ |
||
1079 | };\ |
||
1080 | if( xy_cnt == 2 ){\ |
||
1081 | xy_cnt = 0;\ |
||
1082 | draw_roundrects();\ |
||
1083 | };\ |
||
1084 | };\ |
||
1085 | function draw_roundrects(){\ |
||
1086 | var len = userdraw_x.length;\ |
||
1087 | if( len %%2 == 0 ){\ |
||
1088 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
1089 | var x,y,w,h,r;\ |
||
1090 | for(var p = 0; p < len; p = p+2){\ |
||
1091 | x = userdraw_x[p];y = userdraw_y[p];w = userdraw_x[p+1] - x;h = userdraw_y[p+1] - y;r = parseInt(0.1*w);\ |
||
1092 | context_userdraw.beginPath();\ |
||
1093 | context_userdraw.moveTo(x + r, y);\ |
||
1094 | context_userdraw.lineTo(x + w - r, y);\ |
||
1095 | context_userdraw.quadraticCurveTo(x + w, y, x + w, y + r);\ |
||
1096 | context_userdraw.lineTo(x + w, y + h - r);\ |
||
1097 | context_userdraw.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\ |
||
1098 | context_userdraw.lineTo(x + r, y + h);\ |
||
1099 | context_userdraw.quadraticCurveTo(x, y + h, x, y + h - r);\ |
||
1100 | context_userdraw.lineTo(x, y + r);\ |
||
1101 | context_userdraw.quadraticCurveTo(x, y, x + r, y);\ |
||
1102 | context_userdraw.closePath();\ |
||
1103 | if(use_filled!=0){context_userdraw.fill();};\ |
||
1104 | context_userdraw.stroke();\ |
||
1105 | };\ |
||
1106 | };\ |
||
1107 | return;\ |
||
1108 | };"); |
||
1109 | break; |
||
1110 | /* arc/arcs 42,43 */ |
||
1111 | case 42 ... 43: |
||
1112 | fprintf(js_include_file,"\ |
||
1113 | function redraw_userdraw(){draw_arcs();};\ |
||
1114 | var temp_point_x = new Array(3);\ |
||
1115 | var temp_point_y = new Array(3);\ |
||
1116 | context_userdraw.fillStyle = context_userdraw.strokeStyle;\ |
||
1117 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<3;p++){userdraw_x.pop();userdraw_y.pop();userdraw_radius.pop();temp_point_x = [];temp_point_y = [];};draw_arcs();};return;};\ |
||
1118 | function arcs(x,y,event_which,num){\ |
||
1119 | var last = userdraw_x.length - 1;\ |
||
1120 | var xc = userdraw_x[last];\ |
||
1121 | var yc = userdraw_y[last];\ |
||
1122 | if(event_which == 0){\ |
||
1123 | if(num == 0 && xy_cnt == 3 ){xy_cnt = 0;userdraw_x = [];userdraw_y = [];};\ |
||
1124 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1125 | temp_point_x.push(x);\ |
||
1126 | temp_point_y.push(y);\ |
||
1127 | draw_points();\ |
||
1128 | xy_cnt++;\ |
||
1129 | };\ |
||
1130 | if( xy_cnt%%3 == 0 ){ draw_arcs();temp_point_x = [];temp_point_y = [];};\ |
||
1131 | return;\ |
||
1132 | };\ |
||
1133 | function draw_points(){\ |
||
1134 | var len = temp_point_x.length;\ |
||
1135 | var radius = 4*(context_userdraw.lineWidth);\ |
||
1136 | var r = 2*Math.PI;\ |
||
1137 | for(var p = 0 ; p < len ; p++ ){\ |
||
1138 | context_userdraw.beginPath();\ |
||
1139 | context_userdraw.arc(temp_point_x[p],temp_point_y[p],radius,0,r,false);\ |
||
1140 | context_userdraw.closePath();\ |
||
1141 | context_userdraw.fill();\ |
||
1142 | };\ |
||
1143 | return;\ |
||
1144 | };\ |
||
1145 | function draw_arcs(){\ |
||
1146 | var xc,x1,x2,yc,y1,y2,radius,end,start,direction,p1,p2;\ |
||
1147 | var len = userdraw_x.length;\ |
||
1148 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
1149 | var idx = 0;\ |
||
1150 | for(var p=0; p< len;p = p+3){\ |
||
1151 | p1=p+1;p2=p+2;\ |
||
1152 | xc = userdraw_x[p1];x1 = userdraw_x[p];x2 = userdraw_x[p2];yc = userdraw_y[p1];y1 = userdraw_y[p];y2 = userdraw_y[p2];\ |
||
1153 | radius = distance(x1,y1,xc,yc);\ |
||
1154 | start = Math.atan2(y1-yc, x1-xc);\ |
||
1155 | end = Math.atan2(y2-yc, x2-xc);\ |
||
1156 | direction = ( start > end);\ |
||
1157 | userdraw_radius[idx] = Math.abs( end - start );idx++;\ |
||
1158 | context_userdraw.beginPath();\ |
||
1159 | context_userdraw.moveTo(xc,yc);\ |
||
1160 | context_userdraw.arc(xc, yc,radius,start,end,direction);\ |
||
1161 | context_userdraw.closePath();\ |
||
1162 | context_userdraw.stroke();\ |
||
1163 | if(use_filled!=0){context_userdraw.fill();};\ |
||
1164 | };\ |
||
1165 | return;\ |
||
1166 | };"); |
||
15126 | bpr | 1167 | break; |
15111 | schaersvoo | 1168 | /* text : 44 always uses user input field !! */ |
15126 | bpr | 1169 | case 44: |
15111 | schaersvoo | 1170 | fprintf(js_include_file,"\ |
1171 | function redraw_userdraw(){draw_text();};\ |
||
1172 | var userdraw_text = new Array();\ |
||
1173 | var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\ |
||
1174 | var inner_html = tooltip_div.innerHTML;\ |
||
1175 | tooltip_div.innerHTML = inner_html + \"<input class='%s' type='text' size='4' value='' id='userdraw_text_abc' />\";\ |
||
1176 | context_userdraw.fillStyle = \"rgba(%s,%f)\";\ |
||
1177 | var userdraw_textheight = 0.3 * (context_userdraw.measureText('M').width);\ |
||
1178 | function remove_last(){if(userdraw_x.length > 0 ){userdraw_x.pop();userdraw_y.pop();userdraw_text.pop();draw_text();return;};};\ |
||
1179 | function text(x,y,event_which,num){\ |
||
1180 | if(event_which == 1){ return; };\ |
||
1181 | if( num == 0 ){\ |
||
1182 | userdraw_x[0] = x;\ |
||
1183 | userdraw_y[0] = y;\ |
||
1184 | }else{\ |
||
1185 | userdraw_x.push(x);\ |
||
1186 | userdraw_y.push(y);\ |
||
1187 | };\ |
||
1188 | var txt = document.getElementById('userdraw_text_abc').value;\ |
||
1189 | if( ! txt ){userdraw_x.pop();userdraw_y.pop();userdraw_text.pop();return;};\ |
||
1190 | txt = conv_to_unicode(txt);userdraw_text.push(txt.replace(/\\\\/g,' '));\ |
||
1191 | draw_text();\ |
||
1192 | };\ |
||
1193 | function conv_to_unicode(str){return str.replace(/\\u[\\dA-F]{4}/gi,function(match){return String.fromCharCode(parseInt(match.replace(/\\u/g,''), 16));});};\ |
||
1194 | function draw_text(){\ |
||
1195 | var len = userdraw_x.length;\ |
||
1196 | var half = 0;\ |
||
16722 | schaersvoo | 1197 | var txt;\ |
15111 | schaersvoo | 1198 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
1199 | for(var p = 0 ; p < len ; p++ ){\ |
||
16722 | schaersvoo | 1200 | txt = userdraw_text[p];\ |
1201 | if(txt.indexOf('_') > 0 || txt.indexOf('^') > 0 ){draw_subsup(context_userdraw,userdraw_x[p],userdraw_y[p],txt,4);}else{half = 0.5*( context_userdraw.measureText(txt).width );context_userdraw.fillText(txt,userdraw_x[p] - half,userdraw_y[p] + userdraw_textheight);};\ |
||
15111 | schaersvoo | 1202 | };\ |
1203 | };",canvas_root_id,css_class,stroke_color,stroke_opacity); |
||
1204 | break; |
||
1205 | /* images 45,46 replyformat is same as 'userdraw text,color' e.g. 17 === x,y,image_id */ |
||
1206 | case 45 ... 46: |
||
1207 | fprintf(js_include_file,"\ |
||
1208 | function redraw_userdraw(){draw_images(0);};\ |
||
1209 | var userdraw_text = new Array();\ |
||
1210 | var current_id = null;var external_div_cnt=0;\ |
||
1211 | function remove_last(){draw_images(1);return;};\ |
||
1212 | function image_adjust(image,x,y){\ |
||
1213 | var centered = %d;\ |
||
1214 | var w = parseInt(image.width);var h = parseInt(image.height);\ |
||
1215 | switch(centered){\ |
||
1216 | case 0: return [x,y];break;\ |
||
1217 | case 1: return [x,parseInt(y-0.5*h)];break;\ |
||
1218 | case 2: return [parseInt(x+0.5*h),y];break;\ |
||
1219 | case 3: return [parseInt(x+0.5*h),parseInt(y-0.5*h)];break;\ |
||
1220 | case 4: return [parseInt(x-0.5*w),parseInt(y-0.5*h)];break;\ |
||
1221 | default: return [x,y];break;\ |
||
1222 | };\ |
||
1223 | };\ |
||
1224 | place_image_on_canvas = function(id){\ |
||
1225 | var thing = document.getElementById(id);\ |
||
1226 | var tag = thing.tagName;\ |
||
1227 | if(tag == 'SVG'){draw_mathml_svg(thing,id);return;};\ |
||
1228 | if(tag == 'DIV' || tag == 'SPAN' || tag == 'P' || tag == 'TD' || tag == 'TH' ){draw_mathml_div(thing,id);return;};\ |
||
1229 | var src = thing.src;\ |
||
1230 | var image = new Image();\ |
||
1231 | image.src = src;\ |
||
1232 | image.id = 'placed_'+id;\ |
||
1233 | image.width = thing.width;\ |
||
1234 | image.height = thing.height;\ |
||
1235 | image.onload = function(){ current_id = id; };\ |
||
1236 | return;\ |
||
1237 | };\ |
||
1238 | function draw_mathml_div(thing,id){\ |
||
1239 | var fix_div = document.createElement('DIV');\ |
||
1240 | var new_id='placed_'+external_div_cnt+'_'+id;\ |
||
1241 | fix_div.setAttribute('id',new_id);\ |
||
1242 | var w = parseInt(thing.clientWidth);\ |
||
1243 | var h = parseInt(thing.clientHeight);\ |
||
1244 | fix_div.innerHTML = thing.innerHTML;\ |
||
1245 | fix_div.setAttribute('style','display:none;position;absolute;width:'+w+'px;height:'+h+'px');\ |
||
1246 | fix_div.width = w;fix_div.height = h;\ |
||
1247 | canvas_div.appendChild(fix_div);\ |
||
1248 | current_id = new_id;\ |
||
1249 | external_div_cnt++;\ |
||
1250 | return;\ |
||
1251 | };\ |
||
1252 | function draw_mathml_svg(thing,id){\ |
||
1253 | var fix_div = document.createElement('DIV');\ |
||
1254 | fix_div.setAttribute('style','display:none;position;relative');\ |
||
1255 | canvas_div.appendChild(fix_div);\ |
||
1256 | var image = new Image();\ |
||
1257 | var svg_string = new XMLSerializer().serializeToString(thing);\ |
||
1258 | var dom = self.URL || self.webkitURL || self;\ |
||
1259 | var svg = new Blob([svg_string], {type: \"image/svg+xml;charset=utf-8\"});\ |
||
1260 | var url = dom.createObjectURL(svg);\ |
||
1261 | image.src= url;\ |
||
1262 | image.id = 'placed_'+id;\ |
||
1263 | image.onload = function(){\ |
||
1264 | current_id = image.id;\ |
||
1265 | fix_div.innerHTML='<img src='+image.src+' id='+image.id+' alt=\"this should not happen today...!\"/>';\ |
||
1266 | };\ |
||
1267 | return;\ |
||
1268 | };\ |
||
1269 | function images(x,y,event_which,num){\ |
||
1270 | if(event_which == 1){ return;};\ |
||
1271 | if( current_id ){\ |
||
1272 | if(num == 0 ){ \ |
||
1273 | userdraw_x[0] = x;\ |
||
1274 | userdraw_y[0] = y;\ |
||
1275 | userdraw_text[0] = current_id;\ |
||
1276 | external_div_cnt = 0;\ |
||
1277 | }else{\ |
||
1278 | userdraw_x.push(x);\ |
||
1279 | userdraw_y.push(y);\ |
||
1280 | userdraw_text.push(current_id);\ |
||
1281 | };\ |
||
1282 | current_id = null;\ |
||
1283 | draw_images(0);\ |
||
1284 | };\ |
||
1285 | };\ |
||
1286 | function draw_images(remove){\ |
||
1287 | var last = userdraw_x.length - 1;\ |
||
1288 | if(last < 0 ){return;};\ |
||
1289 | var x = userdraw_x[last];\ |
||
1290 | var y = userdraw_y[last];\ |
||
1291 | var id = userdraw_text[last];\ |
||
1292 | var img = document.getElementById(id);\ |
||
1293 | var tag = img.tagName;\ |
||
1294 | var xy = image_adjust(img,x,y);\ |
||
1295 | if( tag == 'DIV' || tag == 'SPAN' || tag == 'P' || tag == 'TD' || tag == 'TH'){\ |
||
1296 | if( remove == 1 ){\ |
||
1297 | img.setAttribute('style','display:none');\ |
||
1298 | userdraw_x.pop();userdraw_y.pop();userdraw_text.pop();external_div_cnt--;\ |
||
1299 | }\ |
||
1300 | else\ |
||
1301 | {\ |
||
1302 | img.setAttribute('style','display:inline-block;position:absolute;top:'+xy[1]+'px;left:'+xy[0]+'px;');\ |
||
1303 | };\ |
||
1304 | return;\ |
||
1305 | }else{\ |
||
1306 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
1307 | if(remove == 1){\ |
||
1308 | userdraw_x.pop();userdraw_y.pop();userdraw_text.pop();\ |
||
1309 | };\ |
||
1310 | var len = userdraw_x.length;\ |
||
1311 | for(var p = 0 ; p < len; p++){\ |
||
1312 | if( userdraw_text[p] ){\ |
||
1313 | img = document.getElementById(userdraw_text[p]);\ |
||
1314 | tag = img.tagName;\ |
||
1315 | xy = image_adjust(img,userdraw_x[p],userdraw_y[p]);\ |
||
1316 | if( tag == 'IMG' || tag == 'SVG' ){\ |
||
1317 | context_userdraw.drawImage(img,xy[0],xy[1],img.width,img.height);\ |
||
1318 | };\ |
||
1319 | };\ |
||
1320 | };\ |
||
1321 | };\ |
||
1322 | };",use_offset); |
||
1323 | break; |
||
1324 | /* input/inputs" 46,47 |
||
1325 | if(use_offset != 0 ){ center_input('canvas_input'+input_cnt,x,y,style);};\ |
||
1326 | inp.addEventListener(\"touchstart\", function(e){this.focus();},false);\ |
||
1327 | if( wims_status == \"done\" ){ inp.setAttribute(\"readonly\",\"readonly\");}; |
||
1328 | */ |
||
1329 | case 47 ... 48: |
||
15126 | bpr | 1330 | /* |
15111 | schaersvoo | 1331 | input_cnt keeps track of all inputfields INCLUDING static inputfields |
1332 | xy_cnt keeps track of the dynamically added userdraw inputfields |
||
1333 | */ |
||
1334 | fprintf(js_include_file,"\ |
||
1335 | var current_id = null;\ |
||
1336 | var current_obj = null;\ |
||
1337 | var inputs_width = 16;\ |
||
1338 | var inputs_height = 8;\ |
||
1339 | function redraw_userdraw(){console.log('userdraw inputs not zooming...');};\ |
||
1340 | if(typeof(input_cnt) !== 'undefined'){var input_cnt = 0;};\ |
||
1341 | function remove_last(){console.log('input_cnt ='+input_cnt);\ |
||
1342 | var input = document.getElementById('canvas_input'+input_cnt);try{ canvas_div.removeChild(input);userdraw_x.pop();userdraw_y.pop();xy_cnt--;input_cnt--;}catch(e){console.log('removal failed...'+e);};};\ |
||
1343 | function check_overlap(x,y,obj){\ |
||
1344 | var inputs;var xi,yi;\ |
||
1345 | for(var p = 0 ; p < xy_cnt ; p++ ){\ |
||
1346 | xi = userdraw_x[p];yi = userdraw_y[p];\ |
||
1347 | if( x > xi - 5 && x < xi + inputs_width && y > yi-5 && y < yi + inputs_height){\ |
||
1348 | try{canvas_div.removeChild(obj);\ |
||
1349 | current_obj = null;userdraw_x.pop();userdraw_y.pop();xy_cnt--;input_cnt--;\ |
||
1350 | }catch(e){console.log('failed removing overlap: '+e);};\ |
||
1351 | return;\ |
||
1352 | };\ |
||
1353 | };\ |
||
1354 | return;\ |
||
1355 | };\ |
||
1356 | function inputs(x,y,event_which,num){\ |
||
1357 | if( document.getElementById('canvas_input0')){\ |
||
1358 | var inputs = document.getElementById('canvas_input0');\ |
||
1359 | inputs_width = 5+parseInt(inputs.clientWidth);\ |
||
1360 | inputs_height = 5+ parseInt(inputs.clientHeight);\ |
||
1361 | };\ |
||
1362 | if(event_which == 0){\ |
||
1363 | if(num == 0 && xy_cnt == 1 ){try{ canvas_div.removeChild(document.getElementById('canvas_input0'));\ |
||
1364 | userdraw_x = [];userdraw_y = [];xy_cnt=0;}catch(e){console.log('removal first input failed...'+e);};};\ |
||
1365 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1366 | current_id = 'canvas_input'+input_cnt;\ |
||
1367 | current_obj = document.getElementById(current_id);\ |
||
1368 | draw_inputs(x,y);\ |
||
1369 | if(input_cnt > 0){check_overlap(x,y,current_obj);};\ |
||
1370 | input_cnt++;\ |
||
1371 | xy_cnt++;\ |
||
1372 | if(isTouch){current_obj.addEventListener(\"touchstart\", function(e){this.focus();},false);}else{\ |
||
1373 | current_obj.autofocus = true;};\ |
||
1374 | };\ |
||
1375 | return;\ |
||
1376 | };\ |
||
1377 | function draw_inputs(x,y){\ |
||
1378 | var input_size = parseInt(context_userdraw.lineWidth);\ |
||
1379 | current_obj = document.createElement(\"input\");\ |
||
1380 | current_obj.setAttribute(\"id\",current_id);\ |
||
1381 | current_obj.setAttribute(\"size\",input_size);\ |
||
1382 | var xx = x - 0.5*inputs_width;\ |
||
1383 | var yy = y - 0.5*inputs_height;\ |
||
1384 | current_obj.setAttribute(\"style\",\"position:absolute;left:\"+xx+\"px;top:\"+yy+\"px;\");\ |
||
1385 | canvas_div.appendChild(current_obj);\ |
||
1386 | return;\ |
||
1387 | };"); |
||
1388 | break; |
||
1389 | // current_obj.setAttribute(\"class\",\"%s\"); |
||
1390 | |||
1391 | // input.setAttribute(\"style\",\"position:absolute;left:\"+userdraw_x[p]+\"px;top:\"+userdraw_y[p]+\"px;%s\"); |
||
15126 | bpr | 1392 | /* gridfill/diamondfill/dotfill/hatchfill/textfill 48,49,50,51,52 |
1393 | 0:no fill, 1:fill,2=grid?,3=hatch?,4=diamond?,5=dot?,6=image? |
||
15111 | schaersvoo | 1394 | if( draw_num == 50 ){js_function[DRAW_GRIDFILL] = 1;use_filled = 2;} |
1395 | else{ |
||
1396 | if( draw_num == 51 ){js_function[DRAW_DIAMONDFILL] = 1;use_filled = 4;} |
||
1397 | else{ |
||
1398 | if( draw_num == 52 ){js_function[DRAW_DOTFILL] = 1;use_filled = 5;} |
||
1399 | else{ |
||
1400 | if( draw_num == 53 ){js_function[DRAW_HATCHFILL] = 1;use_filled = 3;} |
||
1401 | else{ |
||
1402 | if( draw_num == 54 ){js_function[DRAW_TEXTFILL] = 1;use_filled = 7;} |
||
1403 | else{ use_filled = 1;}}}}} |
||
1404 | |||
1405 | |||
15126 | bpr | 1406 | |
15111 | schaersvoo | 1407 | */ |
1408 | case 49 ... 54: |
||
1409 | /* handling rare case of clickfill using a pattern in stead of a single color...*/ |
||
1410 | add_js_filltoborder(canvas_type); |
||
17351 | bpr | 1411 | /*fprintf(stdout,"USE_FILLED = %d<br>",use_filled);*/ |
15111 | schaersvoo | 1412 | switch(use_filled){ |
1413 | case 1: |
||
1414 | p = 1 + snprintf(NULL,0,"var use_pattern_ctx = false;"); |
||
1415 | check_string_length(p); |
||
1416 | tmp_buffer = my_newmem(p); |
||
1417 | snprintf(tmp_buffer,p, "var use_pattern_ctx = false;"); |
||
1418 | break; |
||
1419 | case 2: |
||
1420 | p = 1 + snprintf(NULL,0,"draw_gridfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = grid_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1421 | check_string_length(p); |
||
1422 | tmp_buffer = my_newmem(p); |
||
1423 | snprintf(tmp_buffer,p, "draw_gridfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = grid_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1424 | break; |
||
1425 | case 3: |
||
1426 | p = 1 + snprintf(NULL,0,"draw_hatchfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = hatch_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1427 | check_string_length(p); |
||
1428 | tmp_buffer = my_newmem(p); |
||
1429 | snprintf(tmp_buffer,p,"draw_hatchfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = hatch_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1430 | break; |
||
1431 | case 4: |
||
1432 | p = 1 + snprintf(NULL,0,"draw_diamondfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = diamond_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1433 | check_string_length(p); |
||
1434 | tmp_buffer = my_newmem(p); |
||
1435 | snprintf(tmp_buffer,p,"draw_diamondfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = diamond_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1436 | break; |
||
1437 | case 5: |
||
1438 | p = 1 + snprintf(NULL,0,"draw_dotfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = dot_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1439 | check_string_length(p); |
||
1440 | tmp_buffer = my_newmem(p); |
||
1441 | snprintf(tmp_buffer,p,"draw_dotfill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = dot_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1442 | break; |
||
1443 | case 6: |
||
1444 | p = 1 + snprintf(NULL,0,"draw_imagefill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = image_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1445 | check_string_length(p); |
||
1446 | tmp_buffer = my_newmem(p); |
||
1447 | snprintf(tmp_buffer,p,"draw_imagefill(%d,0,0,%d,%d,%d,'%s',%d,xsize,ysize,1);var use_pattern_ctx = true;var pattern_ctx = image_fill_pattern;",CLICKFILL_CANVAS,5*line_width,5*line_width,line_width,fill_color,(int) (fill_opacity/0.0039215)); |
||
1448 | break; |
||
1449 | case 7: |
||
1450 | /*var draw_textfill = function(canvas_type,x0,y0,color,fontfamily,xsize,ysize,txt,use_userdraw)*/ |
||
1451 | p = 1 + snprintf(NULL,0,"draw_textfill(%d,0,0,'%s','%s',xsize,ysize,userdraw_text_string,1);var use_pattern_ctx = true;var pattern_ctx = text_fill_pattern;",CLICKFILL_CANVAS,stroke_color,font_family); |
||
1452 | check_string_length(p); |
||
1453 | tmp_buffer = my_newmem(p); |
||
1454 | snprintf(tmp_buffer,p,"draw_textfill(%d,0,0,'%s','%s',xsize,ysize,userdraw_text_string,1);var use_pattern_ctx = true;var pattern_ctx = text_fill_pattern;",CLICKFILL_CANVAS,stroke_color,font_family); |
||
1455 | break; |
||
1456 | } |
||
1457 | add_to_buffer(tmp_buffer); |
||
1458 | |||
1459 | fprintf(js_include_file,"function redraw_userdraw(){console.log('userdraw fill not zooming...');return;};\ |
||
1460 | function remove_last(){var last = fill_canvas_no;\ |
||
1461 | console.log('last = '+last);\ |
||
1462 | if(last > %d){\ |
||
1463 | var last_canvas = document.getElementById('wims_canvas%d'+last);\ |
||
1464 | if( last_canvas == null ){fill_canvas_no--;return;};\ |
||
1465 | var last_ctx = last_canvas.getContext('2d');\ |
||
1466 | last_ctx.clearRect(0,0,xsize,ysize);\ |
||
1467 | canvas_div.removeChild(last_canvas);\ |
||
1468 | userdraw_x.pop();userdraw_y.pop();\ |
||
1469 | fill_canvas_no--;\ |
||
1470 | };return;};\ |
||
1471 | if( typeof(fill_canvas_no) === 'undefined' ){ var fill_canvas_no = %d; };\ |
||
1472 | function clickfill(x,y,event_which,num){\ |
||
1473 | var color = [%s,255];\ |
||
1474 | if( typeof(multifillcolors) === 'object'){\ |
||
1475 | var numx = userdraw_x.length;\ |
||
1476 | var numc = multifillcolors.length-1;var num = numx%%numc;\ |
||
1477 | if( ! multifillcolors[num] ){alert('first select a colour...');return;};\ |
||
1478 | var tc = (multifillcolors[num]).split(',');\ |
||
1479 | color = [ tc[0],tc[1],tc[2],255 ];\ |
||
1480 | if( typeof( palettecolors ) === 'object'){\ |
||
1481 | var idx = palettecolors.indexOf( multifillcolors[num]);\ |
||
1482 | userdraw_radius.push(idx);\ |
||
1483 | }else{ userdraw_radius.push(num);};\ |
||
1484 | }\ |
||
1485 | else\ |
||
1486 | {\ |
||
1487 | userdraw_radius.push(0);\ |
||
1488 | };\ |
||
1489 | document.body.style.cursor = 'wait';\ |
||
1490 | if( use_pattern_ctx ){\ |
||
1491 | setTimeout(function(){ filltoborder( px2x(x),px2y(y),color,color,fill_canvas_no,true,pattern_ctx);},500);\ |
||
1492 | }\ |
||
1493 | else\ |
||
1494 | {\ |
||
1495 | setTimeout(function(){ filltoborder(px2x(x),px2y(y),color,color,fill_canvas_no,false,null);},500);\ |
||
1496 | };\ |
||
1497 | userdraw_x.push(x);\ |
||
1498 | userdraw_y.push(y);\ |
||
1499 | fill_canvas_no++;\ |
||
1500 | document.body.style.cursor = 'default';\ |
||
1501 | return;\ |
||
1502 | };",CLICKFILL_CANVAS,canvas_root_id,CLICKFILL_CANVAS,stroke_color); |
||
1503 | /*(int) (stroke_opacity/0.0039215),(int) (stroke_opacity/0.0039215) */ |
||
1504 | break; |
||
1505 | /* parallelogram/parallelograms */ |
||
15126 | bpr | 1506 | case 55 ... 56: |
15111 | schaersvoo | 1507 | fprintf(js_include_file,"\ |
1508 | function redraw_userdraw(){draw_parallelograms();};\ |
||
1509 | function remove_last(){if( userdraw_x.length > 0 ){for(var p=0;p<4;p++){userdraw_x.pop();userdraw_y.pop();};draw_parallelograms();};return;};\ |
||
1510 | function parallelograms(x,y,event_which,num){\ |
||
1511 | var l2 = userdraw_x.length;\ |
||
1512 | var l1 = l2 - 1;var l0 = l2 - 2;\ |
||
1513 | var xxyy;\ |
||
1514 | if(event_which == 0){\ |
||
1515 | if(xy_cnt == 0){\ |
||
1516 | if(num == 0){userdraw_x = [];userdraw_y = [];};\ |
||
1517 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1518 | }\ |
||
1519 | else\ |
||
1520 | {\ |
||
1521 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1522 | if(xy_cnt == 2){\ |
||
1523 | var xy = multisnap_check(userdraw_x[l2] - userdraw_x[l1] + userdraw_x[l0],userdraw_y[l2] - userdraw_y[l1] + userdraw_y[l0],use_snap);\ |
||
1524 | userdraw_x.push(xy[0]);\ |
||
1525 | userdraw_y.push(xy[1]);\ |
||
1526 | };\ |
||
1527 | };\ |
||
1528 | xy_cnt++;\ |
||
1529 | }\ |
||
1530 | else\ |
||
1531 | {\ |
||
1532 | if(xy_cnt == 1){\ |
||
1533 | var xxyy = multisnap_check(userdraw_x[l1],userdraw_y[l1],use_snap);\ |
||
1534 | userdraw_x.push(xxyy[0]);\ |
||
1535 | userdraw_y.push(xxyy[1]);\ |
||
1536 | userdraw_x.push(x);\ |
||
1537 | userdraw_y.push(y);\ |
||
1538 | draw_parallelograms();\ |
||
1539 | userdraw_x.pop();userdraw_y.pop();\ |
||
1540 | userdraw_x.pop();userdraw_y.pop();\ |
||
1541 | }\ |
||
1542 | else\ |
||
1543 | {\ |
||
1544 | if(xy_cnt == 2){\ |
||
1545 | xxyy = multisnap_check(userdraw_x[l2]-userdraw_x[l1] + userdraw_x[l0],userdraw_y[l2]-userdraw_y[l1] + userdraw_y[l0],use_snap);\ |
||
1546 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1547 | userdraw_x.push(xxyy[0]);\ |
||
1548 | userdraw_y.push(xxyy[1]);\ |
||
1549 | draw_parallelograms();\ |
||
1550 | userdraw_x.pop();userdraw_y.pop();\ |
||
1551 | userdraw_x.pop();userdraw_y.pop();\ |
||
1552 | };\ |
||
1553 | };\ |
||
1554 | };\ |
||
1555 | if( xy_cnt == 3 ){\ |
||
1556 | userdraw_x.pop();userdraw_y.pop();\ |
||
1557 | xxyy = multisnap_check(userdraw_x[l2]-userdraw_x[l1] + userdraw_x[l0],userdraw_y[l2]-userdraw_y[l1] + userdraw_y[l0],use_snap);\ |
||
1558 | userdraw_x.push(xxyy[0]);userdraw_y.push(xxyy[1]);\ |
||
1559 | userdraw_x.push(x);userdraw_y.push(y);\ |
||
1560 | userdraw_x.pop();userdraw_y.pop();\ |
||
1561 | xy_cnt = 0;\ |
||
1562 | draw_parallelograms();\ |
||
1563 | };\ |
||
1564 | };\ |
||
1565 | function draw_parallelograms(){\ |
||
1566 | var len = userdraw_x.length-1;\ |
||
1567 | context_userdraw.clearRect(0,0,xsize,ysize);\ |
||
1568 | for(var p = 0 ; p < len ; p = p+4){\ |
||
1569 | context_userdraw.beginPath();\ |
||
1570 | context_userdraw.moveTo(userdraw_x[p],userdraw_y[p]);\ |
||
1571 | for( var m = p+1 ;m < p+4 ; m++){\ |
||
1572 | context_userdraw.lineTo(userdraw_x[m],userdraw_y[m]);\ |
||
1573 | };\ |
||
1574 | context_userdraw.lineTo(userdraw_x[p],userdraw_y[p]);\ |
||
1575 | context_userdraw.closePath();\ |
||
1576 | if(use_filled!=0){context_userdraw.fill();};\ |
||
1577 | context_userdraw.stroke();\ |
||
1578 | };\ |
||
1579 | return;};"); |
||
1580 | break; |
||
15126 | bpr | 1581 | |
15111 | schaersvoo | 1582 | case 57 ... 58: |
1583 | if( js_function[DRAW_JSFUNCTION] != 1 ){ |
||
1584 | js_function[JS_RAWMATH] = 1;js_function[DRAW_JSFUNCTION] = 1; |
||
1585 | js_function[JS_MATH] = 1;js_function[JS_PLOT] = 1; |
||
1586 | if(reply_format == 0 || reply_format != -1){reply_format = 24;}/* read canvas_input values */ |
||
1587 | if(polynum == -1 ){polynum = 1; } /* functions5 --> polynum = 5 */ |
||
15126 | bpr | 1588 | for(n=0;n<polynum;n++){ |
15111 | schaersvoo | 1589 | add_input_jsfunction(css_class,function_label,input_cnt,stroke_color,stroke_opacity, |
1590 | line_width,use_dashed,dashtype[0],dashtype[1],font_size); |
||
1591 | input_cnt++; |
||
1592 | jsplot_cnt++; |
||
1593 | } |
||
1594 | } |
||
1595 | fprintf(js_include_file,"if(typeof(all_jsplots) !== 'number'){var all_jsplots;};all_jsplots = %d;function redraw_userdraw(){redraw_jsplot();return;};",jsplot_cnt); |
||
1596 | |||
1597 | break; |
||
1598 | |||
1599 | default:canvas_error("unknown drawtype?? this should not happen...");break; |
||
1600 | }/* einde switch */ |
||
15126 | bpr | 1601 | |
1602 | |||
15111 | schaersvoo | 1603 | }/* einde add_js_userdraw */ |
1604 | |||
15126 | bpr | 1605 |