Subversion Repositories wimsdev

Rev

Rev 17576 | Rev 18559 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 17576 Rev 18556
Line 9... Line 9...
9
"crosshair","crosshairs","function","functions"};
9
"crosshair","crosshairs","function","functions"};
10
/*size of words "point","points",... == 6,7,..*/
10
/*size of words "point","points",... == 6,7,..*/
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};
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};
12
 
12
 
13
void add_js_multidraw(char *draw_types,char *table_css,int use_offset,int no_controls,int crosshair_size,int use_zoom){
13
void add_js_multidraw(char *draw_types,char *table_css,int use_offset,int no_controls,int crosshair_size,int use_zoom){
14
 int i=0;int p;int found = 0;
14
  int i=0;int p;int found = 0;
15
 size_t L0 = 1 + snprintf(NULL,0,"%s",draw_types);
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];
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 */
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];
18
  int draw_nums[MAX_MULTI_PRIMITIVES];
19
 for(i=0;i<MAX_MULTI_PRIMITIVES;i++){draw_nums[i] = -1;user_nums[i] = -1;}
19
  for(i=0;i<MAX_MULTI_PRIMITIVES;i++){draw_nums[i] = -1;user_nums[i] = -1;}
20
/* link the user given primitives to the internal indexes of the draw primitives */
20
/* link the user given primitives to the internal indexes of the draw primitives */
21
 int equal = -1; i = 0;
21
  int equal = -1; i = 0;
22
 array[i] = strtok(str,",");
22
  array[i] = strtok(str,",");
23
 int polynum = -1;
23
  int polynum = -1;
24
 char *pp;int safe=0;
24
  char *pp;int safe=0;
25
 while(array[i]!=NULL){
25
  while(array[i]!=NULL){
26
  found = 0;
26
    found = 0;
27
  if( strstr(array[i],"poly") != NULL ){/* getting the numerical argument from: poly3...polys9 */
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){
28
      if( strstr(array[i],"closedpoly") == NULL && strstr(array[i],"polygon") == NULL){
-
 
29
        pp = array[i];
29
    pp = array[i];while( *pp ){safe++;
30
          while( *pp ){safe++;
30
    if(safe > MAX_MULTI_PRIMITIVES){break;}
31
            if(safe > MAX_MULTI_PRIMITIVES){break;}
31
    if( isdigit(*pp) ){ polynum = atoi(pp);if( strstr( array[i],"polys") != NULL ) {array[i] = "polys";}else{ array[i] = "poly";}break;} else { pp++;}
32
            if( isdigit(*pp) ){ polynum = atoi(pp);if( strstr( array[i],"polys") != NULL ) {array[i] = "polys";}else{ array[i] = "poly";}break;} else { pp++;}
32
    }
33
          }
33
   }
34
        }
34
  }
35
      }
35
  for( p = 0 ; p < MAX_MULTI_PRIMITIVES; p++){
36
      for( p = 0 ; p < MAX_MULTI_PRIMITIVES; p++){
36
  /* multidraw_primitives defined in canvasdraw.h */
37
  /* multidraw_primitives defined in canvasdraw.h */
37
   equal = strncmp(multidraw_primitives[p],array[i],multidraw_primitives_length[p]);
38
        equal = strncmp(multidraw_primitives[p],array[i],multidraw_primitives_length[p]);
38
   if (equal == 0 ){
39
        if (equal == 0 ){
39
/*    fprintf(stdout,"found %s i=%d p=%d<br>",multidraw_primitives[p],i,p);*/
40
/*    fprintf(stdout,"found %s i=%d p=%d<br>",multidraw_primitives[p],i,p);*/
40
    draw_nums[p]= p;user_nums[p] = i;
41
          draw_nums[p]= p;user_nums[p] = i;
41
    found=1; break;
42
          found=1; break;
42
   }
43
        }
43
  }
44
      }
44
  if( found == 0 ){canvas_error("unknown multidraw primitive found...typo?");}
45
      if( found == 0 ){canvas_error("unknown multidraw primitive found...typo?");}
45
  array[++i] = strtok(NULL,",");
46
      array[++i] = strtok(NULL,",");
46
 }
47
    }
47
/* multilabel is js-array */
48
/* multilabel is js-array */
48
 if( no_controls != 1 ){ fprintf(js_include_file,"var inner_html=\"<table class='%s'>\";",table_css); }else{fprintf(js_include_file,"var inner_html = \"\";");}
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 = \"\";");}
49
 
50
 
50
 /* some default stuff */
51
 /* some default stuff */
51
 fprintf(js_include_file,"\n/* multidraw  */\
52
  fprintf(js_include_file,"\n/* multidraw  */\
52
var canvas_userdraw = create_canvas%d(1000,xsize,ysize);var context_userdraw = canvas_userdraw.getContext(\"2d\");\
53
var canvas_userdraw = create_canvas%d(1000,xsize,ysize);var context_userdraw = canvas_userdraw.getContext(\"2d\");\
53
var multidraw_object_cnt = 0;\
54
var multidraw_object_cnt = 0;\
54
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
55
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
55
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;};};\
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;};};\
56
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);
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);
57
 
-
 
58
 
58
 
59
 
-
 
60
if( use_zoom == 1 ){/* only use zoom when command 'zoom color' is given before command 'multidraw' */
59
  if( use_zoom == 1 ){/* only use zoom when command 'zoom color' is given before command 'multidraw' */
61
fprintf(js_include_file,"forbidden_zone = [%d,%d];\
60
    fprintf(js_include_file,"forbidden_zone = [%d,%d];\
62
function recalculate_multidraw(xmin0,xmax0,ymin0,ymax0){\
61
function recalculate_multidraw(xmin0,xmax0,ymin0,ymax0){\
63
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;};\
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;};\
64
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);
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);
65
 
-
 
66
 
-
 
67
 for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
64
    for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
68
  switch( draw_nums[i] ){
65
      switch( draw_nums[i] ){
69
   case -1        : break;
66
        case -1   : break;
70
   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;
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;
71
   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;
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;
72
   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;
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;
73
   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;
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;
74
   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;
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;
75
   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;
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;
76
   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;
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;
77
   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;
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;
78
   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;
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;
79
   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;
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;
80
   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;
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;
81
   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;
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;
82
   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;
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;
83
   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;
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;
84
   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;
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;
85
   case 27:break;
82
        case 27:break;
86
   default        : break;
83
        default   : break;
-
 
84
      }
-
 
85
    }
-
 
86
    fprintf(js_include_file," return;};");
87
  }
87
  }
88
 }
-
 
89
 fprintf(js_include_file," return;};");
-
 
90
}
-
 
91
 /* begin user_draw() */
88
 /* begin user_draw() */
92
 fprintf(js_include_file,"function user_draw(evt){\
89
  fprintf(js_include_file,"function user_draw(evt){\
93
 if(evt.button == 3){clear_draw_area%d(userdraw_primitive,0);return;};\
90
 if(evt.button == 3){clear_draw_area%d(userdraw_primitive,0);return;};\
94
 var mouse = getMouse(evt,canvas_userdraw);\
91
 var mouse = getMouse(evt,canvas_userdraw);\
95
 var x = mouse.x;var y = mouse.y;\
92
 var x = mouse.x;var y = mouse.y;\
96
 user_is_dragging = false;\
93
 user_is_dragging = false;\
97
 if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\
94
 if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\
98
 switch(userdraw_primitive){",canvas_root_id);
95
 switch(userdraw_primitive){",canvas_root_id);
99
 for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
96
  for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
100
  switch( draw_nums[i] ){
97
    switch( draw_nums[i] ){
101
   case -1: break;
98
      case -1: break;
102
   case 0:fprintf(js_include_file,"case 0: points(x,y,0,0);break;");break;
99
      case 0:fprintf(js_include_file,"case 0: points(x,y,0,0);break;");break;
103
   case 1:fprintf(js_include_file,"case 1: points(x,y,0,1);break;");break;
100
      case 1:fprintf(js_include_file,"case 1: points(x,y,0,1);break;");break;
104
   case 2:fprintf(js_include_file,"case 2: circles(x,y,0,0);break;");break;
101
      case 2:fprintf(js_include_file,"case 2: circles(x,y,0,0);break;");break;
105
   case 3:fprintf(js_include_file,"case 3: circles(x,y,0,1);break;");break;
102
      case 3:fprintf(js_include_file,"case 3: circles(x,y,0,1);break;");break;
106
   case 4:fprintf(js_include_file,"case 4: lines(x,y,0,0);break;");break;
103
      case 4:fprintf(js_include_file,"case 4: lines(x,y,0,0);break;");break;
107
   case 5:fprintf(js_include_file,"case 5: lines(x,y,0,1);break;");break;
104
      case 5:fprintf(js_include_file,"case 5: lines(x,y,0,1);break;");break;
108
   case 6:fprintf(js_include_file,"case 6: segments(x,y,0,0);break;");break;
105
      case 6:fprintf(js_include_file,"case 6: segments(x,y,0,0);break;");break;
109
   case 7:fprintf(js_include_file,"case 7: segments(x,y,0,1);break;");break;
106
      case 7:fprintf(js_include_file,"case 7: segments(x,y,0,1);break;");break;
110
   case 8:fprintf(js_include_file,"case 8: arrows(x,y,0,0);break;");break;
107
      case 8:fprintf(js_include_file,"case 8: arrows(x,y,0,0);break;");break;
111
   case 9:fprintf(js_include_file,"case 9: arrows(x,y,0,1);break;");break;
108
      case 9:fprintf(js_include_file,"case 9: arrows(x,y,0,1);break;");break;
112
   case 10:fprintf(js_include_file,"case 10: triangles(x,y,0,0);break;");break;
109
      case 10:fprintf(js_include_file,"case 10: triangles(x,y,0,0);break;");break;
113
   case 11:fprintf(js_include_file,"case 11: triangles(x,y,0,1);break;");break;
110
      case 11:fprintf(js_include_file,"case 11: triangles(x,y,0,1);break;");break;
114
   case 12:fprintf(js_include_file,"case 12: closedpoly(x,y,0,0);break;");break;
111
      case 12:fprintf(js_include_file,"case 12: closedpoly(x,y,0,0);break;");break;
115
   case 13:fprintf(js_include_file,"case 13: text(x,y,0,1);break;");break;
112
      case 13:fprintf(js_include_file,"case 13: text(x,y,0,1);break;");break;
116
   case 14:fprintf(js_include_file,"case 14: rects(x,y,0,0);break;");break;
113
      case 14:fprintf(js_include_file,"case 14: rects(x,y,0,0);break;");break;
117
   case 15:fprintf(js_include_file,"case 15: rects(x,y,0,1);break;");break;
114
      case 15:fprintf(js_include_file,"case 15: rects(x,y,0,1);break;");break;
118
   case 16:fprintf(js_include_file,"case 16: polys(x,y,0,0);break;");break;
115
      case 16:fprintf(js_include_file,"case 16: polys(x,y,0,0);break;");break;
119
   case 17:fprintf(js_include_file,"case 17: polys(x,y,0,1);break;");break;
116
      case 17:fprintf(js_include_file,"case 17: polys(x,y,0,1);break;");break;
120
   case 18:fprintf(js_include_file,"case 18: parallelogram(x,y,0,0);break;");break;
117
      case 18:fprintf(js_include_file,"case 18: parallelogram(x,y,0,0);break;");break;
121
   case 19:fprintf(js_include_file,"case 19: parallelogram(x,y,0,1);break;");break;
118
      case 19:fprintf(js_include_file,"case 19: parallelogram(x,y,0,1);break;");break;
122
   case 20:fprintf(js_include_file,"case 20: images(x,y,0,1);break;");break;
119
      case 20:fprintf(js_include_file,"case 20: images(x,y,0,1);break;");break;
123
   case 21:fprintf(js_include_file,"case 21: curvedarrows(x,y,0,0);break;");break;
120
      case 21:fprintf(js_include_file,"case 21: curvedarrows(x,y,0,0);break;");break;
124
   case 22:fprintf(js_include_file,"case 22: curvedarrows(x,y,0,1);break;");break;
121
      case 22:fprintf(js_include_file,"case 22: curvedarrows(x,y,0,1);break;");break;
125
   case 23:fprintf(js_include_file,"case 23: curvedarrows2(x,y,0,0);break;");break;
122
      case 23:fprintf(js_include_file,"case 23: curvedarrows2(x,y,0,0);break;");break;
126
   case 24:fprintf(js_include_file,"case 24: curvedarrows2(x,y,0,1);break;");break;
123
      case 24:fprintf(js_include_file,"case 24: curvedarrows2(x,y,0,1);break;");break;
127
   case 25:fprintf(js_include_file,"case 25: crosshairs(x,y,0,0);break;");break;
124
      case 25:fprintf(js_include_file,"case 25: crosshairs(x,y,0,0);break;");break;
128
   case 26:fprintf(js_include_file,"case 26: crosshairs(x,y,0,1);break;");break;
125
      case 26:fprintf(js_include_file,"case 26: crosshairs(x,y,0,1);break;");break;
129
   case 27:fprintf(js_include_file,"case 27:break;");break;
126
      case 27:fprintf(js_include_file,"case 27:break;");break;
130
   default: break;
127
      default: break;
-
 
128
    }
131
  }
129
  }
132
 }
-
 
133
 fprintf(js_include_file,"default:break;};return;};");
130
  fprintf(js_include_file,"default:break;};return;};");
134
 /* end user_draw()*/
131
 /* end user_draw()*/
135
 
132
 
136
/* should we use a fillpattern ? */
133
/* should we use a fillpattern ? */
137
 
134
 
138
 /* begin user_drag() */
135
 /* begin user_drag() */
139
 fprintf(js_include_file,"function user_drag(evt){\
136
  fprintf(js_include_file,"function user_drag(evt){\
140
 var mouse = getMouse(evt,canvas_userdraw);\
137
 var mouse = getMouse(evt,canvas_userdraw);\
141
 var x = mouse.x;var y = mouse.y;\
138
 var x = mouse.x;var y = mouse.y;\
142
 user_is_dragging = true;\
139
 user_is_dragging = true;\
143
 if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\
140
 if(x>forbidden_zone[0] && y>forbidden_zone[1]){console.log('drawing in zoom area...');return;};\
144
 switch(userdraw_primitive){");
141
 switch(userdraw_primitive){");
145
 for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
142
  for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
146
  switch( draw_nums[i] ){
143
    switch( draw_nums[i] ){
147
   case -1: break;
144
      case -1: break;
148
   case 0:fprintf(js_include_file,"case 0: break;");break;
145
      case 0:fprintf(js_include_file,"case 0: break;");break;
149
   case 1:fprintf(js_include_file,"case 1: break;");break;
146
      case 1:fprintf(js_include_file,"case 1: break;");break;
150
   case 2:fprintf(js_include_file,"case 2: circles(x,y,1,0);break;");break;
147
      case 2:fprintf(js_include_file,"case 2: circles(x,y,1,0);break;");break;
151
   case 3:fprintf(js_include_file,"case 3: circles(x,y,1,1);break;");break;
148
      case 3:fprintf(js_include_file,"case 3: circles(x,y,1,1);break;");break;
152
   case 4:fprintf(js_include_file,"case 4: lines(x,y,1,0);break;");break;
149
      case 4:fprintf(js_include_file,"case 4: lines(x,y,1,0);break;");break;
153
   case 5:fprintf(js_include_file,"case 5: lines(x,y,1,1);break;");break;
150
      case 5:fprintf(js_include_file,"case 5: lines(x,y,1,1);break;");break;
154
   case 6:fprintf(js_include_file,"case 6: segments(x,y,1,0);break;");break;
151
      case 6:fprintf(js_include_file,"case 6: segments(x,y,1,0);break;");break;
155
   case 7:fprintf(js_include_file,"case 7: segments(x,y,1,1);break;");break;
152
      case 7:fprintf(js_include_file,"case 7: segments(x,y,1,1);break;");break;
156
   case 8:fprintf(js_include_file,"case 8: arrows(x,y,1,0);break;");break;
153
      case 8:fprintf(js_include_file,"case 8: arrows(x,y,1,0);break;");break;
157
   case 9:fprintf(js_include_file,"case 9: arrows(x,y,1,1);break;");break;
154
      case 9:fprintf(js_include_file,"case 9: arrows(x,y,1,1);break;");break;
158
   case 10:fprintf(js_include_file,"case 10: triangles(x,y,1,0);break;");break;
155
      case 10:fprintf(js_include_file,"case 10: triangles(x,y,1,0);break;");break;
159
   case 11:fprintf(js_include_file,"case 11: triangles(x,y,1,1);break;");break;
156
      case 11:fprintf(js_include_file,"case 11: triangles(x,y,1,1);break;");break;
160
   case 12:fprintf(js_include_file,"case 12: closedpoly(x,y,1,0);break;");break;
157
      case 12:fprintf(js_include_file,"case 12: closedpoly(x,y,1,0);break;");break;
161
   case 13:fprintf(js_include_file,"case 13: break;");break;
158
      case 13:fprintf(js_include_file,"case 13: break;");break;
162
   case 14:fprintf(js_include_file,"case 14: rects(x,y,1,0);break;");break;
159
      case 14:fprintf(js_include_file,"case 14: rects(x,y,1,0);break;");break;
163
   case 15:fprintf(js_include_file,"case 15: rects(x,y,1,1);break;");break;
160
      case 15:fprintf(js_include_file,"case 15: rects(x,y,1,1);break;");break;
164
   case 16:fprintf(js_include_file,"case 16: polys(x,y,1,0);break;");break;
161
      case 16:fprintf(js_include_file,"case 16: polys(x,y,1,0);break;");break;
165
   case 17:fprintf(js_include_file,"case 17: polys(x,y,1,1);break;");break;
162
      case 17:fprintf(js_include_file,"case 17: polys(x,y,1,1);break;");break;
166
   case 18:fprintf(js_include_file,"case 18: parallelogram(x,y,1,0);break;");break;
163
      case 18:fprintf(js_include_file,"case 18: parallelogram(x,y,1,0);break;");break;
167
   case 19:fprintf(js_include_file,"case 19: parallelogram(x,y,1,1);break;");break;
164
      case 19:fprintf(js_include_file,"case 19: parallelogram(x,y,1,1);break;");break;
168
   case 20:fprintf(js_include_file,"case 20: images(x,y,1,1);break;");break;
165
      case 20:fprintf(js_include_file,"case 20: images(x,y,1,1);break;");break;
169
   case 21:fprintf(js_include_file,"case 21: curvedarrows(x,y,1,0);break;");break;
166
      case 21:fprintf(js_include_file,"case 21: curvedarrows(x,y,1,0);break;");break;
170
   case 22:fprintf(js_include_file,"case 22: curvedarrows(x,y,1,1);break;");break;
167
      case 22:fprintf(js_include_file,"case 22: curvedarrows(x,y,1,1);break;");break;
171
   case 23:fprintf(js_include_file,"case 23: curvedarrows2(x,y,1,0);break;");break;
168
      case 23:fprintf(js_include_file,"case 23: curvedarrows2(x,y,1,0);break;");break;
172
   case 24:fprintf(js_include_file,"case 24: curvedarrows2(x,y,1,1);break;");break;
169
      case 24:fprintf(js_include_file,"case 24: curvedarrows2(x,y,1,1);break;");break;
173
   case 25:fprintf(js_include_file,"case 25: break;");break;
170
      case 25:fprintf(js_include_file,"case 25: break;");break;
174
   case 26:fprintf(js_include_file,"case 26: break;");break;
171
      case 26:fprintf(js_include_file,"case 26: break;");break;
175
   case 27:fprintf(js_include_file,"case 27: break;");break;
172
      case 27:fprintf(js_include_file,"case 27: break;");break;
176
   default:break;
173
      default:break;
-
 
174
    }
177
  }
175
  }
178
 }
-
 
179
 fprintf(js_include_file,"default:break; };return;};");
176
  fprintf(js_include_file,"default:break; };return;};");
180
 /* end user_drag() */
177
 /* end user_drag() */
181
/* 17/1/2021 corrected syntax issue signalled by Opera Presto : 'forbidden function user_drawstop(evt) declaration in statement'*/
178
/* 17/1/2021 corrected syntax issue signalled by Opera Presto : 'forbidden function user_drawstop(evt) declaration in statement'*/
182
fprintf(js_include_file,"if(wims_status != \"done\"){\
179
  fprintf(js_include_file,"if(wims_status != \"done\"){\
183
 canvas_div.addEventListener('mousedown',user_draw,false);\
180
 canvas_div.addEventListener('mousedown',user_draw,false);\
184
 canvas_div.addEventListener('mousemove',user_drag,false);\
181
 canvas_div.addEventListener('mousemove',user_drag,false);\
185
 canvas_div.addEventListener('touchstart'  , function(e) { e.preventDefault(); user_draw(e.changedTouches[0]);},false);\
182
 canvas_div.addEventListener('touchstart'  , function(e) { e.preventDefault(); user_draw(e.changedTouches[0]);},false);\
186
 canvas_div.addEventListener('touchmove'  , function(e) { e.preventDefault(); user_drag(e.changedTouches[0]);},false);\
183
 canvas_div.addEventListener('touchmove'  , function(e) { e.preventDefault(); user_drag(e.changedTouches[0]);},false);\
187
 canvas_div.addEventListener('touchend'  , function(e) { e.preventDefault(); user_drawstop(e.changedTouches[0]);},false);\
184
 canvas_div.addEventListener('touchend'  , function(e) { e.preventDefault(); user_drawstop(e.changedTouches[0]);},false);\
Line 190... Line 187...
190
  if(!user_is_dragging){user_drag(evt);return;};\
187
  if(!user_is_dragging){user_drag(evt);return;};\
191
  if(user_is_dragging){user_draw(evt);return;};\
188
  if(user_is_dragging){user_draw(evt);return;};\
192
 };\
189
 };\
193
};");
190
};");
194
 
191
 
195
/* add all stuff needed ti draw the selected primitives... */
192
/* add all stuff needed to draw the selected primitives... */
196
int u;
193
  int u;
197
 for(u=0; u < MAX_MULTI_PRIMITIVES ; u++ ){
194
  for(u=0; u < MAX_MULTI_PRIMITIVES ; u++ ){
198
  i = user_nums[u];
195
    i = user_nums[u];
199
  /*
196
  /*
200
  u = index of technical draw primitive
197
  u = index of technical draw primitive
201
  i = index of user defined draw primitive
198
  i = index of user defined draw primitive
202
  */
199
  */
203
  switch( draw_nums[u] ){
200
    switch( draw_nums[u] ){
204
  /* point/points */
201
  /* point/points */
205
  case -1 : break;
202
      case -1 : break;
206
  case 0 ... 1:
203
      case 0 ... 1:
207
  fprintf(js_include_file,"function points(x,y,event_which,num){\
204
        fprintf(js_include_file,"function points(x,y,event_which,num){\
208
   if(event_which == 1){ return; };\
205
   if(event_which == 1){ return; };\
209
   var xy = multi_snap_check(x,y,points_snap);\
206
   var xy = multi_snap_check(x,y,points_snap);\
210
   if( num == 0 ){\
207
   if( num == 0 ){\
211
    points_x[0] = xy[0];\
208
    points_x[0] = xy[0];\
212
    points_y[0] = xy[1];\
209
    points_y[0] = xy[1];\
Line 232... Line 229...
232
  context_points.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
229
  context_points.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
233
  context_points.fillStyle = context_points.strokeStyle;\
230
  context_points.fillStyle = context_points.strokeStyle;\
234
  context_points.lineWidth = multilinewidth[%d];if(multilinewidth[%d] %%2 == 1){ context_points.translate(0.5,0.5);};\
231
  context_points.lineWidth = multilinewidth[%d];if(multilinewidth[%d] %%2 == 1){ context_points.translate(0.5,0.5);};\
235
  var points_x = new Array();var points_y = new Array();\
232
  var points_x = new Array();var points_y = new Array();\
236
  var points_snap = multisnaptogrid[%d];",canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i);
233
  var points_snap = multisnaptogrid[%d];",canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i);
237
  if( no_controls != 1){
234
        if( no_controls != 1){
238
   fprintf(js_include_file,"\
235
          fprintf(js_include_file,"\
239
   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>\";\
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>\";\
240
   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>\";};",
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>\";};",
241
   u,i,canvas_root_id,u,i,canvas_root_id,u);
238
   u,i,canvas_root_id,u,i,canvas_root_id,u);
242
  } else {
239
        } else {
243
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
240
          fprintf(js_include_file,"userdraw_primitive = %d;",u);
244
  }
241
        }
245
  break;
242
        break;
246
 
-
 
247
 
-
 
248
  /* circle/circles */
243
  /* circle/circles */
249
  case 2 ... 3 :
244
      case 2 ... 3 :
250
  fprintf(js_include_file,"function circles(x,y,event_which,num){\
245
        fprintf(js_include_file,"function circles(x,y,event_which,num){\
251
   var xy = multi_snap_check(x,y,circles_snap);\
246
   var xy = multi_snap_check(x,y,circles_snap);\
252
   var last = circles_x.length - 1;\
247
   var last = circles_x.length - 1;\
253
   var xc = circles_x[last];\
248
   var xc = circles_x[last];\
254
   var yc = circles_y[last];\
249
   var yc = circles_y[last];\
255
   if(event_which == 0){\
250
   if(event_which == 0){\
Line 293... Line 288...
293
  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)\";};\
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)\";};\
294
  if(multidash[%d] == 1 ){ if( context_circles.setLineDash ){context_circles.setLineDash([2,4]);}else{if(context_circles.mozDash){context_circles.mozDash = [2,4]};};};\
289
  if(multidash[%d] == 1 ){ if( context_circles.setLineDash ){context_circles.setLineDash([2,4]);}else{if(context_circles.mozDash){context_circles.mozDash = [2,4]};};};\
295
  var circles_x = new Array();var circles_y = new Array();var multi_radius = new Array();\
290
  var circles_x = new Array();var circles_y = new Array();var multi_radius = new Array();\
296
  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);
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);
297
 
292
 
298
  if(no_controls != 1 ){  /* for BPR...*/
293
    if(no_controls != 1 ){  /* for BPR...*/
299
   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>\";\
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>\";\
300
   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>\";};",
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>\";};",
301
   u,i,canvas_root_id,u,i,canvas_root_id,u);
296
   u,i,canvas_root_id,u,i,canvas_root_id,u);
302
  } else {
297
        } else {
303
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
298
          fprintf(js_include_file,"userdraw_primitive = %d;",u);
304
  }
299
        }
305
  break;
300
        break;
306
  /* line/lines */
301
  /* line/lines */
307
  case 4 ... 5 :
302
      case 4 ... 5 :
308
  fprintf(js_include_file,"function calc_lines(){\
303
        fprintf(js_include_file,"function calc_lines(){\
309
   var marge = 2;var len = lines_x.length;\
304
   var marge = 2;var len = lines_x.length;\
310
   var tmp_x = new Array(len);\
305
   var tmp_x = new Array(len);\
311
   var tmp_y = new Array(len);\
306
   var tmp_y = new Array(len);\
312
   var pp;\
307
   var pp;\
313
   for(var p = 0 ; p < len ; p = p+2){\
308
   for(var p = 0 ; p < len ; p = p+2){\
Line 336... Line 331...
336
   } else {\
331
   } else {\
337
    if( multidraw_object_cnt == 1 ){\
332
    if( multidraw_object_cnt == 1 ){\
338
     lines_x.push(xy[0]);lines_y.push(xy[1]);\
333
     lines_x.push(xy[0]);lines_y.push(xy[1]);\
339
     draw_lines();\
334
     draw_lines();\
340
     lines_x.pop();lines_y.pop();\
335
     lines_x.pop();lines_y.pop();\
341
    };\
336
    };\
342
   };\
337
   };\
343
   if( multidraw_object_cnt == 2 ){\
338
   if( multidraw_object_cnt == 2 ){\
344
    multidraw_object_cnt = 0;\
339
    multidraw_object_cnt = 0;\
345
    draw_lines();\
340
    draw_lines();\
346
   };\
341
   };\
347
  };function draw_lines(){\
342
  };function draw_lines(){\
348
   var len = lines_x.length;\
343
   var len = lines_x.length;\
Line 365... Line 360...
365
  context_lines.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
360
  context_lines.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
366
  if(multidash[%d] == 1 ){ if( context_lines.setLineDash ){context_lines.setLineDash([2,4]);}else{\
361
  if(multidash[%d] == 1 ){ if( context_lines.setLineDash ){context_lines.setLineDash([2,4]);}else{\
367
  if(context_lines.mozDash){context_lines.mozDash = [2,4]};};};\
362
  if(context_lines.mozDash){context_lines.mozDash = [2,4]};};};\
368
  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);
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);
369
 
364
 
370
  if( no_controls != 1 ){  /* for BPR...*/
365
      if( no_controls != 1 ){  /* for BPR...*/
371
   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>\";\
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>\";\
372
   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>\";};",
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>\";};",
373
   u,i,canvas_root_id,u,i,canvas_root_id,u);
368
   u,i,canvas_root_id,u,i,canvas_root_id,u);
374
  } else {
369
      } else {
375
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
370
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
376
  }
371
      }
377
  break;
372
      break;
378
  /* segment/segments */
373
  /* segment/segments */
379
  case 6 ... 7 :
374
    case 6 ... 7 :
380
  fprintf(js_include_file,"function segments(x,y,event_which,num){\
375
      fprintf(js_include_file,"function segments(x,y,event_which,num){\
381
   var xy = multi_snap_check(x,y,segments_snap);\
376
   var xy = multi_snap_check(x,y,segments_snap);\
382
   if(event_which == 0){\
377
   if(event_which == 0){\
383
    if( num == 0 && multidraw_object_cnt == 0 ){segments_x = [];segments_y = [];};\
378
    if( num == 0 && multidraw_object_cnt == 0 ){segments_x = [];segments_y = [];};\
384
    segments_x.push(xy[0]);segments_y.push(xy[1]);\
379
    segments_x.push(xy[0]);segments_y.push(xy[1]);\
385
    multidraw_object_cnt++;\
380
    multidraw_object_cnt++;\
Line 406... Line 401...
406
     context_segments.stroke();\
401
     context_segments.stroke();\
407
    };\
402
    };\
408
   };\
403
   };\
409
   return;\
404
   return;\
410
  };var canvas_segments = create_canvas%d(100%d,xsize,ysize);var context_segments = canvas_segments.getContext(\"2d\");\
405
  };var canvas_segments = create_canvas%d(100%d,xsize,ysize);var context_segments = canvas_segments.getContext(\"2d\");\
411
  if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\
406
  if( multistrokeopacity[%d] > 1 ){ multistrokeopacity[%d] = (0.0039215*multistrokeopacity[%d]).toFixed(2); };\
412
  if( multifillopacity[%d] > 1 ){ multifillopacity[%d] =  (0.0039215*multifillopacity[%d]).toFixed(2); };\
407
  if( multifillopacity[%d] > 1 ){ multifillopacity[%d] =  (0.0039215*multifillopacity[%d]).toFixed(2); };\
413
  context_segments.lineWidth = multilinewidth[%d];\
408
  context_segments.lineWidth = multilinewidth[%d];\
414
  if(multilinewidth[%d]%%2 == 1){ context_segments.translate(0.5,0.5);};\
409
  if(multilinewidth[%d]%%2 == 1){ context_segments.translate(0.5,0.5);};\
415
  context_segments.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
410
  context_segments.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
416
  if(multidash[%d] == 1 ){ if( context_segments.setLineDash ){context_segments.setLineDash([2,4]);}\
411
  if(multidash[%d] == 1 ){ if( context_segments.setLineDash ){context_segments.setLineDash([2,4]);}\
417
  else{if(context_segments.mozDash){context_segments.mozDash = [2,4]};};};\
412
  else{if(context_segments.mozDash){context_segments.mozDash = [2,4]};};};\
418
  var segments_x = new Array();var segments_y = new Array();var segments_snap = multisnaptogrid[%d];",
413
  var segments_x = new Array();var segments_y = new Array();var segments_snap = multisnaptogrid[%d];",
419
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
414
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
420
 
415
 
421
  if( no_controls != 1 ){  /* for BPR...*/
416
    if( no_controls != 1 ){  /* for BPR...*/
422
   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>\";\
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>\";\
423
   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>\";};",
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>\";};",
424
   u,i,canvas_root_id,u,i,canvas_root_id,u);
419
   u,i,canvas_root_id,u,i,canvas_root_id,u);
425
  } else {
420
    } else {
426
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
421
    fprintf(js_include_file,"userdraw_primitive = %d;",u);
427
  }
422
    }
428
  break;
423
    break;
429
  /* arrow/arrows */
424
  /* arrow/arrows */
430
  case 8 ... 9 :
425
    case 8 ... 9 :
431
  fprintf(js_include_file,"function arrows(x,y,event_which,num){\
426
      fprintf(js_include_file,"function arrows(x,y,event_which,num){\
432
   var xy = multi_snap_check(x,y,arrows_snap);\
427
   var xy = multi_snap_check(x,y,arrows_snap);\
433
   if(event_which == 0){\
428
   if(event_which == 0){\
434
    if( num == 0 && multidraw_object_cnt == 0 ){arrows_x = [];arrows_y = [];};\
429
    if( num == 0 && multidraw_object_cnt == 0 ){arrows_x = [];arrows_y = [];};\
435
    arrows_x.push(xy[0]);arrows_y.push(xy[1]);\
430
    arrows_x.push(xy[0]);arrows_y.push(xy[1]);\
436
    multidraw_object_cnt++;\
431
    multidraw_object_cnt++;\
Line 482... Line 477...
482
  context_arrows.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
477
  context_arrows.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
483
  context_arrows.fillStyle = context_arrows.strokeStyle;\
478
  context_arrows.fillStyle = context_arrows.strokeStyle;\
484
  var arrows_x = new Array();var arrows_y = new Array();var arrows_snap = multisnaptogrid[%d];",
479
  var arrows_x = new Array();var arrows_y = new Array();var arrows_snap = multisnaptogrid[%d];",
485
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
480
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
486
 
481
 
487
  if( no_controls != 1 ){  /* for BPR...*/
482
    if( no_controls != 1 ){  /* for BPR...*/
488
   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>\";\
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>\";\
489
   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>\";};",
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>\";};",
490
   u,i,canvas_root_id,u,i,canvas_root_id,u);
485
   u,i,canvas_root_id,u,i,canvas_root_id,u);
491
  } else {
486
    } else {
492
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
487
      fprintf(js_include_file,"userdraw_primitive = %d;",u);
493
  }
488
    }
494
  break;
489
    break;
495
 
490
 
496
  /* triangle/triangles */
491
  /* triangle/triangles */
497
  case 10 ... 11:
492
    case 10 ... 11:
498
  fprintf(js_include_file,"function triangles(x,y,event_which,num){\
493
      fprintf(js_include_file,"function triangles(x,y,event_which,num){\
499
   var xy = multi_snap_check(x,y,triangles_snap);\
494
   var xy = multi_snap_check(x,y,triangles_snap);\
500
   var last = triangles_x.length - 1;\
495
   var last = triangles_x.length - 1;\
501
   if(event_which == 0){\
496
   if(event_which == 0){\
502
    if(num == 0 && multidraw_object_cnt == 0){\
497
    if(num == 0 && multidraw_object_cnt == 0){\
503
     triangles_x = [];triangles_y = [];\
498
     triangles_x = [];triangles_y = [];\
Line 543... Line 538...
543
  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(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)\";};\
544
  if(multidash[%d] == 1 ){ if( context_triangles.setLineDash ){\
539
  if(multidash[%d] == 1 ){ if( context_triangles.setLineDash ){\
545
  context_triangles.setLineDash([2,4]);}else{if(context_triangles.mozDash){context_triangles.mozDash = [2,4]};};};\
540
  context_triangles.setLineDash([2,4]);}else{if(context_triangles.mozDash){context_triangles.mozDash = [2,4]};};};\
546
  var triangles_x = new Array();var triangles_y = new Array();var triangles_snap = multisnaptogrid[%d];",
541
  var triangles_x = new Array();var triangles_y = new Array();var triangles_snap = multisnaptogrid[%d];",
547
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
542
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
548
 
-
 
549
  if(no_controls != 1 ){  /* for BPR...*/
543
      if(no_controls != 1 ){  /* for BPR...*/
550
   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
   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>\";\
551
   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>\";};",
545
   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>\";};",
552
   u,i,canvas_root_id,u,i,canvas_root_id,u);
546
   u,i,canvas_root_id,u,i,canvas_root_id,u);
553
  } else {
547
      } else {
554
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
548
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
555
  }
549
      }
556
  break;
550
      break;
557
  /* closedpoly */
551
  /* closedpoly */
558
  case 12 :
552
    case 12 :
559
  fprintf(js_include_file,"function check_closed(x1,y1,X,Y){\
553
      fprintf(js_include_file,"function check_closed(x1,y1,X,Y){\
560
   var marge=10;\
554
   var marge=10;\
561
   var len = X.length-1;\
555
   var len = X.length-1;\
562
   for(var p = 0 ; p < len ; p++){\
556
   for(var p = 0 ; p < len ; p++){\
563
    if(x1 < X[p] + marge && x1 > X[p] - marge ){\
557
    if(x1 < X[p] + marge && x1 > X[p] - marge ){\
564
     if(y1 < Y[p] + marge && y1 > Y[p] - marge ){\
558
     if(y1 < Y[p] + marge && y1 > Y[p] - marge ){\
Line 616... Line 610...
616
  if(context_closedpoly.mozDash){context_closedpoly.mozDash = [2,4]};};};\
610
  if(context_closedpoly.mozDash){context_closedpoly.mozDash = [2,4]};};};\
617
  var closedpoly_x = new Array();var closedpoly_y = new Array();\
611
  var closedpoly_x = new Array();var closedpoly_y = new Array();\
618
  var closedpoly_snap = multisnaptogrid[%d];",
612
  var closedpoly_snap = multisnaptogrid[%d];",
619
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
613
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
620
 
614
 
621
  if( no_controls != 1 ){  /* for BPR...*/
615
      if( no_controls != 1 ){  /* for BPR...*/
622
   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
   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>\";\
623
   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>\";};",
617
   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>\";};",
624
   u,i,canvas_root_id,u,i,canvas_root_id,u);
618
   u,i,canvas_root_id,u,i,canvas_root_id,u);
625
  } else {
619
      } else {
626
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
620
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
627
  }
621
      }
628
  break;
622
      break;
629
  /* text : always uses user input field !! */
623
  /* text : always uses user input field !! */
630
  case 13:
624
    case 13:
631
  fprintf(js_include_file,"function text(x,y,event_which,num){\
625
      fprintf(js_include_file,"function text(x,y,event_which,num){\
632
   if(event_which == 1){ return; };\
626
   if(event_which == 1){ return; };\
633
   var xy = multi_snap_check(x,y,text_snap);\
627
   var xy = multi_snap_check(x,y,text_snap);\
634
   if( num == 0 ){\
628
   if( num == 0 ){\
635
    text_x[0] = xy[0];\
629
    text_x[0] = xy[0];\
636
    text_y[0] =xy[1];\
630
    text_y[0] =xy[1];\
Line 660... Line 654...
660
  context_text.font = multifont_family;\
654
  context_text.font = multifont_family;\
661
  context_text.fillStyle = \"rgba(\"+multifont_color+\",\"+multistrokeopacity[%d]+\")\";\
655
  context_text.fillStyle = \"rgba(\"+multifont_color+\",\"+multistrokeopacity[%d]+\")\";\
662
  var text_snap = multisnaptogrid[%d];\
656
  var text_snap = multisnaptogrid[%d];\
663
  var text_x = new Array();var text_y = new Array(); var text_abc = new Array();",canvas_root_id,u,i,i);
657
  var text_x = new Array();var text_y = new Array(); var text_abc = new Array();",canvas_root_id,u,i,i);
664
 
658
 
665
  if( no_controls != 1 ){  /* for BPR...*/
659
      if( no_controls != 1 ){  /* for BPR...*/
666
   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);
660
        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);
667
  } else {
661
      } else {
668
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
662
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
669
  }
663
      }
670
  fprintf(js_include_file,"inner_html+=\"</tr>\";");
664
      fprintf(js_include_file,"inner_html+=\"</tr>\";");
671
  break;
665
      break;
672
  /* rect/rects */
666
  /* rect/rects */
673
  case 14 ... 15 :
667
    case 14 ... 15 :
674
  fprintf(js_include_file,"function rects(x,y,event_which,num){\
668
      fprintf(js_include_file,"function rects(x,y,event_which,num){\
675
   var xy = multi_snap_check(x,y,rects_snap);\
669
   var xy = multi_snap_check(x,y,rects_snap);\
676
   if(event_which == 0){\
670
   if(event_which == 0){\
677
    if( num == 0 && multidraw_object_cnt == 0 ){rects_x = [];rects_y = [];};\
671
    if( num == 0 && multidraw_object_cnt == 0 ){rects_x = [];rects_y = [];};\
678
    rects_x.push(xy[0]);rects_y.push(xy[1]);\
672
    rects_x.push(xy[0]);rects_y.push(xy[1]);\
679
    multidraw_object_cnt++;\
673
    multidraw_object_cnt++;\
680
   } else {\
674
   } else {\
681
    if( multidraw_object_cnt == 1 ){\
675
    if( multidraw_object_cnt == 1 ){\
682
     rects_x.push(xy[0]);rects_y.push(xy[1]);\
676
     rects_x.push(xy[0]);rects_y.push(xy[1]);\
683
     draw_rects();\
677
     draw_rects();\
684
     rects_x.pop();rects_y.pop();\
678
     rects_x.pop();rects_y.pop();\
685
    };\
679
    };\
686
   };\
680
   };\
687
   if( multidraw_object_cnt == 2 ){\
681
   if( multidraw_object_cnt == 2 ){\
688
    multidraw_object_cnt = 0;\
682
    multidraw_object_cnt = 0;\
689
    draw_rects();\
683
    draw_rects();\
690
   };\
684
   };\
Line 710... Line 704...
710
  if(context_rects.mozDash){context_rects.mozDash = [2,4]};};};\
704
  if(context_rects.mozDash){context_rects.mozDash = [2,4]};};};\
711
  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
  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)\";};\
712
  var rects_x = new Array();var rects_y = new Array();var rects_snap = multisnaptogrid[%d];",
706
  var rects_x = new Array();var rects_y = new Array();var rects_snap = multisnaptogrid[%d];",
713
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
707
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
714
 
708
 
715
  if( no_controls != 1 ){
709
      if( no_controls != 1 ){
716
   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
        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>\";\
717
   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>\";};",
711
   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>\";};",
718
   u,i,canvas_root_id,u,i,canvas_root_id,u);
712
   u,i,canvas_root_id,u,i,canvas_root_id,u);
719
  } else {
713
      } else {
720
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
714
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
721
  }
715
      }
722
  break;
716
      break;
723
  /* poly/polys */
717
  /* poly/polys */
724
  case 16 ... 17 :
718
    case 16 ... 17 :
725
  fprintf(js_include_file,"var polynum = %d;function polys(x,y,event_which,num){\
719
      fprintf(js_include_file,"var polynum = %d;function polys(x,y,event_which,num){\
726
   var last = polys_x.length - 1;\
720
   var last = polys_x.length - 1;\
727
   var xy = multi_snap_check(x,y,polys_snap);\
721
   var xy = multi_snap_check(x,y,polys_snap);\
728
   if(event_which == 0){\
722
   if(event_which == 0){\
729
    if(num == 0 && multidraw_object_cnt == 0){\
723
    if(num == 0 && multidraw_object_cnt == 0){\
730
     polys_x = [];polys_y = [];\
724
     polys_x = [];polys_y = [];\
Line 772... Line 766...
772
  else{if(context_polys.mozDash){context_polys.mozDash = [2,4]};};};\
766
  else{if(context_polys.mozDash){context_polys.mozDash = [2,4]};};};\
773
  var polys_x = new Array();var polys_y = new Array();\
767
  var polys_x = new Array();var polys_y = new Array();\
774
  var polys_snap = multisnaptogrid[%d];",
768
  var polys_snap = multisnaptogrid[%d];",
775
  polynum,canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
769
  polynum,canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
776
 
770
 
777
  if( no_controls != 1 ){
771
      if( no_controls != 1 ){
778
   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
        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>\";\
779
   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>\";};",
773
   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>\";};",
780
   u,i,canvas_root_id,u,i,canvas_root_id,u);
774
   u,i,canvas_root_id,u,i,canvas_root_id,u);
781
  } else {
775
      } else {
782
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
776
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
783
  }
777
      }
784
  break;
778
      break;
785
  /* parallelogram/parallelograms */
779
  /* parallelogram/parallelograms */
786
  case 18 ... 19:
780
    case 18 ... 19:
787
  fprintf(js_include_file,"function parallelogram(x,y,event_which,num){\
781
      fprintf(js_include_file,"function parallelogram(x,y,event_which,num){\
788
   var l2 = parallelogram_x.length;\
782
   var l2 = parallelogram_x.length;\
789
   var l1 = l2 - 1;var l0 = l2 - 2;\
783
   var l1 = l2 - 1;var l0 = l2 - 2;\
790
   var xy = multi_snap_check(x,y,parallelogram_snap);\
784
   var xy = multi_snap_check(x,y,parallelogram_snap);\
791
   if(event_which == 0){\
785
   if(event_which == 0){\
792
    if(multidraw_object_cnt == 0){\
786
    if(multidraw_object_cnt == 0){\
Line 858... Line 852...
858
  if(multidash[%d] == 1 ){ if( context_parallelogram.setLineDash ){context_parallelogram.setLineDash([2,4]);}\
852
  if(multidash[%d] == 1 ){ if( context_parallelogram.setLineDash ){context_parallelogram.setLineDash([2,4]);}\
859
  else{if(context_parallelogram.mozDash){context_parallelogram.mozDash = [2,4]};};};\
853
  else{if(context_parallelogram.mozDash){context_parallelogram.mozDash = [2,4]};};};\
860
  var parallelogram_x = new Array();var parallelogram_y = new Array();var parallelogram_snap = multisnaptogrid[%d];",
854
  var parallelogram_x = new Array();var parallelogram_y = new Array();var parallelogram_snap = multisnaptogrid[%d];",
861
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
855
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
862
 
856
 
863
  if( no_controls != 1 ){
857
      if( no_controls != 1 ){
864
   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
        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>\";\
865
   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>\";};",
859
   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>\";};",
866
   u,i,canvas_root_id,u,i,canvas_root_id,u);
860
   u,i,canvas_root_id,u,i,canvas_root_id,u);
867
  } else {
861
      } else {
868
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
862
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
869
  }
863
      }
870
  break;
864
      break;
871
  /*
865
  /*
872
  images : identical ! to userdraw images,bogus_color
866
  images : identical ! to userdraw images,bogus_color
873
  15/1/2021 : corrected long standing flaw regarding "centered" on external stuff
867
  15/1/2021 : corrected long standing flaw regarding "centered" on external stuff
874
  tested: bitmap,svg,TeX [tested KaTeX]
868
  tested: bitmap,svg,TeX [tested KaTeX]
875
  */
869
  */
876
  case 20:
870
    case 20:
877
  fprintf(js_include_file,"var current_id = null;var external_div_cnt=0;\
871
      fprintf(js_include_file,"var current_id = null;var external_div_cnt=0;\
878
  function image_adjust(image,x,y){\
872
  function image_adjust(image,x,y){\
879
   var centered = %d;\
873
   var centered = %d;\
880
   var w = parseInt(image.width);var h = parseInt(image.height);\
874
   var w = parseInt(image.width);var h = parseInt(image.height);\
881
   if(w == 0 || h == 0 ){\
875
   if(w == 0 || h == 0 ){\
882
    w = parseInt(window.getComputedStyle(image).width);\
876
    w = parseInt(window.getComputedStyle(image).width);\
Line 920... Line 914...
920
   var w = parseInt(thing.clientWidth);\
914
   var w = parseInt(thing.clientWidth);\
921
   var h = parseInt(thing.clientHeight);\
915
   var h = parseInt(thing.clientHeight);\
922
   fix_div.innerHTML = thing.innerHTML;\
916
   fix_div.innerHTML = thing.innerHTML;\
923
   fix_div.setAttribute('style','display:none;position;absolute;width:'+w+'px;height:'+h+'px');\
917
   fix_div.setAttribute('style','display:none;position;absolute;width:'+w+'px;height:'+h+'px');\
924
   fix_div.width = w;fix_div.height = h;\
918
   fix_div.width = w;fix_div.height = h;\
925
   canvas_div.appendChild(fix_div);\
919
   canvas_div.appendChild(fix_div);\
926
   current_id = new_id;\
920
   current_id = new_id;\
927
   external_div_cnt++;\
921
   external_div_cnt++;\
928
   return;\
922
   return;\
929
  };\
923
  };\
930
  function draw_mathml_svg(thing,id){\
924
  function draw_mathml_svg(thing,id){\
Line 939... Line 933...
939
   image.src= url;\
933
   image.src= url;\
940
   image.id = 'placed_'+id;\
934
   image.id = 'placed_'+id;\
941
   image.onload = function(){\
935
   image.onload = function(){\
942
    current_id = image.id;\
936
    current_id = image.id;\
943
    fix_div.innerHTML='<img src='+image.src+' id='+image.id+' alt=\"this should not happen today...!\"/>';\
937
    fix_div.innerHTML='<img src='+image.src+' id='+image.id+' alt=\"this should not happen today...!\"/>';\
944
   };\
938
   };\
945
   return;\
939
   return;\
946
  };\
940
  };\
947
  function images(x,y,event_which,num){\
941
  function images(x,y,event_which,num){\
948
   if(event_which == 1){ return;};\
942
   if(event_which == 1){ return;};\
949
   if(num == 1 && current_id){\
943
   if(num == 1 && current_id){\
Line 951... Line 945...
951
    images_x.push(xy[0]);\
945
    images_x.push(xy[0]);\
952
    images_y.push(xy[1]);\
946
    images_y.push(xy[1]);\
953
    images_id.push(current_id);\
947
    images_id.push(current_id);\
954
    reset_placeable_selection();\
948
    reset_placeable_selection();\
955
    current_id = null;\
949
    current_id = null;\
956
   };\
950
   };\
957
   draw_images();\
951
   draw_images();\
958
  };\
952
  };\
959
  function draw_images(){\
953
  function draw_images(){\
960
   var xy;var img;var tag;\
954
   var xy;var img;var tag;\
961
   for(var i=0; i<2;i++){\
955
   for(var i=0; i<2;i++){\
Line 980... Line 974...
980
  context_images.font = multifont_family;\
974
  context_images.font = multifont_family;\
981
  context_images.fillStyle = \"rgba(\"+multifont_color+\",\"+multistrokeopacity[%d]+\")\";\
975
  context_images.fillStyle = \"rgba(\"+multifont_color+\",\"+multistrokeopacity[%d]+\")\";\
982
  var images_snap = multisnaptogrid[%d];\
976
  var images_snap = multisnaptogrid[%d];\
983
  var images_x = new Array();var images_y = new Array();\
977
  var images_x = new Array();var images_y = new Array();\
984
  var images_id = new Array();",use_offset,canvas_root_id,u,i,i);
978
  var images_id = new Array();",use_offset,canvas_root_id,u,i,i);
985
  if( no_controls != 1 ){
979
      if( no_controls != 1 ){
986
   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>\";\
980
        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>\";\
987
   if( typeof(imagepalette) === 'object' ){\
981
   if( typeof(imagepalette) === 'object' ){\
988
   inner_html+=\"<td><table class='%s'><tr>\";\
982
   inner_html+=\"<td><table class='%s'><tr>\";\
989
   for(var im=0; im < imagepalette.length; im++){\
983
   for(var im=0; im < imagepalette.length; im++){\
990
   if( im %% 4 == 0 ){ inner_html+=\"</tr><tr>\";};\
984
   if( im %% 4 == 0 ){ inner_html+=\"</tr><tr>\";};\
991
   inner_html+=\"<td><img onclick='javascript:place_image_on_canvas(this.id);' src='\"+imagepalette[im]+\"' id='imagepalette_\"+im+\"' alt='none'/></td>\";};\
985
   inner_html+=\"<td><img onclick='javascript:place_image_on_canvas(this.id);' src='\"+imagepalette[im]+\"' id='imagepalette_\"+im+\"' alt='none'/></td>\";};\
992
   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);
986
   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);
993
  } else {
987
        } else {
994
    fprintf(js_include_file,"inner_html+=\"</table>\";tooltip_div.innerHTML += inner_html;userdraw_primitive = %d;",u);
988
          fprintf(js_include_file,"inner_html+=\"</table>\";tooltip_div.innerHTML += inner_html;userdraw_primitive = %d;",u);
995
  }
989
        }
996
  break;
990
      break;
997
  /* curvedarrow/curvedarrows */
991
  /* curvedarrow/curvedarrows */
998
  case 21 ... 22:
992
    case 21 ... 22:
999
  fprintf(js_include_file,"function curvedarrows(x,y,event_which,num){\
993
      fprintf(js_include_file,"function curvedarrows(x,y,event_which,num){\
1000
   var xy = [x,y];\
994
   var xy = [x,y];\
1001
   if(event_which == 0){\
995
   if(event_which == 0){\
1002
     xy = multi_snap_check(x,y,curvedarrows_snap);\
996
     xy = multi_snap_check(x,y,curvedarrows_snap);\
1003
     if(num == 0 && multidraw_object_cnt == 0){curvedarrows_x = [];curvedarrows_y = [];curvedarrows_x[0] = xy[0];curvedarrows_y[0] = xy[1];}\
997
     if(num == 0 && multidraw_object_cnt == 0){curvedarrows_x = [];curvedarrows_y = [];curvedarrows_x[0] = xy[0];curvedarrows_y[0] = xy[1];}\
1004
    else{curvedarrows_x.push(xy[0]);curvedarrows_y.push(xy[1]);};multidraw_object_cnt++;\
998
    else{curvedarrows_x.push(xy[0]);curvedarrows_y.push(xy[1]);};multidraw_object_cnt++;\
Line 1036... Line 1030...
1036
  context_curvedarrows.mozDash = [2,4]};};};\
1030
  context_curvedarrows.mozDash = [2,4]};};};\
1037
  var curvedarrows_x = new Array();var curvedarrows_y = new Array();\
1031
  var curvedarrows_x = new Array();var curvedarrows_y = new Array();\
1038
  var curvedarrows_snap = multisnaptogrid[%d];",
1032
  var curvedarrows_snap = multisnaptogrid[%d];",
1039
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
1033
  canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
1040
 
1034
 
1041
  if( no_controls != 1 ){
1035
      if( no_controls != 1 ){
1042
   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
        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>\";\
1043
   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>\";};",
1037
   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>\";};",
1044
   u,i,canvas_root_id,u,i,canvas_root_id,u);
1038
   u,i,canvas_root_id,u,i,canvas_root_id,u);
1045
  } else {
1039
      } else {
1046
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
1040
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
1047
  }
1041
      }
1048
  break;
1042
      break;
1049
  /* curvedarrow2/curvedarrows2 */
1043
  /* curvedarrow2/curvedarrows2 */
1050
  case 23 ... 24:
1044
    case 23 ... 24:
1051
  fprintf(js_include_file,"function curvedarrows2(x,y,event_which,num){\
1045
      fprintf(js_include_file,"function curvedarrows2(x,y,event_which,num){\
1052
   var xy=[x,y];\
1046
   var xy=[x,y];\
1053
   if(event_which == 0){\
1047
   if(event_which == 0){\
1054
     xy = multi_snap_check(x,y,curvedarrows2_snap);\
1048
     xy = multi_snap_check(x,y,curvedarrows2_snap);\
1055
     if(num == 0 && multidraw_object_cnt == 0){curvedarrows2_x = [];curvedarrows2_y = [];curvedarrows2_x[0] = xy[0];curvedarrows2_y[0] = xy[1];}\
1049
     if(num == 0 && multidraw_object_cnt == 0){curvedarrows2_x = [];curvedarrows2_y = [];curvedarrows2_x[0] = xy[0];curvedarrows2_y[0] = xy[1];}\
1056
    else{curvedarrows2_x.push(xy[0]);curvedarrows2_y.push(xy[1]);};multidraw_object_cnt++;\
1050
    else{curvedarrows2_x.push(xy[0]);curvedarrows2_y.push(xy[1]);};multidraw_object_cnt++;\
Line 1092... Line 1086...
1092
  context_curvedarrows2.setLineDash([2,4]);}else{if(context_curvedarrows2.mozDash){\
1086
  context_curvedarrows2.setLineDash([2,4]);}else{if(context_curvedarrows2.mozDash){\
1093
  context_curvedarrows2.mozDash = [2,4]};};};\
1087
  context_curvedarrows2.mozDash = [2,4]};};};\
1094
  var curvedarrows2_x = new Array();var curvedarrows2_y = new Array();\
1088
  var curvedarrows2_x = new Array();var curvedarrows2_y = new Array();\
1095
  var curvedarrows2_snap = multisnaptogrid[%d];",canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
1089
  var curvedarrows2_snap = multisnaptogrid[%d];",canvas_root_id,u,i,i,i,i,i,i,i,i,i,i,i,i);
1096
 
1090
 
1097
  if( no_controls != 1 ){
1091
      if( no_controls != 1 ){
1098
   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
        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>\";\
1099
   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>\";};",
1093
   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>\";};",
1100
   u,i,canvas_root_id,u,i,canvas_root_id,u);
1094
   u,i,canvas_root_id,u,i,canvas_root_id,u);
1101
  } else {
1095
      } else {
1102
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
1096
        fprintf(js_include_file,"userdraw_primitive = %d;",u);
1103
  }
1097
      }
1104
  break;
1098
      break;
1105
  case 25 ... 26:
1099
    case 25 ... 26:
1106
  fprintf(js_include_file,"function crosshairs(x,y,event_which,num){\
1100
      fprintf(js_include_file,"function crosshairs(x,y,event_which,num){\
1107
   if(event_which == 1){ return; };\
1101
   if(event_which == 1){ return; };\
1108
   var xy = multi_snap_check(x,y,crosshairs_snap);\
1102
   var xy = multi_snap_check(x,y,crosshairs_snap);\
1109
   if( num == 0 ){\
1103
   if( num == 0 ){\
1110
    crosshairs_x[0] = xy[0];\
1104
    crosshairs_x[0] = xy[0];\
1111
    crosshairs_y[0] = xy[1];\
1105
    crosshairs_y[0] = xy[1];\
1112
   } else {\
1106
   } else {\
1113
    crosshairs_x.push(xy[0]);\
1107
    crosshairs_x.push(xy[0]);\
1114
    crosshairs_y.push(xy[1]);\
1108
    crosshairs_y.push(xy[1]);\
1115
   };\
1109
   };\
1116
   draw_crosshairs();\
1110
   draw_crosshairs();\
1117
  };\
1111
  };\
1118
  function draw_crosshairs(){\
1112
  function draw_crosshairs(){\
1119
   var crosshair_size = %d;\
1113
   var crosshair_size = %d;\
1120
   context_crosshairs.clearRect(0,0,xsize,ysize);\
1114
   context_crosshairs.clearRect(0,0,xsize,ysize);\
1121
   var x1,x2,y1,y2;\
1115
   var x1,x2,y1,y2;\
1122
   for(var p = 0 ; p < crosshairs_x.length ; p++ ){\
1116
   for(var p = 0 ; p < crosshairs_x.length ; p++ ){\
Line 1142... Line 1136...
1142
  context_crosshairs.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
1136
  context_crosshairs.strokeStyle = \"rgba(\"+multistrokecolors[%d]+\",\"+multistrokeopacity[%d]+\")\";\
1143
  context_crosshairs.fillStyle = context_crosshairs.strokeStyle;\
1137
  context_crosshairs.fillStyle = context_crosshairs.strokeStyle;\
1144
  context_crosshairs.lineWidth = multilinewidth[%d];if(multilinewidth[%d] %%2 == 1){ context_crosshairs.translate(0.5,0.5);};\
1138
  context_crosshairs.lineWidth = multilinewidth[%d];if(multilinewidth[%d] %%2 == 1){ context_crosshairs.translate(0.5,0.5);};\
1145
  var crosshairs_x = new Array();var crosshairs_y = new Array();\
1139
  var crosshairs_x = new Array();var crosshairs_y = new Array();\
1146
  var crosshairs_snap = multisnaptogrid[%d];",crosshair_size,canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i);
1140
  var crosshairs_snap = multisnaptogrid[%d];",crosshair_size,canvas_root_id,i,i,i,i,i,i,i,i,i,i,i,i);
1147
  if( no_controls != 1){
1141
      if( no_controls != 1){
1148
   fprintf(js_include_file,"\
1142
        fprintf(js_include_file,"\
1149
   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
   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>\";\
1150
   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>\";};",
1144
   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>\";};",
1151
   u,i,canvas_root_id,u,i,canvas_root_id,u);
1145
   u,i,canvas_root_id,u,i,canvas_root_id,u);
1152
  } else {
1146
      } else {
1153
   fprintf(js_include_file,"userdraw_primitive = %d;",u);
1147
          fprintf(js_include_file,"userdraw_primitive = %d;",u);
1154
  }
1148
      }
1155
  break;
1149
      break;
1156
  case 27:break;
1150
    case 27:break;
1157
 
1151
 
1158
  /* einde switch */
1152
  /* einde switch */
1159
  default : break;
1153
      default : break;
1160
  }
1154
    }
1161
 } /* end for loop */
1155
  } /* end for loop */
1162
 
1156
 
1163
 /* id_z may be used for radius , text etc...e.g. no x-values,y-values, x&y-valuepairs*/
1157
 /* id_z may be used for radius , text etc...e.g. no x-values,y-values, x&y-valuepairs*/
1164
 fprintf(js_include_file,"update_draw_area%d = function(desc,id_x,id_y,id_z){\
1158
 fprintf(js_include_file,"update_draw_area%d = function(desc,id_x,id_y,id_z){\
1165
  if( desc == 20 ){ draw_images();return;};\
1159
  if( desc == 20 ){ draw_images();return;};\
1166
  var x1,x2,x3,y1,y2,y3,z1,r,A,B,C;\
1160
  var x1,x2,x3,y1,y2,y3,z1,r,A,B,C;\
Line 1204... Line 1198...
1204
   case 25: fprintf(js_include_file,"case 25:crosshairs(x1,y1,0,0);break;"); break;
1198
   case 25: fprintf(js_include_file,"case 25:crosshairs(x1,y1,0,0);break;"); break;
1205
   case 26: fprintf(js_include_file,"case 26:crosshairs(x1,y1,0,1);break;"); break;
1199
   case 26: fprintf(js_include_file,"case 26:crosshairs(x1,y1,0,1);break;"); break;
1206
   default:break;
1200
   default:break;
1207
  }
1201
  }
1208
 }
1202
 }
1209
 fprintf(js_include_file,"default: break;};return;};");
1203
  fprintf(js_include_file,"default: break;};return;};");
1210
 
1204
 
1211
 /* begin clear_draw_area()*/
1205
 /* begin clear_draw_area()*/
1212
 fprintf(js_include_file,"clear_draw_area%d = function(type){switch(type){",canvas_root_id);
1206
  fprintf(js_include_file,"clear_draw_area%d = function(type){switch(type){",canvas_root_id);
1213
 for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
1207
  for(i=0; i < MAX_MULTI_PRIMITIVES ; i++ ){
1214
  switch( draw_nums[i] ){
1208
    switch( draw_nums[i] ){
1215
   case -1: break;
1209
      case -1: break;
1216
   case 0: fprintf(js_include_file,"case 0:context_points.clearRect(0,0,xsize,ysize);points_x = [];points_y = [];break;");break;
1210
      case 0: fprintf(js_include_file,"case 0:context_points.clearRect(0,0,xsize,ysize);points_x = [];points_y = [];break;");break;
1217
   case 1: fprintf(js_include_file,"case 1:points_x.pop();points_y.pop();draw_points();break;");break;
1211
      case 1: fprintf(js_include_file,"case 1:points_x.pop();points_y.pop();draw_points();break;");break;
1218
   case 2: fprintf(js_include_file,"case 2:context_circles.clearRect(0,0,xsize,ysize);circles_x = [];circles_y = []; multi_radius = [];break;");break;
1212
      case 2: fprintf(js_include_file,"case 2:context_circles.clearRect(0,0,xsize,ysize);circles_x = [];circles_y = []; multi_radius = [];break;");break;
1219
   case 3: fprintf(js_include_file,"case 3:circles_x.pop();circles_y.pop(); multi_radius.pop();draw_circles();break;");break;
1213
      case 3: fprintf(js_include_file,"case 3:circles_x.pop();circles_y.pop(); multi_radius.pop();draw_circles();break;");break;
1220
   case 4: fprintf(js_include_file,"case 4:context_lines.clearRect(0,0,xsize,ysize);lines_x = [];lines_y = [];break;");break;
1214
      case 4: fprintf(js_include_file,"case 4:context_lines.clearRect(0,0,xsize,ysize);lines_x = [];lines_y = [];break;");break;
1221
   case 5: fprintf(js_include_file,"case 5:lines_x.pop();lines_y.pop();lines_x.pop();lines_y.pop();draw_lines();break;");break;
1215
      case 5: fprintf(js_include_file,"case 5:lines_x.pop();lines_y.pop();lines_x.pop();lines_y.pop();draw_lines();break;");break;
1222
   case 6: fprintf(js_include_file,"case 6:context_segments.clearRect(0,0,xsize,ysize);segments_x = [];segments_y = [];break;");break;
1216
      case 6: fprintf(js_include_file,"case 6:context_segments.clearRect(0,0,xsize,ysize);segments_x = [];segments_y = [];break;");break;
1223
   case 7: fprintf(js_include_file,"case 7:segments_x.pop();segments_y.pop();segments_x.pop();segments_y.pop();draw_segments();break;");break;
1217
      case 7: fprintf(js_include_file,"case 7:segments_x.pop();segments_y.pop();segments_x.pop();segments_y.pop();draw_segments();break;");break;
1224
   case 8: fprintf(js_include_file,"case 8:context_arrows.clearRect(0,0,xsize,ysize);arrows_x = [];arrows_y = [];break;");break;
1218
      case 8: fprintf(js_include_file,"case 8:context_arrows.clearRect(0,0,xsize,ysize);arrows_x = [];arrows_y = [];break;");break;
1225
   case 9: fprintf(js_include_file,"case 9:arrows_x.pop();arrows_y.pop();arrows_x.pop();arrows_y.pop();draw_arrows();break;");break;
1219
      case 9: fprintf(js_include_file,"case 9:arrows_x.pop();arrows_y.pop();arrows_x.pop();arrows_y.pop();draw_arrows();break;");break;
1226
   case 10:fprintf(js_include_file,"case 10:context_triangles.clearRect(0,0,xsize,ysize); triangles_x = [];triangles_y = [];break;");break;
1220
      case 10:fprintf(js_include_file,"case 10:context_triangles.clearRect(0,0,xsize,ysize); triangles_x = [];triangles_y = [];break;");break;
1227
   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;
1221
      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;
1228
   case 12:fprintf(js_include_file,"case 12:context_closedpoly.clearRect(0,0,xsize,ysize);closedpoly_x = [];closedpoly_y = [];break;");break;
1222
      case 12:fprintf(js_include_file,"case 12:context_closedpoly.clearRect(0,0,xsize,ysize);closedpoly_x = [];closedpoly_y = [];break;");break;
1229
   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;
1223
      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;
1230
   case 14:fprintf(js_include_file,"case 14:context_rects.clearRect(0,0,xsize,ysize);rects_x = [];rects_y = [];break;");break;
1224
      case 14:fprintf(js_include_file,"case 14:context_rects.clearRect(0,0,xsize,ysize);rects_x = [];rects_y = [];break;");break;
1231
   case 15:fprintf(js_include_file,"case 15:rects_x.pop();rects_y.pop();rects_x.pop();rects_y.pop();draw_rects();break;");break;
1225
      case 15:fprintf(js_include_file,"case 15:rects_x.pop();rects_y.pop();rects_x.pop();rects_y.pop();draw_rects();break;");break;
1232
   case 16:fprintf(js_include_file,"case 16:context_polys.clearRect(0,0,xsize,ysize); polys_x = [];polys_y = [];break;");break;
1226
      case 16:fprintf(js_include_file,"case 16:context_polys.clearRect(0,0,xsize,ysize); polys_x = [];polys_y = [];break;");break;
1233
   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;
1227
      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;
1234
   case 18:fprintf(js_include_file,"case 18:context_parallelogram.clearRect(0,0,xsize,ysize); parallelogram_x = [];parallelogram_y = [];break;");break;
1228
      case 18:fprintf(js_include_file,"case 18:context_parallelogram.clearRect(0,0,xsize,ysize); parallelogram_x = [];parallelogram_y = [];break;");break;
1235
   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;
1229
      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;
1236
   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;
1230
      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;
1237
   case 21:fprintf(js_include_file,"case 21:context_curvedarrows.clearRect(0,0,xsize,ysize);curvedarrows_x = [];curvedarrows_y = [];break;");break;
1231
      case 21:fprintf(js_include_file,"case 21:context_curvedarrows.clearRect(0,0,xsize,ysize);curvedarrows_x = [];curvedarrows_y = [];break;");break;
1238
   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;
1232
      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;
1239
   case 23:fprintf(js_include_file,"case 23:context_curvedarrows2.clearRect(0,0,xsize,ysize);curvedarrows2_x = [];curvedarrows2_y = [];break;");break;
1233
      case 23:fprintf(js_include_file,"case 23:context_curvedarrows2.clearRect(0,0,xsize,ysize);curvedarrows2_x = [];curvedarrows2_y = [];break;");break;
1240
   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;
1234
      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;
1241
   case 25:fprintf(js_include_file,"case 25:context_crosshairs.clearRect(0,0,xsize,ysize);crosshairs_x = [];crosshairs_y = [];break;");break;
1235
      case 25:fprintf(js_include_file,"case 25:context_crosshairs.clearRect(0,0,xsize,ysize);crosshairs_x = [];crosshairs_y = [];break;");break;
1242
   case 26:fprintf(js_include_file,"case 26:crosshairs_x.pop();crosshairs_y.pop();draw_crosshairs();break;");break;
1236
      case 26:fprintf(js_include_file,"case 26:crosshairs_x.pop();crosshairs_y.pop();draw_crosshairs();break;");break;
1243
   default:break;
1237
      default:break;
-
 
1238
    }
1244
  }
1239
  }
1245
 }
-
 
1246
 fprintf(js_include_file,"};return;};");
1240
  fprintf(js_include_file,"};return;};");
1247
 /* end clear_draw_area();*/
1241
 /* end clear_draw_area();*/
1248
 
1242
 
1249
 
1243
 
1250
 /* add </table> is button controls are needed */
1244
 /* add </table> is button controls are needed */
1251
 if( no_controls != 1 ){fprintf(js_include_file,"inner_html+=\"</table>\";tooltip_div.innerHTML = inner_html;"); }
1245
  if( no_controls != 1 ){fprintf(js_include_file,"inner_html+=\"</table>\";tooltip_div.innerHTML = inner_html;"); }
1252
 free(str);
1246
  free(str);
1253
 
1247
 
1254
}
1248
}
1255
/* end 'void add_js_multidraw()' */
1249
/* end 'void add_js_multidraw()' */
1256
 
1250
 
1257
 
1251