Subversion Repositories wimsdev

Rev

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>&nbsp;</td></tr>\";}else{inner_html+=\"<td>&nbsp;</td><td>&nbsp;</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
*/