Subversion Repositories wimsdev

Rev

Rev 15111 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
15111 schaersvoo 1
#include "canvasdraw.h"
2
 
3
/* What reply format in read_canvas();
4
 
5
note: if userdraw is combined with inputfields...every "userdraw" based answer will append "\n" and  inputfield.value()
6
1 = x1,x2,x3,x4....x_n
7
    y1,y2,y3,y4....y_n
8
 
9
    x/y in pixels
10
 
11
2 = x1,x2,x3,x4....x_n
12
    y1,y2,y3,y4....y_n
13
    x/y in xrange / yrange coordinate system
14
 
15
3 = x1,x2,x3,x4....x_n
16
    y1,y2,y3,y4....y_n
17
    r1,r2,r3,r4....r_n
18
 
19
    x/y in pixels
20
    r in pixels
21
 
22
4 = x1,x2,x3,x4....x_n
23
    y1,y2,y3,y4....y_n
24
    r1,r2,r3,r4....r_n
25
 
26
    x/y in xrange / yrange coordinate system
27
    r in pixels
28
 
29
5 = Ax1,Ax2,Ax3,Ax4....Ax_n
30
    Ay1,Ay2,Ay3,Ay4....Ay_n
31
    Bx1,Bx2,Bx3,Bx4....Bx_n
32
    By1,By2,By3,By4....By_n
33
    Cx1,Cx2,Cx3,Cx4....Cx_n
34
    Cy1,Cy2,Cy3,Cy4....Cy_n
35
    ....
36
    Zx1,Zx2,Zx3,Zx4....Zx_n
37
    Zy1,Zy2,Zy3,Zy4....Zy_n
38
 
39
    x/y in pixels
40
 
41
6 = Ax1,Ax2,Ax3,Ax4....Ax_n
42
    Ay1,Ay2,Ay3,Ay4....Ay_n
43
    Bx1,Bx2,Bx3,Bx4....Bx_n
44
    By1,By2,By3,By4....By_n
45
    Cx1,Cx2,Cx3,Cx4....Cx_n
46
    Cy1,Cy2,Cy3,Cy4....Cy_n
47
    ....
48
    Zx1,Zx2,Zx3,Zx4....Zx_n
49
    Zy1,Zy2,Zy3,Zy4....Zy_n
50
 
51
    x/y in xrange / yrange coordinate system
52
 
53
7 = x1:y1,x2:y2,x3:y3,x4:y4...x_n:y_n
54
 
55
    x/y in pixels
56
 
57
8 = x1:y1,x2:y2,x3:y3,x4:y4...x_n:y_n
58
 
59
    x/y in xrange / yrange coordinate system
60
 
61
9 = x1:y1:r1,x2:y2:r2,x3:y3:r3,x4:y4:r3...x_n:y_n:r_n
62
 
63
    x/y in pixels
64
 
65
10 = x1 ; y1 ;r1 \n x2;y2;r2 \n x3;y3;r3 \n ...x_n:y_n:r_n \n
66
 
67
    x/y in xrange / yrange coordinate system
68
    r is userdraw_radius
69
 
70
11 = Ax1,Ay1,Ax2,Ay2
71
     Bx1,By1,Bx2,By2
72
     Cx1,Cy1,Cx2,Cy2
73
     Dx1,Dy1,Dx2,Dy2
74
     ......
75
     Zx1,Zy1,Zx2,Zy2
76
 
77
    x/y in  xrange / yrange coordinate system
78
 
79
12 = Ax1,Ay1,Ax2,Ay2
80
     Bx1,By1,Bx2,By2
81
     Cx1,Cy1,Cx2,Cy2
82
     Dx1,Dy1,Dx2,Dy2
83
     ......
84
     Zx1,Zy1,Zx2,Zy2
85
 
86
    x/y in pixels
87
 
88
13 = removed
89
14 = Ax1:Ay1:Ax2:Ay2,Bx1:By1:Bx2:By2....Zx1:Zy1:Zx2:Zy2
90
    x/y in pixels
91
15 = reply from inputfields,textareas
92
    reply1,reply2,reply3,...,reply_n
93
    only fields set write (e.g. will not read readonly inputfield values.
94
 
95
16 = read mathml inputfields only
96
 
97
17 = read userdraw text only (x1,y1,text1\nx2,y2,text2..\n.x_n,y_n,text_n
98
 when ready: calculate size_t of string via snprintf(NULL,0,"blah blah...");
99
 
100
18 = read clock(s): H1:M1:S1,H2:M2:S2,...H_n:M_n:S_n
101
19 = return clicked object number (analogue to shape-library onclick)
102
20 = return x/y-data in x-range/y-range of all ''draggable`` images
103
21 = return verbatim coordinates (x1:y1) (x2:y2)...(x_n:y_n)
104
22 = array: x1,y1,x2,y2,x3,y3,x4,y4...x_n,y_n
105
    x/y in xrange / yrange coordinate system
106
23 = answertype for a polyline: remove multiple occurences due to reclick on a point to create next polyline segment
107
24 = read all inputfield values: even those set <code>readonly</code>
108
25 = return all userdrawn arcs in degrees:
109
26 = return all userdrawn arcs in radians:
110
27 = return (only) userdraw inputfields array: x1,y1,text1 \n x2,y2,text2...
111
28 = x1,y1,r1,x2,y2,r2...x_n,y_n,r_n
112
    x/y/r in xrange / yrange coordinate system: may be used to reinput into command
113
    circles color,x1,y1,r1,x2,y2,r2...x_n,y_n,r_n
114
    will not return anything else (e.g. no inputfields, text etc)
115
29 = mulidraw read:
116
 
117
*/
118
 
119
/*
120
SCHAERSVOORDE: replyformat 2,7,8,21,22,23,24
121
USERDRAW DEFAULTS: 2,6,8,10,11,15,16,17,18,19,20,23,24,25,27,29,31
122
OEF: 22,23,28
123
 
124
TO BE REMOVED: 1,3,4,5,9,12,13,14,21
125
*/
126
void add_read_canvas(int type_reply,int reply_precision){
127
/* just 1 reply type allowed...except for format 34 !!!  */
128
fprintf(js_include_file,"\
129
\n/* set_reply_precision() */\
130
function set_reply_precision(){\
131
 var len = userdraw_x.length;\
132
 var prec = %d;\
133
 for(var p = 0 ; p < len ; p++ ){\
134
  userdraw_x[p] = (Math.round(prec*userdraw_x[p]))/prec;\
135
  userdraw_y[p] = (Math.round(prec*userdraw_y[p]))/prec;\
136
 };\
137
 len = userdraw_radius.length;\
138
 if( len > 0 ){\
139
  for(var p = 0 ; p < len ; p++ ){\
140
   userdraw_radius[p] = (Math.round(prec*userdraw_radius[p]))/prec;\
141
  };\
142
 };\
143
};",reply_precision);
144
 
145
switch(type_reply){
146
/*
147
answers may have:
148
x-values,y-values,r-values,input-fields,mathml-inputfields,text-typed answers
149
*/
150
    case 1:
151
     fprintf(js_include_file,"\
152
\n/* function 1 read_canvas%d() */\
153
read_canvas%d = function(){\
154
 if( userdraw_x.length == 0){return;}\
155
 return userdraw_x+\"\\n\"+userdraw_y;\
156
};\
157
/* end function 1 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
158
    break;
159
    case 2: fprintf(js_include_file,"\
160
\n/* function 2 read_canvas%d() */\
161
read_canvas%d = function(){\
162
 if( userdraw_x.length == 0){return;}\
163
 var reply_x = new Array();var reply_y = new Array();\
164
 var prec = %d;\
165
 var len = userdraw_x.length;\
166
 for(var p = 0;p < len ; p++){\
167
  reply_x[p] = (Math.round(prec*(px2x(userdraw_x[p]))))/prec;\
168
  reply_y[p] = (Math.round(prec*(px2y(userdraw_y[p]))))/prec;\
169
 };\
170
 return reply_x+\"\\n\"+reply_y;\
171
};\
172
/* end function 2 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
173
    break;
174
    case 3: fprintf(js_include_file,"\
175
\n/* function 3 read_canvas%d() */\
176
read_canvas%d = function(){\
177
 if( userdraw_x.length == 0){return;}\
178
 return userdraw_x+\"\\n\"+userdraw_y+\"\\n\"+userdraw_radius;\
179
};\
180
/* end function 3 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
181
    break;
182
    case 4: fprintf(js_include_file,"\
183
\n/* function 4 read_canvas%d() */\
184
read_canvas%d = function(){\
185
 var prec = %d;\
186
 var reply_x = new Array();var reply_y = new Array();\
187
 var len = userdraw_x.length;\
188
 for(var p = 0 ; p>len ;p++){\
189
  reply_x[p] = (Math.round(prec*(px2x(userdraw_x[p]))))/prec;\
190
  reply_y[p] = (Math.round(prec*(px2y(userdraw_y[p]))))/prec;\
191
 };\
192
 return reply_x+\"\\n\"+reply_y+\"\\n\"+userdraw_radius;\
193
};\
194
/* end function 4 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
195
    break;
196
    case 5: fprintf(js_include_file,"\
197
\n/* function 5 read_canvas%d() */\
198
read_canvas%d = function(){\
199
 set_reply_precision();\
200
 var p = 0;\
201
 var reply = \"\";\
202
 for(p = 0; p < userdraw_x.length;p++){\
203
  if(userdraw_x[p] != null ){\
204
   reply = reply + userdraw_x[p]+\"\\n\"+userdraw_y[p]+\"\\n\";\
205
  };\
206
 };\
207
 return reply;\
208
};\
209
/* end function 5 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
210
    break;
211
    case 6: fprintf(js_include_file,"\
212
\n/* function 6 read_canvas%d() */\
213
read_canvas%d = function(){\
214
 var reply = \"\";\
215
 var tmp_x = new Array();\
216
 var tmp_y = new Array();\
217
 var prec = %d;\
218
 for(var p = 0 ; p < userdraw_x.length; p++){\
219
  tmp_x = userdraw_x[p];\
220
  tmp_y = userdraw_y[p];\
221
  if(tmp_x != null){\
222
   for(var i = 0 ; i < tmp_x.length ; i++){\
223
    tmp_x[i] = (Math.round(prec*(px2x(tmp_x[i]))))/prec;\
224
    tmp_y[i] = (Math.round(prec*(px2y(tmp_y[i]))))/prec;\
225
   };\
226
   reply = reply + tmp_x + \"\\n\" + tmp_y +\"\\n\";\
227
  };\
228
 };\
229
 return reply;\
230
};\
231
/* end function 6 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
232
    break;
233
    case 7: fprintf(js_include_file,"\
234
\n/* function 7 read_canvas%d() */\
235
read_canvas%d = function(){\
236
 set_reply_precision();\
237
 var reply = new Array();\
238
 var len = userdraw_x.length;\
239
 for(var p=0; p< len ;p++){\
240
  reply[p] = userdraw_x[p] +\":\" + userdraw_y[p];\
241
 };\
242
 return reply;\
243
};\
244
/* end function 7 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
245
    break;
246
    case 8: fprintf(js_include_file,"\
247
\n/* function 8 read_canvas%d() */\
248
read_canvas%d = function(){\
249
 var reply = new Array();\
250
 var prec = %d;\
251
 var len = userdraw_x.length;\
252
 for(var p=0 ; p < len; p++){\
253
  reply[p] = (Math.round(prec*(px2x(userdraw_x[p]))))/prec +\":\" + (Math.round(prec*(px2y(userdraw_y[p]))))/prec;\
254
 };\
255
 return reply;\
256
};\
257
/* end function 8 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
258
    break;
259
    case 9: fprintf(js_include_file,"\
260
\n/* function 9 read_canvas%d() */\
261
read_canvas%d = function(){\
262
 set_reply_precision();\
263
 var reply = new Array();\
264
 var len = userdraw_x.length;\
265
 for(var p=0;p<len;p++){\
266
  reply[p] = userdraw_x[p] +\":\" + userdraw_y[p] + \":\" + userdraw_radius[p];\
267
  p++;\
268
 };\
269
 return reply;\
270
};\
271
/* end function 9 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
272
    break;
273
    case 10: fprintf(js_include_file,"\
274
\n/* function 10 read_canvas%d() */\
275
read_canvas%d = function(){\
276
 var len = userdraw_x.length;\
277
 var prec = %d;\
278
 var reply = \"\";\
279
 for(var p=0; p<len;p++){\
280
  reply = reply + (Math.round(prec*(px2x(userdraw_x[p]))))/prec +\";\" + (Math.round(prec*(px2y(userdraw_y[p]))))/prec + \";\" + (Math.round(prec*userdraw_radius[p]))/prec + \"\\n\";\
281
 };\
282
 return reply;\
283
};\
284
/* end function 10 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
285
    break;
286
    case 11: fprintf(js_include_file,"\
287
\n/* function 11 read_canvas%d() */\
288
read_canvas%d = function(){\
289
 var reply = \"\";\
290
 var p = 0;\
291
 var prec = %d;\
292
 var len = userdraw_x.length;\
293
 for(var p=0;p<len;p=p+2){\
294
  reply = reply + (Math.round(prec*(px2x(userdraw_x[p]))))/prec +\",\" + (Math.round(prec*(px2y(userdraw_y[p]))))/prec +\",\" + (Math.round(prec*(px2x(userdraw_x[p+1]))))/prec +\",\" + (Math.round(prec*(px2y(userdraw_y[p+1]))))/prec +\"\\n\" ;\
295
 };\
296
 return reply;\
297
};\
298
/* end function 11 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
299
    break;
300
    case 12: fprintf(js_include_file,"\
301
\n/* function 12 read_canvas%d() */\
302
read_canvas%d = function(){\
303
 set_reply_precision();\
304
 var reply = \"\";\
305
 var len = userdraw_x.length;\
306
 for(var p=0;p<len;p = p+2){\
307
  reply = reply + userdraw_x[p] +\",\" + userdraw_y[p] +\",\" + userdraw_x[p+1] +\",\" + userdraw_y[p+1] +\"\\n\" ;\
308
 };\
309
 return reply;\
310
};\
311
/* end function 12 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
312
    break;
313
    case 13: canvas_error("replyformat 13 has been removed...");
314
    break;
315
    case 14:
316
    canvas_error("replyformat 14 has been removed");
317
    break;
318
/*
319
read_canvas%d = function(){\
320
 set_reply_precision();\
321
 var reply = new Array();\
322
 var p = 0;var i = 0;\
323
 while(userdraw_x[p+1]){\
324
  reply[i] = userdraw_x[p] +\":\" + userdraw_y[p] +\":\" + userdraw_x[p+1] +\":\" + userdraw_y[p+1];\
325
  p = p+2;i++;\
326
 };\
327
 return reply;\
328
};\
329
*/
330
    break;
331
    case 15: fprintf(js_include_file,"\
332
\n/* function 15  read_canvas%d() */\
333
read_canvas%d = function(){\
334
 var input_reply = new Array();\
335
 var p = 0;\
336
 if( document.getElementById(\"canvas_input0\")){\
337
  var t = 0;\
338
  while(document.getElementById(\"canvas_input\"+t)){\
339
   if( ! document.getElementById(\"canvas_input\"+t).getAttribute(\"readonly\")){\
340
    input_reply[p] = document.getElementById(\"canvas_input\"+t).value;\
341
    p++;\
342
   };\
343
   t++;\
344
  };\
345
 };\
346
 return input_reply;\
347
};\
348
/* end function 15 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
349
    break;
350
    case 16: fprintf(js_include_file,"\
351
\n/* function 16 read_mathml() */\
352
function read_mathml(){\
353
 var reply = new Array();\
354
 var p = 0;\
355
 if( document.getElementById(\"mathml0\")){\
356
  while(document.getElementById(\"mathml\"+p)){\
357
   reply[p] = document.getElementById(\"mathml\"+p).value;\
358
   p++;\
359
  };\
360
 };\
361
return reply;\
362
};\
363
this.read_mathml = read_mathml;\n\
364
/* end function 16 read_mathml() */");
365
    break;
366
    case 17:  fprintf(js_include_file,"\
367
\n/* function 17 read_canvas%d() */\
368
read_canvas%d = function(){\
369
 var len = userdraw_x.length;\
370
 if( len == 0){return;}\
371
 var rep = px2x(userdraw_x[0])+\",\"+px2y(userdraw_y[0])+\",\"+userdraw_text[0];\
372
 for(var p = 1 ; p < len ; p++){\
373
  rep = rep + \"\\n\" + px2x(userdraw_x[p]) + \",\" + px2y(userdraw_y[p]) + \",\" + userdraw_text[p];\
374
 };\
375
 return rep;\
376
};\
377
/* end function 17 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
378
    break;
379
    case 18: fprintf(js_include_file,"\
380
\n/* javascript has no real modulo function */\
381
function mod(n, m){\
382
 var m = parseInt(((n %% m) + m) %% m);\
383
 return m;\
384
};\
385
\n/* function 18 read_canvas%d() */\
386
read_canvas%d = function(){\
387
 var p = 0;\
388
 var reply = new Array();\
389
 var name;\
390
 var t = true;\
391
 var h;var m;var s;\
392
 while(t){\
393
  try{\
394
   name = eval('clocks'+p);\
395
   h = name.H;m = name.M;s = name.S;\
396
   h = mod((h+m/60+s/3600),12);m = mod((m + s/60),60);s = mod(s,60);\
397
   reply[p] = h+\":\"+m+\":\"+s;\
398
   p++;\
399
  }catch(e){t=false;};\
400
 };\
401
 if( p == 0 ){return;}\
402
 return reply;\
403
};\
404
/* end function 18 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
405
    break;
406
    case 19: fprintf(js_include_file,"\
407
\n/* function 19 read_canvas%d() */\
408
read_canvas%d = function(){\
409
 return reply[0];\
410
};\
411
/* end function 19 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
412
    break;
413
    case 20: fprintf(js_include_file,"\
414
\n/* function 20 read_canvas%d() */\
415
read_canvas%d = function(){\
416
 var prec = %d;\
417
 var len  = ext_drag_images.length;\
418
 var reply = new Array(len);\
419
 for(var p = 0 ; p < len ; p++){\
420
  var img = ext_drag_images[p];\
421
  reply[p] = p+\":\"+(Math.round(prec*(px2x(img[6]))))/prec+\":\"+(Math.round(prec*(px2y(img[7]))))/prec;\
422
 };\
423
 return reply;\
424
};\
425
/* end function 20 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
426
    break;
427
    case 21: fprintf(js_include_file,"\
428
\n/* function 21 read_canvas%d() */\
429
read_canvas%d = function(){\
430
 var len = userdraw_x.length;if(len == 0){return;}\
431
 var reply_coord = new Array();var p = 0;\
432
 var prec = %d;\
433
 for(var p = 0; p < len ; p++){\
434
  reply_coord[p] = \"(\"+(Math.round(prec*(px2x(userdraw_x[p]))))/prec+\":\"+(Math.round(prec*(px2y(userdraw_y[p]))))/prec+\")\";\
435
 };\
436
 return reply_coord;\
437
};\
438
/* end function 21 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
439
    break;
440
    case 22: fprintf(js_include_file,"\
441
\n/* function 22 read_canvas%d() */\
442
read_canvas%d = function(){\
443
 var reply = new Array();\
444
 var lu = userdraw_x.length;\
445
 if(lu == 0){return;};\
446
 var idx = 0;\
447
 var prec = %d;\
448
 for(var p = 0 ; p < lu ; p++){\
449
  reply[idx] = (Math.round(prec*(px2x(userdraw_x[p]))))/prec;idx++;\
450
  reply[idx] = (Math.round(prec*(px2y(userdraw_y[p]))))/prec;idx++;\
451
 };\
452
 return reply;\
453
};\
454
/* end function 22 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
455
    break;
456
    case 23: fprintf(js_include_file,"\
457
\n/* function 23 read_canvas%d() default 5 px marge */\
458
read_canvas%d = function(){\
459
 if( userdraw_x.length < 2){return;}\
460
 var lu = userdraw_x.length;\
461
 if( lu != userdraw_y.length ){return;}\
462
 var reply_x = new Array();var reply_y = new Array();\
463
 var marge = 5;var p = 0;\
464
 var prec = %d;\
465
 for(var i = 0; i < lu - 1 ; i++ ){\
466
  if( Math.abs(userdraw_x[i] - userdraw_x[i+1]) || Math.abs(userdraw_y[i] - userdraw_y[i+1])){\
467
   reply_x[p] = (Math.round(prec*(px2x(userdraw_x[i]))))/prec;reply_y[p] = (Math.round(prec*(px2y(userdraw_y[i]))))/prec;\
468
   if( isNaN(reply_x[p]) || isNaN(reply_y[p]) ){return; };\
469
   p++;\
470
  };\
471
  reply_x[p] = (Math.round(prec*(px2x(userdraw_x[lu-1]))))/prec;reply_y[p] = (Math.round(prec*(px2y(userdraw_y[lu-1]))))/prec;\
472
 };\
473
 return reply_x+\"\\n\"+reply_y;\
474
};\
475
/* end function 23 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
476
    break;
477
    case 24: fprintf(js_include_file,"\n\
478
/* function 24  read_canvas%d() */\
479
read_canvas%d = function(){\
480
 var input_reply = new Array();\
481
 var p = 0;\
482
 if( document.getElementById(\"canvas_input0\")){\
483
  while(document.getElementById(\"canvas_input\"+p)){\
484
    input_reply[p] = document.getElementById(\"canvas_input\"+p).value;\
485
    p++;\
486
  };\
487
  return input_reply;\
488
 };\
489
};\
490
/* end function 24 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
491
    break;
492
    case 25:
493
    fprintf(js_include_file,"\n/* function 25 read_canvas%d(): angle(s) in degrees */\
494
read_canvas%d = function(){\
495
 if( userdraw_radius.length < 1){return;}\
496
 var lu = userdraw_radius.length;\
497
 var prec = %d;\
498
 var angle_reply = new Array(lu);\
499
 for(var p = 0 ; p < lu ; p++){\
500
  angle_reply[p] = (Math.round(prec*180*(userdraw_radius[p])/Math.PI))/prec;\
501
 };\
502
 return angle_reply;\
503
};\
504
/* end function 25 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
505
    break;
506
    case 26:
507
    fprintf(js_include_file,"\n/* function 26 read_canvas%d(): angle(s) in radians */\
508
read_canvas%d = function(){\
509
 if( userdraw_radius.length < 1){return;}\
510
 var lu = userdraw_radius.length;\
511
 var prec = %d;\
512
 var angle_reply = new Array(lu);\
513
 for(var p = 0 ; p < lu ; p++){\
514
  angle_reply[p] = (Math.round(prec*(userdraw_radius[p])))/prec;\
515
 };\
516
 return angle_reply;\
517
};\
518
/* end function 26 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
519
    break;
520
    case 27:
521
    fprintf(js_include_file,"\n/* function 27 read_canvas%d(): inputfield(s) location and their values: */\
522
read_canvas%d = function(){\
523
 var lu = userdraw_x.length;\
524
 if( lu < 1){return;};\
525
 set_reply_precision();\
526
 var prec = %d;var rep = \"\";\
527
 for(var p = 0 ; p < lu ; p++){\
528
   rep = rep + (Math.round(prec*(px2x(userdraw_x[p]))))/prec+\";\"+(Math.round(prec*(px2y(userdraw_y[p]))))/prec+\";\"+ document.getElementById(\"canvas_input\"+p).value + \"\\n\";\
529
 };\
530
 return rep;\
531
};\
532
/* end function 27 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
533
    break;
534
    case 28:
535
    fprintf(js_include_file,"\n/* function 28 read_canvas%d() */\
536
read_canvas%d = function(){\
537
 var prec = %d;var reply = new Array();var p = 0;var idx = 0;\
538
 while(userdraw_x[p]){\
539
  reply[idx] = (Math.round(prec*(px2x(userdraw_x[p]))))/prec;\
540
  idx++;\
541
  reply[idx] = (Math.round(prec*(px2y(userdraw_y[p]))))/prec;\
542
  idx++;\
543
  reply[idx] = (Math.round(prec*(px2x(userdraw_radius[p]) - px2x(0))))/prec;\
544
  idx++;\
545
  p++;\
546
 };\
547
 return reply;\
548
};\
549
/* end function 28 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
550
    break;
551
    case 29:
552
    fprintf(js_include_file,"\n/* function 29 [multidraw]read_canvas%d() */\
553
function x_precision(array_x){\
554
 var len = array_x.length;\
555
 var x_array = new Array(len);\
556
 var prec = %d;\
557
 for(var p = 0 ; p < len ; p++ ){\
558
  x_array[p] = (Math.round(prec*(px2x(array_x[p]))))/prec;\
559
 };\
560
 return x_array;\
561
};\
562
function y_precision(array_y){\
563
 var len = array_y.length;\
564
 var y_array = new Array(len);\
565
 var prec = %d;\
566
 for(var p = 0 ; p < len ; p++ ){\
567
  y_array[p] = (Math.round(prec*(px2y(array_y[p]))))/prec;\
568
 };\
569
 return y_array;\
570
};\
571
function radius_to_x(array_r){\
572
 var len = array_r.length;\
573
 var ff = (xmax - xmin)/xsize;\
574
 var r_array = new Array(len);\
575
 var prec = %d;\
576
 for(var p = 0 ; p < len ; p++ ){\
577
  r_array[p] = (Math.round(prec*(ff*(array_r[p]))))/prec;\
578
 };\
579
 return r_array;\
580
};\
581
read_canvas%d = function(){\
582
 function uniq_fast(arr){\
583
  var seen = {};\
584
  var out = [];\
585
  var len = arr.length;\
586
  var j = 0;\
587
  for(var i = 0; i < len; i++){\
588
   var item = arr[i];\
589
   if(seen[item] !== 1) {\
590
    seen[item] = 1;out[j++] = item;\
591
   };\
592
  };\
593
  return out;\
594
 };\
595
 function list_unique(arr1,arr2,arr3){\
596
  if( typeof( allow_duplicate_answers ) === 'number' ){ return [ x_precision(arr1),y_precision(arr2),arr3 ];};\
597
  var len1 = arr1.length;\
598
  if(len1 != arr2.length){return;};\
599
  var sum = [];var R1=[];var R2=[];\
600
  arr1 = x_precision(arr1);\
601
  arr2 = y_precision(arr2);\
602
  if(arr3 == null){\
603
   for(var p=0;p<len1;p++){ sum[p] = arr1[p]+'#'+arr2[p]; };\
604
   sum = uniq_fast(sum);var len2=sum.length;\
605
   for(var p=0;p<len2;p++){\
606
    var tmp = (sum[p]).split('#');\
607
    R1[p] = tmp[0];\
608
    R2[p] = tmp[1];\
609
   };\
610
   return [R1,R2];\
611
  }else{\
612
   var R3 = [];\
613
   for(var p=0;p<len1;p++){ sum[p] = arr1[p]+'#'+arr2[p]+'#'+arr3[p];};\
614
   sum = uniq_fast(sum);var len2=sum.length;\
615
   for(var p=0;p<len2;p++){\
616
    var tmp = (sum[p]).split('#');\
617
    R1[p] = tmp[0];\
618
    R2[p] = tmp[1];\
619
    R3[p] = tmp[2];\
620
   };\
621
   return [R1,R2,R3];\
622
  };\
623
 };\
624
 var reply=\" \";\
625
 if(  typeof(points_x) === 'object' && points_x.length > 0 ){var xyz = list_unique(points_x,points_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\";}else{ reply = reply + \"\\n\"; };\
626
 if(  typeof(circles_x) === 'object' && circles_x.length > 0 ){var xyz = list_unique(circles_x,circles_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\";\"+radius_to_x(multi_radius)+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
627
 if(  typeof(segments_x) === 'object' && segments_x.length > 0 ){ var xyz = list_unique(segments_x,segments_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\";}else{ reply = reply + \"\\n\"; };\
628
 if(  typeof(arrows_x) === 'object' && arrows_x.length > 0 ){var xyz = list_unique(arrows_x,arrows_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
629
 if(  typeof(lines_x) === 'object' && lines_x.length > 0 ){ var xyz = list_unique(lines_x,lines_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
630
 if(  typeof(triangles_x) === 'object' && triangles_x.length > 0){var xyz = list_unique(triangles_x,triangles_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
631
 if(  typeof(polys_x) === 'object' && polys_x.length > 0){ var xyz = list_unique(polys_x,polys_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
632
 if(  typeof(rects_x) === 'object' && rects_x.length > 0 ){var xyz = list_unique(rects_x,rects_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
633
 if(  typeof(closedpoly_x) === 'object' && closedpoly_x.length > 0){ closedpoly_x.pop();closedpoly_y.pop();var xyz = list_unique(closedpoly_x,closedpoly_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\";}else{ reply = reply + \"\\n\"; };\
634
 if(  typeof(parallelogram_x) === 'object' && parallelogram_x.length > 0){var xyz = list_unique(parallelogram_x,parallelogram_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\"; };\
635
 if(  typeof(text_x) === 'object' && text_x.length > 0){var xyz = list_unique(text_x,text_y,text_abc);reply = reply + xyz[0] +\";\"+xyz[1]+\";\"+xyz[2]+\"\\n\";}else{ reply = reply + \"\\n\"; };\
636
 if(  typeof(images_x) === 'object' && images_x.length > 0){var xyz = list_unique(images_x,images_y,images_id);reply = reply + xyz[0] +\";\"+xyz[1]+\";\"+xyz[2]+\"\\n\";}else{ reply = reply + \"\\n\"; };\
637
 if(  typeof(curvedarrows_x) === 'object' && curvedarrows_x.length > 0){var xyz = list_unique(curvedarrows_x,curvedarrows_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\";};\
638
 if(  typeof(curvedarrows2_x) === 'object' && curvedarrows2_x.length > 0){var xyz = list_unique(curvedarrows2_x,curvedarrows2_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; }else{ reply = reply + \"\\n\";};\
639
 if(  typeof(crosshairs_x) === 'object' && crosshairs_x.length > 0 ){var xyz = list_unique(crosshairs_x,crosshairs_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\";}else{ reply = reply + \"\\n\"; };\
640
 if(  typeof(userdraw_x) === 'object' && userdraw_radius.x> 0){var xyz = list_unique(userdraw_x,userdraw_y,null);reply = reply + xyz[0] +\";\"+xyz[1]+\"\\n\"; return reply;;};\
641
 if(  typeof(userdraw_radius) === 'object' && userdraw_radius.length > 0){var xyz = list_unique(userdraw_x,userdraw_y,userdraw_radius);reply = reply + xyz[0] +\";\"+xyz[1]+\";\"+xyz[2]+\"\\n\"; return reply;;};\
16827 schaersvoo 642
 if( document.getElementById(\"canvas_input0\")){var t = 0;\
643
  while(document.getElementById(\"canvas_input\"+t)){\
644
   if( ! document.getElementById(\"canvas_input\"+t).getAttribute(\"readonly\")){\
645
    reply = reply+document.getElementById(\"canvas_input\"+t).value + \";\";\
646
   };\
647
   t++;\
648
  };\
649
 };\
15111 schaersvoo 650
 return reply;\
651
};\
652
/* end function 29 read_canvas%d() */",canvas_root_id,reply_precision,reply_precision,reply_precision,canvas_root_id,canvas_root_id);
653
    break;
654
    case 30:
655
    fprintf(js_include_file,"\n/* function 30 read_canvas%d() */\
656
read_canvas%d = function(){\
657
 var reply = new Array(3);\
658
 var prec = %d;\
659
 reply[0] = (Math.round(prec*(px2x(protractor_data[0]))))/prec;\
660
 reply[1] = (Math.round(prec*(px2y(protractor_data[1]))))/prec;\
661
 reply[2] = (Math.round(prec*(protractor_data[2])))/prec;\
662
 return reply;\
663
};\
664
/* end function 30 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
665
    break;
666
    case 31:
667
    fprintf(js_include_file,"\n/* function 31 read_canvas%d() */\
668
read_canvas%d = function(){\
669
 var reply = new Array(3);\
670
 var prec = %d;\
671
 reply[0] = (Math.round(prec*(px2x(ruler_data[0]))))/prec;\
672
 reply[1] = (Math.round(prec*(px2y(ruler_data[1]))))/prec;\
673
 reply[2] = (Math.round(prec*(ruler_data[2])))/prec;\
674
 return reply;\
675
};\
676
/* end function 31 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
677
    break;
678
    case 32:
679
    fprintf(js_include_file,"\n/* function 32 read_canvas%d() */\
680
read_canvas%d = function(){\
681
 var reply = new Array(6);\
682
 var prec = %d;\
683
 reply[0] = (Math.round(prec*(px2x(ruler_data[0]))))/prec;\
684
 reply[1] = (Math.round(prec*(px2y(ruler_data[1]))))/prec;\
685
 reply[2] = (Math.round(prec*(ruler_data[2])))/prec;\
686
 reply[3] = (Math.round(prec*(px2x(protractor_data[0]))))/prec;\
687
 reply[4] = (Math.round(prec*(px2y(protractor_data[1]))))/prec;\
688
 reply[5] = (Math.round(prec*(protractor_data[2])))/prec;\
689
 return reply;\
690
};\
691
/* end function 32 read_canvas%d() */",canvas_root_id,canvas_root_id,reply_precision,canvas_root_id);
692
    break;
693
    case 33:
694
    fprintf(js_include_file,"\n/* function 33 read_canvas%d() */\
695
read_canvas%d = function(){\
696
 var reply = userdraw_x+'\\n'+userdraw_y;\
697
 return reply;\
698
};\
699
/* end function 32 read_canvas%d() */",canvas_root_id,canvas_root_id,canvas_root_id);
700
    break;
701
    case 34: fprintf(js_include_file,"\
702
\n/* special OEF function (replyformat 34) read_canvas_images() \\n note: only suitable for reading a single canvas in exercise page */\
703
var read_canvas_images = function(){\
704
 var prec = %d;\
705
 var len  = ext_drag_images.length;\
706
 var reply = new Array(len);\
707
 for(var p = 0 ; p < len ; p++){\
708
    var img = ext_drag_images[p];\
709
    reply[p] = p+\":\"+(Math.round(prec*(px2x(img[6]))))/prec+\":\"+(Math.round(prec*(px2y(img[7]))))/prec;\
710
 };\
711
 return reply;\
712
};\
713
/* end function 20 read_canvas_images() */",reply_precision);
714
    break;
715
    case 100:break; /* debug js-object format: see dragstuff.c */
716
    default: canvas_error("hmmm unknown replyformat...");break;
717
}
718
 return;
719
}