Rev 18559 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
15111 | schaersvoo | 1 | #include "canvasdraw.h" |
2 | /* used multidraw primitives : identifier in canvasmultidraw.c is index of this array */ |
||
3 | static char multidraw_primitives[MAX_MULTI_PRIMITIVES][32] = {"point","points","circle","circles", |
||
4 | "line","lines","segment","segments", |
||
5 | "arrow","arrows","triangle","triangles", |
||
6 | "closedpoly","text","rect","rects", |
||
7 | "poly","polys","parallelogram","parallelograms", |
||
8 | "images","curvedarrow","curvedarrows","curvedarrow2","curvedarrows2", |
||
16827 | schaersvoo | 9 | "crosshair","crosshairs","function","functions"}; |
15111 | schaersvoo | 10 | /*size of words "point","points",... == 6,7,..*/ |
16827 | schaersvoo | 11 | static int multidraw_primitives_length[MAX_MULTI_PRIMITIVES] = {6,7,8,7,6,5,9,8,7,6,10,9,11,5,6,5,6,5,15,14,7,14,13,13,12,10,11,9,10}; |
15111 | schaersvoo | 12 | |
13 | void add_js_multidraw(char *draw_types,char *table_css,int use_offset,int no_controls,int crosshair_size,int use_zoom){ |
||
18556 | bpr | 14 | int i=0;int p;int found = 0; |
15 | size_t L0 = 1 + snprintf(NULL,0,"%s",draw_types); |
||
16 | char *str = my_newmem(L0);snprintf(str,L0,"%s",draw_types);char *array[L0]; |
||
17 | int user_nums[MAX_MULTI_PRIMITIVES]; /* we don't know the number of different draw primitives: so assume MAX */ |
||
18 | int draw_nums[MAX_MULTI_PRIMITIVES]; |
||
19 | for(i=0;i<MAX_MULTI_PRIMITIVES;i++){draw_nums[i] = -1;user_nums[i] = -1;} |
||
15111 | schaersvoo | 20 | /* link the user given primitives to the internal indexes of the draw primitives */ |
18556 | bpr | 21 | int equal = -1; i = 0; |
22 | array[i] = strtok(str,","); |
||
23 | int polynum = -1; |
||
24 | char *pp;int safe=0; |
||
25 | while(array[i]!=NULL){ |
||
26 | found = 0; |
||
27 | if( strstr(array[i],"poly") != NULL ){/* getting the numerical argument from: poly3...polys9 */ |
||
28 | if( strstr(array[i],"closedpoly") == NULL && strstr(array[i],"polygon") == NULL){ |
||
29 | pp = array[i]; |
||
30 | while( *pp ){safe++; |
||
31 | if(safe > MAX_MULTI_PRIMITIVES){break;} |
||
32 | if( isdigit(*pp) ){ polynum = atoi(pp);if( strstr( array[i],"polys") != NULL ) {array[i] = "polys";}else{ array[i] = "poly";}break;} else { pp++;} |
||
33 | } |
||
34 | } |
||
35 | } |
||
36 | for( p = 0 ; p < MAX_MULTI_PRIMITIVES; p++){ |
||
15111 | schaersvoo | 37 | /* multidraw_primitives defined in canvasdraw.h */ |
18556 | bpr | 38 | equal = strncmp(multidraw_primitives[p],array[i],multidraw_primitives_length[p]); |
39 | if (equal == 0 ){ |
||
17351 | bpr | 40 | /* fprintf(stdout,"found %s i=%d p=%d<br>",multidraw_primitives[p],i,p);*/ |
18556 | bpr | 41 | draw_nums[p]= p;user_nums[p] = i; |
42 | found=1; break; |
||
43 | } |
||
44 | } |
||
45 | if( found == 0 ){canvas_error("unknown multidraw primitive found...typo?");} |
||
46 | array[++i] = strtok(NULL,","); |
||
47 | } |
||
15111 | schaersvoo | 48 | /* multilabel is js-array */ |
18556 | bpr | 49 | if( no_controls != 1 ){ fprintf(js_include_file,"var inner_html=\"<table class='%s'>\";",table_css); }else{fprintf(js_include_file,"var inner_html = \"\";");} |
15111 | schaersvoo | 50 | |
51 | /* some default stuff */ |
||
18556 | bpr | 52 | fprintf(js_include_file,"\n/* multidraw */\ |
15111 | schaersvoo | 53 | var canvas_userdraw = create_canvas%d(1000,xsize,ysize);var context_userdraw = canvas_userdraw.getContext(\"2d\");\ |
54 | var multidraw_object_cnt = 0;\ |
||
55 | var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\ |
||
56 | function multi_snap_check(x,y,snap){switch(snap){case 1:return [snap_to_x(x),snap_to_y(y)];break;case 2:return [snap_to_x(x),y];break;case 3:return [x,snap_to_y(y)];break;case 4:return snap_to_points(x,y);break;default: return [x,y];break;};};\ |
||
57 | function coord_split(coord){if(coord.indexOf(':') > 0 ){return coord.split(':');}else{if(coord.indexOf(';') > 0 ){return coord.split(';');}else{if(coord.indexOf(',') > 0 ){return coord.split(',');}else{alert(coord+'-- X : Y ');return;};};};};",canvas_root_id,canvas_root_id); |
||
58 | |||
18556 | bpr | 59 | if( use_zoom == 1 ){/* only use zoom when command 'zoom color' is given before command 'multidraw' */ |
60 | fprintf(js_include_file,"forbidden_zone = [%d,%d];\ |
||
15111 | schaersvoo | 61 | function recalculate_multidraw(xmin0,xmax0,ymin0,ymax0){\ |
62 | function scale_xy(type,xy){var tmp_xmin = xmin;var tmp_xmax = xmax;var tmp_ymin = ymin;var tmp_ymax = ymax;xmin=xmin0;xmax=xmax0;ymin=ymin0;ymax=ymax0;if(type == 1 ){for(var p=0;p<xy.length;p++){xy[p] = px2x(xy[p]);};}else{for(var p=0;p<xy.length;p++){xy[p] = px2y(xy[p]);};};xmin = tmp_xmin;ymin = tmp_ymin;xmax = tmp_xmax;ymax = tmp_ymax;if(type == 1){for(var p=0;p<xy.length;p++){xy[p] = x2px(xy[p]);}}else{for(var p=0;p<xy.length;p++){xy[p] = y2px(xy[p]);};};return xy;};\ |
||
63 | function scale_multi_radius(r){for(var p = 0 ; p < r.length;p++ ){r[p] = zoom_xy[0]/xmin*r[p];};return r;};",xsize-115,ysize - 20); |
||
18556 | bpr | 64 | for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){ |
65 | switch( draw_nums[i] ){ |
||
66 | case -1 : break; |
||
67 | case 0 ... 1 :fprintf(js_include_file,"if( points_x && points_x.length > 0 ){points_x = scale_xy(1,points_x);points_y = scale_xy(1,points_y);draw_points();};");break; |
||
68 | case 2 ... 3 :fprintf(js_include_file,"if( circles_x && circles_x.length > 0 ){circles_x = scale_xy(1,circles_x);circles_y = scale_xy(1,circles_y);multi_radius = scale_multi_radius(multi_radius);draw_circles();};");break; |
||
69 | case 4 ... 5 :fprintf(js_include_file,"if( lines_x && lines_x.length > 0 ){lines_x = scale_xy(1,lines_x);lines_y = scale_xy(2,lines_y);draw_lines();};");break; |
||
70 | case 6 ... 7 :fprintf(js_include_file,"if( segments_x && segments_x.length > 0 ){segments_x = scale_xy(1,segments_x);segments_y = scale_xy(1,segments_y);draw_segments();};");break; |
||
71 | case 8 ... 9 :fprintf(js_include_file,"if( arrows_x && arrows_x.length > 0 ){arrows_x = scale_xy(1,arrows_x);arrows_y = scale_xy(2,arrows_y);draw_arrows();};");break; |
||
72 | case 10 ... 11 :fprintf(js_include_file,"if( triangles_x && triangles_x.length > 0 ){triangles_x = scale_xy(1,triangles_x);triangles_y = scale_xy(2,triangles_y);draw_triangles();};");break; |
||
73 | case 14 ... 15 :fprintf(js_include_file,"if( rects_x && rects_x.length > 0 ){rects_x = scale_xy(1,rects_x);rects_y = scale_xy(2,rects_y);draw_rects();};");break; |
||
74 | case 12 :fprintf(js_include_file,"if( closedpoly_x && closedpoly_x.length > 0 ){closedpoly_x = scale_xy(1,closedpoly_x);closedpoly_y = scale_xy(2,closedpoly_y);draw_closedpoly();};");break; |
||
75 | case 13 :fprintf(js_include_file,"if( text_x && text_x.length > 0 ){text_x = scale_xy(1,text_x);text_y = scale_xy(2,text_y);draw_text();};");break; |
||
76 | case 16 ... 17 :fprintf(js_include_file,"if( polys_x && polys_x.length > 0 ){polys_x = scale_xy(1,polys_x);polys_y = scale_xy(2,polys_y);draw_polys();};");break; |
||
77 | case 18 ... 18 :fprintf(js_include_file,"if( parallelogram_x && parallelogram_x.length > 0 ){parallelogram_x = scale_xy(1,parallelogram_x);parallelogram_y = scale_xy(2,parallelogram_y);draw_parallelogram();};");break; |
||
78 | case 20 :fprintf(js_include_file,"if( images_x && images_x.length > 0 ){images_x = scale_xy(1,images_x);images_y = scale_xy(2,images_y);draw_images();};");break; |
||
79 | case 21 ... 22 :fprintf(js_include_file,"if( curvedarrows_x && curvedarrows_x.length > 0 ){curvedarrows_x = scale_xy(1,curvedarrows_x);curvedarrows_y = scale_xy(2,curvedarrows_y);draw_curvedarrows();};");break; |
||
80 | case 23 ... 24 :fprintf(js_include_file,"if( curvedarrows2_x && curvedarrows2_x.length > 0 ){curvedarrows2_x = scale_xy(1,curvedarrows2_x);curvedarrows2_y = scale_xy(2,curvedarrows2_y);draw_curvedarrows2();};");break; |
||
81 | case 25 ... 26 :fprintf(js_include_file,"if( crosshairs_x && crosshairs_x.length > 0 ){crosshairs_x = scale_xy(1,crosshairs_x);crosshairs_y = scale_xy(1,crosshairs_y);draw_crosshairs();};");break; |
||
82 | case 27:break; |
||
83 | default : break; |
||
84 | } |
||
85 | } |
||
86 | fprintf(js_include_file," return;};"); |
||
15111 | schaersvoo | 87 | } |
88 | /* begin user_draw() */ |
||
18556 | bpr | 89 | fprintf(js_include_file,"function user_draw(evt){\ |
15111 | schaersvoo | 90 | if(evt.button == 3){clear_draw_area%d(userdraw_primitive,0);return;};\ |
91 | var mouse = getMouse(evt,canvas_userdraw);\ |
||
92 | var x = mouse.x;var y = mouse.y;\ |
||
15128 | schaersvoo | 93 | user_is_dragging = false;\ |
15111 | schaersvoo | 94 | if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\ |
95 | switch(userdraw_primitive){",canvas_root_id); |
||
18556 | bpr | 96 | for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){ |
97 | switch( draw_nums[i] ){ |
||
98 | case -1: break; |
||
99 | case 0:fprintf(js_include_file,"case 0: points(x,y,0,0);break;");break; |
||
100 | case 1:fprintf(js_include_file,"case 1: points(x,y,0,1);break;");break; |
||
101 | case 2:fprintf(js_include_file,"case 2: circles(x,y,0,0);break;");break; |
||
102 | case 3:fprintf(js_include_file,"case 3: circles(x,y,0,1);break;");break; |
||
103 | case 4:fprintf(js_include_file,"case 4: lines(x,y,0,0);break;");break; |
||
104 | case 5:fprintf(js_include_file,"case 5: lines(x,y,0,1);break;");break; |
||
105 | case 6:fprintf(js_include_file,"case 6: segments(x,y,0,0);break;");break; |
||
106 | case 7:fprintf(js_include_file,"case 7: segments(x,y,0,1);break;");break; |
||
107 | case 8:fprintf(js_include_file,"case 8: arrows(x,y,0,0);break;");break; |
||
108 | case 9:fprintf(js_include_file,"case 9: arrows(x,y,0,1);break;");break; |
||
109 | case 10:fprintf(js_include_file,"case 10: triangles(x,y,0,0);break;");break; |
||
110 | case 11:fprintf(js_include_file,"case 11: triangles(x,y,0,1);break;");break; |
||
111 | case 12:fprintf(js_include_file,"case 12: closedpoly(x,y,0,0);break;");break; |
||
112 | case 13:fprintf(js_include_file,"case 13: text(x,y,0,1);break;");break; |
||
113 | case 14:fprintf(js_include_file,"case 14: rects(x,y,0,0);break;");break; |
||
114 | case 15:fprintf(js_include_file,"case 15: rects(x,y,0,1);break;");break; |
||
115 | case 16:fprintf(js_include_file,"case 16: polys(x,y,0,0);break;");break; |
||
116 | case 17:fprintf(js_include_file,"case 17: polys(x,y,0,1);break;");break; |
||
117 | case 18:fprintf(js_include_file,"case 18: parallelogram(x,y,0,0);break;");break; |
||
118 | case 19:fprintf(js_include_file,"case 19: parallelogram(x,y,0,1);break;");break; |
||
119 | case 20:fprintf(js_include_file,"case 20: images(x,y,0,1);break;");break; |
||
120 | case 21:fprintf(js_include_file,"case 21: curvedarrows(x,y,0,0);break;");break; |
||
121 | case 22:fprintf(js_include_file,"case 22: curvedarrows(x,y,0,1);break;");break; |
||
122 | case 23:fprintf(js_include_file,"case 23: curvedarrows2(x,y,0,0);break;");break; |
||
123 | case 24:fprintf(js_include_file,"case 24: curvedarrows2(x,y,0,1);break;");break; |
||
124 | case 25:fprintf(js_include_file,"case 25: crosshairs(x,y,0,0);break;");break; |
||
125 | case 26:fprintf(js_include_file,"case 26: crosshairs(x,y,0,1);break;");break; |
||
126 | case 27:fprintf(js_include_file,"case 27:break;");break; |
||
127 | default: break; |
||
128 | } |
||
15111 | schaersvoo | 129 | } |
18556 | bpr | 130 | fprintf(js_include_file,"default:break;};return;};"); |
15111 | schaersvoo | 131 | /* end user_draw()*/ |
132 | |||
133 | /* should we use a fillpattern ? */ |
||
134 | |||
135 | /* begin user_drag() */ |
||
18556 | bpr | 136 | fprintf(js_include_file,"function user_drag(evt){\ |
15111 | schaersvoo | 137 | var mouse = getMouse(evt,canvas_userdraw);\ |
138 | var x = mouse.x;var y = mouse.y;\ |
||
15128 | schaersvoo | 139 | user_is_dragging = true;\ |
15111 | schaersvoo | 140 | if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\ |
141 | switch(userdraw_primitive){"); |
||
18556 | bpr | 142 | for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){ |
143 | switch( draw_nums[i] ){ |
||
144 | case -1: break; |
||
145 | case 0:fprintf(js_include_file,"case 0: break;");break; |
||
146 | case 1:fprintf(js_include_file,"case 1: break;");break; |
||
147 | case 2:fprintf(js_include_file,"case 2: circles(x,y,1,0);break;");break; |
||
148 | case 3:fprintf(js_include_file,"case 3: circles(x,y,1,1);break;");break; |
||
149 | case 4:fprintf(js_include_file,"case 4: lines(x,y,1,0);break;");break; |
||
150 | case 5:fprintf(js_include_file,"case 5: lines(x,y,1,1);break;");break; |
||
151 | case 6:fprintf(js_include_file,"case 6: segments(x,y,1,0);break;");break; |
||
152 | case 7:fprintf(js_include_file,"case 7: segments(x,y,1,1);break;");break; |
||
153 | case 8:fprintf(js_include_file,"case 8: arrows(x,y,1,0);break;");break; |
||
154 | case 9:fprintf(js_include_file,"case 9: arrows(x,y,1,1);break;");break; |
||
155 | case 10:fprintf(js_include_file,"case 10: triangles(x,y,1,0);break;");break; |
||
156 | case 11:fprintf(js_include_file,"case 11: triangles(x,y,1,1);break;");break; |
||
157 | case 12:fprintf(js_include_file,"case 12: closedpoly(x,y,1,0);break;");break; |
||
158 | case 13:fprintf(js_include_file,"case 13: break;");break; |
||
159 | case 14:fprintf(js_include_file,"case 14: rects(x,y,1,0);break;");break; |
||
160 | case 15:fprintf(js_include_file,"case 15: rects(x,y,1,1);break;");break; |
||
161 | case 16:fprintf(js_include_file,"case 16: polys(x,y,1,0);break;");break; |
||
162 | case 17:fprintf(js_include_file,"case 17: polys(x,y,1,1);break;");break; |
||
163 | case 18:fprintf(js_include_file,"case 18: parallelogram(x,y,1,0);break;");break; |
||
164 | case 19:fprintf(js_include_file,"case 19: parallelogram(x,y,1,1);break;");break; |
||
165 | case 20:fprintf(js_include_file,"case 20: images(x,y,1,1);break;");break; |
||
166 | case 21:fprintf(js_include_file,"case 21: curvedarrows(x,y,1,0);break;");break; |
||
167 | case 22:fprintf(js_include_file,"case 22: curvedarrows(x,y,1,1);break;");break; |
||
168 | case 23:fprintf(js_include_file,"case 23: curvedarrows2(x,y,1,0);break;");break; |
||
169 | case 24:fprintf(js_include_file,"case 24: curvedarrows2(x,y,1,1);break;");break; |
||
170 | case 25:fprintf(js_include_file,"case 25: break;");break; |
||
171 | case 26:fprintf(js_include_file,"case 26: break;");break; |
||
172 | case 27:fprintf(js_include_file,"case 27: break;");break; |
||
173 | default:break; |
||
174 | } |
||
15111 | schaersvoo | 175 | } |
18556 | bpr | 176 | fprintf(js_include_file,"default:break; };return;};"); |
15111 | schaersvoo | 177 | /* end user_drag() */ |
15672 | schaersvoo | 178 | /* 17/1/2021 corrected syntax issue signalled by Opera Presto : 'forbidden function user_drawstop(evt) declaration in statement'*/ |
18556 | bpr | 179 | fprintf(js_include_file,"if(wims_status != \"done\"){\ |
15672 | schaersvoo | 180 | canvas_div.addEventListener('mousedown',user_draw,false);\ |
181 | canvas_div.addEventListener('mousemove',user_drag,false);\ |
||
182 | canvas_div.addEventListener('touchstart' , function(e) { e.preventDefault(); user_draw(e.changedTouches[0]);},false);\ |
||
183 | canvas_div.addEventListener('touchmove' , function(e) { e.preventDefault(); user_drag(e.changedTouches[0]);},false);\ |
||
184 | canvas_div.addEventListener('touchend' , function(e) { e.preventDefault(); user_drawstop(e.changedTouches[0]);},false);\ |
||
185 | var user_is_dragging = false;\ |
||
186 | var user_drawstop = function(evt){\ |
||
187 | if(!user_is_dragging){user_drag(evt);return;};\ |
||
188 | if(user_is_dragging){user_draw(evt);return;};\ |
||
189 | };\ |
||
15111 | schaersvoo | 190 | };"); |
191 | |||
18556 | bpr | 192 | /* add all stuff needed to draw the selected primitives... */ |
193 | int u; |
||
194 | for(u=0; u < MAX_MULTI_PRIMITIVES ; u++ ){ |
||
195 | i = user_nums[u]; |
||
15126 | bpr | 196 | /* |
197 | u = index of technical draw primitive |
||
15111 | schaersvoo | 198 | i = index of user defined draw primitive |
199 | */ |
||
18556 | bpr | 200 | switch( draw_nums[u] ){ |
15111 | schaersvoo | 201 | /* point/points */ |
18556 | bpr | 202 | case -1 : break; |
203 | case 0 ... 1: |
||
204 | fprintf(js_include_file,"function points(x,y,event_which,num){\ |
||
15111 | schaersvoo | 205 | if(event_which == 1){ return; };\ |
206 | var xy = multi_snap_check(x,y,points_snap);\ |
||
207 | if( num == 0 ){\ |
||
208 | points_x[0] = xy[0];\ |
||
209 | points_y[0] = xy[1];\ |
||
17571 | obado | 210 | } else {\ |
15111 | schaersvoo | 211 | points_x.push(xy[0]);\ |
212 | points_y.push(xy[1]);\ |
||
213 | };\ |
||
214 | draw_points();\ |
||
215 | };\ |
||
216 | function draw_points(){\ |
||
217 | var radius = 2*(context_points.lineWidth);\ |
||
218 | context_points.clearRect(0,0,xsize,ysize);\ |
||
219 | for(var p = 0 ; p < points_x.length ; p++ ){\ |
||
220 | context_points.beginPath();\ |
||
221 | context_points.arc(points_x[p],points_y[p],radius,0,2*Math.PI,false);\ |
||
222 | context_points.closePath();\ |
||
223 | context_points.fill();\ |
||
224 | };\ |
||
225 | };\ |
||
226 | var canvas_points = create_canvas%d(100%d,xsize,ysize);var context_points = canvas_points.getContext(\"2d\");\ |
||
227 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
228 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
229 | context_points.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
230 | context_points.fillStyle = context_points.strokeStyle;\ |
||
231 | context_points.lineWidth = multilinewidth[%d];if(multilinewidth[%d] %%2 == 1){ context_points.translate(0.5,0.5);};\ |
||
232 | var points_x = new Array();var points_y = new Array();\ |
||
233 | var points_snap = multisnaptogrid[%d];",canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i); |
||
18556 | bpr | 234 | if( no_controls != 1){ |
235 | fprintf(js_include_file,"\ |
||
18572 | bpr | 236 | inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
237 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td>(<input type='text' size='5' value='' id='input_points_x'>:<input type='text' size='5' value='' id='input_points_y'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_points_x,input_points_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 238 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 239 | } else { |
240 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
241 | } |
||
242 | break; |
||
15111 | schaersvoo | 243 | /* circle/circles */ |
18556 | bpr | 244 | case 2 ... 3 : |
245 | fprintf(js_include_file,"function circles(x,y,event_which,num){\ |
||
15111 | schaersvoo | 246 | var xy = multi_snap_check(x,y,circles_snap);\ |
247 | var last = circles_x.length - 1;\ |
||
248 | var xc = circles_x[last];\ |
||
249 | var yc = circles_y[last];\ |
||
250 | if(event_which == 0){\ |
||
251 | if( multidraw_object_cnt == 0 ){\ |
||
252 | if( num == 0 ){\ |
||
253 | circles_x[0]=xy[0];circles_y[0]=xy[1];multi_radius[0]=4;\ |
||
17571 | obado | 254 | } else {\ |
15111 | schaersvoo | 255 | circles_x.push(xy[0]);circles_y.push(xy[1]);multi_radius.push(4);\ |
256 | };\ |
||
257 | };\ |
||
258 | multidraw_object_cnt++;\ |
||
17571 | obado | 259 | } else {\ |
15111 | schaersvoo | 260 | if( multidraw_object_cnt == 1 ){\ |
261 | multi_radius[last] = parseInt(Math.sqrt( (xy[0] - xc)*(xy[0] - xc) + (xy[1] - yc)*(xy[1] - yc) ));\ |
||
262 | };\ |
||
263 | };\ |
||
264 | if( multidraw_object_cnt == 2 ){\ |
||
265 | multidraw_object_cnt = 0;\ |
||
266 | if( num == 0 ){\ |
||
267 | circles_x = [];circles_y = [];\ |
||
268 | circles_x[0] = xc;circles_y[0] = yc;\ |
||
269 | };\ |
||
270 | };\ |
||
271 | draw_circles();\ |
||
272 | };function draw_circles(){\ |
||
273 | context_circles.clearRect(0,0,xsize,ysize);\ |
||
274 | for(var p = 0 ; p < circles_x.length ; p++ ){\ |
||
275 | context_circles.beginPath();\ |
||
276 | context_circles.arc(circles_x[p],circles_y[p],multi_radius[p],0,2*Math.PI,false);\ |
||
277 | context_circles.closePath();\ |
||
278 | context_circles.fill();\ |
||
279 | context_circles.stroke();\ |
||
280 | };\ |
||
281 | return;\ |
||
282 | };var canvas_circles = create_canvas%d(100%d,xsize,ysize);var context_circles = canvas_circles.getContext(\"2d\");\ |
||
283 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
284 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
285 | context_circles.lineWidth = multilinewidth[%d];\ |
||
286 | if(multilinewidth[%d]%%2 == 1){ context_circles.translate(0.5,0.5);};\ |
||
15128 | schaersvoo | 287 | context_circles.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
15111 | schaersvoo | 288 | if(multifill[%d] != 0 ){var my_fill_color=\"rgba(\"+multifillcolors[%d]+\",\"+multifillopacity[%d]+\")\";if( multifill[%d] > 1 ){context_circles.fillStyle = create_Pattern(0,0,parseInt(multifill[%d]),my_fill_color);}else{context_circles.fillStyle = my_fill_color;};}else{context_circles.fillStyle = \"rgba( 255,255,255,0)\";};\ |
289 | if(multidash[%d] == 1 ){ if( context_circles.setLineDash ){context_circles.setLineDash([2,4]);}else{if(context_circles.mozDash){context_circles.mozDash = [2,4]};};};\ |
||
290 | var circles_x = new Array();var circles_y = new Array();var multi_radius = new Array();\ |
||
291 | var circles_snap = multisnaptogrid[%d];",canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 292 | |
18556 | bpr | 293 | if(no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 294 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
295 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td>M:(<input type='text' size='3' value='' id='input_circles_x'> : <input type='text' size='3' value='' id='input_circles_y'>) R:<input type='text' size='3' value='' id='input_circles_r'></td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_circles_x,input_circles_y,input_circles_r);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 296 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 297 | } else { |
298 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
299 | } |
||
300 | break; |
||
15111 | schaersvoo | 301 | /* line/lines */ |
18556 | bpr | 302 | case 4 ... 5 : |
303 | fprintf(js_include_file,"function calc_lines(){\ |
||
15111 | schaersvoo | 304 | var marge = 2;var len = lines_x.length;\ |
15118 | schaersvoo | 305 | var tmp_x = new Array(len);\ |
306 | var tmp_y = new Array(len);\ |
||
15111 | schaersvoo | 307 | var pp;\ |
15118 | schaersvoo | 308 | for(var p = 0 ; p < len ; p = p+2){\ |
15111 | schaersvoo | 309 | pp = p+1;\ |
15118 | schaersvoo | 310 | if(lines_x[p] < lines_x[pp]+marge && lines_x[p] > lines_x[pp]-marge){\ |
311 | tmp_x[p] = lines_x[p];tmp_x[pp] = lines_x[pp];\ |
||
312 | tmp_y[p] = 0;tmp_y[pp] = ysize;\ |
||
17571 | obado | 313 | } else {\ |
15118 | schaersvoo | 314 | if(lines_y[p] < lines_y[pp]+marge && lines_y[p] > lines_y[pp]-marge){\ |
315 | tmp_x[p] = 0;tmp_x[pp] = xsize;\ |
||
316 | tmp_y[p] = lines_y[p];tmp_y[pp] = lines_y[pp];\ |
||
17571 | obado | 317 | } else {\ |
15118 | schaersvoo | 318 | tmp_x[p] = 0;tmp_x[pp] = xsize;\ |
319 | tmp_y[p] = lines_y[p] - (lines_x[p])*(lines_y[pp] - lines_y[p])/(lines_x[pp] - lines_x[p]);\ |
||
320 | tmp_y[pp] = lines_y[p] + (xsize - lines_x[p])*(lines_y[pp] - lines_y[p])/(lines_x[pp] - lines_x[p]);\ |
||
15111 | schaersvoo | 321 | };\ |
322 | };\ |
||
323 | };\ |
||
15118 | schaersvoo | 324 | return {x:tmp_x,y:tmp_y};\ |
15111 | schaersvoo | 325 | };function lines(x,y,event_which,num){\ |
326 | var xy = multi_snap_check(x,y,lines_snap);\ |
||
327 | if(event_which == 0){\ |
||
328 | if( num == 0 && multidraw_object_cnt == 0 ){lines_x = [];lines_y = [];};\ |
||
329 | lines_x.push(xy[0]);lines_y.push(xy[1]);\ |
||
330 | multidraw_object_cnt++;\ |
||
17571 | obado | 331 | } else {\ |
15111 | schaersvoo | 332 | if( multidraw_object_cnt == 1 ){\ |
333 | lines_x.push(xy[0]);lines_y.push(xy[1]);\ |
||
334 | draw_lines();\ |
||
335 | lines_x.pop();lines_y.pop();\ |
||
336 | };\ |
||
337 | };\ |
||
338 | if( multidraw_object_cnt == 2 ){\ |
||
339 | multidraw_object_cnt = 0;\ |
||
340 | draw_lines();\ |
||
341 | };\ |
||
342 | };function draw_lines(){\ |
||
343 | var len = lines_x.length;\ |
||
344 | if( len %%2 == 0 ){\ |
||
15118 | schaersvoo | 345 | var xy = calc_lines();\ |
15111 | schaersvoo | 346 | context_lines.clearRect(0,0,xsize,ysize);\ |
347 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
348 | context_lines.beginPath();\ |
||
15118 | schaersvoo | 349 | context_lines.moveTo(xy.x[p],xy.y[p]);\ |
350 | context_lines.lineTo(xy.x[p+1],xy.y[p+1]);\ |
||
15111 | schaersvoo | 351 | context_lines.closePath();\ |
352 | context_lines.stroke();\ |
||
353 | };\ |
||
354 | };\ |
||
355 | return;\ |
||
356 | };var canvas_lines = create_canvas%d(100%d,xsize,ysize);var context_lines = canvas_lines.getContext(\"2d\");\ |
||
357 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
358 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
359 | context_lines.lineWidth = multilinewidth[%d];if(multilinewidth[%d]%%2 == 1){ context_lines.translate(0.5,0.5);};\ |
||
360 | context_lines.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
361 | if(multidash[%d] == 1 ){ if( context_lines.setLineDash ){context_lines.setLineDash([2,4]);}else{\ |
||
362 | if(context_lines.mozDash){context_lines.mozDash = [2,4]};};};\ |
||
363 | var lines_x = new Array();var lines_y = new Array();var lines_snap = multisnaptogrid[%d];",canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i); |
||
364 | |||
18556 | bpr | 365 | if( no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 366 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
367 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td>(<input type='text' size='5' value='x1 : y1' id='input_lines_x' style='text-align:center;'>) --- ( <input type='text' size='5' value='x2 : y2' id='input_lines_y' style='text-align:center;'> )</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_lines_x,input_lines_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 368 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 369 | } else { |
370 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
371 | } |
||
372 | break; |
||
15111 | schaersvoo | 373 | /* segment/segments */ |
18556 | bpr | 374 | case 6 ... 7 : |
375 | fprintf(js_include_file,"function segments(x,y,event_which,num){\ |
||
15111 | schaersvoo | 376 | var xy = multi_snap_check(x,y,segments_snap);\ |
377 | if(event_which == 0){\ |
||
378 | if( num == 0 && multidraw_object_cnt == 0 ){segments_x = [];segments_y = [];};\ |
||
379 | segments_x.push(xy[0]);segments_y.push(xy[1]);\ |
||
380 | multidraw_object_cnt++;\ |
||
17571 | obado | 381 | } else {\ |
15111 | schaersvoo | 382 | if( multidraw_object_cnt == 1 ){\ |
383 | segments_x.push(xy[0]);segments_y.push(xy[1]);\ |
||
384 | draw_segments();\ |
||
385 | segments_x.pop();segments_y.pop();\ |
||
386 | };\ |
||
387 | };\ |
||
388 | if( multidraw_object_cnt == 2 ){\ |
||
389 | multidraw_object_cnt = 0;\ |
||
390 | draw_segments();\ |
||
391 | };\ |
||
392 | };function draw_segments(){\ |
||
393 | var len = segments_x.length;\ |
||
394 | if( len%%2 == 0 ){\ |
||
395 | context_segments.clearRect(0,0,xsize,ysize);\ |
||
396 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
397 | context_segments.beginPath();\ |
||
398 | context_segments.moveTo(segments_x[p],segments_y[p]);\ |
||
399 | context_segments.lineTo(segments_x[p+1],segments_y[p+1]);\ |
||
400 | context_segments.closePath();\ |
||
401 | context_segments.stroke();\ |
||
402 | };\ |
||
403 | };\ |
||
404 | return;\ |
||
405 | };var canvas_segments = create_canvas%d(100%d,xsize,ysize);var context_segments = canvas_segments.getContext(\"2d\");\ |
||
406 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
407 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
408 | context_segments.lineWidth = multilinewidth[%d];\ |
||
409 | if(multilinewidth[%d]%%2 == 1){ context_segments.translate(0.5,0.5);};\ |
||
410 | context_segments.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
411 | if(multidash[%d] == 1 ){ if( context_segments.setLineDash ){context_segments.setLineDash([2,4]);}\ |
||
412 | else{if(context_segments.mozDash){context_segments.mozDash = [2,4]};};};\ |
||
413 | var segments_x = new Array();var segments_y = new Array();var segments_snap = multisnaptogrid[%d];", |
||
414 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 415 | |
18559 | bpr | 416 | if( no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 417 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
418 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td>(<input type='text' size='5' value='x1 : y1' id='input_segments_x' style='text-align:center;'>) --- ( <input type='text' size='5' value='x2 : y2' id='input_segments_y' style='text-align:center;'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_segments_x,input_segments_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 419 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18559 | bpr | 420 | } else { |
421 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
422 | } |
||
423 | break; |
||
15111 | schaersvoo | 424 | /* arrow/arrows */ |
18556 | bpr | 425 | case 8 ... 9 : |
426 | fprintf(js_include_file,"function arrows(x,y,event_which,num){\ |
||
15111 | schaersvoo | 427 | var xy = multi_snap_check(x,y,arrows_snap);\ |
428 | if(event_which == 0){\ |
||
429 | if( num == 0 && multidraw_object_cnt == 0 ){arrows_x = [];arrows_y = [];};\ |
||
430 | arrows_x.push(xy[0]);arrows_y.push(xy[1]);\ |
||
431 | multidraw_object_cnt++;\ |
||
17571 | obado | 432 | } else {\ |
15111 | schaersvoo | 433 | if( multidraw_object_cnt == 1 ){\ |
434 | arrows_x.push(xy[0]);arrows_y.push(xy[1]);\ |
||
435 | draw_arrows();\ |
||
436 | arrows_x.pop();arrows_y.pop();\ |
||
437 | };\ |
||
438 | };\ |
||
439 | if( multidraw_object_cnt == 2 ){\ |
||
440 | multidraw_object_cnt = 0;\ |
||
441 | draw_arrows();\ |
||
442 | };\ |
||
443 | };function draw_arrows(){\ |
||
444 | var len = arrows_x.length;\ |
||
445 | var x1,y1,x2,y2,dx,dy,h;\ |
||
446 | if( len%%2 == 0 ){\ |
||
447 | context_arrows.clearRect(0,0,xsize,ysize);\ |
||
448 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
449 | x1 = arrows_x[p];y1 = arrows_y[p];x2 = arrows_x[p+1];y2 = arrows_y[p+1];dx = x2 - x1;dy = y2 - y1;\ |
||
450 | h = Math.sqrt(dx*dx+dy*dy);\ |
||
15711 | schaersvoo | 451 | context_arrows.save();\ |
452 | context_arrows.setLineDash([]);\ |
||
15111 | schaersvoo | 453 | context_arrows.translate(x2,y2);\ |
454 | context_arrows.rotate(Math.atan2(dy,dx));\ |
||
455 | context_arrows.beginPath();\ |
||
456 | context_arrows.moveTo(0,0);\ |
||
457 | context_arrows.lineTo(-1*arrow_head,-0.5*arrow_head);\ |
||
458 | context_arrows.lineTo(-1*arrow_head, 0.5*arrow_head);\ |
||
459 | context_arrows.closePath();\ |
||
460 | context_arrows.fill();\ |
||
461 | context_arrows.stroke();\ |
||
462 | context_arrows.restore();\ |
||
15711 | schaersvoo | 463 | context_arrows.beginPath();\ |
464 | context_arrows.moveTo(x1,y1);\ |
||
465 | context_arrows.lineTo(x2,y2);\ |
||
466 | context_arrows.closePath();\ |
||
467 | context_arrows.stroke();\ |
||
15111 | schaersvoo | 468 | };\ |
469 | };\ |
||
470 | return;\ |
||
471 | };var canvas_arrows = create_canvas%d(100%d,xsize,ysize);var context_arrows = canvas_arrows.getContext(\"2d\");\ |
||
472 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
473 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
15711 | schaersvoo | 474 | if(multidash[%d] == 1 ){ if( context_arrows.setLineDash ){context_arrows.setLineDash([2,4]);}else{if(context_arrows.mozDash){context_arrows.mozDash = [2,4]};};};\ |
15111 | schaersvoo | 475 | context_arrows.lineWidth = multilinewidth[%d];if(multilinewidth[%d]%%2 == 1){ context_arrows.translate(0.5,0.5);};\ |
476 | context_arrows.lineCap = \"round\";\ |
||
477 | context_arrows.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
478 | context_arrows.fillStyle = context_arrows.strokeStyle;\ |
||
479 | var arrows_x = new Array();var arrows_y = new Array();var arrows_snap = multisnaptogrid[%d];", |
||
480 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 481 | |
18559 | bpr | 482 | if( no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 483 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
484 | if( multiuserinput[%d] == 1){inner_html+=\"<td>(<input type='text' size='5' value='x1 : y1' id='input_arrows_x' style='text-align:center;'><b>) --- (</b> <input type='text' size='5' value='x2 : y2' id='input_arrows_y' style=';text-align:center;'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_arrows_x,input_arrows_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 485 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18559 | bpr | 486 | } else { |
487 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
488 | } |
||
489 | break; |
||
15111 | schaersvoo | 490 | /* triangle/triangles */ |
18556 | bpr | 491 | case 10 ... 11: |
492 | fprintf(js_include_file,"function triangles(x,y,event_which,num){\ |
||
15111 | schaersvoo | 493 | var xy = multi_snap_check(x,y,triangles_snap);\ |
494 | var last = triangles_x.length - 1;\ |
||
495 | if(event_which == 0){\ |
||
496 | if(num == 0 && multidraw_object_cnt == 0){\ |
||
497 | triangles_x = [];triangles_y = [];\ |
||
498 | triangles_x[0] = xy[0];triangles_y[0] = xy[1];\ |
||
17571 | obado | 499 | } else {\ |
15111 | schaersvoo | 500 | triangles_x.push(xy[0]);triangles_y.push(xy[1]);\ |
501 | };\ |
||
502 | multidraw_object_cnt++;\ |
||
17571 | obado | 503 | } else {\ |
15111 | schaersvoo | 504 | if( multidraw_object_cnt < 3 ){\ |
505 | triangles_x.push(xy[0]);triangles_y.push(xy[1]);\ |
||
506 | draw_triangles();\ |
||
507 | triangles_x.pop();triangles_y.pop();\ |
||
508 | };\ |
||
509 | };\ |
||
510 | if( multidraw_object_cnt == 3 ){\ |
||
511 | triangles_x.pop();triangles_y.pop();\ |
||
512 | triangles_x.push(xy[0]);triangles_y.push(xy[1]);\ |
||
513 | multidraw_object_cnt = 0;\ |
||
514 | draw_triangles();\ |
||
515 | };\ |
||
516 | };function draw_triangles(){\ |
||
517 | var len = triangles_x.length - 1;\ |
||
518 | context_triangles.clearRect(0,0,xsize,ysize);\ |
||
519 | for(var p = 0 ; p < len ; p = p+3){\ |
||
520 | context_triangles.beginPath();\ |
||
521 | context_triangles.moveTo(triangles_x[p],triangles_y[p]);\ |
||
522 | for( var m = p+1 ;m < p+3 ; m++){\ |
||
523 | context_triangles.lineTo(triangles_x[m],triangles_y[m]);\ |
||
524 | };\ |
||
525 | context_triangles.lineTo(triangles_x[p],triangles_y[p]);\ |
||
526 | context_triangles.closePath();\ |
||
527 | context_triangles.fill();\ |
||
528 | context_triangles.stroke();\ |
||
529 | };\ |
||
530 | return;\ |
||
531 | };var canvas_triangles = create_canvas%d(10%d,xsize,ysize);var context_triangles = canvas_triangles.getContext(\"2d\");\ |
||
532 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2);};\ |
||
533 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
534 | context_triangles.lineCap = \"round\";context_triangles.lineWidth = multilinewidth[%d];\ |
||
535 | if(multilinewidth[%d]%%2 == 1){ context_triangles.translate(0.5,0.5);};\ |
||
536 | context_triangles.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
537 | if(multifill[%d] != 0 ){var my_fill_color=\"rgba(\"+multifillcolors[%d]+\",\"+multifillopacity[%d]+\")\";if( multifill[%d] > 1 ){context_triangles.fillStyle = create_Pattern(0,0,parseInt(multifill[%d]),my_fill_color);}else{context_triangles.fillStyle = my_fill_color;};}else{context_triangles.fillStyle = \"rgba( 255,255,255,0)\";};\ |
||
538 | if(multidash[%d] == 1 ){ if( context_triangles.setLineDash ){\ |
||
539 | context_triangles.setLineDash([2,4]);}else{if(context_triangles.mozDash){context_triangles.mozDash = [2,4]};};};\ |
||
540 | var triangles_x = new Array();var triangles_y = new Array();var triangles_snap = multisnaptogrid[%d];", |
||
541 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i); |
||
18556 | bpr | 542 | if(no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 543 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
544 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td><b>(<input type='text' size='5' value='x1 : y1' id='input_triangles_x'>) -- (<input type='text' size='5' value='x2 : y2' id='input_triangles_y'>) -- (<input type='text' size='5' value='x3 : y3' id='input_triangles_r'>)</b></td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_triangles_x,input_triangles_y,input_triangles_r);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 545 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 546 | } else { |
547 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
548 | } |
||
549 | break; |
||
15126 | bpr | 550 | /* closedpoly */ |
18556 | bpr | 551 | case 12 : |
552 | fprintf(js_include_file,"function check_closed(x1,y1,X,Y){\ |
||
15111 | schaersvoo | 553 | var marge=10;\ |
554 | var len = X.length-1;\ |
||
555 | for(var p = 0 ; p < len ; p++){\ |
||
556 | if(x1 < X[p] + marge && x1 > X[p] - marge ){\ |
||
557 | if(y1 < Y[p] + marge && y1 > Y[p] - marge ){\ |
||
558 | return 1;\ |
||
559 | };\ |
||
560 | };\ |
||
561 | };\ |
||
562 | return 0;\ |
||
563 | };function closedpoly(x,y,event_which,num){\ |
||
564 | var xy = multi_snap_check(x,y,closedpoly_snap);\ |
||
565 | if(event_which == 0){\ |
||
566 | if(multidraw_object_cnt == 0){\ |
||
567 | closedpoly_x = [];closedpoly_y = [];\ |
||
568 | closedpoly_x[0] = xy[0];closedpoly_y[0] = xy[1];\ |
||
17571 | obado | 569 | } else {\ |
15111 | schaersvoo | 570 | closedpoly_x.push(xy[0]);closedpoly_y.push(xy[1]);\ |
571 | };\ |
||
572 | multidraw_object_cnt++;\ |
||
573 | if( multidraw_object_cnt > 2 ){\ |
||
574 | if( check_closed(x,y,closedpoly_x,closedpoly_y) == 1){\ |
||
575 | draw_closedpoly();\ |
||
576 | multidraw_object_cnt = 0;\ |
||
577 | };\ |
||
578 | };\ |
||
17571 | obado | 579 | } else {\ |
15111 | schaersvoo | 580 | if( multidraw_object_cnt > 0 ){\ |
581 | closedpoly_x.push(xy[0]);closedpoly_y.push(xy[1]);\ |
||
582 | draw_closedpoly();\ |
||
583 | closedpoly_x.pop();closedpoly_y.pop();\ |
||
584 | };\ |
||
585 | };\ |
||
586 | };function draw_closedpoly(){\ |
||
587 | var len = closedpoly_x.length;\ |
||
588 | context_closedpoly.clearRect(0,0,xsize,ysize);\ |
||
589 | var p = 0;\ |
||
590 | context_closedpoly.beginPath();\ |
||
591 | context_closedpoly.moveTo(closedpoly_x[0],closedpoly_y[0]);\ |
||
592 | for(var p = 1 ; p < len ; p++){\ |
||
593 | context_closedpoly.lineTo(closedpoly_x[p],closedpoly_y[p]);\ |
||
594 | };\ |
||
595 | context_closedpoly.lineTo(closedpoly_x[0],closedpoly_y[0]);\ |
||
596 | context_closedpoly.closePath();\ |
||
597 | context_closedpoly.fill();\ |
||
598 | context_closedpoly.stroke();\ |
||
599 | return;\ |
||
600 | };var canvas_closedpoly = create_canvas%d(10%d,xsize,ysize);\ |
||
601 | var context_closedpoly = canvas_closedpoly.getContext(\"2d\");\ |
||
602 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
603 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
604 | context_closedpoly.lineCap = \"round\";context_closedpoly.lineWidth = multilinewidth[%d];\ |
||
605 | if(multilinewidth[%d]%%2 == 1){ context_closedpoly.translate(0.5,0.5);};context_closedpoly.lineCap = \"round\";\ |
||
606 | context_closedpoly.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
607 | if(multifill[%d] != 0 ){var my_fill_color=\"rgba(\"+multifillcolors[%d]+\",\"+multifillopacity[%d]+\")\";if( multifill[%d] > 1 ){context_closedpoly.fillStyle = create_Pattern(0,0,parseInt(multifill[%d]),my_fill_color);}else{context_closedpoly.fillStyle = my_fill_color;};}else{context_closedpoly.fillStyle = \"rgba( 255,255,255,0)\";};\ |
||
608 | if(multidash[%d] == 1 ){ if( context_closedpoly.setLineDash ){context_closedpoly.setLineDash([2,4]);}else{\ |
||
609 | if(context_closedpoly.mozDash){context_closedpoly.mozDash = [2,4]};};};\ |
||
610 | var closedpoly_x = new Array();var closedpoly_y = new Array();\ |
||
611 | var closedpoly_snap = multisnaptogrid[%d];", |
||
612 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 613 | |
18556 | bpr | 614 | if( no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 615 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
616 | if( multiuserinput[%d] == 1){inner_html+=\"<td>(<input type='text' size='5' value='x1:x2:x3:...' id='input_closedpoly_x' style='text-align:center;'><b>) --- (</b> <input type='text' size='5' value='y1:y2:y3:...' id='input_closedpoly_y' style='text-align:center;'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_closedpoly_x,input_closedpoly_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 617 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 618 | } else { |
619 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
620 | } |
||
621 | break; |
||
15111 | schaersvoo | 622 | /* text : always uses user input field !! */ |
18556 | bpr | 623 | case 13: |
624 | fprintf(js_include_file,"function text(x,y,event_which,num){\ |
||
15111 | schaersvoo | 625 | if(event_which == 1){ return; };\ |
626 | var xy = multi_snap_check(x,y,text_snap);\ |
||
627 | if( num == 0 ){\ |
||
628 | text_x[0] = xy[0];\ |
||
629 | text_y[0] =xy[1];\ |
||
17571 | obado | 630 | } else {\ |
15111 | schaersvoo | 631 | text_x.push(xy[0]);\ |
632 | text_y.push(xy[1]);\ |
||
633 | };\ |
||
634 | draw_text();\ |
||
635 | };function conv_to_unicode(str){\ |
||
636 | return str.replace(/\\u[\\dA-F]{4}/gi,function(match){\ |
||
637 | return String.fromCharCode(parseInt(match.replace(/\\u/g,''), 16));});\ |
||
638 | };function draw_text(){\ |
||
639 | var half = 0;\ |
||
640 | var height = 0.3 * (context_text.measureText('M').width);\ |
||
641 | context_text.clearRect(0,0,xsize,ysize);\ |
||
642 | for(var p = 0 ; p < text_x.length ; p++ ){\ |
||
643 | if( typeof(text_abc[p]) === 'undefined'){\ |
||
644 | var txt = conv_to_unicode(document.getElementById('input_text_r').value);\ |
||
645 | text_abc.push(txt);\ |
||
646 | };\ |
||
647 | half = 0.5*( context_text.measureText(text_abc[p]).width );\ |
||
16722 | schaersvoo | 648 | if(text_abc[p].indexOf('_') > 0 || text_abc[p].indexOf('^') > 0 ){\ |
649 | draw_subsup(context_text,text_x[p],text_y[p],text_abc[p],4);}else{context_text.fillText(text_abc[p],text_x[p] - half,text_y[p] + height);};\ |
||
15111 | schaersvoo | 650 | };\ |
651 | };var canvas_text = create_canvas%d(10%d,xsize,ysize);\ |
||
652 | var context_text = canvas_text.getContext(\"2d\");\ |
||
653 | context_text.font = multifont_family;\ |
||
654 | context_text.fillStyle = \"rgba(\"+multifont_color+\",\"+multistrokeopacity[%d]+\")\";\ |
||
655 | var text_snap = multisnaptogrid[%d];\ |
||
15659 | bpr | 656 | var text_x = new Array();var text_y = new Array(); var text_abc = new Array();",canvas_root_id,u,i,i); |
657 | |||
18556 | bpr | 658 | if( no_controls != 1 ){ /* for BPR...*/ |
18572 | bpr | 659 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt=0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td><td><input type='text' size='6' value='' id='input_text_r'>\";if( multiuserinput[%d] == 1){inner_html+=\"(<input type='text' size='2' value='x' id='input_text_x' style='text-align:center;'>:<input type='text' size='2' value='y' id='input_text_y' style='text-align:center;'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_text_x,input_text_y,input_text_r);' value='OK'></td>\";}else{inner_html+=\"</td>\";};",u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 660 | } else { |
661 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
662 | } |
||
663 | fprintf(js_include_file,"inner_html+=\"</tr>\";"); |
||
664 | break; |
||
15111 | schaersvoo | 665 | /* rect/rects */ |
18556 | bpr | 666 | case 14 ... 15 : |
667 | fprintf(js_include_file,"function rects(x,y,event_which,num){\ |
||
15111 | schaersvoo | 668 | var xy = multi_snap_check(x,y,rects_snap);\ |
669 | if(event_which == 0){\ |
||
670 | if( num == 0 && multidraw_object_cnt == 0 ){rects_x = [];rects_y = [];};\ |
||
671 | rects_x.push(xy[0]);rects_y.push(xy[1]);\ |
||
672 | multidraw_object_cnt++;\ |
||
17571 | obado | 673 | } else {\ |
15111 | schaersvoo | 674 | if( multidraw_object_cnt == 1 ){\ |
675 | rects_x.push(xy[0]);rects_y.push(xy[1]);\ |
||
676 | draw_rects();\ |
||
677 | rects_x.pop();rects_y.pop();\ |
||
678 | };\ |
||
679 | };\ |
||
680 | if( multidraw_object_cnt == 2 ){\ |
||
681 | multidraw_object_cnt = 0;\ |
||
682 | draw_rects();\ |
||
683 | };\ |
||
684 | };function draw_rects(){\ |
||
685 | var len = rects_x.length;\ |
||
686 | if( len %%2 == 0 ){\ |
||
687 | context_rects.clearRect(0,0,xsize,ysize);\ |
||
688 | for(var p = 0 ; p < len ; p = p+2 ){\ |
||
689 | context_rects.beginPath();\ |
||
690 | context_rects.rect(rects_x[p],rects_y[p],rects_x[p+1]-rects_x[p],rects_y[p+1]-rects_y[p]);\ |
||
691 | context_rects.closePath();\ |
||
692 | context_rects.fill();\ |
||
693 | context_rects.stroke();\ |
||
694 | };\ |
||
695 | };\ |
||
696 | return;\ |
||
697 | };var canvas_rects = create_canvas%d(10%d,xsize,ysize);var context_rects = canvas_rects.getContext(\"2d\");\ |
||
698 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
699 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
700 | context_rects.lineWidth = multilinewidth[%d];if(multilinewidth[%d]%%2 == 1){ context_rects.translate(0.5,0.5);};\ |
||
701 | context_rects.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
702 | if(multidash[%d] == 1 ){ if( context_rects.setlineDash ){context_rects.setlineDash([2,4]);}else{\ |
||
703 | if(context_rects.mozDash){context_rects.mozDash = [2,4]};};};\ |
||
704 | if(multifill[%d] != 0 ){var my_fill_color=\"rgba(\"+multifillcolors[%d]+\",\"+multifillopacity[%d]+\")\";if( multifill[%d] > 1 ){context_rects.fillStyle = create_Pattern(0,0,parseInt(multifill[%d]),my_fill_color);}else{context_rects.fillStyle = my_fill_color;};}else{context_rects.fillStyle = \"rgba( 255,255,255,0)\";};\ |
||
705 | var rects_x = new Array();var rects_y = new Array();var rects_snap = multisnaptogrid[%d];", |
||
706 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 707 | |
18556 | bpr | 708 | if( no_controls != 1 ){ |
18572 | bpr | 709 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
710 | if( multiuserinput[%d] == 1){inner_html+=\"<td>(<input type='text' size='5' value='x1 : y1' id='input_rects_x' style='text-align:center;'>) --- (<input type='text' size='5' value='x2 : y2' id='input_rects_y' style='text-align:center;'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_rects_x,input_rects_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 711 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 712 | } else { |
713 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
714 | } |
||
715 | break; |
||
15111 | schaersvoo | 716 | /* poly/polys */ |
18556 | bpr | 717 | case 16 ... 17 : |
718 | fprintf(js_include_file,"var polynum = %d;function polys(x,y,event_which,num){\ |
||
15111 | schaersvoo | 719 | var last = polys_x.length - 1;\ |
720 | var xy = multi_snap_check(x,y,polys_snap);\ |
||
721 | if(event_which == 0){\ |
||
722 | if(num == 0 && multidraw_object_cnt == 0){\ |
||
723 | polys_x = [];polys_y = [];\ |
||
724 | polys_x[0] = xy[0];polys_y[0] = xy[1];\ |
||
17571 | obado | 725 | } else {\ |
15111 | schaersvoo | 726 | polys_x.push(xy[0]);polys_y.push(xy[1]);\ |
727 | };\ |
||
728 | multidraw_object_cnt++;\ |
||
17571 | obado | 729 | } else {\ |
15111 | schaersvoo | 730 | if( multidraw_object_cnt < polynum ){\ |
731 | polys_x.push(xy[0]);polys_y.push(xy[1]);\ |
||
732 | draw_polys();\ |
||
733 | polys_x.pop();polys_y.pop();\ |
||
734 | };\ |
||
735 | };\ |
||
736 | if( multidraw_object_cnt == polynum ){\ |
||
737 | polys_x.pop();polys_y.pop();\ |
||
738 | polys_x.push(xy[0]);polys_y.push(xy[1]);\ |
||
739 | multidraw_object_cnt = 0;\ |
||
740 | draw_polys();\ |
||
741 | };\ |
||
742 | };function draw_polys(){\ |
||
743 | var len = polys_x.length - 1;\ |
||
744 | context_polys.clearRect(0,0,xsize,ysize);\ |
||
745 | for(var p = 0 ; p < len ; p = p+polynum){\ |
||
746 | context_polys.beginPath();\ |
||
747 | context_polys.moveTo(polys_x[p],polys_y[p]);\ |
||
748 | for( var m = p+1 ;m < p+polynum ; m++){\ |
||
749 | context_polys.lineTo(polys_x[m],polys_y[m]);\ |
||
750 | };\ |
||
751 | context_polys.lineTo(polys_x[p],polys_y[p]);\ |
||
752 | context_polys.closePath();\ |
||
753 | context_polys.fill();\ |
||
754 | context_polys.stroke();\ |
||
755 | };\ |
||
756 | return;\ |
||
757 | };var canvas_polys = create_canvas%d(10%d,xsize,ysize);var context_polys = canvas_polys.getContext(\"2d\");\ |
||
758 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
759 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
760 | context_polys.lineCap = \"round\";context_polys.lineWidth = multilinewidth[%d];\ |
||
761 | if(multilinewidth[%d]%%2 == 1){ context_polys.translate(0.5,0.5);};\ |
||
762 | context_polys.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
763 | if(multifill[%d] != 0 ){var my_fill_color=\"rgba(\"+multifillcolors[%d]+\",\"+multifillopacity[%d]+\")\";if( multifill[%d] > 1 ){context_polys.fillStyle = create_Pattern(0,0,parseInt(multifill[%d]),my_fill_color);}else{context_polys.fillStyle = my_fill_color;};}else{context_polys.fillStyle = \"rgba( 255,255,255,0)\";};\ |
||
764 | if(multidash[%d] == 1 ){ if( context_polys.setLineDash ){context_polys.setLineDash([2,4]);}\ |
||
765 | else{if(context_polys.mozDash){context_polys.mozDash = [2,4]};};};\ |
||
766 | var polys_x = new Array();var polys_y = new Array();\ |
||
767 | var polys_snap = multisnaptogrid[%d];", |
||
768 | polynum,canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 769 | |
18556 | bpr | 770 | if( no_controls != 1 ){ |
18572 | bpr | 771 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
772 | if(multiuserinput[%d] == 1 ){inner_html+=\"<td>(<input type='text' size='8' value='x1,x2...x_n' id='input_polys_x'> ---- <input type='text' size='8' value='y1,y2...y_n' id='input_polys_y'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_rects_x,input_rects_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 773 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 774 | } else { |
775 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
776 | } |
||
777 | break; |
||
15111 | schaersvoo | 778 | /* parallelogram/parallelograms */ |
18556 | bpr | 779 | case 18 ... 19: |
780 | fprintf(js_include_file,"function parallelogram(x,y,event_which,num){\ |
||
15111 | schaersvoo | 781 | var l2 = parallelogram_x.length;\ |
782 | var l1 = l2 - 1;var l0 = l2 - 2;\ |
||
783 | var xy = multi_snap_check(x,y,parallelogram_snap);\ |
||
784 | if(event_which == 0){\ |
||
785 | if(multidraw_object_cnt == 0){\ |
||
786 | if(num == 0){parallelogram_x = [];parallelogram_y = [];};\ |
||
787 | parallelogram_x.push(xy[0]);parallelogram_y.push(xy[1]);\ |
||
17571 | obado | 788 | } else {\ |
15111 | schaersvoo | 789 | parallelogram_x.push(xy[0]);parallelogram_y.push(xy[1]);\ |
790 | if(multidraw_object_cnt == 2){\ |
||
791 | var xy = multi_snap_check(parallelogram_x[l2] - parallelogram_x[l1] + parallelogram_x[l0],parallelogram_y[l2] - parallelogram_y[l1] + parallelogram_y[l0],parallelogram_snap);\ |
||
792 | parallelogram_x.push(xy[0]);\ |
||
793 | parallelogram_y.push(xy[1]);\ |
||
794 | };\ |
||
795 | };\ |
||
796 | multidraw_object_cnt++;\ |
||
17571 | obado | 797 | } else {\ |
15111 | schaersvoo | 798 | if(multidraw_object_cnt == 1){\ |
799 | var xxyy = multi_snap_check(parallelogram_x[l1],parallelogram_y[l1],parallelogram_snap);\ |
||
800 | parallelogram_x.push(xxyy[0]);\ |
||
801 | parallelogram_y.push(xxyy[1]);\ |
||
802 | parallelogram_x.push(xy[0]);\ |
||
803 | parallelogram_y.push(xy[1]);\ |
||
804 | draw_parallelogram();\ |
||
805 | parallelogram_x.pop();parallelogram_y.pop();\ |
||
806 | parallelogram_x.pop();parallelogram_y.pop();\ |
||
17571 | obado | 807 | } else {\ |
15111 | schaersvoo | 808 | if(multidraw_object_cnt == 2){\ |
809 | var xxyy = multi_snap_check(parallelogram_x[l2]-parallelogram_x[l1] + parallelogram_x[l0],parallelogram_y[l2]-parallelogram_y[l1] + parallelogram_y[l0],parallelogram_snap);\ |
||
810 | parallelogram_x.push(xy[0]);parallelogram_y.push(xy[1]);\ |
||
811 | parallelogram_x.push(xxyy[0]);\ |
||
812 | parallelogram_y.push(xxyy[1]);\ |
||
813 | draw_parallelogram();\ |
||
814 | parallelogram_x.pop();parallelogram_y.pop();\ |
||
815 | parallelogram_x.pop();parallelogram_y.pop();\ |
||
816 | };\ |
||
817 | };\ |
||
818 | };\ |
||
819 | if( multidraw_object_cnt == 3 ){\ |
||
820 | parallelogram_x.pop();parallelogram_y.pop();\ |
||
821 | var xxyy = multi_snap_check(parallelogram_x[l2]-parallelogram_x[l1] + parallelogram_x[l0],parallelogram_y[l2]-parallelogram_y[l1] + parallelogram_y[l0],parallelogram_snap);\ |
||
822 | parallelogram_x.push(xxyy[0]);\ |
||
823 | parallelogram_y.push(xxyy[1]);\ |
||
824 | parallelogram_x.push(xy[0]);parallelogram_y.push(xy[1]);\ |
||
825 | parallelogram_x.pop();parallelogram_y.pop();\ |
||
826 | multidraw_object_cnt = 0;\ |
||
827 | draw_parallelogram();\ |
||
828 | };\ |
||
829 | };function draw_parallelogram(){\ |
||
830 | var len = parallelogram_x.length-1;\ |
||
831 | context_parallelogram.clearRect(0,0,xsize,ysize);\ |
||
832 | for(var p = 0 ; p < len ; p = p+4){\ |
||
833 | context_parallelogram.beginPath();\ |
||
834 | context_parallelogram.moveTo(parallelogram_x[p],parallelogram_y[p]);\ |
||
835 | for( var m = p+1 ;m < p+4 ; m++){\ |
||
836 | context_parallelogram.lineTo(parallelogram_x[m],parallelogram_y[m]);\ |
||
837 | };\ |
||
838 | context_parallelogram.lineTo(parallelogram_x[p],parallelogram_y[p]);\ |
||
839 | context_parallelogram.closePath();\ |
||
840 | context_parallelogram.fill();\ |
||
841 | context_parallelogram.stroke();\ |
||
842 | };\ |
||
843 | return;\ |
||
844 | };var canvas_parallelogram = create_canvas%d(10%d,xsize,ysize);var context_parallelogram = canvas_parallelogram.getContext(\"2d\");\ |
||
845 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2);};\ |
||
846 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2);};\ |
||
847 | context_parallelogram.lineCap = \"round\";context_parallelogram.lineWidth = multilinewidth[%d];\ |
||
848 | if(multilinewidth[%d]%%2 == 1){ context_parallelogram.translate(0.5,0.5);};\ |
||
849 | context_parallelogram.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
850 | if(multifill[%d] != 0 ){var my_fill_color=\"rgba(\"+multifillcolors[%d]+\",\"+multifillopacity[%d]+\")\";if( multifill[%d] > 1 ){context_parallelogram.fillStyle = create_Pattern(0,0,parseInt(multifill[%d]),my_fill_color);}else{context_parallelogram.fillStyle = my_fill_color;};}else{context_parallelogram.fillStyle = \"rgba( 255,255,255,0)\";};\ |
||
851 | if(multidash[%d] == 1 ){ if( context_parallelogram.setLineDash ){context_parallelogram.setLineDash([2,4]);}\ |
||
852 | else{if(context_parallelogram.mozDash){context_parallelogram.mozDash = [2,4]};};};\ |
||
853 | var parallelogram_x = new Array();var parallelogram_y = new Array();var parallelogram_snap = multisnaptogrid[%d];", |
||
854 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 855 | |
18556 | bpr | 856 | if( no_controls != 1 ){ |
18572 | bpr | 857 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt=0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
858 | if(multiuserinput[%d] == 1 ){inner_html+=\"<td>(<input type='text' size='8' value='x1,x2...x_n' id='input_parallelogram_x'> --- <input type='text' size='8' value='y1,y2...y_n' id='input_parallelogram_y'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_parallelogram_x,input_parallelogram_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 859 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 860 | } else { |
861 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
862 | } |
||
863 | break; |
||
17351 | bpr | 864 | /* |
865 | images : identical ! to userdraw images,bogus_color |
||
15665 | schaersvoo | 866 | 15/1/2021 : corrected long standing flaw regarding "centered" on external stuff |
867 | tested: bitmap,svg,TeX [tested KaTeX] |
||
868 | */ |
||
18556 | bpr | 869 | case 20: |
870 | fprintf(js_include_file,"var current_id = null;var external_div_cnt=0;\ |
||
15665 | schaersvoo | 871 | function image_adjust(image,x,y){\ |
15111 | schaersvoo | 872 | var centered = %d;\ |
873 | var w = parseInt(image.width);var h = parseInt(image.height);\ |
||
15665 | schaersvoo | 874 | if(w == 0 || h == 0 ){\ |
875 | w = parseInt(window.getComputedStyle(image).width);\ |
||
876 | h = parseInt(window.getComputedStyle(image).height);\ |
||
877 | };\ |
||
15111 | schaersvoo | 878 | switch(centered){\ |
879 | case 0: return [x,y];break;\ |
||
880 | case 1: return [x,parseInt(y-0.5*h)];break;\ |
||
881 | case 2: return [parseInt(x+0.5*h),y];break;\ |
||
882 | case 3: return [parseInt(x+0.5*h),parseInt(y-0.5*h)];break;\ |
||
883 | case 4: return [parseInt(x-0.5*w),parseInt(y-0.5*h)];break;\ |
||
884 | default: return [x,y];break;\ |
||
885 | };\ |
||
15665 | schaersvoo | 886 | };\ |
17571 | obado | 887 | const reset_placeable_selection = function(thing){\ |
888 | const placeables = document.querySelectorAll('.canvas_placeable');\ |
||
889 | placeables.forEach((placeable) => {\ |
||
890 | placeable.classList.remove('selected');\ |
||
891 | });\ |
||
892 | if(thing){thing.classList.add('selected');}\ |
||
893 | };\ |
||
15665 | schaersvoo | 894 | place_image_on_canvas = function(id){\ |
17571 | obado | 895 | var thing = document.getElementById(id);\ |
896 | reset_placeable_selection(thing);\ |
||
897 | var tag = thing.tagName;\ |
||
898 | if(tag == 'SVG'){draw_mathml_svg(thing,id);return;};\ |
||
899 | if(tag == 'DIV' || tag == 'SPAN' || tag == 'P' || tag == 'TD' || tag == 'TH'){draw_mathml_div(thing,id);return;};\ |
||
900 | var src = thing.src;\ |
||
901 | var image = new Image();\ |
||
902 | image.src = src;\ |
||
903 | image.id = 'placed_'+id;\ |
||
904 | image.width = thing.width;\ |
||
905 | image.height = thing.height;\ |
||
906 | image.onload = function(){ current_id = id; };\ |
||
15111 | schaersvoo | 907 | return;\ |
15665 | schaersvoo | 908 | };\ |
909 | function draw_mathml_div(thing,id){\ |
||
15111 | schaersvoo | 910 | var fix_div = document.createElement('DIV');\ |
15663 | bpr | 911 | var new_id='placed_'+external_div_cnt+'_'+id;\ |
15111 | schaersvoo | 912 | fix_div.setAttribute('id',new_id);\ |
913 | var w = parseInt(thing.clientWidth);\ |
||
914 | var h = parseInt(thing.clientHeight);\ |
||
915 | fix_div.innerHTML = thing.innerHTML;\ |
||
916 | fix_div.setAttribute('style','display:none;position;absolute;width:'+w+'px;height:'+h+'px');\ |
||
917 | fix_div.width = w;fix_div.height = h;\ |
||
918 | canvas_div.appendChild(fix_div);\ |
||
919 | current_id = new_id;\ |
||
15663 | bpr | 920 | external_div_cnt++;\ |
15111 | schaersvoo | 921 | return;\ |
15665 | schaersvoo | 922 | };\ |
923 | function draw_mathml_svg(thing,id){\ |
||
15111 | schaersvoo | 924 | var fix_div = document.createElement('DIV');\ |
925 | fix_div.setAttribute('style','display:none;position;relative');\ |
||
926 | canvas_div.appendChild(fix_div);\ |
||
927 | var image = new Image();\ |
||
928 | var svg_string = new XMLSerializer().serializeToString(thing);\ |
||
929 | var dom = self.URL || self.webkitURL || self;\ |
||
930 | var svg = new Blob([svg_string], {type: \"image/svg+xml;charset=utf-8\"});\ |
||
931 | var url = dom.createObjectURL(svg);\ |
||
932 | image.src= url;\ |
||
933 | image.id = 'placed_'+id;\ |
||
934 | image.onload = function(){\ |
||
935 | current_id = image.id;\ |
||
18572 | bpr | 936 | fix_div.innerHTML='<img src='+image.src+' id='+image.id+' alt=\"this should not happen today...!\">';\ |
15111 | schaersvoo | 937 | };\ |
938 | return;\ |
||
15665 | schaersvoo | 939 | };\ |
940 | function images(x,y,event_which,num){\ |
||
15111 | schaersvoo | 941 | if(event_which == 1){ return;};\ |
942 | if(num == 1 && current_id){\ |
||
943 | var xy = multi_snap_check(x,y,images_snap);\ |
||
944 | images_x.push(xy[0]);\ |
||
945 | images_y.push(xy[1]);\ |
||
946 | images_id.push(current_id);\ |
||
17571 | obado | 947 | reset_placeable_selection();\ |
15111 | schaersvoo | 948 | current_id = null;\ |
949 | };\ |
||
950 | draw_images();\ |
||
15665 | schaersvoo | 951 | };\ |
952 | function draw_images(){\ |
||
15111 | schaersvoo | 953 | var xy;var img;var tag;\ |
15665 | schaersvoo | 954 | for(var i=0; i<2;i++){\ |
955 | for(var p = 0 ; p < images_x.length; p++){\ |
||
956 | if( images_id[p] ){\ |
||
957 | img = document.getElementById(images_id[p]);\ |
||
958 | tag = img.tagName;\ |
||
959 | xy = image_adjust(img,images_x[p],images_y[p]);\ |
||
960 | if( tag != 'IMG' ){\ |
||
17576 | obado | 961 | xy[0] = xy[0] / xsize * 100;\ |
962 | xy[1] = xy[1] / ysize * 100;\ |
||
963 | img.setAttribute('style','display:block;position:absolute;top:'+xy[1]+'%%;left:'+xy[0]+'%%;');\ |
||
17571 | obado | 964 | } else {\ |
15665 | schaersvoo | 965 | context_images.drawImage(img,xy[0],xy[1],img.width,img.height);\ |
966 | };\ |
||
15111 | schaersvoo | 967 | };\ |
968 | };\ |
||
969 | };\ |
||
15665 | schaersvoo | 970 | };\ |
971 | var canvas_images = create_canvas%d(10%d,xsize,ysize);\ |
||
15111 | schaersvoo | 972 | var context_images = canvas_images.getContext(\"2d\");\ |
973 | context_images.font = multifont_family;\ |
||
974 | context_images.fillStyle = \"rgba(\"+multifont_color+\",\"+multistrokeopacity[%d]+\")\";\ |
||
975 | var images_snap = multisnaptogrid[%d];\ |
||
976 | var images_x = new Array();var images_y = new Array();\ |
||
977 | var images_id = new Array();",use_offset,canvas_root_id,u,i,i); |
||
18559 | bpr | 978 | if( no_controls != 1 ){ |
18572 | bpr | 979 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt=0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
15111 | schaersvoo | 980 | if( typeof(imagepalette) === 'object' ){\ |
981 | inner_html+=\"<td><table class='%s'><tr>\";\ |
||
982 | for(var im=0; im < imagepalette.length; im++){\ |
||
983 | if( im %% 4 == 0 ){ inner_html+=\"</tr><tr>\";};\ |
||
18572 | bpr | 984 | inner_html+=\"<td><img onclick='javascript:place_image_on_canvas(this.id);' src='\"+imagepalette[im]+\"' id='imagepalette_\"+im+\"' alt='none'></td>\";};\ |
15111 | schaersvoo | 985 | inner_html+=\"</tr></table></td><td> </td></tr>\";}else{inner_html+=\"<td> </td><td> </td></tr>\";};",u,i,canvas_root_id,u,table_css); |
18556 | bpr | 986 | } else { |
987 | fprintf(js_include_file,"inner_html+=\"</table>\";tooltip_div.innerHTML += inner_html;userdraw_primitive = %d;",u); |
||
988 | } |
||
989 | break; |
||
15111 | schaersvoo | 990 | /* curvedarrow/curvedarrows */ |
18556 | bpr | 991 | case 21 ... 22: |
992 | fprintf(js_include_file,"function curvedarrows(x,y,event_which,num){\ |
||
15142 | schaersvoo | 993 | var xy = [x,y];\ |
15111 | schaersvoo | 994 | if(event_which == 0){\ |
15142 | schaersvoo | 995 | xy = multi_snap_check(x,y,curvedarrows_snap);\ |
996 | if(num == 0 && multidraw_object_cnt == 0){curvedarrows_x = [];curvedarrows_y = [];curvedarrows_x[0] = xy[0];curvedarrows_y[0] = xy[1];}\ |
||
15111 | schaersvoo | 997 | else{curvedarrows_x.push(xy[0]);curvedarrows_y.push(xy[1]);};multidraw_object_cnt++;\ |
17571 | obado | 998 | } else {\ |
15111 | schaersvoo | 999 | if( multidraw_object_cnt < 3 ){curvedarrows_x.push(xy[0]);curvedarrows_y.push(xy[1]);draw_curvedarrows();curvedarrows_x.pop();curvedarrows_y.pop();};\ |
1000 | if( multidraw_object_cnt == 3 ){curvedarrows_x.pop();curvedarrows_y.pop();curvedarrows_x.push(xy[0]);curvedarrows_y.push(xy[1]);multidraw_object_cnt = 0;draw_curvedarrows();};\ |
||
1001 | };\ |
||
1002 | };function draw_curvedarrows(){\ |
||
1003 | var len = curvedarrows_x.length;var x1,y1,x2,y2,x3,y3;\ |
||
1004 | context_curvedarrows.clearRect(0,0,xsize,ysize);\ |
||
1005 | for(var p = 0 ; p < len ; p = p+3){\ |
||
1006 | x1 = curvedarrows_x[p];x2 = curvedarrows_x[p+1];x3 = curvedarrows_x[p+2];y1 = curvedarrows_y[p];y2 = curvedarrows_y[p+1];y3 = curvedarrows_y[p+2];\ |
||
1007 | var angle1 = Math.atan2(x3 - x2,y3 - y2) + Math.PI;\ |
||
1008 | context_curvedarrows.beginPath();\ |
||
1009 | context_curvedarrows.moveTo(x1,y1);\ |
||
1010 | context_curvedarrows.quadraticCurveTo(x3,y3,x2,y2);\ |
||
1011 | context_curvedarrows.moveTo(x2 - (arrow_head * Math.sin(angle1 - Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 - Math.PI / 6)));\ |
||
1012 | context_curvedarrows.lineTo(x2, y2);\ |
||
1013 | context_curvedarrows.lineTo(x2 - (arrow_head * Math.sin(angle1 + Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 + Math.PI / 6)));\ |
||
1014 | context_curvedarrows.stroke();\ |
||
1015 | context_curvedarrows.closePath();\ |
||
1016 | };\ |
||
1017 | return;\ |
||
1018 | };var canvas_curvedarrows = create_canvas%d(10%d,xsize,ysize);\ |
||
1019 | var context_curvedarrows = canvas_curvedarrows.getContext(\"2d\");\ |
||
1020 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
1021 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
1022 | context_curvedarrows.lineWidth = multilinewidth[%d];\ |
||
1023 | if(multilinewidth[%d]%%2 == 1){ context_curvedarrows.translate(0.5,0.5);};\ |
||
1024 | context_curvedarrows.lineCap = \"round\";\ |
||
1025 | context_curvedarrows.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
1026 | context_curvedarrows.fillStyle = context_curvedarrows.strokeStyle;\ |
||
1027 | if(multidash[%d] == 1 ){ if( context_curvedarrows.setLineDash ){\ |
||
1028 | context_curvedarrows.setLineDash([2,4]);}else{if(context_curvedarrows.mozDash){\ |
||
1029 | context_curvedarrows.mozDash = [2,4]};};};\ |
||
1030 | var curvedarrows_x = new Array();var curvedarrows_y = new Array();\ |
||
1031 | var curvedarrows_snap = multisnaptogrid[%d];", |
||
1032 | canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 1033 | |
18556 | bpr | 1034 | if( no_controls != 1 ){ |
18572 | bpr | 1035 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
1036 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td><b>(<input type='text' size='5' value='x1 : y1' id='input_curvedarrows_x'>) -- (<input type='text' size='5' value='x2 : y2' id='input_curvedarrows_y'>) -- (<input type='text' size='5' value='x3 : y3' id='input_curvedarrows_r'>)</b></td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_curvedarrows_x,input_curvedarrows_y,input_curvedarrows_r);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 1037 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 1038 | } else { |
1039 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
1040 | } |
||
1041 | break; |
||
15111 | schaersvoo | 1042 | /* curvedarrow2/curvedarrows2 */ |
18556 | bpr | 1043 | case 23 ... 24: |
1044 | fprintf(js_include_file,"function curvedarrows2(x,y,event_which,num){\ |
||
15142 | schaersvoo | 1045 | var xy=[x,y];\ |
15111 | schaersvoo | 1046 | if(event_which == 0){\ |
15142 | schaersvoo | 1047 | xy = multi_snap_check(x,y,curvedarrows2_snap);\ |
1048 | if(num == 0 && multidraw_object_cnt == 0){curvedarrows2_x = [];curvedarrows2_y = [];curvedarrows2_x[0] = xy[0];curvedarrows2_y[0] = xy[1];}\ |
||
15111 | schaersvoo | 1049 | else{curvedarrows2_x.push(xy[0]);curvedarrows2_y.push(xy[1]);};multidraw_object_cnt++;\ |
17571 | obado | 1050 | } else {\ |
15111 | schaersvoo | 1051 | if( multidraw_object_cnt < 3 ){curvedarrows2_x.push(xy[0]);curvedarrows2_y.push(xy[1]);draw_curvedarrows2();curvedarrows2_x.pop();curvedarrows2_y.pop();};\ |
1052 | if( multidraw_object_cnt == 3 ){curvedarrows2_x.pop();curvedarrows2_y.pop();curvedarrows2_x.push(xy[0]);curvedarrows2_y.push(xy[1]);multidraw_object_cnt = 0;draw_curvedarrows2();};\ |
||
1053 | };\ |
||
1054 | };function draw_curvedarrows2(){\ |
||
1055 | var len = curvedarrows2_x.length;var x1,y1,x2,y2,x3,y3;\ |
||
1056 | context_curvedarrows2.clearRect(0,0,xsize,ysize);\ |
||
1057 | for(var p = 0 ; p < len ; p = p+3){\ |
||
1058 | x1 = curvedarrows2_x[p];x2 = curvedarrows2_x[p+1];x3 = curvedarrows2_x[p+2];y1 = curvedarrows2_y[p];y2 = curvedarrows2_y[p+1];y3 = curvedarrows2_y[p+2];\ |
||
1059 | var angle1 = Math.atan2(x3 - x2,y3 - y2) + Math.PI;\ |
||
1060 | var angle2 = Math.atan2(x3 - x1,y3 - y1) + Math.PI;\ |
||
1061 | context_curvedarrows2.beginPath();\ |
||
1062 | context_curvedarrows2.moveTo(x1,y1);\ |
||
1063 | context_curvedarrows2.moveTo(x1 - (arrow_head * Math.sin(angle2 - Math.PI / 6)),y1 - (arrow_head * Math.cos(angle2 - Math.PI / 6)));\ |
||
1064 | context_curvedarrows2.lineTo(x1, y1);\ |
||
1065 | context_curvedarrows2.lineTo(x1 - (arrow_head * Math.sin(angle2 + Math.PI / 6)),y1 - (arrow_head * Math.cos(angle2 + Math.PI / 6)));\ |
||
1066 | context_curvedarrows2.moveTo(x1,y1);\ |
||
1067 | context_curvedarrows2.quadraticCurveTo(x3,y3,x2,y2);\ |
||
1068 | context_curvedarrows2.moveTo(x2 - (arrow_head * Math.sin(angle1 - Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 - Math.PI / 6)));\ |
||
1069 | context_curvedarrows2.lineTo(x2, y2);\ |
||
1070 | context_curvedarrows2.lineTo(x2 - (arrow_head * Math.sin(angle1 + Math.PI / 6)),y2 - (arrow_head * Math.cos(angle1 + Math.PI / 6)));\ |
||
1071 | context_curvedarrows2.stroke();\ |
||
1072 | context_curvedarrows2.closePath();\ |
||
1073 | };\ |
||
1074 | return;\ |
||
1075 | };var canvas_curvedarrows2 = create_canvas%d(10%d,xsize,ysize);\ |
||
1076 | var context_curvedarrows2 = canvas_curvedarrows2.getContext(\"2d\");\ |
||
1077 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
1078 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
1079 | context_curvedarrows2.lineWidth = multilinewidth[%d];\ |
||
1080 | if(multilinewidth[%d]%%2 == 1){ context_curvedarrows2.translate(0.5,0.5);};\ |
||
1081 | context_curvedarrows2.lineCap = \"round\";\ |
||
1082 | context_curvedarrows2.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
1083 | context_curvedarrows2.fillStyle = context_curvedarrows2.strokeStyle;\ |
||
1084 | if(multidash[%d] == 1 ){ if( context_curvedarrows2.setLineDash ){\ |
||
1085 | context_curvedarrows2.setLineDash([2,4]);}else{if(context_curvedarrows2.mozDash){\ |
||
1086 | context_curvedarrows2.mozDash = [2,4]};};};\ |
||
1087 | var curvedarrows2_x = new Array();var curvedarrows2_y = new Array();\ |
||
1088 | var curvedarrows2_snap = multisnaptogrid[%d];",canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i); |
||
15126 | bpr | 1089 | |
18556 | bpr | 1090 | if( no_controls != 1 ){ |
18572 | bpr | 1091 | fprintf(js_include_file,"inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
1092 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td><b>(<input type='text' size='5' value='x1 : y1' id='input_curvedarrows2_x'>) -- (<input type='text' size='5' value='x2 : y2' id='input_curvedarrows2_y'>) -- (<input type='text' size='5' value='x3 : y3' id='input_curvedarrows2_r'>)</b></td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_curvedarrows2_x,input_curvedarrows2_y,input_curvedarrows2_r);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 1093 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 1094 | } else { |
1095 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
1096 | } |
||
1097 | break; |
||
1098 | case 25 ... 26: |
||
1099 | fprintf(js_include_file,"function crosshairs(x,y,event_which,num){\ |
||
15111 | schaersvoo | 1100 | if(event_which == 1){ return; };\ |
1101 | var xy = multi_snap_check(x,y,crosshairs_snap);\ |
||
1102 | if( num == 0 ){\ |
||
1103 | crosshairs_x[0] = xy[0];\ |
||
1104 | crosshairs_y[0] = xy[1];\ |
||
17571 | obado | 1105 | } else {\ |
15111 | schaersvoo | 1106 | crosshairs_x.push(xy[0]);\ |
1107 | crosshairs_y.push(xy[1]);\ |
||
1108 | };\ |
||
1109 | draw_crosshairs();\ |
||
1110 | };\ |
||
1111 | function draw_crosshairs(){\ |
||
1112 | var crosshair_size = %d;\ |
||
1113 | context_crosshairs.clearRect(0,0,xsize,ysize);\ |
||
1114 | var x1,x2,y1,y2;\ |
||
1115 | for(var p = 0 ; p < crosshairs_x.length ; p++ ){\ |
||
1116 | x1 = crosshairs_x[p] - crosshair_size;\ |
||
1117 | x2 = crosshairs_x[p] + crosshair_size;\ |
||
1118 | y1 = crosshairs_y[p] - crosshair_size;\ |
||
1119 | y2 = crosshairs_y[p] + crosshair_size;\ |
||
1120 | context_crosshairs.beginPath();\ |
||
1121 | context_crosshairs.moveTo(x1,y1);\ |
||
1122 | context_crosshairs.lineTo(x2,y2);\ |
||
1123 | context_crosshairs.closePath();\ |
||
1124 | context_crosshairs.stroke();\ |
||
1125 | context_crosshairs.beginPath();\ |
||
1126 | context_crosshairs.moveTo(x2,y1);\ |
||
1127 | context_crosshairs.lineTo(x1,y2);\ |
||
1128 | context_crosshairs.closePath();\ |
||
1129 | context_crosshairs.stroke();\ |
||
1130 | };\ |
||
1131 | };\ |
||
1132 | var canvas_crosshairs = create_canvas%d(100%d,xsize,ysize);var context_crosshairs = canvas_crosshairs.getContext(\"2d\");\ |
||
1133 | if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\ |
||
1134 | if( multifillopacity[%d] > 1 ){ multifillopacity[%d] = (0.0039215*multifillopacity[%d]).toFixed(2); };\ |
||
1135 | context_crosshairs.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\ |
||
1136 | context_crosshairs.fillStyle = context_crosshairs.strokeStyle;\ |
||
1137 | context_crosshairs.lineWidth = multilinewidth[%d];if(multilinewidth[%d] %%2 == 1){ context_crosshairs.translate(0.5,0.5);};\ |
||
1138 | var crosshairs_x = new Array();var crosshairs_y = new Array();\ |
||
1139 | var crosshairs_snap = multisnaptogrid[%d];",crosshair_size,canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i); |
||
18556 | bpr | 1140 | if( no_controls != 1){ |
1141 | fprintf(js_include_file,"\ |
||
18572 | bpr | 1142 | inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
1143 | if( multiuserinput[%d] == 1 ){inner_html+=\"<td>(<input type='text' size='5' value='' id='input_crosshairs_x'>:<input type='text' size='5' value='' id='input_crosshairs_y'>)</td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_crosshairs_x,input_crosshairs_y,null);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 1144 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
18556 | bpr | 1145 | } else { |
1146 | fprintf(js_include_file,"userdraw_primitive = %d;",u); |
||
1147 | } |
||
1148 | break; |
||
1149 | case 27:break; |
||
15111 | schaersvoo | 1150 | /* einde switch */ |
18556 | bpr | 1151 | default : break; |
1152 | } |
||
1153 | } /* end for loop */ |
||
15111 | schaersvoo | 1154 | |
1155 | /* id_z may be used for radius , text etc...e.g. no x-values,y-values, x&y-valuepairs*/ |
||
18559 | bpr | 1156 | fprintf(js_include_file,"update_draw_area%d = function(desc,id_x,id_y,id_z){\ |
15111 | schaersvoo | 1157 | if( desc == 20 ){ draw_images();return;};\ |
1158 | var x1,x2,x3,y1,y2,y3,z1,r,A,B,C;\ |
||
1159 | x1 = id_x.value;y1 = id_y.value;if(id_z != null){z1 = id_z.value;};\ |
||
1160 | if( (desc > 3 && desc < 12) || desc == 14 || desc == 15 ){A = coord_split(x1);B = coord_split(y1);if(A.length != 2 || B.length != 2){alert('coordinate mismatch');return;};x1 = x2px(safe_eval(A[0]));y1 = y2px(safe_eval(A[1]));x2 = x2px(safe_eval(B[0]));y2 = y2px(safe_eval(B[1]));if(desc == 10 || desc == 11 ){ C = coord_split(z1);x3 = x2px(safe_eval(C[0]));y3 = y2px(safe_eval(C[1]));};};\ |
||
1161 | if( desc < 4 ){x1 = x2px(safe_eval(x1));y1 = y2px( safe_eval(y1));};\ |
||
1162 | if( desc > 20 ){A = coord_split(x1);B = coord_split(y1);C = coord_split(z1);\ |
||
1163 | if(A.length != 2 || B.length != 2 || C.length != 2){ alert('coordinate mismatch');return;};\ |
||
1164 | x1 = x2px(safe_eval(A[0]));y1 = y2px(safe_eval(A[1]));\ |
||
1165 | x2 = x2px(safe_eval(B[0]));y2 = y2px(safe_eval(B[1]));\ |
||
1166 | x3 = x2px(safe_eval(C[0]));y3 = y2px(safe_eval(C[1]));};\ |
||
1167 | switch(desc){",canvas_root_id); |
||
18559 | bpr | 1168 | for(i=0 ; i < MAX_MULTI_PRIMITIVES ; i++ ){ |
1169 | switch(draw_nums[i]){ |
||
1170 | case -1: break; |
||
1171 | case 0: fprintf(js_include_file,"case 0:points(x1,y1,0,0);break;"); break; |
||
1172 | case 1: fprintf(js_include_file,"case 1:points(x1,y1,0,1);break;"); break; |
||
1173 | case 2: fprintf(js_include_file,"case 2:r = scale_x_radius(safe_eval(document.getElementById(id_z.id).value));multi_radius[0] = r;circles_x[0] = x1;circles_y[0] = y1;draw_circles();break;"); break; |
||
1174 | case 3: fprintf(js_include_file,"case 3:r = scale_x_radius(safe_eval(document.getElementById(id_z.id).value));multi_radius.push(r);circles_x.push(x1);circles_y.push(y1);draw_circles();break;"); break; |
||
1175 | case 4: fprintf(js_include_file,"case 4:lines_x[0] = x1;lines_x[1] = x2;lines_y[0] = y1;lines_y[1] = y2;calc_lines();draw_lines();break;"); break; |
||
1176 | case 5: fprintf(js_include_file,"case 5:lines_x.push(x1);lines_x.push(x2);lines_y.push(y1);lines_y.push(y2);calc_lines();draw_lines();break;"); break; |
||
1177 | case 6: fprintf(js_include_file,"case 6:segments_x[0] = x1;segments_x[1] = x2;segments_y[0] = y1;segments_y[1] = y2;draw_segments();break;"); break; |
||
1178 | case 7: fprintf(js_include_file,"case 7:segments_x.push(x1);segments_x.push(x2);segments_y.push(y1);segments_y.push(y2);draw_segments();break;"); break; |
||
1179 | case 8: fprintf(js_include_file,"case 8:arrows_x[0] = x1;arrows_x[1] = x2;arrows_y[0] = y1;arrows_y[1] = y2;draw_arrows();break;"); break; |
||
1180 | case 9: fprintf(js_include_file,"case 9:arrows_x.push(x1);arrows_x.push(x2);arrows_y.push(y1);arrows_y.push(y2);draw_arrows();break;"); break; |
||
1181 | case 10: fprintf(js_include_file,"case 10:triangles_x[0] = x1;triangles_x[1] = x2;triangles_x[2] = x3;triangles_y[0] = y1;triangles_y[1] = y2;triangles_y[2] = y3;draw_triangles();break;"); break; |
||
1182 | case 11: fprintf(js_include_file,"case 11:triangles_x.push(x1);triangles_x.push(x2);triangles_x.push(x3);triangles_y.push(y1);triangles_y.push(y2);triangles_y.push(y3);draw_triangles();break;"); break; |
||
1183 | case 12: fprintf(js_include_file,"case 12:A = coord_split(x1);B = coord_split(y1);var plus_len = A.length;if( plus_len != B.length){alert('mismatch between the number of x-values and y-values');return;};for(var p = 0 ; p < plus_len ; p++){x1 = x2px(safe_eval(A[p]));y1 = y2px(safe_eval(B[p]));closedpoly_x.push(x1);closedpoly_y.push(y1);};x1 = x2px(safe_eval(A[0]));y1 = y2px(safe_eval(B[0]));closedpoly_x.push(x1);closedpoly_y.push(y1);draw_closedpoly();break;"); break; |
||
1184 | case 13: fprintf(js_include_file,"case 13:text_abc.push( document.getElementById(id_z.id).value);text(x2px(safe_eval(x1)),y2px(safe_eval(y1)),0,1);draw_text();break;"); break; |
||
1185 | case 14: fprintf(js_include_file,"case 14:rects_x[0] = x1;rects_x[1] = x2;rects_y[0] = y1;rects_y[1] = y2;draw_rects();break;"); break; |
||
1186 | case 15: fprintf(js_include_file,"case 15:rects_x.push(x1);rects_x.push(x2);rects_y.push(y1);rects_y.push(y2);draw_rects();break;"); break; |
||
1187 | case 16: fprintf(js_include_file,"case 16:polys_x[0] = x1;polys_x[1] = x2;polys_x[2] = x3;polys_y[0] = y1;polys_y[1] = y2;polys_y[2] = y3;draw_polys();break;"); break; |
||
1188 | case 17: fprintf(js_include_file,"case 17:polys_x.push(x1);polys_x.push(x2);polys_x.push(x3);polys_y.push(y1);polys_y.push(y2);polys_y.push(y3);draw_polys();break;"); break; |
||
1189 | case 18: fprintf(js_include_file,"case 18:parallelogram_x[0] = x1;parallelogram_x[1] = x2;parallelogram_x[2] = x3;parallelogram_y[0] = y1;parallelogram_y[1] = y2;parallelogram_y[2] = y3;draw_parallelogram();break;"); break; |
||
15111 | schaersvoo | 1190 | case 19: fprintf(js_include_file,"case 19:parallelogram_x.push(x1);parallelogram_x.push(x2);parallelogram_x.push(x3);parallelogram_y.push(y1);parallelogram_y.push(y2);parallelogram_y.push(y3);draw_parallelogram();break;"); break; |
1191 | case 20: fprintf(js_include_file,"case 20:draw_images();break;"); break; |
||
1192 | case 21: fprintf(js_include_file,"case 21:curvedarrows_x[0] = x1;curvedarrows_x[1] = x2;curvedarrows_x[2] = x3;curvedarrows_y[0] = y1;curvedarrows_y[1] = y2;curvedarrows_y[2] = y3;draw_curvedarrows();break;"); break; |
||
1193 | case 22: fprintf(js_include_file,"case 22:curvedarrows_x.push(x1);curvedarrows_x.push(x2);curvedarrows_x.push(x3);curvedarrows_y.push(y1);curvedarrows_y.push(y2);curvedarrows_y.push(y3);draw_curvedarrows();break;"); break; |
||
1194 | case 23: fprintf(js_include_file,"case 23:curvedarrows2_x[0] = x1;curvedarrows2_x[1] = x2;curvedarrows2_x[2] = x3;curvedarrows2_y[0] = y1;curvedarrows2_y[1] = y2;curvedarrows2_y[2] = y3;draw_curvedarrows2();break;"); break; |
||
1195 | case 24: fprintf(js_include_file,"case 24:curvedarrows2_x.push(x1);curvedarrows2_x.push(x2);curvedarrows2_x.push(x3);curvedarrows2_y.push(y1);curvedarrows2_y.push(y2);curvedarrows2_y.push(y3);draw_curvedarrows2();break;"); break; |
||
1196 | case 25: fprintf(js_include_file,"case 25:crosshairs(x1,y1,0,0);break;"); break; |
||
1197 | case 26: fprintf(js_include_file,"case 26:crosshairs(x1,y1,0,1);break;"); break; |
||
1198 | default:break; |
||
1199 | } |
||
1200 | } |
||
18556 | bpr | 1201 | fprintf(js_include_file,"default: break;};return;};"); |
15111 | schaersvoo | 1202 | |
1203 | /* begin clear_draw_area()*/ |
||
18556 | bpr | 1204 | fprintf(js_include_file,"clear_draw_area%d = function(type){switch(type){",canvas_root_id); |
1205 | for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){ |
||
1206 | switch( draw_nums[i] ){ |
||
1207 | case -1: break; |
||
1208 | case 0: fprintf(js_include_file,"case 0:context_points.clearRect(0,0,xsize,ysize);points_x = [];points_y = [];break;");break; |
||
1209 | case 1: fprintf(js_include_file,"case 1:points_x.pop();points_y.pop();draw_points();break;");break; |
||
1210 | case 2: fprintf(js_include_file,"case 2:context_circles.clearRect(0,0,xsize,ysize);circles_x = [];circles_y = []; multi_radius = [];break;");break; |
||
1211 | case 3: fprintf(js_include_file,"case 3:circles_x.pop();circles_y.pop(); multi_radius.pop();draw_circles();break;");break; |
||
1212 | case 4: fprintf(js_include_file,"case 4:context_lines.clearRect(0,0,xsize,ysize);lines_x = [];lines_y = [];break;");break; |
||
1213 | case 5: fprintf(js_include_file,"case 5:lines_x.pop();lines_y.pop();lines_x.pop();lines_y.pop();draw_lines();break;");break; |
||
1214 | case 6: fprintf(js_include_file,"case 6:context_segments.clearRect(0,0,xsize,ysize);segments_x = [];segments_y = [];break;");break; |
||
1215 | case 7: fprintf(js_include_file,"case 7:segments_x.pop();segments_y.pop();segments_x.pop();segments_y.pop();draw_segments();break;");break; |
||
1216 | case 8: fprintf(js_include_file,"case 8:context_arrows.clearRect(0,0,xsize,ysize);arrows_x = [];arrows_y = [];break;");break; |
||
1217 | case 9: fprintf(js_include_file,"case 9:arrows_x.pop();arrows_y.pop();arrows_x.pop();arrows_y.pop();draw_arrows();break;");break; |
||
1218 | case 10:fprintf(js_include_file,"case 10:context_triangles.clearRect(0,0,xsize,ysize); triangles_x = [];triangles_y = [];break;");break; |
||
1219 | case 11:fprintf(js_include_file,"case 11:for(var p=0;p<3;p++){triangles_x.pop();triangles_y.pop();};draw_triangles();break;");break; |
||
1220 | case 12:fprintf(js_include_file,"case 12:context_closedpoly.clearRect(0,0,xsize,ysize);closedpoly_x = [];closedpoly_y = [];break;");break; |
||
1221 | case 13:fprintf(js_include_file,"case 13:context_text.clearRect(0,0,xsize,ysize);text_x.pop();text_y.pop();text_abc.pop();draw_text();break;");break; |
||
1222 | case 14:fprintf(js_include_file,"case 14:context_rects.clearRect(0,0,xsize,ysize);rects_x = [];rects_y = [];break;");break; |
||
1223 | case 15:fprintf(js_include_file,"case 15:rects_x.pop();rects_y.pop();rects_x.pop();rects_y.pop();draw_rects();break;");break; |
||
1224 | case 16:fprintf(js_include_file,"case 16:context_polys.clearRect(0,0,xsize,ysize); polys_x = [];polys_y = [];break;");break; |
||
1225 | case 17:fprintf(js_include_file,"case 17:for(var p=0;p<polynum;p++){polys_x.pop();polys_y.pop();};draw_polys();break;");break; |
||
1226 | case 18:fprintf(js_include_file,"case 18:context_parallelogram.clearRect(0,0,xsize,ysize); parallelogram_x = [];parallelogram_y = [];break;");break; |
||
1227 | case 19:fprintf(js_include_file,"case 19:for(var p = 0; p < 4;p++){ parallelogram_x.pop();parallelogram_y.pop();};draw_parallelogram();break;");break; |
||
1228 | case 20:fprintf(js_include_file,"case 20:context_images.clearRect(0,0,xsize,ysize);var len = images_id.length;if( len == 0 ){return;};var img = document.getElementById(images_id[len-1]);if( img.tagName == 'DIV' ){ img.innerHTML=null;};images_x.pop();images_y.pop();images_id.pop();draw_images();break;");break; |
||
1229 | case 21:fprintf(js_include_file,"case 21:context_curvedarrows.clearRect(0,0,xsize,ysize);curvedarrows_x = [];curvedarrows_y = [];break;");break; |
||
1230 | case 22:fprintf(js_include_file,"case 22:curvedarrows_x.pop();curvedarrows_y.pop();curvedarrows_x.pop();curvedarrows_y.pop();curvedarrows_x.pop();curvedarrows_y.pop();draw_curvedarrows();break;");break; |
||
1231 | case 23:fprintf(js_include_file,"case 23:context_curvedarrows2.clearRect(0,0,xsize,ysize);curvedarrows2_x = [];curvedarrows2_y = [];break;");break; |
||
1232 | case 24:fprintf(js_include_file,"case 24:curvedarrows2_x.pop();curvedarrows2_y.pop();curvedarrows2_x.pop();curvedarrows2_y.pop();curvedarrows2_x.pop();curvedarrows2_y.pop();draw_curvedarrows2();break;");break; |
||
1233 | case 25:fprintf(js_include_file,"case 25:context_crosshairs.clearRect(0,0,xsize,ysize);crosshairs_x = [];crosshairs_y = [];break;");break; |
||
1234 | case 26:fprintf(js_include_file,"case 26:crosshairs_x.pop();crosshairs_y.pop();draw_crosshairs();break;");break; |
||
1235 | default:break; |
||
1236 | } |
||
15111 | schaersvoo | 1237 | } |
18556 | bpr | 1238 | fprintf(js_include_file,"};return;};"); |
15111 | schaersvoo | 1239 | /* end clear_draw_area();*/ |
1240 | |||
1241 | /* add </table> is button controls are needed */ |
||
18556 | bpr | 1242 | if( no_controls != 1 ){fprintf(js_include_file,"inner_html+=\"</table>\";tooltip_div.innerHTML = inner_html;"); } |
1243 | free(str); |
||
15111 | schaersvoo | 1244 | } |
1245 | /* end 'void add_js_multidraw()' */ |
||
1246 | |||
1247 | /* if( desc >20 ){A = coord_split(x1);B = coord_split(y1);C = coord_split(z1);if(A.length != 2 || B.length != 2 || C.length != 2 ){alert('coordinate mismatch');return;};x1 = x2px(safe_eval(A[0]));y1 = y2px(safe_eval(A[1]));x2 = x2px(safe_eval(B[0]));y2 = y2px(safe_eval(B[1]));x3 = x2px(safe_eval(C[0]));y3 = y2px(safe_eval(C[1]));};};};\ |
||
1248 | |||
18572 | bpr | 1249 | inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
1250 | if( multiuserinput[%d] == '1' ){inner_html+=\"<td><b>(<input type='text' size='5' value='x1 : y1' id='input_curvedarrows2_x'>) -- (<input type='text' size='5' value='x2 : y2' id='input_curvedarrows2_y'>) -- (<input type='text' size='5' value='x3 : y3' id='input_curvedarrows2_r'>)</b></td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_curvedarrows2_x,input_curvedarrows2_y,input_curvedarrows2_r);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 1251 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
1252 | |||
18572 | bpr | 1253 | inner_html+=\"<tr><td><input type='button' onclick='javascript:userdraw_primitive=%d;multidraw_object_cnt = 0;' value='\"+multilabel[%d]+\"'></td><td><input type='button' onclick='javascript:clear_draw_area%d(%d);' value='delete'></td>\";\ |
1254 | if( multiuserinput[%d] == '1' ){inner_html+=\"<td><b>(<input type='text' size='5' value='x1 : y1' id='input_curvedarrows_x'>) -- (<input type='text' size='5' value='x2 : y2' id='input_curvedarrows_y'>) -- (<input type='text' size='5' value='x3 : y3' id='input_curvedarrows_r'>)</b></td><td><input type='button' id='canvasdraw_ok_button' onclick='javascript:update_draw_area%d(%d,input_curvedarrows_x,input_curvedarrows_y,input_curvedarrows_r);' value='OK'></td></tr>\";}else{inner_html+=\"</tr>\";};", |
||
15111 | schaersvoo | 1255 | u,i,canvas_root_id,u,i,canvas_root_id,u); |
1256 | |||
15126 | bpr | 1257 | */ |