jsxgraph 1.14.0 → 1.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CHANGELOG.md +33 -3
  2. package/distrib/docs/3d_linspace3d.js.html +16 -10
  3. package/distrib/docs/3d_point3d.js.html +0 -5
  4. package/distrib/docs/3d_sphere3d.js.html +92 -69
  5. package/distrib/docs/3d_view3d.js.html +24 -16
  6. package/distrib/docs/Angle.html +7 -7
  7. package/distrib/docs/CircumcircleSector.html +2 -2
  8. package/distrib/docs/Conic.html +1 -1
  9. package/distrib/docs/Ellipse.html +23 -1
  10. package/distrib/docs/Hyperbola.html +24 -1
  11. package/distrib/docs/JXG.Board.infobox.html +1 -1
  12. package/distrib/docs/JXG.Board_.html +130 -130
  13. package/distrib/docs/JXG.CanvasRenderer.html +10 -10
  14. package/distrib/docs/JXG.Composition.html +3 -3
  15. package/distrib/docs/JXG.GeometryElement.html +26 -26
  16. package/distrib/docs/JXG.Math.Numerics.html +45 -47
  17. package/distrib/docs/JXG.Math.Statistics.html +14 -15
  18. package/distrib/docs/JXG.Math.Tiling.html +3 -7
  19. package/distrib/docs/JXG.Math.html +101 -83
  20. package/distrib/docs/JXG.Point3D.html +2 -2
  21. package/distrib/docs/JXG.SVGRenderer.html +12 -12
  22. package/distrib/docs/JXG.Sphere3D.html +1255 -2
  23. package/distrib/docs/JXG.View3D.html +29 -29
  24. package/distrib/docs/JXG.html +20 -20
  25. package/distrib/docs/MajorSector.html +1 -1
  26. package/distrib/docs/MinorSector.html +1 -1
  27. package/distrib/docs/NonReflexAngle.html +1 -1
  28. package/distrib/docs/Parabola.html +1 -1
  29. package/distrib/docs/Point3D.html +1 -1
  30. package/distrib/docs/ReflexAngle.html +1 -1
  31. package/distrib/docs/Sector.html +12 -12
  32. package/distrib/docs/Sphere3D.html +17 -1
  33. package/distrib/docs/View3D.html +1 -1
  34. package/distrib/docs/base_board.js.html +63 -13
  35. package/distrib/docs/base_composition.js.html +3 -3
  36. package/distrib/docs/base_constants.js.html +1 -1
  37. package/distrib/docs/base_element.js.html +2 -1
  38. package/distrib/docs/base_text.js.html +2 -2
  39. package/distrib/docs/element_conic.js.html +35 -1
  40. package/distrib/docs/element_sector.js.html +6 -3
  41. package/distrib/docs/index.html +1 -1
  42. package/distrib/docs/math_math.js.html +64 -35
  43. package/distrib/docs/math_numerics.js.html +13 -12
  44. package/distrib/docs/math_statistics.js.html +19 -19
  45. package/distrib/docs/math_tiling.js.html +6 -288
  46. package/distrib/docs/parser_jessiecode.js.html +1 -1
  47. package/distrib/docs/renderer_canvas.js.html +7 -6
  48. package/distrib/docs/renderer_svg.js.html +15 -7
  49. package/distrib/docs/scripts/jsxgraphcore.js +2 -2
  50. package/distrib/docs/styles/jsxgraph.css +1 -1
  51. package/distrib/docs/utils_type.js.html +11 -4
  52. package/distrib/geogebra.min.js +1 -1
  53. package/distrib/geonext.min.js +1 -1
  54. package/distrib/index.d.ts +11 -0
  55. package/distrib/intergeo.min.js +1 -1
  56. package/distrib/jsxgraph.css +1 -1
  57. package/distrib/jsxgraphcore.js +2 -2
  58. package/distrib/jsxgraphcore.mjs +2 -2
  59. package/distrib/jsxgraphcore.mjs.map +1 -1
  60. package/distrib/jsxgraphsrc.js +380 -496
  61. package/distrib/jsxgraphsrc.mjs +380 -496
  62. package/distrib/jsxgraphsrc.mjs.map +1 -1
  63. package/package.json +10 -12
  64. package/src/3d/linspace3d.js +16 -10
  65. package/src/3d/point3d.js +0 -5
  66. package/src/3d/sphere3d.js +92 -69
  67. package/src/3d/view3d.js +24 -16
  68. package/src/base/board.js +63 -13
  69. package/src/base/composition.js +3 -3
  70. package/src/base/constants.js +1 -1
  71. package/src/base/element.js +2 -1
  72. package/src/base/text.js +2 -2
  73. package/src/element/conic.js +35 -1
  74. package/src/element/sector.js +6 -3
  75. package/src/index.d.ts +11 -0
  76. package/src/math/math.js +64 -35
  77. package/src/math/numerics.js +13 -12
  78. package/src/math/statistics.js +19 -19
  79. package/src/math/tiling.js +6 -288
  80. package/src/parser/jessiecode.js +1 -1
  81. package/src/renderer/canvas.js +7 -6
  82. package/src/renderer/svg.js +15 -7
  83. package/src/utils/type.js +11 -4
  84. package/src/unused/bst.js +0 -475
  85. package/src/unused/heap.js +0 -135
  86. package/src/unused/locus.js +0 -162
  87. package/src/unused/server/JXG.py +0 -74
  88. package/src/unused/server/JXGServer.py +0 -94
  89. package/src/unused/server/JXGServerModule.py +0 -9
  90. package/src/unused/server/README.md +0 -63
  91. package/src/unused/server/RStats.py +0 -45
  92. package/src/unused/server/YahooFinance.py +0 -81
  93. package/src/unused/server/fft.py +0 -136
  94. package/src/unused/server/geoloci.py +0 -210
  95. package/src/unused/server/jxggroebner.py +0 -219
  96. package/src/unused/server/jxgtestplugin.py +0 -19
  97. package/src/unused/server/server.js +0 -280
  98. package/src/unused/sketch.js +0 -2895
  99. package/src/unused/symbolic.js +0 -416
@@ -1,2895 +0,0 @@
1
- /*
2
- Copyright 2008-2026
3
- Matthias Ehmann,
4
- Michael Gerhaeuser,
5
- Carsten Miller,
6
- Bianca Valentin,
7
- Andreas Walter,
8
- Alfred Wassermann,
9
- Peter Wilfahrt
10
-
11
- This file is part of JSXGraph.
12
-
13
- JSXGraph is free software dual licensed under the GNU LGPL or MIT License.
14
-
15
- You can redistribute it and/or modify it under the terms of the
16
-
17
- * GNU Lesser General Public License as published by
18
- the Free Software Foundation, either version 3 of the License, or
19
- (at your option) any later version
20
- OR
21
- * MIT License: https://github.com/jsxgraph/jsxgraph/blob/master/LICENSE.MIT
22
-
23
- JSXGraph is distributed in the hope that it will be useful,
24
- but WITHOUT ANY WARRANTY; without even the implied warranty of
25
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
- GNU Lesser General Public License for more details.
27
-
28
- You should have received a copy of the GNU Lesser General Public License and
29
- the MIT License along with JSXGraph. If not, see <https://www.gnu.org/licenses/>
30
- and <https://opensource.org/licenses/MIT/>.
31
- */
32
-
33
- /*global JXG: true*/
34
- /*jslint nomen: true, plusplus: true*/
35
-
36
- (function () {
37
- "use strict";
38
-
39
- JXG.extendConstants(JXG, {
40
- GENTYPE_ABC: 1, // unused
41
- GENTYPE_AXIS: 2,
42
- GENTYPE_MID: 3,
43
-
44
- GENTYPE_REFLECTION: 4,
45
- GENTYPE_MIRRORELEMENT: 5,
46
-
47
- GENTYPE_REFLECTION_ON_LINE: 4,
48
- GENTYPE_REFLECTION_ON_POINT: 5,
49
- GENTYPE_TANGENT: 6,
50
- GENTYPE_PARALLEL: 7,
51
- GENTYPE_BISECTORLINES: 8,
52
- GENTYPE_BOARDIMG: 9,
53
- GENTYPE_BISECTOR: 10,
54
- GENTYPE_NORMAL: 11,
55
- GENTYPE_POINT: 12,
56
- GENTYPE_GLIDER: 13,
57
- GENTYPE_INTERSECTION: 14,
58
- GENTYPE_CIRCLE: 15,
59
- /**
60
- * @ignore @deprecated NOT USED ANY MORE SINCE SKETCHOMETRY 2.0 (only for old constructions needed)
61
- */
62
- GENTYPE_CIRCLE2POINTS: 16,
63
-
64
- GENTYPE_LINE: 17,
65
- GENTYPE_TRIANGLE: 18,
66
- GENTYPE_QUADRILATERAL: 19,
67
- GENTYPE_TEXT: 20,
68
- GENTYPE_POLYGON: 21,
69
- GENTYPE_REGULARPOLYGON: 22,
70
- GENTYPE_SECTOR: 23,
71
- GENTYPE_ANGLE: 24,
72
- GENTYPE_PLOT: 25,
73
- GENTYPE_SLIDER: 26,
74
- GENTYPE_TRUNCATE: 27,
75
- GENTYPE_JCODE: 28,
76
- GENTYPE_MOVEMENT: 29,
77
- GENTYPE_COMBINED: 30,
78
- GENTYPE_RULER: 31,
79
- GENTYPE_SLOPETRIANGLE: 32,
80
- GENTYPE_PERPSEGMENT: 33,
81
- GENTYPE_LABELMOVEMENT: 34,
82
- GENTYPE_VECTOR: 35,
83
- GENTYPE_NONREFLEXANGLE: 36,
84
- GENTYPE_REFLEXANGLE: 37,
85
- GENTYPE_PATH: 38,
86
- GENTYPE_DERIVATIVE: 39,
87
- // 40 // unused ...
88
- GENTYPE_DELETE: 41,
89
- GENTYPE_COPY: 42,
90
- GENTYPE_MIRROR: 43,
91
- GENTYPE_ROTATE: 44,
92
- GENTYPE_ABLATION: 45,
93
- GENTYPE_MIGRATE: 46,
94
- GENTYPE_VECTORCOPY: 47,
95
- GENTYPE_POLYGONCOPY: 48,
96
- // GENTYPE_TRANSFORM: 48, // unused
97
- // 49 ... 50 // unused ...
98
-
99
- // IMPORTANT:
100
- // ----------
101
- // For being able to differentiate between the (GUI-specific) CTX and
102
- // (CORE-specific) non-CTX steps, the non-CTX steps MUST NOT be changed
103
- // to values > 50.
104
-
105
- GENTYPE_CTX_TYPE_G: 51,
106
- GENTYPE_CTX_TYPE_P: 52,
107
- GENTYPE_CTX_TRACE: 53,
108
- GENTYPE_CTX_VISIBILITY: 54,
109
- GENTYPE_CTX_CCVISIBILITY: 55, // unused
110
- GENTYPE_CTX_MPVISIBILITY: 56,
111
- GENTYPE_CTX_WITHLABEL: 57,
112
- GENTYPE_CTX_LABEL: 58,
113
- GENTYPE_CTX_FIXED: 59,
114
- GENTYPE_CTX_STROKEWIDTH: 60,
115
- GENTYPE_CTX_LABELSIZE: 61,
116
- GENTYPE_CTX_SIZE: 62,
117
- GENTYPE_CTX_FACE: 63,
118
- GENTYPE_CTX_STRAIGHT: 64,
119
- GENTYPE_CTX_ARROW: 65,
120
- GENTYPE_CTX_COLOR: 66,
121
- GENTYPE_CTX_RADIUS: 67,
122
- GENTYPE_CTX_COORDS: 68,
123
- GENTYPE_CTX_TEXT: 69,
124
- GENTYPE_CTX_ANGLERADIUS: 70,
125
- GENTYPE_CTX_DOTVISIBILITY: 71,
126
- GENTYPE_CTX_FILLOPACITY: 72,
127
- GENTYPE_CTX_PLOT: 73,
128
- GENTYPE_CTX_SCALE: 74,
129
- GENTYPE_CTX_SLIDER_BOUND: 75,
130
- GENTYPE_CTX_POINT1: 76,
131
- GENTYPE_CTX_POINT2: 77,
132
- GENTYPE_CTX_LABELSTICKY: 78,
133
- GENTYPE_CTX_TYPE_I: 79,
134
- GENTYPE_CTX_HASINNERPOINTS: 80,
135
- GENTYPE_CTX_SLIDER_STEP: 81,
136
- GENTYPE_CTX_SNAPTOGRID: 82,
137
- GENTYPE_CTX_SNAPTOPOINTS: 83,
138
- GENTYPE_CTX_STROKEDASH: 84,
139
- GENTYPE_CTX_SLIDER_VALUE: 85,
140
- GENTYPE_CTX_SECTORBORDERS: 86,
141
- GENTYPE_CTX_CURVETAU: 87,
142
- GENTYPE_CTX_SLIDER_POS: 88
143
- });
144
-
145
- // this is a small workaround to adapt the SketchReader to our new file API
146
- // we don't have to change anything in sketchometry.
147
- JXG.SketchReader = function (board, str) {
148
- this.read = function () {
149
- var i, t, arr, unzipped, meta, constr;
150
-
151
- unzipped = new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(str)).unzip();
152
-
153
- if (!JXG.exists(unzipped[0])) {
154
- return "";
155
- }
156
-
157
- unzipped = JXG.Util.UTF8.decode(unzipped[0][0]);
158
- //constr = JSON.parse(unzipped);
159
- constr = jQuery.parseJSON(unzipped);
160
-
161
- meta = constr.pop();
162
-
163
- if (!JXG.exists(meta.unredo)) {
164
- t = constr.length - 1;
165
- } else {
166
- t = meta.unredo;
167
- }
168
-
169
- for (i = 0; i <= t; i++) {
170
- if (constr[i].type !== 0) {
171
- try {
172
- if (constr[i].type > 50) {
173
- arr = JXG.SketchReader.generateJCodeMeta(constr[i], board);
174
- } else {
175
- arr = JXG.SketchReader.generateJCode(constr[i], board, constr);
176
- }
177
- } catch (e) {
178
- JXG.debug("#steps: " + constr.length);
179
- JXG.debug("step: " + i + ", type: " + constr[i].type);
180
- JXG.debug(constr[i]);
181
- }
182
-
183
- board.jc.parse(arr[0], true);
184
- }
185
- }
186
-
187
- // bounding box
188
- arr = meta.boundingBox;
189
- board.jc.parse("$board.setView(" + JSON.stringify(arr) + ");");
190
-
191
- return "";
192
- };
193
- };
194
-
195
- // No prototype here
196
- JXG.extend(
197
- JXG.SketchReader,
198
- /** @lends JXG.SketchReader */ {
199
- generateJCodeMeta: function () {
200
- return ["", "", "", ""];
201
- },
202
-
203
- id: function () {
204
- return JXG.Util.genUUID();
205
- },
206
-
207
- generator: {
208
- toFixed: 8, // should be enough for now ...
209
- freeLine: false,
210
- useGlider: false,
211
- useSymbols: false
212
- },
213
-
214
- /**
215
- * Generates {@link JXG.JessieCode} code from a sketchometry construction step.
216
- * @param {Object} step
217
- * @param {Number} step.type One of the JXG.GENTYPE_* constant values
218
- * @param {Array} step.args Mostly visual properties
219
- * @param {Array} step.src_ids Parent element ids
220
- * @param {Array} step.dest_sub_ids Ids for subelements, e.g. the center of a circumcircle or the baseline
221
- * of a glider
222
- * @param {String} step.dest_id Id of the generated main element
223
- * @param {JXG.Board} board
224
- * @param {Array} step_log The complete step log
225
- * @returns {Array} JessieCode to set and reset the step.
226
- */
227
- generateJCode: function (step, board, step_log) {
228
- var i,
229
- j,
230
- k,
231
- sub_id,
232
- str,
233
- str1,
234
- str2,
235
- objects,
236
- pid1,
237
- pid2,
238
- pid3,
239
- pid4,
240
- pid5,
241
- xstart,
242
- ystart,
243
- el,
244
- arr,
245
- step2,
246
- options,
247
- assign,
248
- attrid,
249
- le,
250
- x,
251
- y,
252
- key,
253
- copy_log = [],
254
- set_str = "",
255
- reset_str = "",
256
- ctx_set_str = "",
257
- ctx_reset_str = "",
258
- // these two could be outsourced into the iife surrounding the SketchReader definition
259
-
260
- // print number -- helper to prepare numbers
261
- // for printing, e.g. trim them with toFixed()
262
- pn = function (v) {
263
- if (options.toFixed > 0) {
264
- v = parseFloat(v);
265
- return JXG.toFixed(v, options.toFixed);
266
- }
267
-
268
- return v;
269
- },
270
- getObject = function (v) {
271
- var o;
272
-
273
- if (options.useSymbols) {
274
- if (board.jc.scope.locals[v]) {
275
- o = board.jc.scope.locals[v];
276
- } else {
277
- o = objects[v];
278
- }
279
- } else {
280
- o = objects[v];
281
- }
282
-
283
- return o;
284
- };
285
-
286
- options = JXG.SketchReader.generator;
287
- objects = board.objects;
288
-
289
- assign = "";
290
- attrid = "id: '" + step.dest_id + "', ";
291
-
292
- if (
293
- JXG.exists(board) &&
294
- options.useSymbols &&
295
- step.type !== JXG.GENTYPE_ABLATION
296
- ) {
297
- attrid = "";
298
- assign = step.dest_id + " = ";
299
-
300
-
301
- if (JXG.isArray(step.src_ids)) {
302
- for (i = 0; i < step.src_ids.length; i++) {
303
- str = board.jc.findSymbol(getObject(step.src_ids[i]), 0);
304
-
305
- if (str.length > 0) {
306
- step.src_ids[i] = str[0];
307
- }
308
- }
309
- }
310
- }
311
-
312
- if (step.type > 50) {
313
- return JXG.SketchReader.generateJCodeMeta(step, board);
314
- }
315
-
316
- switch (step.type) {
317
- case JXG.GENTYPE_TRUNCATE:
318
- set_str = "trunclen = " + JXG.Options.trunclen + "; ";
319
- break;
320
-
321
- case JXG.GENTYPE_JCODE:
322
- set_str = step.args.code;
323
- break;
324
-
325
- case JXG.GENTYPE_AXIS:
326
- set_str =
327
- step.args.name[0] +
328
- " = point(" +
329
- step.args.coords[0].usrCoords[1] +
330
- ", ";
331
- set_str +=
332
- step.args.coords[0].usrCoords[2] +
333
- ") <<id: '" +
334
- step.dest_sub_ids[0] +
335
- "', name: '";
336
- set_str +=
337
- step.args.name[0] +
338
- "', fixed: true, priv: true, visible: false>>; " +
339
- step.args.name[1];
340
- set_str += " = point(" + step.args.coords[1].usrCoords[1] + ", ";
341
- set_str +=
342
- step.args.coords[1].usrCoords[2] +
343
- ") <<id: '" +
344
- step.dest_sub_ids[1] +
345
- "', name: '";
346
- set_str +=
347
- step.args.name[1] +
348
- "', fixed: true, priv: true, visible: false>>; " +
349
- step.args.name[2];
350
- set_str += " = point(" + step.args.coords[2].usrCoords[1] + ", ";
351
- set_str +=
352
- step.args.coords[2].usrCoords[2] +
353
- ") <<id: '" +
354
- step.dest_sub_ids[2] +
355
- "', name: '";
356
- set_str +=
357
- step.args.name[2] +
358
- "', fixed: true, priv: true, visible: false>>; ";
359
-
360
- // x-axis
361
- set_str +=
362
- step.args.name[3] +
363
- " = axis(" +
364
- step.args.name[0] +
365
- ", " +
366
- step.args.name[1] +
367
- ") ";
368
- set_str +=
369
- "<<id: '" +
370
- step.dest_sub_ids[3] +
371
- "', name: '" +
372
- step.args.name[3] +
373
- "', ticks: ";
374
- set_str +=
375
- "<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true";
376
- set_str +=
377
- ', label: <<offset: [-4, -16], parse: false, display: "internal">>';
378
- set_str += ", drawZero: false>>>>; ";
379
-
380
- // y-axis
381
- set_str +=
382
- step.args.name[4] +
383
- " = axis(" +
384
- step.args.name[0] +
385
- ", " +
386
- step.args.name[2] +
387
- ") ";
388
- set_str +=
389
- "<<id: '" +
390
- step.dest_sub_ids[4] +
391
- "', name: '" +
392
- step.args.name[4] +
393
- "', ticks: ";
394
- set_str +=
395
- "<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true";
396
- set_str +=
397
- ', label: <<offset: [10, 0], parse: false, display: "internal">>';
398
- set_str += ", drawZero: false>>>>; ";
399
-
400
- set_str += step.dest_sub_ids[3] + ".visible = false; ";
401
- set_str += step.dest_sub_ids[4] + ".visible = false; ";
402
-
403
- // set_str += 'remove(jxgBoard1_infobox); ';
404
-
405
- reset_str =
406
- "remove(" +
407
- step.dest_sub_ids[4] +
408
- "); remove(" +
409
- step.dest_sub_ids[3];
410
- reset_str += "); remove(" + step.dest_sub_ids[2] + "); ";
411
- reset_str +=
412
- "remove(" +
413
- step.dest_sub_ids[1] +
414
- "); remove(" +
415
- step.dest_sub_ids[0] +
416
- "); ";
417
-
418
- break;
419
-
420
- case JXG.GENTYPE_MID:
421
- set_str =
422
- assign +
423
- "midpoint(" +
424
- step.src_ids[0] +
425
- ", " +
426
- step.src_ids[1] +
427
- ") <<" +
428
- attrid;
429
- set_str += "fillColor: '" + step.args.fillColor + "'";
430
- if (JXG.exists(step.args.strokeColor)) {
431
- set_str += ", strokeColor: '" + step.args.strokeColor + "'";
432
- }
433
- set_str += ">>; ";
434
- reset_str = "remove(" + step.dest_id + "); ";
435
- break;
436
-
437
- case JXG.GENTYPE_REFLECTION:
438
- case JXG.GENTYPE_REFLECTION_ON_LINE:
439
- // Polygon:
440
- if (step.args.type === 'polygon') {
441
- set_str = "";
442
- el = step.src_ids[step.src_ids.length - 1];
443
- for (i = 1; i < step.src_ids.length - 1; i++) {
444
- set_str +=
445
- assign +
446
- "reflection(" +
447
- step.src_ids[i] +
448
- ", " +
449
- el +
450
- ') <<id:"' +
451
- step.dest_sub_ids[i - 1] +
452
- '"';
453
- if (JXG.exists(step.args.subnames)) {
454
- set_str += ', name:"' + step.args.subnames[i - 1] + '"';
455
- } else {
456
- set_str += ', name: ""';
457
- }
458
- set_str += ", color: '" + step.args.strokeColor + "'";
459
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
460
- set_str +=
461
- ", snaptopoints: " +
462
- JXG.Options.elements.snapToPoints +
463
- ">>;\n";
464
- }
465
-
466
- le = step.dest_sub_ids.length / 2;
467
- set_str += assign + "polygon(";
468
- set_str += step.dest_sub_ids.slice(0, le).join();
469
- set_str +=
470
- ") <<borders: <<ids: ['" +
471
- step.dest_sub_ids.slice(le, 2 * le).join("', '") +
472
- "']";
473
- x = [];
474
- for (i = 0; i < le; i++) {
475
- x.push("''");
476
- }
477
-
478
- set_str += ", names: [" + x.join() + "]";
479
- set_str += ">>, " + attrid + " fillOpacity: ";
480
- set_str += step.args.opacity + ", name: '' ";
481
- /* set_str +=
482
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
483
- set_str +=
484
- ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
485
- if (step.args.name !== "") {
486
- set_str += ', name: "' + step.args.name + '"';
487
- set_str += ", withLabel: true";
488
- }
489
- set_str += ", fillColor: '" + step.args.fillColor + "'";
490
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
491
- set_str +=
492
- ", snaptopoints: " + JXG.Options.elements.snapToPoints + ">>; ";
493
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
494
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
495
- "}; "
496
- } else if (step.args.type === "line" || step.args.type === 'vector') {
497
- set_str = "";
498
- el = step.src_ids[step.src_ids.length - 1];
499
- // Create two end points.
500
- for (i = 1; i < step.src_ids.length - 1; i++) {
501
- set_str +=
502
- assign +
503
- "reflection(" +
504
- step.src_ids[i] +
505
- ", " +
506
- el +
507
- ') <<id:"' +
508
- step.dest_sub_ids[i - 1] +
509
- '"';
510
- if (JXG.exists(step.args.subnames)) {
511
- set_str += ', name:"' + step.args.subnames[i - 1] + '"';
512
- } else {
513
- set_str += ', name: ""';
514
- }
515
- set_str += ", color: '" + step.args.strokeColor + "'";
516
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
517
- set_str +=
518
- ", snaptopoints: " +
519
- JXG.Options.elements.snapToPoints +
520
- ">>;\n";
521
- }
522
-
523
- if (step.args.type === 'vector') {
524
- set_str +=
525
- assign +
526
- "arrow(" +
527
- step.dest_sub_ids[0] +
528
- "," +
529
- step.dest_sub_ids[1] +
530
- ") ";
531
- } else {
532
- set_str +=
533
- assign +
534
- "line(" +
535
- step.dest_sub_ids[0] +
536
- "," +
537
- step.dest_sub_ids[1] +
538
- ") ";
539
- }
540
- set_str += "<<";
541
- set_str += attrid;
542
- set_str += "strokeColor: '" + step.args.strokeColor + "'";
543
- set_str += ", opacity: '" + step.args.opacity + "'";
544
- set_str += ', name: "' + step.args.name + '"';
545
- set_str += ', id: "' + step.dest_id + '"';
546
- if (JXG.exists(step.args.attr)) {
547
- for (key in step.args.attr)
548
- if (step.args.attr.hasOwnProperty(key)) {
549
- set_str += ", " + key + ": " + step.args.attr[key] + "";
550
- }
551
- }
552
-
553
- if (step.args.name !== "") {
554
- set_str += ", withLabel: true";
555
- }
556
- set_str += ">>; ";
557
- } else if (step.args.type === 'circle') {
558
- set_str +=
559
- assign +
560
- "reflection(" +
561
- step.src_ids[0] +
562
- "," +
563
- step.src_ids[2] +
564
- ") ";
565
- set_str += "<<";
566
- set_str += attrid;
567
- set_str += "strokeColor: '" + step.args.strokeColor + "'";
568
- set_str += ", opacity: '" + step.args.opacity + "'";
569
- set_str += ', name: "' + step.args.name + '"';
570
- set_str += ', id: "' + step.dest_id + '"';
571
- if (JXG.exists(step.args.attr)) {
572
- for (key in step.args.attr)
573
- if (step.args.attr.hasOwnProperty(key)) {
574
- set_str += ", " + key + ": " + step.args.attr[key] + "";
575
- }
576
- }
577
- if (step.args.name !== "") {
578
- set_str += ", withLabel: true";
579
- }
580
-
581
- set_str += ', center: <<id:"' + step.dest_sub_ids[0] + '"';
582
- if (JXG.exists(step.args.subnames)) {
583
- set_str += ', name:"' + step.args.subnames[0] + '"';
584
- } else {
585
- set_str += ', name: ""';
586
- }
587
- set_str += ", color: '" + step.args.strokeColor + "'";
588
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
589
- set_str +=
590
- ", snaptopoints: " + JXG.Options.elements.snapToPoints + ">>";
591
- set_str += ">>; ";
592
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
593
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
594
- "}; "
595
- } else {
596
- set_str =
597
- assign +
598
- "reflection(" +
599
- step.src_ids[0] +
600
- ", " +
601
- step.src_ids[1] +
602
- ") <<" +
603
- attrid;
604
- set_str += "fillColor: '" + step.args.fillColor + "'";
605
- if (JXG.exists(step.args.strokeColor)) {
606
- set_str += ", strokeColor: '" + step.args.strokeColor + "'";
607
- set_str += ", opacity: '" + step.args.opacity + "'";
608
- }
609
- set_str += ', name: "' + step.args.name + '"';
610
- set_str += ', id: "' + step.dest_id + '"';
611
- if (JXG.exists(step.args.attr)) {
612
- for (key in step.args.attr)
613
- if (step.args.attr.hasOwnProperty(key)) {
614
- set_str += ", " + key + ": " + step.args.attr[key] + "";
615
- }
616
- }
617
-
618
- if (step.args.name !== "") {
619
- set_str += ", withLabel: true";
620
- }
621
- set_str += ">>; ";
622
- }
623
-
624
- reset_str = "";
625
- for (i = 0; i < step.dest_sub_ids.length; i++) {
626
- if (step.dest_sub_ids[i] !== 0) {
627
- reset_str += "remove(" + step.dest_sub_ids[i] + "); ";
628
- }
629
- }
630
- reset_str += "remove(" + step.dest_id + "); ";
631
-
632
- break;
633
-
634
- case JXG.GENTYPE_MIRRORELEMENT:
635
- case JXG.GENTYPE_REFLECTION_ON_POINT:
636
- if (step.args.type === 'polygon') {
637
- set_str = "";
638
- el = step.src_ids[step.src_ids.length - 1];
639
- for (i = 1; i < step.src_ids.length - 1; i++) {
640
- set_str +=
641
- assign +
642
- "mirrorelement(" +
643
- step.src_ids[i] +
644
- ", " +
645
- el +
646
- ') <<id:"' +
647
- step.dest_sub_ids[i - 1] +
648
- '"';
649
- if (JXG.exists(step.args.subnames)) {
650
- set_str += ', name:"' + step.args.subnames[i - 1] + '"';
651
- } else {
652
- set_str += ', name: ""';
653
- }
654
- set_str += ", color: '" + step.args.strokeColor + "'";
655
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
656
- set_str +=
657
- ", snaptopoints: " +
658
- JXG.Options.elements.snapToPoints +
659
- ">>;\n";
660
- }
661
-
662
- le = step.dest_sub_ids.length / 2;
663
- set_str += assign + "polygon(";
664
- set_str += step.dest_sub_ids.slice(0, le).join();
665
- set_str +=
666
- ") <<borders: <<ids: ['" +
667
- step.dest_sub_ids.slice(le, 2 * le).join("', '") +
668
- "']";
669
- x = [];
670
- for (i = 0; i < le; i++) {
671
- x.push("''");
672
- }
673
- set_str += ", names: [" + x.join() + "]";
674
- set_str += ">>, " + attrid + " fillOpacity: ";
675
- set_str += step.args.opacity + ", name: '' ";
676
- /* set_str +=
677
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
678
- set_str +=
679
- ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
680
- if (step.args.name !== "") {
681
- set_str += ', name: "' + step.args.name + '"';
682
- set_str += ", withLabel: true";
683
- }
684
- set_str += ", fillColor: '" + step.args.fillColor + "'";
685
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
686
- set_str +=
687
- ", snaptopoints: " + JXG.Options.elements.snapToPoints + ">>; ";
688
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
689
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
690
- "}; "
691
- } else if (step.args.type === "line" || step.args.type === 'vector') {
692
- set_str = "";
693
- el = step.src_ids[step.src_ids.length - 1];
694
- // Create two end points.
695
- for (i = 1; i < step.src_ids.length - 1; i++) {
696
- set_str +=
697
- assign +
698
- "mirrorelement(" +
699
- step.src_ids[i] +
700
- ", " +
701
- el +
702
- ') <<id:"' +
703
- step.dest_sub_ids[i - 1] +
704
- '"';
705
- if (JXG.exists(step.args.subnames)) {
706
- set_str += ', name:"' + step.args.subnames[i - 1] + '"';
707
- } else {
708
- set_str += ', name: ""';
709
- }
710
- set_str += ", color: '" + step.args.strokeColor + "'";
711
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
712
- set_str +=
713
- ", snaptopoints: " +
714
- JXG.Options.elements.snapToPoints +
715
- ">>;\n";
716
- }
717
-
718
- if (step.args.type === 'vector') {
719
- set_str +=
720
- assign +
721
- "arrow(" +
722
- step.dest_sub_ids[0] +
723
- "," +
724
- step.dest_sub_ids[1] +
725
- ") ";
726
- } else {
727
- set_str +=
728
- assign +
729
- "line(" +
730
- step.dest_sub_ids[0] +
731
- "," +
732
- step.dest_sub_ids[1] +
733
- ") ";
734
- }
735
- set_str += "<<";
736
- set_str += attrid;
737
- set_str += "strokeColor: '" + step.args.strokeColor + "'";
738
- set_str += ", opacity: '" + step.args.opacity + "'";
739
- set_str += ', name: "' + step.args.name + '"';
740
- set_str += ', id: "' + step.dest_id + '"';
741
- if (JXG.exists(step.args.attr)) {
742
- for (key in step.args.attr)
743
- if (step.args.attr.hasOwnProperty(key)) {
744
- set_str += ", " + key + ": " + step.args.attr[key] + "";
745
- }
746
- }
747
-
748
- if (step.args.name !== "") {
749
- set_str += ", withLabel: true";
750
- }
751
- set_str += ">>; ";
752
- } else if (step.args.type === 'circle') {
753
- set_str +=
754
- assign +
755
- "mirrorelement(" +
756
- step.src_ids[0] +
757
- "," +
758
- step.src_ids[2] +
759
- ") ";
760
- set_str += "<<";
761
- set_str += attrid;
762
- set_str += "strokeColor: '" + step.args.strokeColor + "'";
763
- set_str += ", opacity: '" + step.args.opacity + "'";
764
- set_str += ', name: "' + step.args.name + '"';
765
- set_str += ', id: "' + step.dest_id + '"';
766
- if (JXG.exists(step.args.attr)) {
767
- for (key in step.args.attr)
768
- if (step.args.attr.hasOwnProperty(key)) {
769
- set_str += ", " + key + ": " + step.args.attr[key] + "";
770
- }
771
- }
772
- if (step.args.name !== "") {
773
- set_str += ", withLabel: true";
774
- }
775
-
776
- set_str += ', center: <<id:"' + step.dest_sub_ids[0] + '"';
777
- if (JXG.exists(step.args.subnames)) {
778
- set_str += ', name:"' + step.args.subnames[0] + '"';
779
- } else {
780
- set_str += ', name: ""';
781
- }
782
- set_str += ", color: '" + step.args.strokeColor + "'";
783
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
784
- set_str +=
785
- ", snaptopoints: " + JXG.Options.elements.snapToPoints + ">>";
786
-
787
- set_str += ">>; ";
788
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
789
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
790
- "}; "
791
- } else {
792
- set_str =
793
- assign +
794
- "mirrorelement(" +
795
- step.src_ids[0] +
796
- ", " +
797
- step.src_ids[1] +
798
- ") <<" +
799
- attrid;
800
- set_str += "fillColor: '" + step.args.fillColor + "'";
801
- if (JXG.exists(step.args.strokeColor)) {
802
- set_str += ", strokeColor: '" + step.args.strokeColor + "'";
803
- set_str += ", opacity: '" + step.args.opacity + "'";
804
- }
805
- set_str += ', id: "' + step.dest_id + '"';
806
- set_str += ', name: "' + step.args.name + '"';
807
- if (JXG.exists(step.args.attr)) {
808
- for (key in step.args.attr)
809
- if (step.args.attr.hasOwnProperty(key)) {
810
- set_str += ", " + key + ": " + step.args.attr[key] + "";
811
- }
812
- }
813
- if (step.args.name !== "") {
814
- set_str += ", withLabel: true";
815
- }
816
- set_str += ">>; ";
817
- }
818
-
819
- reset_str = "";
820
- for (i = 0; i < step.dest_sub_ids.length; i++) {
821
- if (step.dest_sub_ids[i] !== 0) {
822
- reset_str +=
823
- "remove(" + step.dest_sub_ids[i] + "); " + reset_str;
824
- }
825
- }
826
- reset_str += "remove(" + step.dest_id + "); " + reset_str;
827
-
828
- break;
829
-
830
- case JXG.GENTYPE_TANGENT:
831
- if (step.args.create_point) {
832
- sub_id = step.dest_sub_ids[2];
833
- set_str =
834
- "point(" +
835
- pn(step.args.usrCoords[1]) +
836
- "," +
837
- pn(step.args.usrCoords[2]) +
838
- ") <<id: '";
839
- set_str += sub_id + "', fillColor: '" + step.args.fillColor + "'";
840
- if (JXG.exists(step.args.strokeColor)) {
841
- set_str += ", strokeColor: '" + step.args.strokeColor + "'";
842
- }
843
- set_str += ">>; " + sub_id + ".glide(";
844
- set_str += step.src_ids[0] + "); ";
845
- reset_str = "remove(" + sub_id + "); ";
846
- } else {
847
- sub_id = step.src_ids[0];
848
- }
849
-
850
- set_str +=
851
- assign +
852
- "tangent(" +
853
- sub_id +
854
- ") <<" +
855
- attrid +
856
- "point1: <<name: '";
857
- set_str +=
858
- "', id: '" +
859
- step.dest_sub_ids[0] +
860
- "', priv: true>>, point2: <<name: '";
861
- set_str += "', id: '" + step.dest_sub_ids[1] + "', priv: true>> >>; ";
862
- reset_str = "remove(" + step.dest_sub_ids[0] + "); " + reset_str;
863
- reset_str =
864
- "remove(" +
865
- step.dest_id +
866
- "); remove(" +
867
- step.dest_sub_ids[1] +
868
- "); " +
869
- reset_str;
870
- break;
871
-
872
- case JXG.GENTYPE_PARALLEL:
873
- if (step.args.create_point) {
874
- sub_id = step.dest_sub_ids[1];
875
- set_str =
876
- "point(" +
877
- pn(step.args.usrCoords[1]) +
878
- ", " +
879
- pn(step.args.usrCoords[2]) +
880
- ") <<id: '";
881
- set_str += sub_id + "', name: '', visible: false, priv: true>>; ";
882
- reset_str = "remove(" + sub_id + "); ";
883
- } else {
884
- sub_id = step.src_ids[1];
885
- }
886
-
887
- set_str +=
888
- assign +
889
- "parallel(" +
890
- step.src_ids[0] +
891
- ", " +
892
- sub_id +
893
- ") <<" +
894
- attrid +
895
- "name: '', point: <<id: '";
896
- set_str += step.dest_sub_ids[0] + "', name: ''>> >>; ";
897
- reset_str =
898
- "remove(" +
899
- step.dest_id +
900
- "); remove(" +
901
- step.dest_sub_ids[0] +
902
- "); " +
903
- reset_str;
904
- break;
905
-
906
- case JXG.GENTYPE_BISECTORLINES:
907
- set_str =
908
- "bisectorlines(" +
909
- step.src_ids[0] +
910
- ", " +
911
- step.src_ids[1] +
912
- ") <<line1: <<id: '";
913
- set_str =
914
- set_str +
915
- step.dest_sub_ids[2] +
916
- "', point1: <<id: '" +
917
- step.dest_sub_ids[1];
918
- set_str += "', name: ''>>, point2: <<id: '" + step.dest_sub_ids[0];
919
- set_str += "', name: ''>>>>, line2: <<id: '" + step.dest_sub_ids[5];
920
- set_str += "', point1: <<id: '" + step.dest_sub_ids[4] + "', name: '";
921
- set_str += "'>>, point2: <<id: '" + step.dest_sub_ids[3] + "', name: '";
922
- set_str += "'>>>>>>; ";
923
- reset_str =
924
- "remove(" +
925
- step.dest_sub_ids[5] +
926
- "); remove(" +
927
- step.dest_sub_ids[4] +
928
- "); remove(";
929
- reset_str +=
930
- step.dest_sub_ids[3] +
931
- "); remove(" +
932
- step.dest_sub_ids[2] +
933
- "); remove(";
934
- reset_str +=
935
- step.dest_sub_ids[1] + "); remove(" + step.dest_sub_ids[0] + "); ";
936
- break;
937
-
938
- case JXG.GENTYPE_BOARDIMG:
939
- set_str =
940
- "image('" +
941
- step.args.s +
942
- "', [ " +
943
- step.args.anchor +
944
- " ], [ " +
945
- step.args.scale +
946
- " ]) ";
947
- set_str += "<<id: '" + step.dest_id + "'>>; ";
948
-
949
- reset_str = "remove(" + step.dest_id + "); ";
950
- break;
951
-
952
- case JXG.GENTYPE_BISECTOR:
953
- if (step.args.create_point) {
954
- set_str = "";
955
- reset_str = "";
956
-
957
- pid1 = step.dest_sub_ids[1];
958
- pid2 = step.dest_sub_ids[2];
959
-
960
- if (options.useGlider) {
961
- set_str +=
962
- "glider(" +
963
- pn(step.args.usrCoords[1]) +
964
- ", " +
965
- pn(step.args.usrCoords[2]) +
966
- ", " +
967
- step.src_ids[0] +
968
- ")";
969
- set_str +=
970
- "<<id: '" +
971
- pid1 +
972
- "', name:'', withLabel:false, priv:true, visible:false >>; ";
973
-
974
- set_str +=
975
- "glider(" +
976
- pn(step.args.usrCoords[1]) +
977
- ", " +
978
- pn(step.args.usrCoords[2]) +
979
- ", " +
980
- step.src_ids[1] +
981
- ")";
982
- set_str +=
983
- "<<id: '" +
984
- pid2 +
985
- "', name:'', withLabel:false, priv:true, visible:false >>; ";
986
- } else {
987
- // Projection to first line
988
- set_str +=
989
- "point(" +
990
- pn(step.args.usrCoords[1]) +
991
- ", " +
992
- pn(step.args.usrCoords[2]) +
993
- ") ";
994
- set_str += "<<id:'" + pid1 + "', ";
995
- set_str +=
996
- "name:'', withLabel:false, priv:true, visible:false >>; ";
997
- set_str += pid1 + ".glide(" + step.src_ids[0] + "); ";
998
-
999
- // Projection to second line
1000
- set_str +=
1001
- "point(" +
1002
- pn(step.args.usrCoords[1]) +
1003
- ", " +
1004
- pn(step.args.usrCoords[2]) +
1005
- ") ";
1006
- set_str += "<<id:'" + pid2 + "', ";
1007
- set_str += "name:'', priv:true, visible:false >>; ";
1008
- set_str += pid2 + ".glide(" + step.src_ids[1] + "); ";
1009
- }
1010
-
1011
- reset_str += "remove(" + pid1 + "); ";
1012
- reset_str += "remove(" + pid2 + "); ";
1013
-
1014
- if (step.args.create_intersection) {
1015
- // intersection point
1016
- pid3 = step.dest_sub_ids[3];
1017
- set_str +=
1018
- "intersection(" +
1019
- step.src_ids[0] +
1020
- ", " +
1021
- step.src_ids[1] +
1022
- ", 0) ";
1023
- set_str +=
1024
- "<<id:'" +
1025
- pid3 +
1026
- "', fillColor: '" +
1027
- step.args.fillColor +
1028
- "', ";
1029
- set_str += "name:'', priv:true, visible:false >>; ";
1030
- reset_str += "remove(" + pid3 + "); ";
1031
- } else {
1032
- pid3 = step.src_ids[2];
1033
- }
1034
-
1035
- set_str +=
1036
- assign + "bisector(" + pid1 + ", " + pid3 + ", " + pid2 + ") ";
1037
- set_str +=
1038
- "<<" +
1039
- attrid +
1040
- "name: '', point: <<id: '" +
1041
- step.dest_sub_ids[0] +
1042
- "', priv: true, name: '";
1043
- set_str += step.dest_sub_ids[0] + "'>> >>;";
1044
- reset_str +=
1045
- "remove(" +
1046
- step.dest_id +
1047
- "); remove(" +
1048
- step.dest_sub_ids[0] +
1049
- ");";
1050
- } else {
1051
- set_str =
1052
- assign +
1053
- "bisector(" +
1054
- step.src_ids[1] +
1055
- ", " +
1056
- step.src_ids[2] +
1057
- ", " +
1058
- step.src_ids[0];
1059
- set_str +=
1060
- ") <<" +
1061
- attrid +
1062
- "name: '', point: <<id: '" +
1063
- step.dest_sub_ids[0] +
1064
- "', priv: true, name: '";
1065
- set_str += step.dest_sub_ids[0] + "'>>>>;";
1066
- reset_str =
1067
- "remove(" +
1068
- step.dest_id +
1069
- "); remove(" +
1070
- step.dest_sub_ids[0] +
1071
- ");";
1072
- }
1073
- break;
1074
-
1075
- case JXG.GENTYPE_NORMAL:
1076
- if (step.args.create_point) {
1077
- sub_id = step.dest_sub_ids[1];
1078
- set_str =
1079
- "point(" +
1080
- pn(step.args.usrCoords[1]) +
1081
- ", " +
1082
- pn(step.args.usrCoords[2]);
1083
- set_str +=
1084
- ") <<id: '" +
1085
- sub_id +
1086
- "', name: '', visible: false, priv: true>>; ";
1087
- reset_str = "remove(" + sub_id + "); ";
1088
- } else {
1089
- sub_id = step.src_ids[1];
1090
- }
1091
-
1092
- set_str +=
1093
- assign +
1094
- "normal(" +
1095
- sub_id +
1096
- ", " +
1097
- step.src_ids[0] +
1098
- ") <<" +
1099
- attrid;
1100
- set_str +=
1101
- "name: '', point: <<id: '" + step.dest_sub_ids[0] + "', name: '";
1102
- set_str += "'>> >>; ";
1103
- reset_str =
1104
- "remove(" +
1105
- step.dest_id +
1106
- "); remove(" +
1107
- step.dest_sub_ids[0] +
1108
- "); " +
1109
- reset_str;
1110
- break;
1111
-
1112
- case JXG.GENTYPE_PERPSEGMENT:
1113
- set_str +=
1114
- assign +
1115
- "perpendicularsegment(" +
1116
- step.src_ids[1] +
1117
- ", " +
1118
- step.src_ids[0] +
1119
- ") <<" +
1120
- attrid;
1121
- set_str +=
1122
- "name: '', point: <<id: '" + step.dest_sub_ids[0] + "', name: '";
1123
- set_str += "'>> >>; ";
1124
- reset_str =
1125
- "remove(" +
1126
- step.dest_id +
1127
- "); remove(" +
1128
- step.dest_sub_ids[0] +
1129
- "); " +
1130
- reset_str;
1131
- break;
1132
-
1133
- case JXG.GENTYPE_POINT:
1134
- set_str =
1135
- assign +
1136
- "point(" +
1137
- pn(step.args.usrCoords[1]) +
1138
- ", " +
1139
- pn(step.args.usrCoords[2]);
1140
- set_str +=
1141
- ")" +
1142
- (options.useSymbols
1143
- ? ""
1144
- : " <<id: '" +
1145
- step.dest_id +
1146
- "'" +
1147
- ", snaptogrid: " +
1148
- JXG.Options.elements.snapToGrid +
1149
- ", snaptopoints: " +
1150
- JXG.Options.elements.snapToPoints +
1151
- (JXG.exists(step.args.name) ? ", name: '" + step.args.name + "'" : "") +
1152
- ">>") +
1153
- "; ";
1154
-
1155
- reset_str = "remove(" + step.dest_id + "); ";
1156
- break;
1157
-
1158
- case JXG.GENTYPE_GLIDER:
1159
- if (options.useGlider) {
1160
- set_str =
1161
- assign +
1162
- "glider(" +
1163
- pn(step.args.usrCoords[1]) +
1164
- ", " +
1165
- pn(step.args.usrCoords[2]);
1166
- set_str += ", " + step.src_ids[0] + ")";
1167
- set_str +=
1168
- (options.useSymbols
1169
- ? ""
1170
- : "<<id: '" +
1171
- step.dest_id +
1172
- "'" +
1173
- ", snaptogrid: false, snaptopoints: false" +
1174
- ", snaptopoints: " +
1175
- JXG.Options.elements.snapToPoints +
1176
- ">>") + ";";
1177
- } else {
1178
- set_str =
1179
- assign +
1180
- "point(" +
1181
- pn(step.args.usrCoords[1]) +
1182
- ", " +
1183
- pn(step.args.usrCoords[2]);
1184
- set_str +=
1185
- ") <<" +
1186
- attrid +
1187
- "fillColor: '" +
1188
- JXG.Options.glider.fillColor +
1189
- "'";
1190
- set_str +=
1191
- ", strokeColor: '" + JXG.Options.glider.strokeColor + "'";
1192
- set_str += ", snapToGrid: false, snapToPoints: false";
1193
- set_str += ">>; " + step.dest_id;
1194
- set_str += ".glide(" + step.src_ids[0] + "); ";
1195
- }
1196
- set_str += step.dest_id + ".onPolygon = " + !!step.args.onPolygon + ";";
1197
-
1198
- if (!(step.args && step.args.undoIsEmpty)) {
1199
- reset_str = "remove(" + step.dest_id + "); ";
1200
- }
1201
-
1202
- break;
1203
-
1204
- case JXG.GENTYPE_INTERSECTION:
1205
- set_str =
1206
- assign +
1207
- "intersection(" +
1208
- step.src_ids[0] +
1209
- ", " +
1210
- step.src_ids[1] +
1211
- ", " +
1212
- step.args.choice;
1213
- set_str +=
1214
- ") <<" +
1215
- attrid +
1216
- " fillColor: '" +
1217
- JXG.Options.intersection.fillColor +
1218
- "'";
1219
- set_str +=
1220
- ", strokeColor: '" + JXG.Options.intersection.strokeColor + "'";
1221
- set_str += ">>; ";
1222
-
1223
- if (!(step.args && step.args.undoIsEmpty)) {
1224
- reset_str = "remove(" + step.dest_id + "); ";
1225
- }
1226
-
1227
- break;
1228
-
1229
- case JXG.GENTYPE_MIGRATE:
1230
- set_str =
1231
- "$board.migratePoint(" +
1232
- step.src_ids[0] +
1233
- ", " +
1234
- step.dest_id +
1235
- ", false); ";
1236
-
1237
- if (step.args && step.args.migrateToGlider) {
1238
- var o, gl, uc1, uc2;
1239
-
1240
- reset_str = step.dest_id + ".free(); " + step.dest_id;
1241
- reset_str +=
1242
- ".fillColor = '" + step.args.fillColor + "'; " + step.dest_id;
1243
- reset_str += ".strokeColor = '" + step.args.strokeColor + "'; ";
1244
-
1245
- uc1 = step.args.usrCoords[1];
1246
- uc2 = step.args.usrCoords[2];
1247
-
1248
- reset_str += "point(" + uc1 + ", " + uc2 + ")";
1249
- reset_str += " <<id: '" + step.src_ids[0] + "', name: ''>>" + "; ";
1250
- reset_str +=
1251
- "$board.migratePoint(" +
1252
- step.dest_id +
1253
- ", " +
1254
- step.src_ids[0] +
1255
- ", false); ";
1256
- reset_str +=
1257
- step.src_ids[0] + ".name = '" + step.args.orig_name + "'; ";
1258
- reset_str +=
1259
- step.src_ids[0] +
1260
- ".label.setText('" +
1261
- step.args.orig_name +
1262
- "'); ";
1263
-
1264
- o = board.objects[step.dest_id];
1265
- gl = o.slideObject.id;
1266
-
1267
- uc1 = o.coords.usrCoords[1];
1268
- uc2 = o.coords.usrCoords[2];
1269
-
1270
- reset_str += assign + "point(" + uc1 + ", " + uc2 + ") ";
1271
- reset_str +=
1272
- "<<" +
1273
- attrid +
1274
- "fillColor: '" +
1275
- JXG.Options.glider.fillColor +
1276
- "'>>; ";
1277
- reset_str += step.dest_id + ".glide(" + gl + "); ";
1278
- } else {
1279
- // Do nothing
1280
- //reset_str = 'remove(' + step.dest_id + '); ';
1281
- }
1282
-
1283
- break;
1284
-
1285
- case JXG.GENTYPE_COMBINED:
1286
- set_str = reset_str = "";
1287
-
1288
- for (i = 0; i < step.args.steps.length; i++) {
1289
- arr = this.generateJCode(step.args.steps[i], board, step_log);
1290
-
1291
- set_str = set_str + arr[0];
1292
- reset_str = arr[2] + reset_str;
1293
- }
1294
-
1295
- break;
1296
-
1297
- case JXG.GENTYPE_CIRCLE:
1298
- var withName = "name: '', withLabel: true,";
1299
-
1300
- if (step.args.withName) withName = "withLabel: true,";
1301
-
1302
- if (
1303
- step.args.create_by_additional_point ||
1304
- /* backwards compatibility */ step.args.create_point
1305
- ) {
1306
- if (
1307
- !JXG.exists(step.args.center_existing) ||
1308
- !step.args.center_existing
1309
- ) {
1310
- set_str =
1311
- "point(" +
1312
- pn(step.args.usrCoords[1]) +
1313
- ", " +
1314
- pn(step.args.usrCoords[2]) +
1315
- ") ";
1316
- set_str +=
1317
- "<<id: '" +
1318
- step.dest_sub_ids[0] +
1319
- "', " +
1320
- withName +
1321
- " visible: true, priv: false>>; ";
1322
- }
1323
-
1324
- set_str +=
1325
- assign +
1326
- "circle(" +
1327
- step.dest_sub_ids[0] +
1328
- ", " +
1329
- step.src_ids[0] +
1330
- ") <<" +
1331
- attrid;
1332
- set_str +=
1333
- "name: '', fillOpacity: " +
1334
- JXG.Options.opacityLevel +
1335
- ", snaptogrid: " +
1336
- JXG.Options.elements.snapToGrid +
1337
- ", snaptopoints: " +
1338
- JXG.Options.elements.snapToPoints +
1339
- ", hasInnerPoints: true" +
1340
- ">>; ";
1341
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
1342
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
1343
- "}; "
1344
-
1345
- reset_str =
1346
- "remove(" +
1347
- step.dest_id +
1348
- "); remove(" +
1349
- step.dest_sub_ids[0] +
1350
- "); ";
1351
- } else if (step.args.create_by_radius) {
1352
- set_str = "";
1353
- if (
1354
- !JXG.exists(step.args.center_existing) ||
1355
- !step.args.center_existing
1356
- ) {
1357
- if (JXG.exists(step.args.x) && JXG.exists(step.args.y))
1358
- set_str +=
1359
- "point(" +
1360
- pn(step.args.x) +
1361
- ", " +
1362
- pn(step.args.y) +
1363
- ") ";
1364
- else
1365
- set_str +=
1366
- "point(" +
1367
- pn(step.args.usrCoords[1]) +
1368
- ", " +
1369
- pn(step.args.usrCoords[2]) +
1370
- ") ";
1371
- set_str +=
1372
- "<<id: '" +
1373
- step.dest_sub_ids[0] +
1374
- "', " +
1375
- withName +
1376
- " visible: true, priv: false>>; ";
1377
- }
1378
-
1379
- if (JXG.exists(step.args.r))
1380
- set_str +=
1381
- assign +
1382
- "circle('" +
1383
- step.dest_sub_ids[0] +
1384
- "', " +
1385
- pn(step.args.r) +
1386
- ") <<" +
1387
- attrid;
1388
- else
1389
- set_str +=
1390
- assign +
1391
- "circle('" +
1392
- step.dest_sub_ids[0] +
1393
- "', " +
1394
- pn(step.args.radius) +
1395
- ") <<" +
1396
- attrid;
1397
- set_str +=
1398
- "name: '', fillOpacity: " +
1399
- JXG.Options.opacityLevel +
1400
- ", snaptogrid: " +
1401
- JXG.Options.elements.snapToGrid +
1402
- ", snaptopoints: " +
1403
- JXG.Options.elements.snapToPoints +
1404
- ", hasInnerPoints: true" +
1405
- ">>; ";
1406
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
1407
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
1408
- "}; "
1409
-
1410
- reset_str =
1411
- "remove(" +
1412
- step.dest_id +
1413
- "); remove(" +
1414
- step.dest_sub_ids[0] +
1415
- "); ";
1416
- } else {
1417
- if (step.src_ids.length === 2) {
1418
- set_str =
1419
- "midpoint(" +
1420
- step.src_ids[0] +
1421
- ", " +
1422
- step.src_ids[1] +
1423
- ")";
1424
- set_str +=
1425
- "<<id: '" +
1426
- step.dest_sub_ids[0] +
1427
- "', " +
1428
- withName +
1429
- " visible: true, priv: false>>; ";
1430
-
1431
- set_str +=
1432
- assign +
1433
- "circle(" +
1434
- step.dest_sub_ids[0] +
1435
- ", " +
1436
- step.src_ids[0] +
1437
- ") <<" +
1438
- attrid;
1439
- set_str +=
1440
- "name: '', fillOpacity: " +
1441
- JXG.Options.opacityLevel +
1442
- ", snaptogrid: " +
1443
- JXG.Options.elements.snapToGrid +
1444
- ", snaptopoints: " +
1445
- JXG.Options.elements.snapToPoints +
1446
- ">>;";
1447
-
1448
- reset_str =
1449
- "remove(" +
1450
- step.dest_id +
1451
- "); remove(" +
1452
- step.dest_sub_ids[0] +
1453
- "); ";
1454
- } else {
1455
- set_str =
1456
- assign +
1457
- "circle(" +
1458
- step.src_ids[0] +
1459
- ", " +
1460
- step.src_ids[1] +
1461
- ", " +
1462
- step.src_ids[2];
1463
- set_str +=
1464
- ") <<center: <<id: '" +
1465
- step.dest_sub_ids[0] +
1466
- "', " +
1467
- withName;
1468
- set_str +=
1469
- " visible: true>>, " +
1470
- attrid +
1471
- "name: '', fillOpacity: " +
1472
- JXG.Options.opacityLevel +
1473
- ", snaptogrid: " +
1474
- JXG.Options.elements.snapToGrid +
1475
- ", snaptopoints: " +
1476
- JXG.Options.elements.snapToPoints +
1477
- ">>; ";
1478
-
1479
- reset_str =
1480
- "remove(" +
1481
- step.dest_id +
1482
- "); remove(" +
1483
- step.dest_sub_ids[0] +
1484
- "); ";
1485
- }
1486
- }
1487
- break;
1488
-
1489
- /**
1490
- * @deprecated
1491
- * NOT USED ANY MORE SINCE SKETCHOMETRY 2.0 (only for old constructions needed)
1492
- */
1493
- case JXG.GENTYPE_CIRCLE2POINTS:
1494
- if (step.args.create_two_points) {
1495
- set_str =
1496
- "point(" +
1497
- pn(step.args.x1) +
1498
- ", " +
1499
- pn(step.args.y1) +
1500
- ") <<id: '" +
1501
- step.dest_sub_ids[0];
1502
- set_str += "'>>; ";
1503
- set_str +=
1504
- "point(" +
1505
- pn(step.args.x2) +
1506
- ", " +
1507
- pn(step.args.y2) +
1508
- ") <<id: '";
1509
- set_str += step.dest_sub_ids[1] + "'>>; ";
1510
- set_str +=
1511
- assign +
1512
- "circle(" +
1513
- step.dest_sub_ids[0] +
1514
- ", " +
1515
- step.dest_sub_ids[1] +
1516
- ") <<" +
1517
- attrid;
1518
- set_str +=
1519
- "name: '', fillOpacity: " +
1520
- JXG.Options.opacityLevel +
1521
- ", snaptogrid: " +
1522
- JXG.Options.elements.snapToGrid +
1523
- ", snaptopoints: " +
1524
- JXG.Options.elements.snapToPoints +
1525
- ">>; ";
1526
-
1527
- reset_str =
1528
- "remove(" +
1529
- step.dest_id +
1530
- "); remove(" +
1531
- step.dest_sub_ids[1] +
1532
- "); remove(";
1533
- reset_str += step.dest_sub_ids[0] + "); ";
1534
- } else if (step.args.create_point) {
1535
- set_str =
1536
- "point(" +
1537
- pn(step.args.x) +
1538
- ", " +
1539
- pn(step.args.y) +
1540
- ") <<id: '" +
1541
- step.dest_sub_ids[0];
1542
- set_str += "'>>; ";
1543
- set_str +=
1544
- assign +
1545
- "circle(" +
1546
- step.dest_sub_ids[0] +
1547
- ", " +
1548
- step.src_ids[0] +
1549
- ") <<" +
1550
- attrid;
1551
- set_str +=
1552
- "name: '', fillOpacity: " +
1553
- JXG.Options.opacityLevel +
1554
- ", snaptogrid: " +
1555
- JXG.Options.elements.snapToGrid +
1556
- ", snaptopoints: " +
1557
- JXG.Options.elements.snapToPoints +
1558
- ">>; ";
1559
-
1560
- reset_str =
1561
- "remove(" +
1562
- step.dest_id +
1563
- "); remove(" +
1564
- step.dest_sub_ids[0] +
1565
- "); ";
1566
- } else if (step.args.create_by_radius) {
1567
- set_str =
1568
- assign +
1569
- "circle(" +
1570
- step.src_ids[0] +
1571
- ", " +
1572
- step.args.r +
1573
- ") <<" +
1574
- attrid;
1575
- set_str +=
1576
- "name: '', fillOpacity: " +
1577
- JXG.Options.opacityLevel +
1578
- ", snaptogrid: " +
1579
- JXG.Options.elements.snapToGrid +
1580
- ", snaptopoints: " +
1581
- JXG.Options.elements.snapToPoints +
1582
- ">>; ";
1583
-
1584
- reset_str = "remove(" + step.dest_id + "); ";
1585
- } else {
1586
- set_str =
1587
- assign +
1588
- "circle(" +
1589
- step.src_ids[0] +
1590
- ", " +
1591
- step.src_ids[1] +
1592
- ") <<" +
1593
- attrid;
1594
- set_str +=
1595
- "name: '', fillOpacity: " +
1596
- JXG.Options.opacityLevel +
1597
- ", snaptogrid: " +
1598
- JXG.Options.elements.snapToGrid +
1599
- ", snaptopoints: " +
1600
- JXG.Options.elements.snapToPoints +
1601
- ">>; ";
1602
-
1603
- reset_str = "remove(" + step.dest_id + "); ";
1604
- }
1605
-
1606
- break;
1607
-
1608
- case JXG.GENTYPE_LINE:
1609
- k = 0;
1610
- j = 0;
1611
-
1612
- if (step.args.create_point1) {
1613
- pid1 = step.dest_sub_ids[k];
1614
- k += 1;
1615
- str1 = [];
1616
- for (i = 0; i < step.args.p1.length; i++) {
1617
- str1[i] = pn(step.args.p1[i]);
1618
- }
1619
-
1620
- set_str =
1621
- "point(" +
1622
- str1.join(", ") +
1623
- ") <<id: '" +
1624
- pid1 +
1625
- "', name: '', visible: false, isinfinit: true, ";
1626
- set_str += "snaptogrid: false, snaptopoints: false, priv: true>>; ";
1627
- reset_str = "remove(" + pid1 + "); ";
1628
- } else {
1629
- pid1 = step.src_ids[j];
1630
- j += 1;
1631
- }
1632
-
1633
- if (step.args.create_point2) {
1634
- pid2 = step.dest_sub_ids[k++];
1635
- str1 = [];
1636
- for (i = 0; i < step.args.p2.length; i++) {
1637
- str1[i] = pn(step.args.p2[i]);
1638
- }
1639
-
1640
- set_str +=
1641
- "point(" +
1642
- str1.join(", ") +
1643
- ") <<id: '" +
1644
- pid2 +
1645
- "', name: '', visible: false, isinfinit: true, ";
1646
- set_str += "snaptogrid: false, snaptopoints: false, priv: true>>; ";
1647
- reset_str = "remove(" + pid2 + "); " + reset_str;
1648
- } else {
1649
- pid2 = step.src_ids[j];
1650
- j += 1;
1651
- }
1652
-
1653
- str = 'line'
1654
- str1 = "";
1655
-
1656
- // the line's parents
1657
- str2 = pid1 + ", " + pid2;
1658
-
1659
- // if we want a truly free line
1660
- if (
1661
- step.args.create_point1 &&
1662
- step.args.create_point2 &&
1663
- options.freeLine
1664
- ) {
1665
- // forget the points
1666
- set_str = "";
1667
- reset_str = "";
1668
-
1669
- // use the stdform instead
1670
- if (step.args.p1.length === 2) {
1671
- step.args.p1.unshift(1);
1672
- }
1673
-
1674
- if (step.args.p2.length === 2) {
1675
- step.args.p2.unshift(1);
1676
- }
1677
-
1678
- str2 = JXG.Math.crossProduct(step.args.p1, step.args.p2);
1679
- for (i = 0; i < str2.length; i++) {
1680
- str2[i] = pn(str2[i]);
1681
- }
1682
-
1683
- str2 = str2.join(", ");
1684
- }
1685
-
1686
- if (!step.args.first && !step.args.last) {
1687
- str = 'segment'
1688
- } else {
1689
- if (!step.args.first) {
1690
- str1 = "straightFirst: " + step.args.first;
1691
- }
1692
-
1693
- if (!step.args.last) {
1694
- str1 = "straightLast: " + step.args.last;
1695
- }
1696
-
1697
- if (str1.length > 0 && !options.useSymbols) {
1698
- str1 += ", ";
1699
- }
1700
- }
1701
-
1702
- // this is a corner case, we have to get rid of the ',' at the end
1703
- // simple solution: rebuild attrid
1704
- if (!options.useSymbols) {
1705
- attrid = "id: '" + step.dest_id + "'";
1706
- }
1707
-
1708
- set_str += assign + str + "(" + str2 + ")";
1709
-
1710
- if (str1.length + attrid.length > 0) {
1711
- set_str +=
1712
- " <<" +
1713
- str1 +
1714
- attrid +
1715
- ", name: '', snaptogrid: " +
1716
- JXG.Options.elements.snapToGrid +
1717
- ", snaptopoints: " +
1718
- JXG.Options.elements.snapToPoints +
1719
- ">>; ";
1720
- } else {
1721
- set_str +=
1722
- " <<name: '', snaptogrid: " +
1723
- JXG.Options.elements.snapToGrid +
1724
- ", snaptopoints: " +
1725
- JXG.Options.elements.snapToPoints +
1726
- ">>; ";
1727
- }
1728
-
1729
- reset_str = "remove(" + step.dest_id + "); " + reset_str;
1730
-
1731
- break;
1732
-
1733
- case JXG.GENTYPE_VECTOR:
1734
- k = 0;
1735
- j = 0;
1736
-
1737
- if (step.args.create_point1) {
1738
- pid1 = step.dest_sub_ids[k];
1739
- k += 1;
1740
- str1 = [];
1741
- for (i = 0; i < step.args.p1.length; i++) {
1742
- str1[i] = pn(step.args.p1[i]);
1743
- }
1744
-
1745
- set_str =
1746
- "point(" +
1747
- str1.join(", ") +
1748
- ") <<id: '" +
1749
- pid1 +
1750
- "', name: '', visible: true, ";
1751
- set_str +=
1752
- "snaptogrid: " +
1753
- JXG.Options.elements.snapToGrid +
1754
- ", snaptopoints: false, priv: false>>; ";
1755
- reset_str = "remove(" + pid1 + "); ";
1756
- } else {
1757
- pid1 = step.src_ids[j];
1758
- j += 1;
1759
- }
1760
-
1761
- if (step.args.create_point2) {
1762
- pid2 = step.dest_sub_ids[k++];
1763
- str1 = [];
1764
- for (i = 0; i < step.args.p2.length; i++) {
1765
- str1[i] = pn(step.args.p2[i]);
1766
- }
1767
-
1768
- set_str +=
1769
- "point(" +
1770
- str1.join(", ") +
1771
- ") <<id: '" +
1772
- pid2 +
1773
- "', name: '', visible: true, ";
1774
- set_str += "layer: " + JXG.Options.layer.line + ", opacity: 0.2, ";
1775
- set_str +=
1776
- "snaptogrid: " +
1777
- JXG.Options.elements.snapToGrid +
1778
- ", snaptopoints: false, priv: false>>; ";
1779
- reset_str = "remove(" + pid2 + "); " + reset_str;
1780
- } else {
1781
- pid2 = step.src_ids[j];
1782
- j += 1;
1783
- }
1784
-
1785
- str1 = "";
1786
- // the line's parents
1787
- str2 = pid1 + ", " + pid2;
1788
- str = 'arrow'
1789
-
1790
- // this is a corner case, we have to get rid of the ',' at the end
1791
- // simple solution: rebuild attrid
1792
- if (!options.useSymbols) {
1793
- attrid = "id: '" + step.dest_id + "'";
1794
- }
1795
-
1796
- set_str += assign + str + "(" + str2 + ")";
1797
-
1798
- if (str1.length + attrid.length > 0) {
1799
- set_str +=
1800
- " <<" +
1801
- str1 +
1802
- attrid +
1803
- ", name: '', strokeColor: 'black', snaptogrid: " +
1804
- JXG.Options.elements.snapToGrid +
1805
- ", snaptopoints: " +
1806
- JXG.Options.elements.snapToPoints +
1807
- ">>; ";
1808
- } else {
1809
- set_str +=
1810
- " <<name: '', strokeColor: 'black', snaptogrid: " +
1811
- JXG.Options.elements.snapToGrid +
1812
- ", snaptopoints: " +
1813
- JXG.Options.elements.snapToPoints +
1814
- ">>; ";
1815
- }
1816
-
1817
- reset_str = "remove(" + step.dest_id + "); " + reset_str;
1818
-
1819
- break;
1820
-
1821
- case JXG.GENTYPE_TRIANGLE:
1822
- for (i = 0; i < step.args.create_point.length; i++) {
1823
- if (step.args.create_point[i]) {
1824
- set_str +=
1825
- "point(" + pn(step.args.coords[i].usrCoords[1]) + ", ";
1826
- set_str +=
1827
- pn(step.args.coords[i].usrCoords[2]) +
1828
- ") <<id: '" +
1829
- step.dest_sub_ids[i];
1830
- set_str += "', snaptogrid: " + JXG.Options.elements.snapToGrid;
1831
- set_str +=
1832
- ", snaptopoints: " +
1833
- JXG.Options.elements.snapToPoints +
1834
- ">>; ";
1835
- }
1836
- }
1837
-
1838
- for (i = 0; i < step.dest_sub_ids.length; i++) {
1839
- if (step.dest_sub_ids[i] !== 0) {
1840
- reset_str =
1841
- "remove(" + step.dest_sub_ids[i] + "); " + reset_str;
1842
- }
1843
- }
1844
-
1845
- reset_str = "remove(" + step.dest_id + "); " + reset_str;
1846
-
1847
- set_str += assign + "polygon(";
1848
-
1849
- if (step.src_ids.length === 3) {
1850
- for (i = 0; i < step.src_ids.length; i++) {
1851
- set_str += step.src_ids[i];
1852
- if (i < step.src_ids.length - 1) {
1853
- set_str += ", ";
1854
- }
1855
- }
1856
- } else {
1857
- for (i = 0; i < 3; i++) {
1858
- if (step.dest_sub_ids[i] !== 0) {
1859
- if (step.src_ids.length > 0 || i > 0) {
1860
- set_str += ", ";
1861
- }
1862
- set_str += step.dest_sub_ids[i];
1863
- }
1864
- }
1865
- }
1866
-
1867
- set_str +=
1868
- ") <<borders: <<ids: ['" +
1869
- step.dest_sub_ids[3] +
1870
- "', '" +
1871
- step.dest_sub_ids[4] +
1872
- "', '" +
1873
- step.dest_sub_ids[5] +
1874
- "']";
1875
- set_str += ", names: ['', '', '']";
1876
- set_str += ">>, " + attrid + " fillOpacity: ";
1877
- set_str += JXG.Options.opacityLevel + ", name: '' ";
1878
- /* set_str +=
1879
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
1880
- set_str += ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
1881
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
1882
- set_str +=
1883
- ", snaptopoints: " + JXG.Options.elements.snapToPoints + ">>; ";
1884
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
1885
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
1886
- "}; "
1887
- break;
1888
-
1889
- case JXG.GENTYPE_QUADRILATERAL:
1890
- for (i = 0; i < step.args.create_point.length; i++) {
1891
- if (step.args.create_point[i]) {
1892
- set_str +=
1893
- "point(" + pn(step.args.coords[i].usrCoords[1]) + ", ";
1894
- set_str +=
1895
- pn(step.args.coords[i].usrCoords[2]) +
1896
- ") <<id: '" +
1897
- step.dest_sub_ids[i];
1898
- set_str += "', snaptogrid: " + JXG.Options.elements.snapToGrid;
1899
- set_str +=
1900
- ", snaptopoints: " +
1901
- JXG.Options.elements.snapToPoints +
1902
- ">>; ";
1903
- }
1904
- }
1905
-
1906
- for (i = 0; i < step.dest_sub_ids.length; i++) {
1907
- if (step.dest_sub_ids[i] !== 0) {
1908
- reset_str =
1909
- "remove(" + step.dest_sub_ids[i] + "); " + reset_str;
1910
- }
1911
- }
1912
-
1913
- reset_str = "remove(" + step.dest_id + "); " + reset_str;
1914
-
1915
- set_str += assign + "polygon(";
1916
-
1917
- for (i = 0; i < step.src_ids.length; i++) {
1918
- set_str += step.src_ids[i];
1919
- if (i < step.src_ids.length - 1) {
1920
- set_str += ", ";
1921
- }
1922
- }
1923
-
1924
- set_str +=
1925
- ") <<borders: <<ids: [ '" +
1926
- step.dest_sub_ids[4] +
1927
- "', '" +
1928
- step.dest_sub_ids[5];
1929
- set_str += "', '";
1930
- set_str += step.dest_sub_ids[6] + "', '" + step.dest_sub_ids[7] + "' ]";
1931
- set_str += ", names: ['', '', '', '']";
1932
- set_str += ">>, " + attrid;
1933
- set_str += " fillOpacity: ";
1934
- set_str += JXG.Options.opacityLevel + ", name: '' ";
1935
- /* set_str +=
1936
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
1937
- set_str += ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
1938
- set_str += ", snaptogrid: " + JXG.Options.elements.snapToGrid;
1939
- set_str +=
1940
- ", snaptopoints: " + JXG.Options.elements.snapToPoints + ">>; ";
1941
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
1942
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
1943
- "}; "
1944
- break;
1945
-
1946
- case JXG.GENTYPE_TEXT:
1947
- if (
1948
- step.args.str.slice(0, 1) !== "'" &&
1949
- step.args.str.slice(0, 1) !== '"' &&
1950
- step.args.str.slice(0, 8) !== "function"
1951
- ) {
1952
- step.args.str = "'" + step.args.str + "'";
1953
- }
1954
-
1955
- set_str =
1956
- assign +
1957
- "text(" +
1958
- pn(step.args.x) +
1959
- ", " +
1960
- pn(step.args.y) +
1961
- ", " +
1962
- step.args.str +
1963
- ") <<";
1964
- set_str += attrid + "name: ''";
1965
- if (typeof step.args.anchor != 'undefined') {
1966
- set_str += ", anchor: " + step.args.anchor;
1967
- }
1968
- set_str += ">>; ";
1969
- // set_str += step.dest_id + '.setText(' + step.args.str + '); ';
1970
- reset_str = "remove(" + step.dest_id + "); ";
1971
- break;
1972
-
1973
- case JXG.GENTYPE_RULER:
1974
- set_str =
1975
- assign +
1976
- "tapemeasure([ " +
1977
- step.args.p1 +
1978
- " ], [ " +
1979
- step.args.p2 +
1980
- " ]) <<";
1981
- /*
1982
- set_str += attrid + 'name: \'\', point1: <<id: \'' + step.dest_sub_ids[0] + '\', snaptogrid: '
1983
- + JXG.Options.elements.snapToGrid + ', snaptopoints: ' + JXG.Options.elements.snapToPoints + '>>, '
1984
- + 'point2: <<id: \'' + step.dest_sub_ids[1] + '\''+ ', snaptogrid: '
1985
- + JXG.Options.elements.snapToGrid + ', snaptopoints: ' + JXG.Options.elements.snapToPoints + '>> >>; ';
1986
- */
1987
- set_str +=
1988
- attrid +
1989
- "name: ''" +
1990
- ", precision: " +
1991
- JXG.Options.trunclen +
1992
- ", point1: <<id: '" +
1993
- step.dest_sub_ids[0] +
1994
- "', snaptogrid: " +
1995
- JXG.Options.elements.snapToGrid +
1996
- ">>, " +
1997
- "point2: <<id: '" +
1998
- step.dest_sub_ids[1] +
1999
- "'" +
2000
- ", snaptogrid: " +
2001
- JXG.Options.elements.snapToGrid +
2002
- ">> >>; ";
2003
- reset_str = "remove(" + step.dest_id + "); ";
2004
- break;
2005
-
2006
- case JXG.GENTYPE_POLYGON:
2007
- if (step.args.create_point)
2008
- for (i = 0; i < step.args.create_point.length; i++) {
2009
- if (step.args.create_point[i]) {
2010
- set_str +=
2011
- "point(" + pn(step.args.coords[i].usrCoords[1]) + ", ";
2012
- set_str +=
2013
- pn(step.args.coords[i].usrCoords[2]) +
2014
- ") <<id: '" +
2015
- step.dest_sub_ids[i];
2016
- set_str +=
2017
- "', snaptogrid: " + JXG.Options.elements.snapToGrid;
2018
- set_str +=
2019
- ", snaptopoints: " +
2020
- JXG.Options.elements.snapToPoints +
2021
- ">>; ";
2022
- }
2023
- }
2024
-
2025
- if (step.dest_sub_ids)
2026
- for (i = 0; i < step.dest_sub_ids.length; i++) {
2027
- if (step.dest_sub_ids[i] !== 0) {
2028
- reset_str =
2029
- "remove(" + step.dest_sub_ids[i] + "); " + reset_str;
2030
- }
2031
- }
2032
-
2033
- reset_str = "remove(" + step.dest_id + "); " + reset_str;
2034
-
2035
- set_str += assign + "polygon(";
2036
-
2037
- for (i = 0; i < step.src_ids.length; i++) {
2038
- set_str += step.src_ids[i];
2039
- if (i !== step.src_ids.length - 1) {
2040
- set_str += ", ";
2041
- }
2042
- }
2043
-
2044
- set_str += ") <<borders: <<ids: ['";
2045
-
2046
- for (i = 0; i < step.dest_sub_ids.length; i++) {
2047
- set_str += step.dest_sub_ids[i];
2048
- if (i < step.dest_sub_ids.length - 1) {
2049
- set_str += "', '";
2050
- }
2051
- }
2052
- set_str += "']";
2053
-
2054
- set_str += ", names: [";
2055
- for (i = 0; i < step.dest_sub_ids.length; i++) {
2056
- set_str += "''";
2057
- if (i < step.dest_sub_ids.length - 1) {
2058
- set_str += ", ";
2059
- }
2060
- }
2061
- set_str += "]";
2062
- set_str +=
2063
- ">>, " + attrid + " fillOpacity: " + JXG.Options.opacityLevel;
2064
- /* set_str +=
2065
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
2066
- set_str += ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
2067
- set_str += ", name: ''>>; ";
2068
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
2069
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
2070
- "}; "
2071
- reset_str = "remove(" + step.dest_id + "); ";
2072
- break;
2073
-
2074
- case JXG.GENTYPE_POLYGONCOPY:
2075
- le = step.args.num_vertices;
2076
-
2077
- set_str = "";
2078
- reset_str = "";
2079
-
2080
- for (i = 0; i < le; ++i) {
2081
- set_str +=
2082
- assign +
2083
- "point(" +
2084
- pn(step.args.points[i][1]) +
2085
- ", " +
2086
- pn(step.args.points[i][2]);
2087
- set_str +=
2088
- ")" +
2089
- (options.useSymbols
2090
- ? ""
2091
- : " <<id: '" +
2092
- step.dest_sub_ids[i] +
2093
- "'" +
2094
- ", snaptogrid: " +
2095
- JXG.Options.elements.snapToGrid +
2096
- ", snaptopoints: " +
2097
- JXG.Options.elements.snapToPoints +
2098
- ">>") +
2099
- "; ";
2100
-
2101
- reset_str += "remove(" + step.dest_sub_ids[i] + "); ";
2102
- }
2103
-
2104
- set_str += assign + "polygon(";
2105
-
2106
- for (i = 0; i < le; ++i) {
2107
- set_str += step.dest_sub_ids[i];
2108
- if (i !== le - 1) {
2109
- set_str += ", ";
2110
- }
2111
- }
2112
-
2113
- set_str += ") <<borders: <<ids: ['";
2114
-
2115
- for (i = le; i < step.dest_sub_ids.length; i++) {
2116
- set_str += step.dest_sub_ids[i];
2117
- if (i < step.dest_sub_ids.length - 1) {
2118
- set_str += "', '";
2119
- }
2120
- }
2121
- set_str += "']";
2122
-
2123
- set_str += ", names: [";
2124
- for (i = le; i < step.dest_sub_ids.length; i++) {
2125
- set_str += "''";
2126
- if (i < step.dest_sub_ids.length - 1) {
2127
- set_str += ", ";
2128
- }
2129
- }
2130
- set_str += "]";
2131
- set_str +=
2132
- ">>, " + attrid + " fillOpacity: " + JXG.Options.opacityLevel;
2133
- /* set_str +=
2134
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
2135
- set_str += ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
2136
- set_str += ", name: ''>>; ";
2137
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
2138
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
2139
- "}; "
2140
- reset_str += "remove(" + step.dest_id + "); ";
2141
- break;
2142
-
2143
- case JXG.GENTYPE_REGULARPOLYGON:
2144
- set_str = assign + "regularpolygon(" + step.src_ids.join(", ") + ", ";
2145
- set_str += step.args.corners + ") <<borders: <<ids: [ ";
2146
-
2147
- for (i = 0; i < step.args.corners; i++) {
2148
- set_str += "'" + step.dest_sub_ids[i] + "'";
2149
- if (i !== step.args.corners - 1) {
2150
- set_str += ", ";
2151
- }
2152
- reset_str = "remove(" + step.dest_sub_ids[i] + "); " + reset_str;
2153
- }
2154
- set_str += "]";
2155
-
2156
- set_str += ", names: [";
2157
- for (i = 0; i < step.args.corners; i++) {
2158
- set_str += "''";
2159
- if (i < step.args.corners - 1) {
2160
- set_str += ", ";
2161
- }
2162
- }
2163
- set_str += "]";
2164
-
2165
- set_str += ">>, vertices: <<ids: [ ";
2166
- for (i = 0; i < step.args.corners - 2; i++) {
2167
- set_str +=
2168
- "'" +
2169
- step.dest_sub_ids[i + parseInt(step.args.corners, 10)] +
2170
- "'";
2171
- if (i !== step.args.corners - 3) {
2172
- set_str += ", ";
2173
- }
2174
- reset_str =
2175
- "remove(" +
2176
- step.dest_sub_ids[i + parseInt(step.args.corners, 10)] +
2177
- "); " +
2178
- reset_str;
2179
- }
2180
- set_str += " ]";
2181
- set_str += ", name: ''";
2182
- // set_str += ', fillColor: \'' + JXG.Options.regularpolygon.fillColor + '\'';
2183
- // set_str += ', strokeColor: \'' + JXG.Options.intersection.strokeColor + '\'';
2184
- // set_str += ', opacity: \'' + JXG.Options.intersection.opacity + '\'';
2185
- set_str += ">>, " + attrid;
2186
- set_str += " fillOpacity: " + JXG.Options.opacityLevel;
2187
- /* set_str +=
2188
- ", hasInnerPoints_Org: " + JXG.Options.polygon.hasInnerPoints; */
2189
- set_str += ", hasInnerPoints: " + JXG.Options.polygon.hasInnerPoints;
2190
- set_str += ", name: ''>>; ";
2191
- set_str += step.dest_id + ".hasInnerPoints = function() { " +
2192
- "return !(" + step.dest_id + ".fillColor == 'transparent' || " + step.dest_id + ".fillColor == 'none' || " + step.dest_id + ".fillOpacity == 0); " +
2193
- "}; "
2194
- reset_str = "remove(" + step.dest_id + "); " + reset_str;
2195
-
2196
- break;
2197
-
2198
- case JXG.GENTYPE_SECTOR:
2199
- set_str = assign;
2200
-
2201
- // ids
2202
- pid1 = step.dest_id; // id of sector
2203
- pid2 = step.dest_sub_ids[0]; // id of arc
2204
- pid3 = pid1 + (step.args.suffix_glider ?? "_glider"); // id of glider
2205
- pid4 = pid1 + (step.args.suffix_segment1 ?? "_segment1"); // id of segment 1 (mid - radiuspoint)
2206
- pid5 = pid1 + (step.args.suffix_segment2 ?? "_segment2"); // id of segment 2 (mid - glider)
2207
-
2208
- // sector
2209
- set_str += "sector(" + step.src_ids.join(", ") + ") ";
2210
- set_str += "<<" + attrid + " name: '', fillOpacity: " + JXG.Options.opacityLevel + ", hasInnerPoints: true, arc: <<id: '" + pid2 + "', priv:true>> >>; ";
2211
- set_str += pid1 + ".hasInnerPoints = function() { " +
2212
- "return !(" + pid1 + ".fillColor == 'transparent' || " + pid1 + ".fillColor == 'none' || " + pid1 + ".fillOpacity == 0); " +
2213
- "}; ";
2214
-
2215
- // glider
2216
- set_str += "glider(function () { return " + step.src_ids[2] + ".X(); }, function () { return " + step.src_ids[2] + ".Y(); }, " + pid2 + ") ";
2217
- set_str += "<<id: '" + pid3 + "', name:'', parents: ['" + pid1 + "', '" + pid2 + "', '" + step.src_ids[2] + "'], priv:true>>; ";
2218
-
2219
- // segment 1 (mid - radiuspoint)
2220
- set_str += "segment(" + step.src_ids[0] + ", " + step.src_ids[1] + ") ";
2221
- set_str += "<<id: '" + pid4 + "', name:'', parents: ['" + pid1 + "', '" + step.src_ids[0] + "', '" + step.src_ids[1] + "'], priv:true>>; ";
2222
-
2223
- // segment 2 (mid - glider)
2224
- set_str += "segment(" + step.src_ids[0] + ", " + pid3 + ") ";
2225
- set_str += "<<id: '" + pid5 + "', name:'', parents: ['" + pid1 + "', '" + step.src_ids[0] + "', '" + pid3 + "'], priv:true>>; ";
2226
-
2227
- reset_str = "";
2228
- reset_str += "remove(" + pid3 + "); ";
2229
- reset_str += "remove(" + pid4 + "); ";
2230
- reset_str += "remove(" + pid5 + "); ";
2231
- reset_str += "remove(" + pid1 + "); ";
2232
- break;
2233
-
2234
- case JXG.GENTYPE_ANGLE:
2235
- set_str = assign + "angle(" + step.src_ids.join(", ") + ") ";
2236
- set_str += "<<";
2237
- set_str +=
2238
- "dot: <<priv:true, id: '" +
2239
- step.dest_sub_ids[0] +
2240
- "', name: ''>>, ";
2241
- set_str += attrid + " fillOpacity: " + JXG.Options.opacityLevel;
2242
- if (JXG.exists(step.args) && JXG.exists(step.args.radius))
2243
- if (JXG.isNumber(step.args.radius)) {
2244
- set_str += ", radius: " + step.args.radius;
2245
- } else {
2246
- set_str += ", radius: '" + step.args.radius + "'";
2247
- }
2248
- set_str += ", hasInnerPoints: true>>; ";
2249
- reset_str = "remove(" + step.dest_id + "); ";
2250
- reset_str += "remove(" + step.dest_sub_ids[0] + "); ";
2251
- break;
2252
-
2253
- case JXG.GENTYPE_NONREFLEXANGLE:
2254
- set_str = assign + "nonreflexangle(" + step.src_ids.join(", ") + ") ";
2255
- set_str += "<<";
2256
- set_str += "dot: <<priv:true, id: '" + step.dest_sub_ids[0] + "', ";
2257
- set_str += "name: ''>>, ";
2258
- set_str += attrid + " fillOpacity: " + JXG.Options.opacityLevel;
2259
- if (JXG.exists(step.args) && JXG.exists(step.args.radius))
2260
- if (JXG.isNumber(step.args.radius)) {
2261
- set_str += ", radius: " + step.args.radius;
2262
- } else {
2263
- set_str += ", radius: '" + step.args.radius + "'";
2264
- }
2265
- set_str += ">>; ";
2266
- reset_str = "remove(" + step.dest_id + "); ";
2267
- reset_str += "remove(" + step.dest_sub_ids[0] + "); ";
2268
- break;
2269
-
2270
- case JXG.GENTYPE_REFLEXANGLE:
2271
- set_str = assign + "reflexangle(" + step.src_ids.join(", ") + ") ";
2272
- set_str += "<<";
2273
- set_str += "dot: <<priv:true, id: '" + step.dest_sub_ids[0] + "', ";
2274
- set_str += "name: ''>>, ";
2275
- set_str += attrid + " fillOpacity: " + JXG.Options.opacityLevel;
2276
- if (JXG.exists(step.args) && JXG.exists(step.args.radius))
2277
- if (JXG.isNumber(step.args.radius)) {
2278
- set_str += ", radius: " + step.args.radius;
2279
- } else {
2280
- set_str += ", radius: '" + step.args.radius + "'";
2281
- }
2282
- set_str += ">>; ";
2283
- reset_str = "remove(" + step.dest_id + "); ";
2284
- reset_str += "remove(" + step.dest_sub_ids[0] + "); ";
2285
- break;
2286
-
2287
- case JXG.GENTYPE_SLOPETRIANGLE:
2288
- // step.src_ids[0] may contain one or two parent elements.
2289
- set_str = assign + "slopetriangle(" + step.src_ids.join(", ") + ") <<";
2290
- set_str += attrid + " name: '',";
2291
- set_str +=
2292
- "borders: <<ids: ['" +
2293
- step.dest_sub_ids[4] +
2294
- "', '" +
2295
- step.dest_sub_ids[5] +
2296
- "', '" +
2297
- step.dest_sub_ids[6] +
2298
- "']>>,";
2299
- set_str +=
2300
- "basepoint: <<id: '" +
2301
- step.dest_sub_ids[0] +
2302
- "', name: '', priv: true >>, ";
2303
- set_str +=
2304
- "baseline: <<id: '" +
2305
- step.dest_sub_ids[1] +
2306
- "', name: '', priv: true >>,";
2307
- set_str +=
2308
- "glider: <<id: '" +
2309
- step.dest_sub_ids[2] +
2310
- "', name: '', priv: false >>, ";
2311
- set_str +=
2312
- "toppoint: <<id: '" +
2313
- step.dest_sub_ids[3] +
2314
- "', name: '', priv: false >>";
2315
- if (step.dest_sub_ids.length === 8) {
2316
- // The test is needed for backwards compatibility
2317
- set_str +=
2318
- ", tangent: <<id: '" +
2319
- step.dest_sub_ids[7] +
2320
- "', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>";
2321
- }
2322
- set_str += ">>;";
2323
- reset_str = "remove(" + step.dest_id + "); ";
2324
-
2325
- break;
2326
-
2327
- case JXG.GENTYPE_PLOT:
2328
- set_str = assign + step.args.plot_type + "(" + step.args.func;
2329
-
2330
- if (
2331
- isNaN(step.args.a) ||
2332
- step.args.a === null ||
2333
- step.args.a === undefined ||
2334
- step.args.a === "-infinity"
2335
- )
2336
- step.args.a = "";
2337
- if (
2338
- isNaN(step.args.b) ||
2339
- step.args.b === null ||
2340
- step.args.b === undefined ||
2341
- step.args.b === "infinity"
2342
- )
2343
- step.args.b = "";
2344
-
2345
- if (step.args.a != step.args.b)
2346
- set_str += ", " + step.args.a + ", " + step.args.b;
2347
-
2348
- set_str += ") <<";
2349
-
2350
- if (step.args.isPolar) set_str += "curveType: 'polar', ";
2351
-
2352
- set_str +=
2353
- attrid +
2354
- "name: '', withLabel: true, strokeColor: '" +
2355
- step.args.color +
2356
- "', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ";
2357
- reset_str = "remove(" + step.dest_id + "); ";
2358
-
2359
- break;
2360
-
2361
- case JXG.GENTYPE_PATH:
2362
- le = step.args.points.length;
2363
-
2364
- set_str += assign + "cardinalspline([";
2365
- for (i = 0; i < step.args.points.length; i++) {
2366
- if (JXG.isString(step.args.points[i])) {
2367
- set_str += "'" + step.args.points[i] + "'";
2368
- } else {
2369
- if (step.args.points[i].length === 3) {
2370
- x = step.args.points[i][1].toPrecision(4);
2371
- y = step.args.points[i][2].toPrecision(4);
2372
- } else {
2373
- x = step.args.points[i][0].toPrecision(4);
2374
- y = step.args.points[i][1].toPrecision(4);
2375
- }
2376
- set_str += "[" + x + "," + y + "]";
2377
- }
2378
- if (i < le - 1) {
2379
- set_str += ",";
2380
- }
2381
- }
2382
- set_str += "], function() { " +
2383
- " o = $('" + step.dest_id + "'); " +
2384
- " if(o) {" +
2385
- " return o.tau; " +
2386
- " } else {" +
2387
- " return 1; " +
2388
- " }" +
2389
- "}, " + step.args.type;
2390
- set_str += ") <<";
2391
-
2392
- set_str += attrid + "name: '', withLabel: false, tau: " + step.args.tau + ", ";
2393
- set_str += "fixed: false, ";
2394
- if (!step.args.createPoints) {
2395
- set_str += "createPoints: false, ";
2396
- }
2397
- set_str += "isArrayOfCoordinates: true, ";
2398
- set_str += "strokeWidth: " + step.args.strokeWidth + ", ";
2399
- set_str += "strokeColor: '" + step.args.strokeColor + "' >>; ";
2400
- reset_str = "remove(" + step.dest_id + "); ";
2401
-
2402
- break;
2403
-
2404
- case JXG.GENTYPE_DERIVATIVE:
2405
- set_str = assign + "derivative(" + step.src_ids + ")";
2406
- set_str += " <<";
2407
- set_str += "dash: 2";
2408
- set_str += " >>;";
2409
- break;
2410
-
2411
- case JXG.GENTYPE_SLIDER:
2412
- set_str =
2413
- assign +
2414
- "slider(" +
2415
- "[" + pn(step.args.x1) + ", " + pn(step.args.y1) + "], " +
2416
- "[" + pn(step.args.x2) + ", " + pn(step.args.y2) + "], " +
2417
- "[" + pn(step.args.min ?? step.args.start) + ", " + pn(step.args.start ?? step.args.ini) + ", " + pn(step.args.max ?? step.args.end) + "]) ";
2418
- set_str += "<<" + attrid;
2419
- set_str += " snapWidth: " + pn(step.args.step ?? '0.1') + ", ";
2420
- set_str += "baseline: <<id: '" + step.dest_sub_ids[0] + "', name: ''>>, ";
2421
- set_str += "highline: <<id: '" + step.dest_sub_ids[1] + "', name: ''>>, ";
2422
- set_str += "point1: <<id: '" + step.dest_sub_ids[2] + "', name: ''>>, ";
2423
- set_str += "point2: <<id: '" + step.dest_sub_ids[3] + "', name: ''>>, ";
2424
- set_str += "label: <<id: '" + step.dest_sub_ids[4] + "', name: '', priv: true>>";
2425
- set_str += ", name: '" + step.args.name + "'>>; ";
2426
-
2427
- reset_str = "remove(" + step.dest_id + "); ";
2428
- reset_str += "remove(" + step.dest_sub_ids[4] + "); ";
2429
- reset_str += "remove(" + step.dest_sub_ids[3] + "); "
2430
- reset_str += "remove(" + step.dest_sub_ids[2] + "); "
2431
- reset_str += "remove(" + step.dest_sub_ids[1] + "); "
2432
- reset_str += "remove(" + step.dest_sub_ids[0] + "); ";
2433
- break;
2434
-
2435
- /*
2436
- case JXG.GENTYPE_TRANSFORM:
2437
-
2438
- set_str = step.dest_sub_ids[0] + ' = transform(' + step.args.tmat + ') <<type: \'generic\'>>; ';
2439
- set_str += 'point(' + step.src_ids[0] + ', ' + step.dest_sub_ids[0] + ') <<id: \'' + step.dest_id;
2440
- set_str += '\', visible: true>>; ';
2441
-
2442
- reset_str = 'remove(' + step.dest_id + '); ';
2443
- reset_str += 'remove(' + step.dest_sub_ids[0] + '); ';
2444
-
2445
- break;
2446
-
2447
- case JXG.GENTYPE_PERPENDICULAR_BISECTOR:
2448
- if (step.args.create_line) {
2449
- sub_id = step.dest_sub_ids[2];
2450
- set_str = 'line(' + step.src_ids[0] + ', ' + step.src_ids[1] + ') <<id: \'' + sub_id;
2451
- set_str += '\', visible: true>>; ';
2452
- reset_str = 'remove(' + sub_id + '); ';
2453
- } else {
2454
- sub_id = step.src_ids[2];
2455
- }
2456
-
2457
- set_str += 'midpoint(' + step.src_ids[0] + ', ' + step.src_ids[1] + ') <<id: \'' + step.dest_sub_ids[0];
2458
- set_str += '\', fillColor: \'' + step.args.fillColor + '\'>>; ';
2459
- set_str += assign + 'normal(' + step.dest_sub_ids[0] + ', ' + sub_id + ') <<' + attrid;
2460
- set_str += ' point: <<id: \'' + step.dest_sub_ids[1] + '\', name: \'';
2461
- set_str += '\'>> >>; ';
2462
- reset_str = 'remove(' + step.dest_sub_ids[0] + '); ' + reset_str;
2463
- reset_str = 'remove(' + step.dest_id + '); remove(' + step.dest_sub_ids[1] + '); ' + reset_str;
2464
- break;
2465
- */
2466
-
2467
- case JXG.GENTYPE_DELETE:
2468
- arr = [];
2469
- ctx_set_str = [];
2470
- ctx_reset_str = [];
2471
-
2472
- for (i = 0; i < step.args.steps.length; i++) {
2473
- if (step_log[step.args.steps[i]].type > 50) {
2474
- arr = this.generateJCodeMeta(
2475
- step_log[step.args.steps[i]],
2476
- board
2477
- );
2478
- } else {
2479
- arr = this.generateJCode(
2480
- step_log[step.args.steps[i]],
2481
- board,
2482
- step_log
2483
- );
2484
- }
2485
-
2486
- if (arr.length >= 3 && JXG.trim(arr[2]) !== "") {
2487
- set_str = arr[2] + set_str;
2488
- }
2489
- if (arr.length >= 4 && JXG.isFunction(arr[3])) {
2490
- ctx_set_str.unshift(arr[3]);
2491
- }
2492
- if (arr.length >= 1 && JXG.trim(arr[0]) !== "") {
2493
- reset_str += arr[0];
2494
- }
2495
- if (arr.length >= 2 && JXG.isFunction(arr[1])) {
2496
- ctx_reset_str.push(arr[1]);
2497
- }
2498
- }
2499
-
2500
- break;
2501
-
2502
- case JXG.GENTYPE_COPY:
2503
- copy_log = [];
2504
-
2505
- // Adapt the steps to the new IDs
2506
- for (el in step.args.steps) {
2507
- if (step.args.steps.hasOwnProperty(el)) {
2508
- step2 = JXG.deepCopy(step_log[step.args.steps[el]]);
2509
-
2510
- if (step2.type === JXG.GENTYPE_COPY) {
2511
- for (i = 0; i < step2.args.map.length; i++) {
2512
- for (j = 0; j < step.args.map.length; j++) {
2513
- if (
2514
- step2.args.map[i].copy === step.args.map[j].orig
2515
- ) {
2516
- step2.args.map[i].copy = step.args.map[j].copy;
2517
- }
2518
- }
2519
- }
2520
-
2521
- step2 = JXG.SketchReader.replaceStepDestIds(
2522
- step2,
2523
- step2.args.map
2524
- );
2525
- } else {
2526
- step2 = JXG.SketchReader.replaceStepDestIds(
2527
- step2,
2528
- step.args.map
2529
- );
2530
- }
2531
-
2532
- copy_log.push(step2);
2533
- }
2534
- }
2535
-
2536
- for (i = 0; i < copy_log.length; i++) {
2537
- if (copy_log[i].type > 50) {
2538
- arr = this.generateJCodeMeta(copy_log[i], board);
2539
- } else {
2540
- arr = this.generateJCode(copy_log[i], board, step_log);
2541
- }
2542
-
2543
- if (JXG.trim(arr[0]) !== "") {
2544
- set_str += arr[0];
2545
- }
2546
-
2547
- if (JXG.isFunction(arr[1])) {
2548
- ctx_set_str.push(arr[1]);
2549
- }
2550
-
2551
- if (JXG.trim(arr[2]) !== "") {
2552
- reset_str = arr[2] + reset_str;
2553
- }
2554
-
2555
- if (JXG.isFunction(arr[3])) {
2556
- ctx_reset_str.unshift(arr[3]);
2557
- }
2558
- }
2559
-
2560
- // Apply the offset-translation to the free points of the copy
2561
- if (step.args.dep_copy) {
2562
- for (i = 0; i < step.args.map.length; i++) {
2563
- if (
2564
- getObject(step.args.map[i].orig).elementClass ===
2565
- JXG.OBJECT_CLASS_POINT
2566
- ) {
2567
- set_str += step.args.map[i].copy;
2568
- set_str +=
2569
- ".X = function() { return (" +
2570
- step.args.map[i].orig +
2571
- ".X() - ";
2572
- set_str += pn(step.args.x) + "); }; ";
2573
- set_str += step.args.map[i].copy;
2574
- set_str +=
2575
- ".Y = function() { return (" +
2576
- step.args.map[i].orig +
2577
- ".Y() - ";
2578
- set_str += pn(step.args.y) + "); }; ";
2579
- }
2580
- }
2581
- } else {
2582
- for (i = 0; i < step.args.free_points.length; i++) {
2583
- xstart = getObject(step.args.free_points[i].orig).coords
2584
- .usrCoords[1];
2585
- ystart = getObject(step.args.free_points[i].orig).coords
2586
- .usrCoords[2];
2587
-
2588
- set_str +=
2589
- step.args.free_points[i].copy + ".X = function() { return ";
2590
- set_str += pn(xstart - step.args.x) + "; }; ";
2591
- set_str +=
2592
- step.args.free_points[i].copy + ".Y = function() { return ";
2593
- set_str += pn(ystart - step.args.y) + "; }; ";
2594
- set_str += step.args.free_points[i].copy + ".free(); ";
2595
- }
2596
- }
2597
-
2598
- for (j = 0; j < step.args.map.length; j++) {
2599
- el = getObject(step.args.map[j].orig);
2600
-
2601
- // Check if a radius-defined circle should be copied
2602
- if (el.type === JXG.OBJECT_TYPE_CIRCLE && !JXG.exists(el.point2)) {
2603
- // Make the radius of the circle copy depend on the original circle's radius
2604
- set_str +=
2605
- step.args.map[j].copy + ".setRadius(function () { return ";
2606
- set_str += step.args.map[j].orig + ".radius(); }); ";
2607
- }
2608
- }
2609
-
2610
- break;
2611
-
2612
- case JXG.GENTYPE_ABLATION:
2613
- xstart = getObject(step.src_ids[0]).coords.usrCoords[1];
2614
- ystart = getObject(step.src_ids[0]).coords.usrCoords[2];
2615
-
2616
- set_str =
2617
- "point(" +
2618
- pn(xstart - step.args.x) +
2619
- ", " +
2620
- pn(ystart - step.args.y) +
2621
- ") <<id: '";
2622
- set_str += step.dest_sub_ids[0] + "', name: '', withLabel: false>>; ";
2623
- set_str +=
2624
- "circle('" +
2625
- step.dest_sub_ids[0] +
2626
- "', 1) <<id: '" +
2627
- step.dest_sub_ids[1];
2628
- set_str += "', fillOpacity: " + JXG.Options.opacityLevel;
2629
- set_str +=
2630
- ", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ";
2631
-
2632
- if (step.args.fids.length === 1) {
2633
- step.args.func = step.args.fids[0] + ".radius()";
2634
- } else {
2635
- step.args.func =
2636
- "dist(" + step.args.fids[0] + ", " + step.args.fids[1] + ")";
2637
- }
2638
-
2639
- set_str +=
2640
- step.dest_sub_ids[1] +
2641
- ".setRadius(function() { return " +
2642
- step.args.func +
2643
- "; }); ";
2644
-
2645
- for (j = 0; j < step.src_ids.length; j++) {
2646
- set_str +=
2647
- step.src_ids[j] + ".addChild(" + step.dest_sub_ids[0] + "); ";
2648
- set_str +=
2649
- step.src_ids[j] + ".addChild(" + step.dest_sub_ids[1] + "); ";
2650
- }
2651
-
2652
- if (step.args.migrate !== 0 && step.args.migrate !== -1) {
2653
- set_str +=
2654
- "$board.migratePoint(" +
2655
- step.dest_sub_ids[0] +
2656
- ", " +
2657
- step.args.migrate +
2658
- "); ";
2659
- }
2660
-
2661
- reset_str =
2662
- "remove(" +
2663
- step.dest_sub_ids[1] +
2664
- "); remove(" +
2665
- step.dest_sub_ids[0] +
2666
- "); ";
2667
-
2668
- break;
2669
-
2670
- case JXG.GENTYPE_VECTORCOPY:
2671
- xstart = getObject(step.src_ids[0]).coords.usrCoords[1];
2672
- ystart = getObject(step.src_ids[0]).coords.usrCoords[2];
2673
-
2674
- set_str =
2675
- "point(" +
2676
- pn(xstart - step.args.x) +
2677
- ", " +
2678
- pn(ystart - step.args.y) +
2679
- ") <<id: '";
2680
- set_str += step.dest_sub_ids[0] + "', name: '', withLabel: false>>; ";
2681
- set_str +=
2682
- "parallelpoint('" +
2683
- step.src_ids[0] +
2684
- "','" +
2685
- step.src_ids[1] +
2686
- "','" +
2687
- step.dest_sub_ids[0] +
2688
- "') <<id: '" +
2689
- step.dest_sub_ids[1];
2690
- set_str +=
2691
- "', strokeColor: '#888888', visible: true, priv: false, name: '', ";
2692
- set_str +=
2693
- "layer: " +
2694
- JXG.Options.layer.line +
2695
- ", opacity: 0.2, withLabel: false>>; ";
2696
- set_str +=
2697
- "arrow('" +
2698
- step.dest_sub_ids[0] +
2699
- "','" +
2700
- step.dest_sub_ids[1] +
2701
- "') <<id: '" +
2702
- step.dest_sub_ids[2];
2703
- set_str +=
2704
- "', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ";
2705
-
2706
- for (j = 0; j < step.src_ids.length; j++) {
2707
- set_str +=
2708
- step.src_ids[j] + ".addChild(" + step.dest_sub_ids[0] + "); ";
2709
- set_str +=
2710
- step.src_ids[j] + ".addChild(" + step.dest_sub_ids[1] + "); ";
2711
- set_str +=
2712
- step.src_ids[j] + ".addChild(" + step.dest_sub_ids[2] + "); ";
2713
- }
2714
-
2715
- if (step.args.migrate !== 0 && step.args.migrate !== -1) {
2716
- set_str +=
2717
- "$board.migratePoint(" +
2718
- step.dest_sub_ids[0] +
2719
- ", " +
2720
- step.args.migrate +
2721
- "); ";
2722
- }
2723
-
2724
- reset_str =
2725
- "remove(" +
2726
- step.dest_sub_ids[1] +
2727
- "); remove(" +
2728
- step.dest_sub_ids[0] +
2729
- "); remove(" +
2730
- step.dest_sub_ids[2] +
2731
- ");";
2732
-
2733
- break;
2734
-
2735
- case JXG.GENTYPE_MOVEMENT:
2736
- if (
2737
- step.args.obj_type === JXG.OBJECT_TYPE_LINE ||
2738
- step.args.obj_type === JXG.OBJECT_TYPE_VECTOR
2739
- ) {
2740
- set_str =
2741
- step.src_ids[0] +
2742
- ".move([" +
2743
- pn(step.args.coords[0].usrCoords[0]) +
2744
- ", ";
2745
- set_str +=
2746
- pn(step.args.coords[0].usrCoords[1]) +
2747
- ", " +
2748
- pn(step.args.coords[0].usrCoords[2]) +
2749
- "]); ";
2750
- reset_str =
2751
- step.src_ids[0] +
2752
- ".move([" +
2753
- step.args.zstart[0] +
2754
- ", " +
2755
- step.args.xstart[0] +
2756
- ", ";
2757
- reset_str += step.args.ystart[0] + "]); ";
2758
-
2759
- set_str +=
2760
- step.src_ids[1] +
2761
- ".move([" +
2762
- pn(step.args.coords[1].usrCoords[0]) +
2763
- ", ";
2764
- set_str +=
2765
- pn(step.args.coords[1].usrCoords[1]) +
2766
- ", " +
2767
- pn(step.args.coords[1].usrCoords[2]) +
2768
- "]); ";
2769
- reset_str +=
2770
- step.src_ids[1] +
2771
- ".move([" +
2772
- step.args.zstart[1] +
2773
- ", " +
2774
- step.args.xstart[1] +
2775
- ", ";
2776
- reset_str += step.args.ystart[1] + "]); ";
2777
- } else if (step.args.obj_type === JXG.OBJECT_TYPE_CIRCLE) {
2778
- set_str =
2779
- step.src_ids[0] +
2780
- ".move([" +
2781
- pn(step.args.coords[0].usrCoords[1]) +
2782
- ", ";
2783
- set_str += pn(step.args.coords[0].usrCoords[2]) + "]); ";
2784
- reset_str =
2785
- step.src_ids[0] +
2786
- ".move([" +
2787
- step.args.xstart +
2788
- ", " +
2789
- step.args.ystart +
2790
- "]); ";
2791
-
2792
- if (step.args.has_point2) {
2793
- set_str +=
2794
- step.src_ids[1] +
2795
- ".move([" +
2796
- pn(step.args.coords[1].usrCoords[1]) +
2797
- ", ";
2798
- set_str += pn(step.args.coords[1].usrCoords[2]) + "]); ";
2799
- reset_str +=
2800
- step.src_ids[1] +
2801
- ".move([" +
2802
- step.args.old_p2x +
2803
- ", " +
2804
- step.args.old_p2y;
2805
- reset_str += "]); ";
2806
- }
2807
- } else if (step.args.obj_type === JXG.OBJECT_TYPE_POLYGON) {
2808
- set_str = reset_str = "";
2809
-
2810
- for (i = 0; i < step.src_ids.length; i++) {
2811
- set_str +=
2812
- step.src_ids[i] +
2813
- ".move([" +
2814
- pn(step.args.coords[i].usrCoords[1]) +
2815
- ", ";
2816
- set_str += pn(step.args.coords[i].usrCoords[2]) + "]); ";
2817
- reset_str +=
2818
- step.src_ids[i] +
2819
- ".move([" +
2820
- step.args.xstart[i] +
2821
- ", " +
2822
- step.args.ystart[i];
2823
- reset_str += "]); ";
2824
- }
2825
- } else {
2826
- // Upwards compatibility of pre 1.0 files
2827
- if (JXG.exists(step.args.coords[0])) {
2828
- set_str =
2829
- step.src_ids[0] +
2830
- ".move([" +
2831
- pn(step.args.coords[0].usrCoords[1]) +
2832
- ", ";
2833
- set_str += pn(step.args.coords[0].usrCoords[2]) + "]); ";
2834
-
2835
- reset_str =
2836
- step.src_ids[0] +
2837
- ".move([" +
2838
- step.args.xstart +
2839
- ", " +
2840
- step.args.ystart +
2841
- "]); ";
2842
- }
2843
- }
2844
-
2845
- break;
2846
-
2847
- default:
2848
- JXG.debug("No such GENTYPE!" + step.type);
2849
- return [];
2850
- }
2851
-
2852
- return [set_str, ctx_set_str, reset_str, ctx_reset_str];
2853
- },
2854
-
2855
- replaceStepDestIds: function (step, id_map) {
2856
- var i,
2857
- j,
2858
- copy_ids = [];
2859
-
2860
- for (i = 0; i < id_map.length; i++) {
2861
- copy_ids.push(id_map[i].copy);
2862
-
2863
- if (step.dest_id === id_map[i].orig) {
2864
- step.dest_id = id_map[i].copy;
2865
- }
2866
-
2867
- for (j = 0; j < step.dest_sub_ids.length; j++) {
2868
- if (step.dest_sub_ids[j] === id_map[i].orig) {
2869
- step.dest_sub_ids[j] = id_map[i].copy;
2870
- }
2871
- }
2872
-
2873
- for (j = 0; j < step.src_ids.length; j++) {
2874
- if (step.src_ids[j] === id_map[i].orig) {
2875
- step.src_ids[j] = id_map[i].copy;
2876
- }
2877
- }
2878
- }
2879
-
2880
- for (j = 0; j < step.dest_sub_ids.length; j++) {
2881
- if (!JXG.isInArray(copy_ids, step.dest_sub_ids[j])) {
2882
- step.dest_sub_ids[j] = this.id();
2883
- }
2884
- }
2885
-
2886
- step.src_ids = JXG.uniqueArray(step.src_ids);
2887
- step.dest_sub_ids = JXG.uniqueArray(step.dest_sub_ids);
2888
-
2889
- return step;
2890
- }
2891
- }
2892
- );
2893
-
2894
- JXG.registerReader(JXG.SketchReader, ["sketch", "sketchometry"]);
2895
- })();