Subversion Repositories wimsdev

Rev

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

Rev 17351 Rev 18556
Line 23... Line 23...
23
 ctx.stroke();\
23
 ctx.stroke();\
24
};draw_zoom_buttons();",BG_CANVAS,canvas_root_id,canvas_root_id,canvas_root_id,stroke_color,stroke_opacity);
24
};draw_zoom_buttons();",BG_CANVAS,canvas_root_id,canvas_root_id,canvas_root_id,stroke_color,stroke_opacity);
25
}
25
}
26
 
26
 
27
void add_js_popup(char *getfile_cmd){
27
void add_js_popup(char *getfile_cmd){
28
fprintf(stdout,"\n<!-- begin command popup %d -->\n\
28
  fprintf(stdout,"\n<!-- begin command popup %d -->\n\
29
<script>\n\
29
<script>\n\
30
if( wims_status != 'done'){\
30
if( wims_status != 'done'){\
31
 var popup = window.open('','','toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,top=4,left=4,status=no, width = %dpx, height = %dpx');\
31
 var popup = window.open('','','toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,top=4,left=4,status=no, width = %dpx, height = %dpx');\
32
 var popupHTML =\"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\\n<html><head></head>\\n<body><div style='width:%dpx;height:%dpx;position:relative' id='canvas_div%d'></div><div id='tooltip_placeholder_div%d' style='display:block;position:relative;margin-left:auto;margin-right:auto;margin-bottom:4px;'><span id='tooltip_placeholder%d' style='display:none;'></span></div></body></html>\";\
32
 var popupHTML =\"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\\n<html><head></head>\\n<body><div style='width:%dpx;height:%dpx;position:relative' id='canvas_div%d'></div><div id='tooltip_placeholder_div%d' style='display:block;position:relative;margin-left:auto;margin-right:auto;margin-bottom:4px;'><span id='tooltip_placeholder%d' style='display:none;'></span></div></body></html>\";\
33
 popup.document.write(popupHTML);\
33
 popup.document.write(popupHTML);\
Line 53... Line 53...
53
canvas_root_id,
53
canvas_root_id,
54
canvas_root_id);
54
canvas_root_id);
55
}
55
}
56
 
56
 
57
void add_js_tooltip(char *tooltip_text,char *bgcolor){
57
void add_js_tooltip(char *tooltip_text,char *bgcolor){
58
fprintf(stdout,"\n<!-- begin command intooltip %d -->\n\
58
  fprintf(stdout,"\n<!-- begin command intooltip %d -->\n\
59
<script>\n\
59
<script>\n\
60
var xsize = %d;\
60
var xsize = %d;\
61
var ysize = %d;\
61
var ysize = %d;\
62
var tooltip%d_obj_x = 0;\
62
var tooltip%d_obj_x = 0;\
63
var tooltip%d_obj_y = 0;\
63
var tooltip%d_obj_y = 0;\
Line 117... Line 117...
117
 } else {\
117
 } else {\
118
  tooltip%d_flipflop = 0;\
118
  tooltip%d_flipflop = 0;\
119
  tooltip%d_obj.style.display = \"none\";\
119
  tooltip%d_obj.style.display = \"none\";\
120
 };\
120
 };\
121
};\n</script>\n<!-- end command intooltip %d -->\n",canvas_root_id,xsize,ysize,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,tooltip_text,canvas_root_id,bgcolor,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id);
121
};\n</script>\n<!-- end command intooltip %d -->\n",canvas_root_id,xsize,ysize,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,tooltip_text,canvas_root_id,bgcolor,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id);
122
 
-
 
123
}
122
}
124
 
-
 
125
 
123
 
126
/*
124
/*
127
 
125
 
128
type = 0 : x-values only [command mousex]
126
type = 0 : x-values only [command mousex]
129
type = 1 : y-values only [command mousey]
127
type = 1 : y-values only [command mousey]
Line 136... Line 134...
136
  var x = evt.clientX - mouse_canvas_rect.left;\
134
  var x = evt.clientX - mouse_canvas_rect.left;\
137
  var y = evt.clientY - mouse_canvas_rect.top;\
135
  var y = evt.clientY - mouse_canvas_rect.top;\
138
 
136
 
139
*/
137
*/
140
void add_js_mouse(int canvas_cnt,int precision,char *stroke_color,int font_size,double stroke_opacity,int type){
138
void add_js_mouse(int canvas_cnt,int precision,char *stroke_color,int font_size,double stroke_opacity,int type){
141
fprintf(js_include_file,"\n/* command mouse on mouse canvas */\
139
  fprintf(js_include_file,"\n/* command mouse on mouse canvas */\
142
function use_mouse_coordinates(){\
140
function use_mouse_coordinates(){\
143
 var display_type = %d;\
141
 var display_type = %d;\
144
 var canvas_type = %d;\
142
 var canvas_type = %d;\
145
 var mouse_canvas = create_canvas%d(canvas_type,xsize,ysize);\
143
 var mouse_canvas = create_canvas%d(canvas_type,xsize,ysize);\
146
 var mouse_context = mouse_canvas.getContext(\"2d\");\
144
 var mouse_context = mouse_canvas.getContext(\"2d\");\
Line 181... Line 179...
181
show_display = 4 delta degrees
179
show_display = 4 delta degrees
182
show_display = 5 delta X:Y
180
show_display = 5 delta X:Y
183
 
181
 
184
*/
182
*/
185
void add_slider_display(int precision,int font_size,char *font_color,double stroke_opacity){
183
void add_slider_display(int precision,int font_size,char *font_color,double stroke_opacity){
186
fprintf(js_include_file,"\n/* add_slider_display */\
184
  fprintf(js_include_file,"\n/* add_slider_display */\
187
var slider_prec = Math.log(%d)/(Math.log(10));\
185
var slider_prec = Math.log(%d)/(Math.log(10));\
188
 function show_slider_value(value,use_slider_display){\
186
 function show_slider_value(value,use_slider_display){\
189
 var current_canvas = create_canvas%d(%d,xsize,ysize);\
187
 var current_canvas = create_canvas%d(%d,xsize,ysize);\
190
 var current_context = current_canvas.getContext(\"2d\");\
188
 var current_context = current_canvas.getContext(\"2d\");\
191
 current_context.clearRect(0,0,xsize,ysize);\
189
 current_context.clearRect(0,0,xsize,ysize);\
Line 205... Line 203...
205
 current_context.clearRect(0,0,s,1.2*%d);\
203
 current_context.clearRect(0,0,s,1.2*%d);\
206
 current_context.fillText(string,0,%d);};",precision,canvas_root_id,MOUSE_CANVAS,font_size,font_size,font_color,stroke_opacity,font_size,font_size);
204
 current_context.fillText(string,0,%d);};",precision,canvas_root_id,MOUSE_CANVAS,font_size,font_size,font_color,stroke_opacity,font_size,font_size);
207
}
205
}
208
 
206
 
209
void add_slider(int anim){
207
void add_slider(int anim){
210
if(anim != 2 ){
208
  if(anim != 2 ){
211
fprintf(js_include_file,"\n/* add_slider aux*/\
209
    fprintf(js_include_file,"\n/* add_slider aux*/\
212
if( typeof( slidergroup) !== 'object'){var slidergroup = [];};\
210
if( typeof( slidergroup) !== 'object'){var slidergroup = [];};\
213
function rotateXY(obj,angle){\
211
function rotateXY(obj,angle){\
214
 if( typeof(angle) === 'undefined' ){console.log('rotateXY() angle undefined');return obj;};\
212
 if( typeof(angle) === 'undefined' ){console.log('rotateXY() angle undefined');return obj;};\
215
 var len = obj.x.length;\
213
 var len = obj.x.length;\
216
 if( typeof(len) === 'undefined' ){obj.angle = angle;return obj;};\
214
 if( typeof(len) === 'undefined' ){obj.angle = angle;return obj;};\
Line 229... Line 227...
229
 for(var p = 0 ; p < len ; p++ ){\
227
 for(var p = 0 ; p < len ; p++ ){\
230
  x = obj.x[p];\
228
  x = obj.x[p];\
231
  y = obj.y[p];\
229
  y = obj.y[p];\
232
  obj.x[p] = (cos * (x - xc)) + (sin * (y - yc)) + xc;\
230
  obj.x[p] = (cos * (x - xc)) + (sin * (y - yc)) + xc;\
233
  obj.y[p] = (cos * (y - yc)) - (sin * (x - xc)) + yc;\
231
  obj.y[p] = (cos * (y - yc)) - (sin * (x - xc)) + yc;\
234
 };\
232
 };\
235
 return obj;\
233
 return obj;\
236
};\
234
};\
237
function rotateARC(obj,angle){\
235
function rotateARC(obj,angle){\
238
 obj.h[0] = angle;\
236
 obj.h[0] = angle;\
239
 obj.angle = -1*angle;\
237
 obj.angle = -1*angle;\
Line 265... Line 263...
265
  };\
263
  };\
266
 };\
264
 };\
267
 return;\
265
 return;\
268
};\
266
};\
269
");
267
");
270
}
268
  }
271
if(anim == 0){fprintf(js_include_file,"\n/* add_slider */\
269
  if(anim == 0){fprintf(js_include_file,"\n/* add_slider */\
272
if( typeof(unit_x) === 'undefined' ){var unit_x = ' ';};\
270
if( typeof(unit_x) === 'undefined' ){var unit_x = ' ';};\
273
if( typeof(unit_y) === 'undefined' ){var unit_y = ' ';};\
271
if( typeof(unit_y) === 'undefined' ){var unit_y = ' ';};\
274
function slider(XYR,text,slider_id ,width,height,linewidth,fillcolor,strokecolor,opacity,min,max,fontfamily,display){\
272
function slider(XYR,text,slider_id ,width,height,linewidth,fillcolor,strokecolor,opacity,min,max,fontfamily,display){\
275
 if( wims_status == \"done\" ){return;};var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
273
 if( wims_status == \"done\" ){return;};var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
276
 var xcenter = 0.5*width;var rcenter = 0.5*width;fillcolor = 'rgba('+fillcolor+','+opacity[0]+')' || 'rgba(200,200,0,0.2)';\
274
 var xcenter = 0.5*width;var rcenter = 0.5*width;fillcolor = 'rgba('+fillcolor+','+opacity[0]+')' || 'rgba(200,200,0,0.2)';\
Line 304... Line 302...
304
  if( display > 0 ){show_slider_value(value,display);};\
302
  if( display > 0 ){show_slider_value(value,display);};\
305
  var dx = px - xcenter;xcenter = px;\
303
  var dx = px - xcenter;xcenter = px;\
306
  slider_show_it(XYR,dx,value,slider_id);\
304
  slider_show_it(XYR,dx,value,slider_id);\
307
 };\
305
 };\
308
};",canvas_root_id);
306
};",canvas_root_id);
309
}
307
  }
310
if( anim == 1){
308
  if( anim == 1){
311
fprintf(js_include_file,"\n/* add_anim_slider */\
309
    fprintf(js_include_file,"\n/* add_anim_slider */\
312
function animslider(XYR,text,slider_id ,width,height,linewidth,fillcolor,strokecolor,opacity,min,max,fontfamily,display)\
310
function animslider(XYR,text,slider_id ,width,height,linewidth,fillcolor,strokecolor,opacity,min,max,fontfamily,display)\
313
{\
311
{\
314
 document.addEventListener('readystatechange',function(event){\
312
 document.addEventListener('readystatechange',function(event){\
315
  if(event.target.readyState === 'complete'){\
313
  if(event.target.readyState === 'complete'){\
316
   var value= 0;\
314
   var value= 0;\
Line 319... Line 317...
319
    if( value > width ){clearInterval( timer );}\
317
    if( value > width ){clearInterval( timer );}\
320
   },240);\
318
   },240);\
321
  };\
319
  };\
322
 },false);\
320
 },false);\
323
};");
321
};");
324
}
322
  }
325
 
323
 
326
if( anim == 2 ){/* use mouse in stead of a X|Y slider... external images -via command 'copy' NOT supported !! need to add 'copy' to dragstuff library or introduce another command*/
324
  if( anim == 2 ){/* use mouse in stead of a X|Y slider... external images -via command 'copy' NOT supported !! need to add 'copy' to dragstuff library or introduce another command*/
327
fprintf(js_include_file,"\n/* add group move_ */\
325
    fprintf(js_include_file,"\n/* add group move_ */\
328
if( typeof( slidergroup) !== 'object'){var slidergroup = [];};\
326
if( typeof( slidergroup) !== 'object'){var slidergroup = [];};\
329
var move_group = function(num){\
327
var move_group = function(num){\
330
 canvas_div.addEventListener( 'mousemove' ,slidegroup_m,false);\
328
 canvas_div.addEventListener( 'mousemove' ,slidegroup_m,false);\
331
 canvas_div.addEventListener( 'mousedown' ,slidegroup_d,false);\
329
 canvas_div.addEventListener( 'mousedown' ,slidegroup_d,false);\
332
 canvas_div.addEventListener( 'mouseup'   ,slidegroup_u,false);\
330
 canvas_div.addEventListener( 'mouseup'   ,slidegroup_u,false);\
Line 355... Line 353...
355
   };\
353
   };\
356
  };\
354
  };\
357
  dragstuff.valid = true;\
355
  dragstuff.valid = true;\
358
 };\
356
 };\
359
};");
357
};");
360
}
358
  }
361
 
359
 
362
}
360
}
363
/*      dragdrop_reply[obj.object_cnt] = obj;
361
/*      dragdrop_reply[obj.object_cnt] = obj;
364
*/
362
*/
365
/*
363
/*
366
adds inputfield for x-value: returns the js-calculated y-value after click on 'OK' button
364
adds inputfield for x-value: returns the js-calculated y-value after click on 'OK' button
367
draws a non-configurable crosshair on this calculated location
365
draws a non-configurable crosshair on this calculated location
368
*/
366
*/
369
void add_calc_y(char *jsmath,int font_size,char *css_class){
367
void add_calc_y(char *jsmath,int font_size,char *css_class){
370
fprintf(js_include_file,"\n/* add_calc_y */\
368
  fprintf(js_include_file,"\n/* add_calc_y */\
371
use_jsmath=1;\
369
use_jsmath=1;\
372
function add_calc_y(){\
370
function add_calc_y(){\
373
 if( wims_status == \"done\" ){return;};\
371
 if( wims_status == \"done\" ){return;};\
374
 var fun = to_js_math(\"%s\");if(fun == null){return;};\
372
 var fun = to_js_math(\"%s\");if(fun == null){return;};\
375
 function eval_jsmath(x){return parseFloat(eval(fun));};\
373
 function eval_jsmath(x){return parseFloat(eval(fun));};\
376
 var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
374
 var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
377
 var calc_div = document.createElement('div');\
375
 var calc_div = document.createElement('div');\
378
 calc_div.id = \"calc_div\";\
376
 calc_div.id = \"calc_div\";\
379
 tooltip_div.appendChild(calc_div);\
377
 tooltip_div.appendChild(calc_div);\
380
 var label_x = \"x\";var label_y = \"y\";\
378
 var label_x = \"x\";var label_y = \"y\";\
381
 if( typeof(xaxislabel) !== 'undefined' ){label_x = xaxislabel;}\
379
 if( typeof(xaxislabel) !== 'undefined' ){label_x = xaxislabel;}\
Line 402... Line 400...
402
 function is called "use_mouse_coordinates() and thus can not be combined with command 'mouse'
400
 function is called "use_mouse_coordinates() and thus can not be combined with command 'mouse'
403
*/
401
*/
404
void add_trace_js_mouse(int canvas_cnt, char *stroke_color, char *jsmath,
402
void add_trace_js_mouse(int canvas_cnt, char *stroke_color, char *jsmath,
405
  int font_size, double stroke_opacity, int line_width,
403
  int font_size, double stroke_opacity, int line_width,
406
  int crosshair_size,char *css_class){
404
  int crosshair_size,char *css_class){
407
fprintf(js_include_file,"\n/* add_trace_jsmath */\
405
    fprintf(js_include_file,"\n/* add_trace_jsmath */\
408
use_jsmath=1;\
406
use_jsmath=1;\
409
function use_trace_jsmath(){\
407
function use_trace_jsmath(){\
410
if( wims_status == \"done\" ){return;};\
408
if( wims_status == \"done\" ){return;};\
411
 var label_x = \"x\";var label_y = \"y\";\
409
 var label_x = \"x\";var label_y = \"y\";\
412
 if( typeof(xaxislabel) !== 'undefined' ){label_x = xaxislabel;}\
410
 if( typeof(xaxislabel) !== 'undefined' ){label_x = xaxislabel;}\
Line 434... Line 432...
434
  document.getElementById(\"trace_input_x\").value = x;\
432
  document.getElementById(\"trace_input_x\").value = x;\
435
  document.getElementById(\"trace_input_y\").value = y;\
433
  document.getElementById(\"trace_input_y\").value = y;\
436
 };\
434
 };\
437
 return;\
435
 return;\
438
};use_trace_jsmath();",canvas_root_id,canvas_cnt,canvas_root_id,font_size,css_class,css_class,jsmath,line_width,crosshair_size,stroke_color,stroke_opacity);
436
};use_trace_jsmath();",canvas_root_id,canvas_cnt,canvas_root_id,font_size,css_class,css_class,jsmath,line_width,crosshair_size,stroke_color,stroke_opacity);
439
}
437
  }
440
 
438
 
441
/*
439
/*
442
add a table with 2 textarea's labeled 'x' 'y' ( or 'xlabel' 'ylabel' if defined)
440
add a table with 2 textarea's labeled 'x' 'y' ( or 'xlabel' 'ylabel' if defined)
443
add two buttons: OK and NOK (OK draws; NOK will delete last item pair from userdraw_x / userdraw_y array's
441
add two buttons: OK and NOK (OK draws; NOK will delete last item pair from userdraw_x / userdraw_y array's
444
*/
442
*/
445
void add_textarea_xy(char *css_class){
443
void add_textarea_xy(char *css_class){
446
fprintf(js_include_file,"\n/* add_textarea_xy */\
444
  fprintf(js_include_file,"\n/* add_textarea_xy */\
447
function add_textarea_xy(){\
445
function add_textarea_xy(){\
448
if( wims_status == \"done\" ){return;};\
446
if( wims_status == \"done\" ){return;};\
449
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
447
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
450
var textarea_div = document.createElement('div');\
448
var textarea_div = document.createElement('div');\
451
textarea_div.id = \"textarea_div\";\
449
textarea_div.id = \"textarea_div\";\
Line 472... Line 470...
472
var textarea_nok_button = document.getElementById(\"textarea_nok_button\");\
470
var textarea_nok_button = document.getElementById(\"textarea_nok_button\");\
473
textarea_ok_button.addEventListener(\"mousedown\",function(e){redraw_userdraw();return;},false);\
471
textarea_ok_button.addEventListener(\"mousedown\",function(e){redraw_userdraw();return;},false);\
474
textarea_nok_button.addEventListener(\"mousedown\",function(e){remove_last();return;},false);\
472
textarea_nok_button.addEventListener(\"mousedown\",function(e){remove_last();return;},false);\
475
return;\
473
return;\
476
};add_textarea_xy();",canvas_root_id,css_class,css_class);
474
};add_textarea_xy();",canvas_root_id,css_class,css_class);
477
}
475
  }
478
 
476
 
479
/*
477
/*
480
 
-
 
481
*/
478
*/
482
void add_setlimits(int font_size,char *css_class){
479
void add_setlimits(int font_size,char *css_class){
483
fprintf(js_include_file,"\n/* add_setlimits */\
480
  fprintf(js_include_file,"\n/* add_setlimits */\
484
function use_setlimits(){\
481
function use_setlimits(){\
485
if( wims_status == \"done\" ){return;};\
482
if( wims_status == \"done\" ){return;};\
486
var label_x = \"x\";var label_y = \"y\";\
483
var label_x = \"x\";var label_y = \"y\";\
487
if( typeof(xaxislabel) !== 'undefined' ){label_x = xaxislabel;}\
484
if( typeof(xaxislabel) !== 'undefined' ){label_x = xaxislabel;}\
488
if( typeof(yaxislabel) !== 'undefined' ){label_y = yaxislabel;}\
485
if( typeof(yaxislabel) !== 'undefined' ){label_y = yaxislabel;}\
Line 504... Line 501...
504
setlimit_button.addEventListener(\"mousedown\",function(e){set_limits();},false);\
501
setlimit_button.addEventListener(\"mousedown\",function(e){set_limits();},false);\
505
};use_setlimits();",canvas_root_id,font_size,css_class,css_class,css_class,css_class);
502
};use_setlimits();",canvas_root_id,font_size,css_class,css_class,css_class,css_class);
506
}
503
}
507
 
504
 
508
void add_input_jsfunction(char *css_class,char *input_label,int input_cnt,char *stroke_color,float stroke_opacity,int line_width,int use_dashed,int dashtype0,int dashtype1,int font_size){
505
void add_input_jsfunction(char *css_class,char *input_label,int input_cnt,char *stroke_color,float stroke_opacity,int line_width,int use_dashed,int dashtype0,int dashtype1,int font_size){
509
fprintf(js_include_file,"\n/* add_input_jsfunction */\
506
  fprintf(js_include_file,"\n/* add_input_jsfunction */\
510
function clear_jsfunction(canvas_plot_id,input_field){\
507
function clear_jsfunction(canvas_plot_id,input_field){\
511
 try{\
508
 try{\
512
  var canvas_plot = document.getElementById(\"wims_canvas%d\"+canvas_plot_id);\
509
  var canvas_plot = document.getElementById(\"wims_canvas%d\"+canvas_plot_id);\
513
  var canvas_plot_ctx = canvas_plot.getContext(\"2d\");\
510
  var canvas_plot_ctx = canvas_plot.getContext(\"2d\");\
514
  if( confirm(\"clear function plot?\") ){\
511
  if( confirm(\"clear function plot?\") ){\
Line 537... Line 534...
537
 update_button.addEventListener(\"mousedown\",function(e){jsplot(canvas_plot_id,[rawmath(document.getElementById(input_field).value)],[line_width],[stroke_color],[stroke_opacity],[use_dashed],dashtype0,dashtype1,0,0,300,0,1);return;},false);\
534
 update_button.addEventListener(\"mousedown\",function(e){jsplot(canvas_plot_id,[rawmath(document.getElementById(input_field).value)],[line_width],[stroke_color],[stroke_opacity],[use_dashed],dashtype0,dashtype1,0,0,300,0,1);return;},false);\
538
 delete_button.addEventListener(\"mousedown\",function(e){clear_jsfunction(canvas_plot_id,input_field);return;},false);\
535
 delete_button.addEventListener(\"mousedown\",function(e){clear_jsfunction(canvas_plot_id,input_field);return;},false);\
539
};\
536
};\
540
add_input_jsfunction(%d,\"%s\",%s,%d,\"%s\",%.2f,%d,%d,%d);",canvas_root_id,USERDRAW_JSPLOT,canvas_root_id,font_size,input_cnt,css_class,input_label,line_width,stroke_color,stroke_opacity,use_dashed,dashtype0,dashtype1);
537
add_input_jsfunction(%d,\"%s\",%s,%d,\"%s\",%.2f,%d,%d,%d);",canvas_root_id,USERDRAW_JSPLOT,canvas_root_id,font_size,input_cnt,css_class,input_label,line_width,stroke_color,stroke_opacity,use_dashed,dashtype0,dashtype1);
541
}
538
}
542
 
-
 
543
 
-
 
544
/*
539
/*
545
adds 2 inputfields (x:y) and 'ok' | 'nok' button
540
adds 2 inputfields (x:y) and 'ok' | 'nok' button
546
these are used for user drawing with inputfields...
541
these are used for user drawing with inputfields...
547
function update_me(){\
542
function update_me(){\
548
 var x = safe_eval(document.getElementById('userinput_x').value);\
543
 var x = safe_eval(document.getElementById('userinput_x').value);\
549
 var y = safe_eval(document.getElementById('userinput_y').value);\
544
 var y = safe_eval(document.getElementById('userinput_y').value);\
550
 userdraw_x.push(x2px(x));userdraw_y.push(y2px(y));\
545
 userdraw_x.push(x2px(x));userdraw_y.push(y2px(y));\
551
 return;\
546
 return;\
552
};\
547
};\
553
*/
548
*/
554
 
-
 
555
void add_input_xy(int font_size,char *css_class){
549
void add_input_xy(int font_size,char *css_class){
556
fprintf(js_include_file,"\n/* add_input_xy */\
550
  fprintf(js_include_file,"\n/* add_input_xy */\
557
function add_input_xy(){\
551
function add_input_xy(){\
558
if( wims_status == \"done\" ){return;};\
552
if( wims_status == \"done\" ){return;};\
559
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
553
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
560
var input_xy_div = document.createElement('div');\
554
var input_xy_div = document.createElement('div');\
561
input_xy_div.id = \"input_xy_div\";\
555
input_xy_div.id = \"input_xy_div\";\
Line 565... Line 559...
565
var update_button = document.getElementById(\"update_button\");\
559
var update_button = document.getElementById(\"update_button\");\
566
var delete_button = document.getElementById(\"delete_button\");\
560
var delete_button = document.getElementById(\"delete_button\");\
567
update_button.addEventListener(\"mousedown\",function(e){update_me();redraw_userdraw();return;},false);\
561
update_button.addEventListener(\"mousedown\",function(e){update_me();redraw_userdraw();return;},false);\
568
delete_button.addEventListener(\"mousedown\",function(e){remove_last();return;},false);\
562
delete_button.addEventListener(\"mousedown\",function(e){remove_last();return;},false);\
569
};add_input_xy();",canvas_root_id,font_size,css_class,css_class);
563
};add_input_xy();",canvas_root_id,font_size,css_class,css_class);
570
}
564
}
571
 
565
 
572
/* adds 4 inputfields (x1:y1) --- (x2:y2) and 'ok' + 'nok' button */
566
/* adds 4 inputfields (x1:y1) --- (x2:y2) and 'ok' + 'nok' button */
573
void add_input_x1y1x2y2(int font_size,char *css_class){
567
void add_input_x1y1x2y2(int font_size,char *css_class){
574
fprintf(js_include_file,"\n/* add_input_x1y1x2y2 */\
568
  fprintf(js_include_file,"\n/* add_input_x1y1x2y2 */\
575
function add_input_x1y1x2y2(){\
569
function add_input_x1y1x2y2(){\
576
if( wims_status == \"done\" ){return;};\
570
if( wims_status == \"done\" ){return;};\
577
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
571
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
578
var input_x1y1x2y2_div = document.createElement('div');\
572
var input_x1y1x2y2_div = document.createElement('div');\
579
input_x1y1x2y2_div.id = \"input_x1y1x2y2_div\";\
573
input_x1y1x2y2_div.id = \"input_x1y1x2y2_div\";\
Line 582... Line 576...
582
var update_button = document.getElementById(\"update_button\");\
576
var update_button = document.getElementById(\"update_button\");\
583
var delete_button = document.getElementById(\"delete_button\");\
577
var delete_button = document.getElementById(\"delete_button\");\
584
update_button.addEventListener(\"mousedown\",function(e){redraw_userdraw();return;},false);\
578
update_button.addEventListener(\"mousedown\",function(e){redraw_userdraw();return;},false);\
585
delete_button.addEventListener(\"mousedown\",function(e){remove_last();return;},false);\
579
delete_button.addEventListener(\"mousedown\",function(e){remove_last();return;},false);\
586
};add_input_x1y1x2y2();",canvas_root_id,font_size,css_class,css_class,css_class,css_class);
580
};add_input_x1y1x2y2();",canvas_root_id,font_size,css_class,css_class,css_class,css_class);
587
}
581
}
588
 
582
 
589
/* adds 3 inputfields Center (x:y) Radius r and 'ok'+'nok' buttons */
583
/* adds 3 inputfields Center (x:y) Radius r and 'ok'+'nok' buttons */
590
void add_input_xyr(int font_size,char *css_class){
584
void add_input_xyr(int font_size,char *css_class){
591
fprintf(js_include_file,"\n/* add_input_xyr */\
585
  fprintf(js_include_file,"\n/* add_input_xyr */\
592
function add_input_xyr(){\
586
function add_input_xyr(){\
593
if( wims_status == \"done\" ){return;};\
587
if( wims_status == \"done\" ){return;};\
594
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
588
var tooltip_div = document.getElementById(\"tooltip_placeholder_div%d\");\
595
var input_xyr_div = document.createElement('div');\
589
var input_xyr_div = document.createElement('div');\
596
input_xyr_div.id = \"input_xyr_div\";\
590
input_xyr_div.id = \"input_xyr_div\";\
Line 611... Line 605...
611
type = 0 : a point ...radius is fixed
605
type = 0 : a point ...radius is fixed
612
type = 1 : a circle ... read inputfield userinput_r
606
type = 1 : a circle ... read inputfield userinput_r
613
num = 1 : a single point / circle
607
num = 1 : a single point / circle
614
num = 2 : multiple points / circles
608
num = 2 : multiple points / circles
615
*/
609
*/
616
fprintf(js_include_file,"\n/* add_input_circle */\
610
  fprintf(js_include_file,"\n/* add_input_circle */\
617
function user_redraw(t){\
611
function user_redraw(t){\
618
 var type = %d;\
612
 var type = %d;\
619
 var num = %d;\
613
 var num = %d;\
620
 var lu = userdraw_x.length;\
614
 var lu = userdraw_x.length;\
621
 if( t == -1 && lu > 0){userdraw_x.splice(lu-1,1);userdraw_y.splice(lu-1,1);if(type == 1){userdraw_radius.splice(lu-1,1);};context_userdraw.clearRect(0,0,xsize,ysize);draw_circles(context_userdraw,userdraw_x,userdraw_y,userdraw_radius,line_width,stroke_color,stroke_opacity,use_filled,fill_color,fill_opacity,use_dashed,dashtype0,dashtype1);xy_cnt = userdraw_x.length;return;};\
615
 if( t == -1 && lu > 0){userdraw_x.splice(lu-1,1);userdraw_y.splice(lu-1,1);if(type == 1){userdraw_radius.splice(lu-1,1);};context_userdraw.clearRect(0,0,xsize,ysize);draw_circles(context_userdraw,userdraw_x,userdraw_y,userdraw_radius,line_width,stroke_color,stroke_opacity,use_filled,fill_color,fill_opacity,use_dashed,dashtype0,dashtype1);xy_cnt = userdraw_x.length;return;};\
Line 625... Line 619...
625
 return;\
619
 return;\
626
};",type,num);
620
};",type,num);
627
}
621
}
628
/* draw crosshairs via inputfields x/y */
622
/* draw crosshairs via inputfields x/y */
629
void add_input_crosshair(int num){
623
void add_input_crosshair(int num){
630
fprintf(js_include_file,"\n/* add_input_crosshair */\
624
  fprintf(js_include_file,"\n/* add_input_crosshair */\
631
function user_redraw(t){\
625
function user_redraw(t){\
632
 var lu = userdraw_x.length;\
626
 var lu = userdraw_x.length;\
633
 if( t == -1 && lu > 0){\
627
 if( t == -1 && lu > 0){\
634
  userdraw_x.splice(lu-1,1);\
628
  userdraw_x.splice(lu-1,1);\
635
  userdraw_y.splice(lu-1,1);\
629
  userdraw_y.splice(lu-1,1);\
Line 655... Line 649...
655
};",num);
649
};",num);
656
}
650
}
657
 
651
 
658
/* draw arrows via inputfields x/y */
652
/* draw arrows via inputfields x/y */
659
void add_input_arrow(int num){
653
void add_input_arrow(int num){
660
fprintf(js_include_file,"\n/* add_input_arrow */\
654
  fprintf(js_include_file,"\n/* add_input_arrow */\
661
function user_redraw(t){\
655
function user_redraw(t){\
662
 var lu = userdraw_x.length;\
656
 var lu = userdraw_x.length;\
663
 if( t == -1 && lu > 1 ){\
657
 if( t == -1 && lu > 1 ){\
664
  userdraw_x.splice(lu-2,2);\
658
  userdraw_x.splice(lu-2,2);\
665
  userdraw_y.splice(lu-2,2);\
659
  userdraw_y.splice(lu-2,2);\
666
  context_userdraw.clearRect(0,0,xsize,ysize);\
660
  context_userdraw.clearRect(0,0,xsize,ysize);\
667
  draw_arrows(context_userdraw,userdraw_x,userdraw_y,arrow_head,line_width,stroke_color,stroke_opacity,use_dashed,dashtype0,dashtype1,type,use_rotate,angle,0,[1,0,0,1,0,0]);\
661
  draw_arrows(context_userdraw,userdraw_x,userdraw_y,arrow_head,line_width,stroke_color,stroke_opacity,use_dashed,dashtype0,dashtype1,type,use_rotate,angle,0,[1,0,0,1,0,0]);\
668
  return;\
662
  return;\
669
 };\
663
 };\
670
 var add_x1 = safe_eval( document.getElementById(\"userinput_x1\").value );\
664
 var add_x1 = safe_eval( document.getElementById(\"userinput_x1\").value );\
671
 var add_y1 = safe_eval( document.getElementById(\"userinput_y1\").value );\
665
 var add_y1 = safe_eval( document.getElementById(\"userinput_y1\").value );\
672
 var add_x2 = safe_eval( document.getElementById(\"userinput_x2\").value );\
666
 var add_x2 = safe_eval( document.getElementById(\"userinput_x2\").value );\
673
 var add_y2 = safe_eval( document.getElementById(\"userinput_y2\").value );\
667
 var add_y2 = safe_eval( document.getElementById(\"userinput_y2\").value );\
674
 if( add_x1 != null && add_y1 != null && add_x2 != null && add_y2 != null ){\
668
 if( add_x1 != null && add_y1 != null && add_x2 != null && add_y2 != null ){\
675
  if( %d == 2 ){\
669
  if( %d == 2 ){\
676
    var s = userdraw_x.length;\
670
    var s = userdraw_x.length;\
677
    userdraw_x[lu] = x2px(add_x1);\
671
    userdraw_x[lu] = x2px(add_x1);\
678
    userdraw_y[lu] = y2px(add_y1);\
672
    userdraw_y[lu] = y2px(add_y1);\
679
    userdraw_x[lu+1] = x2px(add_x2);\
673
    userdraw_x[lu+1] = x2px(add_x2);\
680
    userdraw_y[lu+1] = y2px(add_y2);\
674
    userdraw_y[lu+1] = y2px(add_y2);\
681
  } else {\
675
  } else {\
682
   userdraw_x[0] = x2px(add_x1);\
676
   userdraw_x[0] = x2px(add_x1);\
683
   userdraw_y[0] = y2px(add_y1);\
677
   userdraw_y[0] = y2px(add_y1);\
684
   userdraw_x[1] = x2px(add_x2);\
678
   userdraw_x[1] = x2px(add_x2);\
685
   userdraw_y[1] = y2px(add_y2);\
679
   userdraw_y[1] = y2px(add_y2);\
Line 691... Line 685...
691
};",num);
685
};",num);
692
}
686
}
693
 
687
 
694
/* draw line via inputfields x/y */
688
/* draw line via inputfields x/y */
695
void add_input_line(int num){
689
void add_input_line(int num){
696
fprintf(js_include_file,"\n/* line via inputfields  */\
690
  fprintf(js_include_file,"\n/* line via inputfields  */\
697
function user_redraw(t){\
691
function user_redraw(t){\
698
 var lu = userdraw_x.length;\
692
 var lu = userdraw_x.length;\
699
 if( t == -1 && lu > 1){\
693
 if( t == -1 && lu > 1){\
700
  userdraw_x.splice(lu-2,2);\
694
  userdraw_x.splice(lu-2,2);\
701
  userdraw_y.splice(lu-2,2);\
695
  userdraw_y.splice(lu-2,2);\
Line 727... Line 721...
727
}
721
}
728
 
722
 
729
 
723
 
730
/* draw polyline via inputfields x/y */
724
/* draw polyline via inputfields x/y */
731
void add_input_polyline(){
725
void add_input_polyline(){
732
fprintf(js_include_file,"\n/* polyline_segment via inputfields */\
726
  fprintf(js_include_file,"\n/* polyline_segment via inputfields */\
733
function user_redraw(t){\
727
function user_redraw(t){\
734
 var lu = userdraw_x.length;\
728
 var lu = userdraw_x.length;\
735
 cnt = 1;\
729
 cnt = 1;\
736
 if( t == -1 && lu > 0){\
730
 if( t == -1 && lu > 0){\
737
  userdraw_x.splice(lu-1,1);\
731
  userdraw_x.splice(lu-1,1);\
Line 751... Line 745...
751
 return;\
745
 return;\
752
};");
746
};");
753
}
747
}
754
/* draw segment(s) via inputfields x/y */
748
/* draw segment(s) via inputfields x/y */
755
void add_input_segment(int num){
749
void add_input_segment(int num){
756
fprintf(js_include_file,"\n/* add_input_segment */\
750
  fprintf(js_include_file,"\n/* add_input_segment */\
757
function user_redraw(t){\
751
function user_redraw(t){\
758
 var lu = userdraw_x.length;\
752
 var lu = userdraw_x.length;\
759
 if( t == -1 && lu > 1){\
753
 if( t == -1 && lu > 1){\
760
  userdraw_x.splice(lu-2,2);\
754
  userdraw_x.splice(lu-2,2);\
761
  userdraw_y.splice(lu-2,2);\
755
  userdraw_y.splice(lu-2,2);\
Line 787... Line 781...
787
};",num);
781
};",num);
788
}
782
}
789
 
783
 
790
/* draw demilines(s) via inputfields x/y */
784
/* draw demilines(s) via inputfields x/y */
791
void add_input_demiline(int num){
785
void add_input_demiline(int num){
792
fprintf(js_include_file,"\n/* add_input_segment */\
786
  fprintf(js_include_file,"\n/* add_input_segment */\
793
function user_redraw(t){\
787
function user_redraw(t){\
794
 var lu = userdraw_x.length;\
788
 var lu = userdraw_x.length;\
795
 if( t == -1 && lu > 1){\
789
 if( t == -1 && lu > 1){\
796
  userdraw_x.splice(lu-2,2);\
790
  userdraw_x.splice(lu-2,2);\
797
  userdraw_y.splice(lu-2,2);\
791
  userdraw_y.splice(lu-2,2);\
Line 835... Line 829...
835
 
829
 
836
7/2022: preserve all div's with html ('<' && '/>') eg mathml,katex,html and all external objects placed with function 'place_image_on_canvas(id)'
830
7/2022: preserve all div's with html ('<' && '/>') eg mathml,katex,html and all external objects placed with function 'place_image_on_canvas(id)'
837
...hope this does not interfere with other things
831
...hope this does not interfere with other things
838
https://wimsedu.info/?topic=geometrie-interactive-avec-canvasdraw
832
https://wimsedu.info/?topic=geometrie-interactive-avec-canvasdraw
839
*/
833
*/
840
fprintf(js_include_file,"\n/* add clear button */\
834
  fprintf(js_include_file,"\n/* add clear button */\
841
clear_draw_area%d = function(){\
835
clear_draw_area%d = function(){\
842
 if(typeof(fill_canvas_no) === 'number'){\
836
 if(typeof(fill_canvas_no) === 'number'){\
843
  var chk = document.getElementById('wims_canvas%d'+fill_canvas_no);\
837
  var chk = document.getElementById('wims_canvas%d'+fill_canvas_no);\
844
  if( chk ){\
838
  if( chk ){\
845
   var fill_ctx = chk.getContext(\"2d\");fill_ctx.clearRect(0,0,xsize,ysize);\
839
   var fill_ctx = chk.getContext(\"2d\");fill_ctx.clearRect(0,0,xsize,ysize);\
Line 888... Line 882...
888
};\
882
};\
889
add_clear_button();",canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,css_class,button_text,canvas_root_id);
883
add_clear_button();",canvas_root_id,canvas_root_id,canvas_root_id,canvas_root_id,css_class,button_text,canvas_root_id);
890
}
884
}
891
 
885
 
892
void add_color_palette(char *css_class){
886
void add_color_palette(char *css_class){
893
fprintf(js_include_file,"\n/* add color palette */\
887
  fprintf(js_include_file,"\n/* add color palette */\
894
function add_color_palette(){\
888
function add_color_palette(){\
895
 var tooltip_placeholder_div = document.getElementById(\"tooltip_placeholder_div%d\");\
889
 var tooltip_placeholder_div = document.getElementById(\"tooltip_placeholder_div%d\");\
896
 var clen = palettecolors.length;\
890
 var clen = palettecolors.length;\
897
 for( var p = 0 ; p < clen ; p++ ){\
891
 for( var p = 0 ; p < clen ; p++ ){\
898
  var button = document.createElement('input');\
892
  var button = document.createElement('input');\
Line 1056... Line 1050...
1056
 };
1050
 };
1057
int NUMBER_OF_COLORNAMES=(sizeof(colors)/sizeof(colors[0]));
1051
int NUMBER_OF_COLORNAMES=(sizeof(colors)/sizeof(colors[0]));
1058
 
1052
 
1059
/* 10/2016 does not react to border color !! just any border will stop the filling */
1053
/* 10/2016 does not react to border color !! just any border will stop the filling */
1060
void add_js_filltoborder(int canvas_type){
1054
void add_js_filltoborder(int canvas_type){
1061
fprintf(js_include_file,"\n/* command filltoborder */\
1055
  fprintf(js_include_file,"\n/* command filltoborder */\
1062
function filltoborder(xs,ys,bordercolors,colors,fill_canvas_no,use_special_filling,fill_ctx){\
1056
function filltoborder(xs,ys,bordercolors,colors,fill_canvas_no,use_special_filling,fill_ctx){\
1063
 document.body.style.cursor = 'wait';\
1057
 document.body.style.cursor = 'wait';\
1064
 var canvas = document.getElementById(\"wims_canvas%d%d\");\
1058
 var canvas = document.getElementById(\"wims_canvas%d%d\");\
1065
 if( ! canvas ){ return; };\
1059
 if( ! canvas ){ return; };\
1066
 document.body.style.cursor = 'wait';\
1060
 document.body.style.cursor = 'wait';\
Line 1185... Line 1179...
1185
}
1179
}
1186
 
1180
 
1187
void add_js_ruler(double x,double y,double sizex,double sizey,char *font,
1181
void add_js_ruler(double x,double y,double sizex,double sizey,char *font,
1188
char *stroke_color,double stroke_opacity,char *fill_color,double fill_opacity,
1182
char *stroke_color,double stroke_opacity,char *fill_color,double fill_opacity,
1189
int line_width,int dynamic,int use_snap){
1183
int line_width,int dynamic,int use_snap){
1190
 fprintf(js_include_file,"\n/* command ruler */\
1184
  fprintf(js_include_file,"\n/* command ruler */\
1191
 var ruler_data = new Array(3);\
1185
 var ruler_data = new Array(3);\
1192
 var ruler%d = function(){\
1186
 var ruler%d = function(){\
1193
  var use_snap = %d;\
1187
  var use_snap = %d;\
1194
  var full = 2*Math.PI;\
1188
  var full = 2*Math.PI;\
1195
  var once = true;\
1189
  var once = true;\
Line 1340... Line 1334...
1340
  ruler%d();",dynamic,canvas_root_id);
1334
  ruler%d();",dynamic,canvas_root_id);
1341
 }
1335
 }
1342
}
1336
}
1343
 
1337
 
1344
void add_js_protractor(int type,double xcenter,double ycenter,int size,char *font,char *stroke_color,double stroke_opacity,char *fill_color,double fill_opacity,int line_width,int use_scale,int dynamic,int use_snap){
1338
void add_js_protractor(int type,double xcenter,double ycenter,int size,char *font,char *stroke_color,double stroke_opacity,char *fill_color,double fill_opacity,int line_width,int use_scale,int dynamic,int use_snap){
1345
 
-
 
1346
/*
1339
/*
1347
use_slider_display = 2 : angle in degrees
1340
use_slider_display = 2 : angle in degrees
1348
use_slider_display = 3 : angle in radians
1341
use_slider_display = 3 : angle in radians
1349
void add_slider_display(FILE *js_include_file,int canvas_root_id,int precision,int font_size,char *font_color,double stroke_opacity){
1342
void add_slider_display(FILE *js_include_file,int canvas_root_id,int precision,int font_size,char *font_color,double stroke_opacity){
1350
*/
1343
*/
1351
 
1344
 
1352
if( type == 1 ){ /* geodriehoek */
1345
  if( type == 1 ){ /* geodriehoek */
1353
 fprintf(js_include_file,"\n/* command protractor type 1 */\
1346
    fprintf(js_include_file,"\n/* command protractor type 1 */\
1354
 var protractor_data = new Array(3);\
1347
 var protractor_data = new Array(3);\
1355
 var protractor%d = function(){\
1348
 var protractor%d = function(){\
1356
  var once = true;\
1349
  var once = true;\
1357
  var use_snap = %d;\
1350
  var use_snap = %d;\
1358
  var full = 2*Math.PI;\
1351
  var full = 2*Math.PI;\
Line 1380... Line 1373...
1380
   ctx_temp.beginPath();\
1373
   ctx_temp.beginPath();\
1381
   ctx_temp.moveTo(xcenter-half,ycenter );\
1374
   ctx_temp.moveTo(xcenter-half,ycenter );\
1382
   ctx_temp.lineTo(xcenter,ycenter-half);\
1375
   ctx_temp.lineTo(xcenter,ycenter-half);\
1383
   ctx_temp.lineTo(xcenter+half,ycenter);\
1376
   ctx_temp.lineTo(xcenter+half,ycenter);\
1384
   ctx_temp.lineTo(xcenter-half,ycenter);\
1377
   ctx_temp.lineTo(xcenter-half,ycenter);\
1385
   ctx_temp.moveTo(xcenter,ycenter );\
1378
   ctx_temp.moveTo(xcenter,ycenter );\
1386
   ctx_temp.lineTo(xcenter+0.5*half,ycenter-0.5*half);\
1379
   ctx_temp.lineTo(xcenter+0.5*half,ycenter-0.5*half);\
1387
   ctx_temp.moveTo(xcenter,ycenter );\
1380
   ctx_temp.moveTo(xcenter,ycenter );\
1388
   ctx_temp.lineTo(xcenter-0.5*half,ycenter-0.5*half);\
1381
   ctx_temp.lineTo(xcenter-0.5*half,ycenter-0.5*half);\
1389
   ctx_temp.moveTo(xcenter,ycenter );\
1382
   ctx_temp.moveTo(xcenter,ycenter );\
1390
   ctx_temp.lineTo(xcenter,ycenter-half);\
1383
   ctx_temp.lineTo(xcenter,ycenter-half);\
1391
   ctx_temp.closePath();\
1384
   ctx_temp.closePath();\
1392
   ctx_temp.fill();\
1385
   ctx_temp.fill();\
1393
   ctx_temp.stroke();\
1386
   ctx_temp.stroke();\
1394
   ctx_temp.beginPath();\
1387
   ctx_temp.beginPath();\
1395
   ctx_temp.arc(xcenter,ycenter,radius1,0,Math.PI,false);\
1388
   ctx_temp.arc(xcenter,ycenter,radius1,0,Math.PI,false);\
1396
   ctx_temp.closePath();\
1389
   ctx_temp.closePath();\
1397
   if( use_scale == 1 ){\
1390
   if( use_scale == 1 ){\
1398
    ctx_temp.fillStyle = ctx_temp.strokeStyle;\
1391
    ctx_temp.fillStyle = ctx_temp.strokeStyle;\
Line 1421... Line 1414...
1421
   ctx_temp.drawImage(canvas,xcenter,ycenter);\
1414
   ctx_temp.drawImage(canvas,xcenter,ycenter);\
1422
   ctx_temp.save();\
1415
   ctx_temp.save();\
1423
   once = false;\
1416
   once = false;\
1424
  };\
1417
  };\
1425
  ",canvas_root_id,use_snap,canvas_root_id,size,type,xcenter,ycenter,font,stroke_color,stroke_opacity,fill_color,fill_opacity,line_width,use_scale);
1418
  ",canvas_root_id,use_snap,canvas_root_id,size,type,xcenter,ycenter,font,stroke_color,stroke_opacity,fill_color,fill_opacity,line_width,use_scale);
1426
}
1419
  }
1427
 
-
 
1428
if( type != 1 ){
1420
  if( type != 1 ){
1429
 fprintf(js_include_file,"\n/* command protractor type 0 */\
1421
    fprintf(js_include_file,"\n/* command protractor type 0 */\
1430
 var protractor_data = new Array(3);\
1422
 var protractor_data = new Array(3);\
1431
 var protractor%d = function(){\
1423
 var protractor%d = function(){\
1432
  var once = true;\
1424
  var once = true;\
1433
  var use_snap = %d;\
1425
  var use_snap = %d;\
1434
  var full = 2*Math.PI;\
1426
  var full = 2*Math.PI;\
Line 1492... Line 1484...
1492
   };\
1484
   };\
1493
   ctx_temp.drawImage(canvas,0,0);\
1485
   ctx_temp.drawImage(canvas,0,0);\
1494
   ctx_temp.save();\
1486
   ctx_temp.save();\
1495
   once = false;\
1487
   once = false;\
1496
  };",canvas_root_id,use_snap,canvas_root_id,size,type,xcenter,ycenter,font,stroke_color,stroke_opacity,fill_color,fill_opacity,line_width,use_scale);
1488
  };",canvas_root_id,use_snap,canvas_root_id,size,type,xcenter,ycenter,font,stroke_color,stroke_opacity,fill_color,fill_opacity,line_width,use_scale);
1497
}
1489
  }
1498
if( dynamic == -1 ){ /* rotate the protractors */
1490
  if( dynamic == -1 ){ /* rotate the protractors */
1499
 fprintf(js_include_file,"\
1491
    fprintf(js_include_file,"\
1500
  var protractor_x = xcenter;\
1492
  var protractor_x = xcenter;\
1501
  var protractor_y = ycenter;\
1493
  var protractor_y = ycenter;\
1502
  ctx.drawImage(canvas_temp,0,0);\
1494
  ctx.drawImage(canvas_temp,0,0);\
1503
  var angle = 0;\
1495
  var angle = 0;\
1504
  if(wims_status != \"done\"){\
1496
  if(wims_status != \"done\"){\
Line 1561... Line 1553...
1561
    default:protractor_stop(evt);\
1553
    default:protractor_stop(evt);\
1562
   };\
1554
   };\
1563
  };\
1555
  };\
1564
 };\
1556
 };\
1565
 protractor%d();",canvas_root_id);
1557
 protractor%d();",canvas_root_id);
1566
 
-
 
1567
}
1558
  }
1568
else
1559
  else
1569
{
1560
  {
1570
 fprintf(js_include_file,"\
1561
    fprintf(js_include_file,"\
1571
  ctx.save();\
1562
  ctx.save();\
1572
  ctx.translate(xcenter,ycenter);\
1563
  ctx.translate(xcenter,ycenter);\
1573
  ctx.rotate(%d*Math.PI/180);\
1564
  ctx.rotate(%d*Math.PI/180);\
1574
  ctx.translate( -1*xcenter, -1*ycenter );\
1565
  ctx.translate( -1*xcenter, -1*ycenter );\
1575
  ctx.drawImage( canvas_temp,0,0 );\
1566
  ctx.drawImage( canvas_temp,0,0 );\
1576
  ctx.restore();\
1567
  ctx.restore();\
1577
 };\
1568
 };\
1578
 protractor%d();\
1569
 protractor%d();\
1579
",dynamic,canvas_root_id);
1570
",dynamic,canvas_root_id);
1580
} /* end dynamic == -1*/
1571
  } /* end dynamic == -1*/
1581
 
-
 
1582
}
1572
}
1583
 
-
 
1584
 
-
 
1585
 
-
 
1586
 
-