jsxgraph 1.4.1 → 1.4.2
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.
- package/distrib/geogebra.min.js +1 -1
- package/distrib/geonext.min.js +1 -1
- package/distrib/index.d.ts +4961 -4827
- package/distrib/intergeo.min.js +1 -1
- package/distrib/jsxgraph.css +6 -2
- package/distrib/jsxgraphcore.js +3 -3
- package/distrib/jsxgraphsrc.js +147 -10
- package/distrib/sketch.min.js +2 -2
- package/package.json +1 -1
- package/src/base/board.js +12 -2
- package/src/base/constants.js +2 -1
- package/src/base/element.js +1 -1
- package/src/base/point.js +1 -0
- package/src/base/ticks.js +7 -2
- package/src/options.js +16 -1
- package/src/parser/jessiecode.js +103 -0
- package/src/reader/sketch.js +4 -4
- package/src/renderer/abstract.js +4 -1
- package/src/utils/color.js +1 -2
package/distrib/jsxgraphsrc.js
CHANGED
|
@@ -842,7 +842,7 @@ define('base/constants',['jxg'], function (JXG) {
|
|
|
842
842
|
|
|
843
843
|
var major = 1,
|
|
844
844
|
minor = 4,
|
|
845
|
-
patch =
|
|
845
|
+
patch = 2,
|
|
846
846
|
add = '', //'dev'
|
|
847
847
|
version = major + '.' + minor + '.' + patch + (add ? '-' + add : ''),
|
|
848
848
|
constants;
|
|
@@ -911,6 +911,7 @@ define('base/constants',['jxg'], function (JXG) {
|
|
|
911
911
|
OBJECT_TYPE_BUTTON: 29,
|
|
912
912
|
OBJECT_TYPE_TRANSFORMATION: 30,
|
|
913
913
|
OBJECT_TYPE_FOREIGNOBJECT: 31,
|
|
914
|
+
OBJECT_TYPE_VIEW3D: 32,
|
|
914
915
|
|
|
915
916
|
// IMPORTANT:
|
|
916
917
|
// ----------
|
|
@@ -25020,8 +25021,7 @@ define('utils/color',['jxg', 'utils/type', 'math/math'],
|
|
|
25020
25021
|
green: '#009E73', // bluishgreen
|
|
25021
25022
|
purple: '#CC79A7', // reddishpurple
|
|
25022
25023
|
white: '#ffffff'
|
|
25023
|
-
}
|
|
25024
|
-
|
|
25024
|
+
}
|
|
25025
25025
|
});
|
|
25026
25026
|
|
|
25027
25027
|
/**
|
|
@@ -26542,7 +26542,20 @@ define('options',[
|
|
|
26542
26542
|
*/
|
|
26543
26543
|
isLabel: false,
|
|
26544
26544
|
|
|
26545
|
-
|
|
26545
|
+
/**
|
|
26546
|
+
* Controls if an element can get the focus with the tab key.
|
|
26547
|
+
* See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex">descriptiona at MDN</a>.
|
|
26548
|
+
* The additional value null completely disables focus of an element.
|
|
26549
|
+
* The value will be ignored if keyboard control of the board is not enabled or
|
|
26550
|
+
* the element is fixed or not visible.
|
|
26551
|
+
*
|
|
26552
|
+
* @name JXG.GeometryElement#tabindex
|
|
26553
|
+
* @type Number
|
|
26554
|
+
* @default 0
|
|
26555
|
+
* @see JXG.Board#keyboard
|
|
26556
|
+
* @see JXG.GeometryElement#fixed
|
|
26557
|
+
* @see JXG.GeometryElement#visible
|
|
26558
|
+
*/
|
|
26546
26559
|
tabindex: 0
|
|
26547
26560
|
|
|
26548
26561
|
// close the meta tag
|
|
@@ -29742,6 +29755,7 @@ define('options',[
|
|
|
29742
29755
|
visible: 'inherit',
|
|
29743
29756
|
fixed: true,
|
|
29744
29757
|
scalable: false,
|
|
29758
|
+
tabindex: null,
|
|
29745
29759
|
name: '',
|
|
29746
29760
|
strokeWidth: 1,
|
|
29747
29761
|
strokeColor: '#000000',
|
|
@@ -29791,6 +29805,7 @@ define('options',[
|
|
|
29791
29805
|
strokeWidth: 3,
|
|
29792
29806
|
visible: 'inherit',
|
|
29793
29807
|
fixed: true,
|
|
29808
|
+
tabindex: null,
|
|
29794
29809
|
name: '',
|
|
29795
29810
|
strokeColor: '#000000',
|
|
29796
29811
|
highlightStrokeColor: '#888888'
|
|
@@ -32720,8 +32735,11 @@ define('renderer/abstract',[
|
|
|
32720
32735
|
|
|
32721
32736
|
setTabindex: function(element) {
|
|
32722
32737
|
var val;
|
|
32723
|
-
if (Type.exists(element.rendNode)) {
|
|
32738
|
+
if (element.board.attr.keyboard.enabled && Type.exists(element.rendNode)) {
|
|
32724
32739
|
val = Type.evaluate(element.visProp.tabindex);
|
|
32740
|
+
if (!element.visPropCalc.visible || Type.evaluate(element.visProp.fixed)) {
|
|
32741
|
+
val = null;
|
|
32742
|
+
}
|
|
32725
32743
|
if (val !== element.visPropOld.tabindex) {
|
|
32726
32744
|
element.rendNode.setAttribute('tabindex', val);
|
|
32727
32745
|
element.visPropOld.tabindex = val;
|
|
@@ -34253,7 +34271,7 @@ define('base/element',[
|
|
|
34253
34271
|
|
|
34254
34272
|
/**
|
|
34255
34273
|
* Inherits contains the subelements, which may have an attribute
|
|
34256
|
-
* (in
|
|
34274
|
+
* (in particular the attribute "visible") having value 'inherit'.
|
|
34257
34275
|
* @type Object
|
|
34258
34276
|
*/
|
|
34259
34277
|
this.inherits = [];
|
|
@@ -39664,6 +39682,12 @@ define('parser/jessiecode',[
|
|
|
39664
39682
|
*/
|
|
39665
39683
|
this.builtIn = this.defineBuiltIn();
|
|
39666
39684
|
|
|
39685
|
+
/**
|
|
39686
|
+
* List of all possible operands in JessieCode (except of JSXGraph objects).
|
|
39687
|
+
* @type Object
|
|
39688
|
+
*/
|
|
39689
|
+
this.operands = this.getPossibleOperands();
|
|
39690
|
+
|
|
39667
39691
|
/**
|
|
39668
39692
|
* The board which currently is used to create and look up elements.
|
|
39669
39693
|
* @type JXG.Board
|
|
@@ -41956,6 +41980,103 @@ define('parser/jessiecode',[
|
|
|
41956
41980
|
return builtIn;
|
|
41957
41981
|
},
|
|
41958
41982
|
|
|
41983
|
+
/**
|
|
41984
|
+
* Returns information about the possible functions and constants.
|
|
41985
|
+
* @returns {Object}
|
|
41986
|
+
*/
|
|
41987
|
+
getPossibleOperands: function () {
|
|
41988
|
+
var FORBIDDEN = ['E'],
|
|
41989
|
+
jessiecode = this.defineBuiltIn(),
|
|
41990
|
+
math = Math,
|
|
41991
|
+
jc, ma, merge,
|
|
41992
|
+
i, j, p, len, e,
|
|
41993
|
+
funcs, funcsJC, consts, operands,
|
|
41994
|
+
sort, pack;
|
|
41995
|
+
|
|
41996
|
+
sort = function (a, b) {
|
|
41997
|
+
return a.toLowerCase().localeCompare(b.toLowerCase());
|
|
41998
|
+
};
|
|
41999
|
+
|
|
42000
|
+
pack = function (name, origin) {
|
|
42001
|
+
var that = null;
|
|
42002
|
+
|
|
42003
|
+
if (origin === 'jc') that = jessiecode[name];
|
|
42004
|
+
else if (origin === 'Math') that = math[name];
|
|
42005
|
+
else return;
|
|
42006
|
+
|
|
42007
|
+
if (FORBIDDEN.includes(name)) {
|
|
42008
|
+
return;
|
|
42009
|
+
} else if (JXG.isFunction(that)) {
|
|
42010
|
+
return {
|
|
42011
|
+
name: name,
|
|
42012
|
+
type: 'function',
|
|
42013
|
+
numParams: that.length,
|
|
42014
|
+
origin: origin,
|
|
42015
|
+
};
|
|
42016
|
+
} else if (JXG.isNumber(that)) {
|
|
42017
|
+
return {
|
|
42018
|
+
name: name,
|
|
42019
|
+
type: 'constant',
|
|
42020
|
+
value: that,
|
|
42021
|
+
origin: origin,
|
|
42022
|
+
};
|
|
42023
|
+
} else if (that !== undefined) {
|
|
42024
|
+
console.error('undefined type', that);
|
|
42025
|
+
}
|
|
42026
|
+
};
|
|
42027
|
+
|
|
42028
|
+
jc = Object.getOwnPropertyNames(jessiecode).sort(sort);
|
|
42029
|
+
ma = Object.getOwnPropertyNames(math).sort(sort);
|
|
42030
|
+
merge = [];
|
|
42031
|
+
i = 0;
|
|
42032
|
+
j = 0;
|
|
42033
|
+
|
|
42034
|
+
while (i < jc.length || j < ma.length) {
|
|
42035
|
+
if (jc[i] === ma[j]) {
|
|
42036
|
+
p = pack(ma[j], 'Math');
|
|
42037
|
+
if (JXG.exists(p)) merge.push(p);
|
|
42038
|
+
i++;
|
|
42039
|
+
j++;
|
|
42040
|
+
} else if (!JXG.exists(ma[j]) || jc[i].toLowerCase().localeCompare(ma[j].toLowerCase()) < 0) {
|
|
42041
|
+
p = pack(jc[i], 'jc');
|
|
42042
|
+
if (JXG.exists(p)) merge.push(p);
|
|
42043
|
+
i++;
|
|
42044
|
+
} else {
|
|
42045
|
+
p = pack(ma[j], 'Math');
|
|
42046
|
+
if (JXG.exists(p)) merge.push(p);
|
|
42047
|
+
j++;
|
|
42048
|
+
}
|
|
42049
|
+
}
|
|
42050
|
+
|
|
42051
|
+
funcs = [];
|
|
42052
|
+
funcsJC = [];
|
|
42053
|
+
consts = [];
|
|
42054
|
+
operands = {};
|
|
42055
|
+
len = merge.length;
|
|
42056
|
+
for (i = 0; i < len; i++) {
|
|
42057
|
+
e = merge[i];
|
|
42058
|
+
switch (e.type) {
|
|
42059
|
+
case 'function':
|
|
42060
|
+
funcs.push(e.name);
|
|
42061
|
+
if (e.origin === 'jc')
|
|
42062
|
+
funcsJC.push(e.name);
|
|
42063
|
+
break;
|
|
42064
|
+
case 'constant':
|
|
42065
|
+
consts.push(e.name);
|
|
42066
|
+
break;
|
|
42067
|
+
}
|
|
42068
|
+
operands[e.name] = e;
|
|
42069
|
+
}
|
|
42070
|
+
|
|
42071
|
+
return {
|
|
42072
|
+
all: operands,
|
|
42073
|
+
list: merge,
|
|
42074
|
+
functions: funcs,
|
|
42075
|
+
functions_jessiecode: funcsJC,
|
|
42076
|
+
constants: consts,
|
|
42077
|
+
};
|
|
42078
|
+
},
|
|
42079
|
+
|
|
41959
42080
|
/**
|
|
41960
42081
|
* Output a debugging message. Uses debug console, if available. Otherwise an HTML element with the
|
|
41961
42082
|
* id "debug" and an innerHTML property is used.
|
|
@@ -44888,7 +45009,7 @@ define('base/board',[
|
|
|
44888
45009
|
},
|
|
44889
45010
|
|
|
44890
45011
|
addKeyboardEventHandlers: function() {
|
|
44891
|
-
if (!this.hasKeyboardHandlers && Env.isBrowser) {
|
|
45012
|
+
if (this.attr.keyboard.enabled && !this.hasKeyboardHandlers && Env.isBrowser) {
|
|
44892
45013
|
Env.addEvent(this.containerObj, 'keydown', this.keyDownListener, this);
|
|
44893
45014
|
Env.addEvent(this.containerObj, 'focusin', this.keyFocusInListener, this);
|
|
44894
45015
|
Env.addEvent(this.containerObj, 'focusout', this.keyFocusOutListener, this);
|
|
@@ -45815,7 +45936,7 @@ define('base/board',[
|
|
|
45815
45936
|
obj.type === Const.OBJECT_TYPE_TICKS ||
|
|
45816
45937
|
obj.type === Const.OBJECT_TYPE_IMAGE) {
|
|
45817
45938
|
// It's a point, so it's single touch, so we just push it to our touches
|
|
45818
|
-
targets = [
|
|
45939
|
+
targets = [target];
|
|
45819
45940
|
|
|
45820
45941
|
// For the UNDO/REDO of object moves
|
|
45821
45942
|
this.saveStartPos(obj, targets[0]);
|
|
@@ -46360,6 +46481,7 @@ define('base/board',[
|
|
|
46360
46481
|
dx = Type.evaluate(this.attr.keyboard.dx) / this.unitX,
|
|
46361
46482
|
dy = Type.evaluate(this.attr.keyboard.dy) / this.unitY,
|
|
46362
46483
|
doZoom = false,
|
|
46484
|
+
done = true,
|
|
46363
46485
|
dir, actPos;
|
|
46364
46486
|
|
|
46365
46487
|
if (!this.attr.keyboard.enabled || id_node === '') {
|
|
@@ -46388,6 +46510,8 @@ define('base/board',[
|
|
|
46388
46510
|
this.clickLeftArrow();
|
|
46389
46511
|
} else if (evt.keyCode === 39) { // right
|
|
46390
46512
|
this.clickRightArrow();
|
|
46513
|
+
} else {
|
|
46514
|
+
done = false;
|
|
46391
46515
|
}
|
|
46392
46516
|
} else {
|
|
46393
46517
|
// Adapt dx, dy to snapToGrid and attractToGrid
|
|
@@ -46440,7 +46564,10 @@ define('base/board',[
|
|
|
46440
46564
|
this.zoomOut();
|
|
46441
46565
|
} else if (doZoom && evt.key === 'o') { // o
|
|
46442
46566
|
this.zoom100();
|
|
46567
|
+
} else {
|
|
46568
|
+
done = false;
|
|
46443
46569
|
}
|
|
46570
|
+
|
|
46444
46571
|
if (dir && el.isDraggable &&
|
|
46445
46572
|
el.visPropCalc.visible &&
|
|
46446
46573
|
((this.geonextCompatibilityMode &&
|
|
@@ -46466,6 +46593,9 @@ define('base/board',[
|
|
|
46466
46593
|
|
|
46467
46594
|
this.update();
|
|
46468
46595
|
|
|
46596
|
+
if (done) {
|
|
46597
|
+
evt.preventDefault();
|
|
46598
|
+
}
|
|
46469
46599
|
return true;
|
|
46470
46600
|
},
|
|
46471
46601
|
|
|
@@ -48064,6 +48194,7 @@ define('base/board',[
|
|
|
48064
48194
|
for (i = 0; i < parents.length; i++) {
|
|
48065
48195
|
if (Type.isString(parents[i]) &&
|
|
48066
48196
|
!(elementType === 'text' && i === 2) &&
|
|
48197
|
+
!(elementType === 'solidofrevolution3d' && i === 2) &&
|
|
48067
48198
|
!((elementType === 'input' || elementType === 'checkbox' || elementType === 'button') &&
|
|
48068
48199
|
(i === 2 || i === 3)) &&
|
|
48069
48200
|
!(elementType === 'curve' && i > 0) // Allow curve plots with jessiecode
|
|
@@ -55395,6 +55526,7 @@ define('base/point',[
|
|
|
55395
55526
|
this.board.renderer.drawPoint(this);
|
|
55396
55527
|
this.board.finalizeAdding(this);
|
|
55397
55528
|
|
|
55529
|
+
this.createGradient();
|
|
55398
55530
|
this.createLabel();
|
|
55399
55531
|
|
|
55400
55532
|
};
|
|
@@ -75831,12 +75963,13 @@ define('base/ticks',[
|
|
|
75831
75963
|
* @private
|
|
75832
75964
|
*/
|
|
75833
75965
|
formatLabelText: function(value) {
|
|
75834
|
-
var labelText
|
|
75966
|
+
var labelText,
|
|
75835
75967
|
digits,
|
|
75836
75968
|
ev_s = Type.evaluate(this.visProp.scalesymbol);
|
|
75837
75969
|
|
|
75838
75970
|
// if value is Number
|
|
75839
75971
|
if (Type.isNumber(value)) {
|
|
75972
|
+
labelText = (Math.round(value * 1.e13) / 1.e13).toString();
|
|
75840
75973
|
if (labelText.length > Type.evaluate(this.visProp.maxlabellength) ||
|
|
75841
75974
|
labelText.indexOf('e') !== -1) {
|
|
75842
75975
|
|
|
@@ -75845,7 +75978,9 @@ define('base/ticks',[
|
|
|
75845
75978
|
// Use the deprecated attribute "precision"
|
|
75846
75979
|
digits = Type.evaluate(this.visProp.precision);
|
|
75847
75980
|
}
|
|
75848
|
-
|
|
75981
|
+
|
|
75982
|
+
//labelText = value.toPrecision(digits).toString();
|
|
75983
|
+
labelText = value.toExponential(digits).toString();
|
|
75849
75984
|
}
|
|
75850
75985
|
|
|
75851
75986
|
if (Type.evaluate(this.visProp.beautifulscientificticklabels)) {
|
|
@@ -75858,6 +75993,8 @@ define('base/ticks',[
|
|
|
75858
75993
|
// trim trailing .
|
|
75859
75994
|
labelText = labelText.replace(/\.$/, '');
|
|
75860
75995
|
}
|
|
75996
|
+
} else {
|
|
75997
|
+
labelText = value.toString();
|
|
75861
75998
|
}
|
|
75862
75999
|
|
|
75863
76000
|
if (ev_s.length > 0) {
|
package/distrib/sketch.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
JSXGraph 1.4.
|
|
2
|
+
JSXGraph 1.4.2
|
|
3
3
|
|
|
4
4
|
Copyright 2008-2022
|
|
5
5
|
Matthias Ehmann,
|
|
@@ -58,4 +58,4 @@
|
|
|
58
58
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
59
59
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
60
60
|
*/
|
|
61
|
-
!function(){"use strict";JXG.SketchReader=function(s,e){this.read=function(){var r,i,t,o,a,d;if(o=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(e)).unzip(),!JXG.exists(o[0]))return"";for(o=JXG.Util.UTF8.decode(o[0][0]),a=(d=jQuery.parseJSON(o)).pop(),i=JXG.exists(a.unredo)?a.unredo:d.length-1,r=0;r<=i;r++)if(0!==d[r].type){try{t=d[r].type>50?JXG.SketchReader.generateJCodeMeta(d[r],s):JXG.SketchReader.generateJCode(d[r],s,d)}catch(s){JXG.debug("#steps: "+d.length),JXG.debug("step: "+r+", type: "+d[r].type),JXG.debug(d[r])}s.jc.parse(t[0],!0)}return t=a.boundingBox,s.jc.parse("$board.setView("+JSON.stringify(t)+");"),""}},JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:!1,useGlider:!1,useSymbols:!1},generateJCode:function(s,e,r){var i,t,o,a,d,n,_,p,g,l,c,u,m,b,G,f,J,X,v,h,O,y,C,E=[],T="",P="",k="",N="",L=function(s){return J.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,J.toFixed)):s},I=function(s){return J.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:p[s]};if(J=JXG.SketchReader.generator,p=e.objects,X="",v="id: '"+s.dest_id+"', ",JXG.exists(e)&&J.useSymbols&&s.type!==JXG.GENTYPE_ABLATION)for(v="",X=s.dest_id+" = ",i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(I(s.src_ids[i]),0)).length>0&&(s.src_ids[i]=d[0]);if(s.type>50)return JXG.SketchReader.generateJCodeMeta(s,e);switch(s.type){case JXG.GENTYPE_TRUNCATE:T="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:T=s.args.code;break;case JXG.GENTYPE_AXIS:T=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",T+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",T+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],T+=" = point("+s.args.coords[1].usrCoords[1]+", ",T+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",T+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],T+=" = point("+s.args.coords[2].usrCoords[1]+", ",T+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",T+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",T+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",T+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",T+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [10, 0], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.dest_sub_ids[3]+".visible = false; ",T+=s.dest_sub_ids[4]+".visible = false; ",P="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],P+="); remove("+s.dest_sub_ids[2]+"); ",P+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:T=X+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); ");P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', id: "'+s.dest_id+'"',T+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); "+P);P+="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],T="point("+L(s.args.usrCoords[1])+","+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; "+a+".glide(",T+=s.src_ids[0]+"); ",P="remove("+a+"); "):a=s.src_ids[0],T+=X+"tangent("+a+") <<"+v+"point1: <<name: '",T+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",T+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",P="remove("+s.dest_sub_ids[0]+"); "+P,P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+P;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"parallel("+s.src_ids[0]+", "+a+") <<"+v+"name: '', point: <<id: '",T+=s.dest_sub_ids[0]+"', name: ''>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_BISECTORLINES:T=(T="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],T+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],T+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],T+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",T+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",T+="'>>>>>>; ",P="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:T="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",T+="<<id: '"+s.dest_id+"'>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(T="",P="",g=s.dest_sub_ids[1],l=s.dest_sub_ids[2],J.useGlider?(T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[0]+")",T+="<<id: '"+g+"', name:'', withLabel:false, priv:true, visible:false >>; ",T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[1]+")",T+="<<id: '"+l+"', name:'', withLabel:false, priv:true, visible:false >>; "):(T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+g+"', ",T+="name:'', withLabel:false, priv:true, visible:false >>; ",T+=g+".glide("+s.src_ids[0]+"); ",T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+l+"', ",T+="name:'', priv:true, visible:false >>; ",T+=l+".glide("+s.src_ids[1]+"); "),P+="remove("+g+"); ",P+="remove("+l+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],T+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",T+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",T+="name:'', priv:true, visible:false >>; ",P+="remove("+c+"); "):c=s.src_ids[2],T+=X+"bisector("+g+", "+c+", "+l+") ",T+="<<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>> >>;",P+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(T=X+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],T+=") <<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>>>>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");");break;case JXG.GENTYPE_NORMAL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"normal("+a+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_PERPSEGMENT:T+=X+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_POINT:T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:J.useGlider?(T=X+"glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=", "+s.src_ids[0]+")",T+=(J.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'",T+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",T+=", snapToGrid: false, snapToPoints: false",T+=">>; "+s.dest_id,T+=".glide("+s.src_ids[0]+"); "),T+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:T=X+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,T+=") <<"+v+" fillColor: '"+JXG.Options.intersection.fillColor+"'",T+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",T+=">>; ",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,Y;if(T="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)P=s.dest_id+".free(); "+s.dest_id,P+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,P+=".strokeColor = '"+s.args.strokeColor+"'; ",P+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",P+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",P+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",P+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",P+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",Y=(x=e.objects[s.dest_id]).slideObject.id,P+=X+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",P+="<<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",P+=s.dest_id+".glide("+Y+"); ";break;case JXG.GENTYPE_COMBINED:for(T=P="",i=0;i<s.args.steps.length;i++)T+=(G=this.generateJCode(s.args.steps[i],e,r))[0],P=G[2]+P;break;case JXG.GENTYPE_CIRCLE:var R="name: '', withLabel: true,";s.args.withName&&(R="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?T+="point("+L(s.args.x)+", "+L(s.args.y)+") ":T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.r)+") <<"+v:T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.radius)+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(T="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],T+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+R,T+=" visible: true>>, "+v+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(T="point("+L(s.args.x1)+", "+L(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+="point("+L(s.args.x2)+", "+L(s.args.y2)+") <<id: '",T+=s.dest_sub_ids[1]+"'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); "):s.args.create_point?(T="point("+L(s.args.x)+", "+L(s.args.y)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T=X+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_LINE:if(o=0,t=0,s.args.create_point1){for(g=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+g+"); "}else g=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;if(d="line",n="",_=g+", "+l,s.args.create_point1&&s.args.create_point2&&J.freeLine){for(T="",P="",2===s.args.p1.length&&s.args.p1.unshift(1),2===s.args.p2.length&&s.args.p2.unshift(1),_=JXG.Math.crossProduct(s.args.p1,s.args.p2),i=0;i<_.length;i++)_[i]=L(_[i]);_=_.join(", ")}s.args.first||s.args.last?(s.args.first||(n="straightFirst: "+s.args.first),s.args.last||(n="straightLast: "+s.args.last),n.length>0&&!J.useSymbols&&(n+=", ")):d="segment",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_VECTOR:if(o=0,t=0,s.args.create_point1){for(g=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: true, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+g+"); "}else g=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: true, ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;n="",_=g+", "+l,d="arrow",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(T+=", "),T+=s.dest_sub_ids[i]);T+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",T+=", names: ['', '', '']",T+=">>, "+v+" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");T+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],T+="', '",T+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",T+=", names: ['', '', '', '']",T+=">>, "+v,T+=" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.substr(0,1)&&'"'!==s.args.str.substr(0,1)&&"function"!==s.args.str.substr(0,8)&&(s.args.str="'"+s.args.str+"'"),T=X+"text("+L(s.args.x)+", "+L(s.args.y)+", "+s.args.str+") <<",T+=v+"name: ''",void 0!==s.args.anchor&&(T+=", anchor: "+s.args.anchor),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:T=X+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",T+=v+"name: '', precision: "+JXG.Options.trunclen+", point1: <<id: '"+s.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, point2: <<id: '"+s.dest_sub_ids[1]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(s.args.create_point)for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");if(s.dest_sub_ids)for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i!==s.src_ids.length-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=0;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(h=s.args.num_vertices,T="",P="",i=0;i<h;++i)T+=X+"point("+L(s.args.points[i][1])+", "+L(s.args.points[i][2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P+="remove("+s.dest_sub_ids[i]+"); ";for(T+=X+"polygon(",i=0;i<h;++i)T+=s.dest_sub_ids[i],i!==h-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=h;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=h;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(T=X+"regularpolygon("+s.src_ids.join(", ")+", ",T+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)T+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(T+=", "),P="remove("+s.dest_sub_ids[i]+"); "+P;for(T+="]",T+=", names: [",i=0;i<s.args.corners;i++)T+="''",i<s.args.corners-1&&(T+=", ");for(T+="]",T+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)T+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(T+=", "),P="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+P;T+=" ]",T+=", name: ''",T+=">>, "+v,T+=" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_SECTOR:T=X+"sector("+s.src_ids.join(", ")+") ",T+="<<",T+=v+" name: '', fillOpacity: "+JXG.Options.opacityLevel,T+=", arc: <<id: '"+s.dest_sub_ids[0]+"', priv: true>> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:T=X+"angle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?T+=", radius: "+s.args.radius:T+=", radius: '"+s.args.radius+"'"),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:T=X+"nonreflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:T=X+"reflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:T=X+"slopetriangle("+s.src_ids.join(", ")+") <<",T+=v+" name: '',",T+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",T+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",T+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",T+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",T+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(T+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),T+=">>;",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:T=X+s.args.plot_type+"("+s.args.func,(isNaN(s.args.a)||null===s.args.a||void 0===s.args.a)&&(s.args.a="-infinity"),(isNaN(s.args.b)||null===s.args.b||void 0===s.args.b)&&(s.args.b="infinity"),s.args.a!=s.args.b&&(T+=", "+s.args.a+", "+s.args.b),T+=") <<",s.args.isPolar&&(T+="curveType: 'polar', "),T+=v+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(h=s.args.points.length,T=X+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?T+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),y=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),y=s.args.points[i][1].toPrecision(4)),T+="["+O+","+y+"]"),i<h-1&&(T+=",");T+="], "+s.args.tau+", "+s.args.type,T+=") <<",T+=v+"name: '', withLabel: false, ",T+="fixed: false, ",s.args.createPoints||(T+="createPoints: false, "),T+="isArrayOfCoordinates: true, ",T+="strokeWidth: "+s.args.strokeWidth+", ",T+="strokeColor: '"+s.args.strokeColor+"' >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:T=X+"derivative("+s.src_ids+")",T+=" <<",T+="dash: 2",T+=" >>;";break;case JXG.GENTYPE_SLIDER:T=X+"slider(["+L(s.args.x1)+", "+L(s.args.y1)+"], ["+L(s.args.x2),T+=", "+L(s.args.y2)+"], ["+L(s.args.start)+", "+L(s.args.ini)+", ",T+=L(s.args.end)+"]) <<"+v,T+=" snapWidth: 0.1, ",T+="baseline: <<id: '",T+=s.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '",T+=s.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '",T+=s.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '",T+=s.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '",T+=s.dest_sub_ids[4]+"', name: '', priv: true>>",T+=", name: '"+s.args.name+"'>>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(G=[],k=[],N=[],i=0;i<s.args.steps.length;i++)(G=r[s.args.steps[i]].type>50?this.generateJCodeMeta(r[s.args.steps[i]],e):this.generateJCode(r[s.args.steps[i]],e,r)).length>=3&&""!==JXG.trim(G[2])&&(T=G[2]+T),G.length>=4&&JXG.isFunction(G[3])&&k.unshift(G[3]),G.length>=1&&""!==JXG.trim(G[0])&&(P+=G[0]),G.length>=2&&JXG.isFunction(G[1])&&N.push(G[1]);break;case JXG.GENTYPE_COPY:for(b in E=[],s.args.steps)if(s.args.steps.hasOwnProperty(b)){if((f=JXG.deepCopy(r[s.args.steps[b]])).type===JXG.GENTYPE_COPY){for(i=0;i<f.args.map.length;i++)for(t=0;t<s.args.map.length;t++)f.args.map[i].copy===s.args.map[t].orig&&(f.args.map[i].copy=s.args.map[t].copy);f=JXG.SketchReader.replaceStepDestIds(f,f.args.map)}else f=JXG.SketchReader.replaceStepDestIds(f,s.args.map);E.push(f)}for(i=0;i<E.length;i++)G=E[i].type>50?this.generateJCodeMeta(E[i],e):this.generateJCode(E[i],e,r),""!==JXG.trim(G[0])&&(T+=G[0]),JXG.isFunction(G[1])&&k.push(G[1]),""!==JXG.trim(G[2])&&(P=G[2]+P),JXG.isFunction(G[3])&&N.unshift(G[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)I(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(T+=s.args.map[i].copy,T+=".X = function() { return ("+s.args.map[i].orig+".X() - ",T+=L(s.args.x)+"); }; ",T+=s.args.map[i].copy,T+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",T+=L(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)u=I(s.args.free_points[i].orig).coords.usrCoords[1],m=I(s.args.free_points[i].orig).coords.usrCoords[2],T+=s.args.free_points[i].copy+".X = function() { return ",T+=L(u-s.args.x)+"; }; ",T+=s.args.free_points[i].copy+".Y = function() { return ",T+=L(m-s.args.y)+"; }; ",T+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=I(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(T+=s.args.map[t].copy+".setRadius(function () { return ",T+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],T+="', fillOpacity: "+JXG.Options.opacityLevel,T+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",1===s.args.fids.length?s.args.func=s.args.fids[0]+".radius()":s.args.func="dist("+s.args.fids[0]+", "+s.args.fids[1]+")",T+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],T+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",T+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],T+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); remove("+s.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(s.args.obj_type===JXG.OBJECT_TYPE_LINE||s.args.obj_type===JXG.OBJECT_TYPE_VECTOR)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[0])+", ",T+=L(s.args.coords[0].usrCoords[1])+", "+L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",P+=s.args.ystart[0]+"]); ",T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[0])+", ",T+=L(s.args.coords[1].usrCoords[1])+", "+L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",P+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[1])+", ",T+=L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,P+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(T=P="",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i]+".move(["+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+"]); ",P+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],P+="]); ";else JXG.exists(s.args.coords[0])&&(T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[T,k,P,N]},replaceStepDestIds:function(s,e){var r,i,t=[];for(r=0;r<e.length;r++){for(t.push(e[r].copy),s.dest_id===e[r].orig&&(s.dest_id=e[r].copy),i=0;i<s.dest_sub_ids.length;i++)s.dest_sub_ids[i]===e[r].orig&&(s.dest_sub_ids[i]=e[r].copy);for(i=0;i<s.src_ids.length;i++)s.src_ids[i]===e[r].orig&&(s.src_ids[i]=e[r].copy)}for(i=0;i<s.dest_sub_ids.length;i++)JXG.isInArray(t,s.dest_sub_ids[i])||(s.dest_sub_ids[i]=this.id());return s.src_ids=JXG.uniqueArray(s.src_ids),s.dest_sub_ids=JXG.uniqueArray(s.dest_sub_ids),s}}),JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])}();
|
|
61
|
+
!function(){"use strict";JXG.SketchReader=function(s,e){this.read=function(){var r,i,t,o,a,d;if(o=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(e)).unzip(),!JXG.exists(o[0]))return"";for(o=JXG.Util.UTF8.decode(o[0][0]),a=(d=jQuery.parseJSON(o)).pop(),i=JXG.exists(a.unredo)?a.unredo:d.length-1,r=0;r<=i;r++)if(0!==d[r].type){try{t=d[r].type>50?JXG.SketchReader.generateJCodeMeta(d[r],s):JXG.SketchReader.generateJCode(d[r],s,d)}catch(s){JXG.debug("#steps: "+d.length),JXG.debug("step: "+r+", type: "+d[r].type),JXG.debug(d[r])}s.jc.parse(t[0],!0)}return t=a.boundingBox,s.jc.parse("$board.setView("+JSON.stringify(t)+");"),""}},JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:!1,useGlider:!1,useSymbols:!1},generateJCode:function(s,e,r){var i,t,o,a,d,n,_,g,p,l,c,u,m,b,G,f,J,X,v,h,O,y,C,E=[],T="",P="",k="",N="",L=function(s){return J.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,J.toFixed)):s},I=function(s){return J.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:g[s]};if(J=JXG.SketchReader.generator,g=e.objects,X="",v="id: '"+s.dest_id+"', ",JXG.exists(e)&&J.useSymbols&&s.type!==JXG.GENTYPE_ABLATION)for(v="",X=s.dest_id+" = ",i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(I(s.src_ids[i]),0)).length>0&&(s.src_ids[i]=d[0]);if(s.type>50)return JXG.SketchReader.generateJCodeMeta(s,e);switch(s.type){case JXG.GENTYPE_TRUNCATE:T="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:T=s.args.code;break;case JXG.GENTYPE_AXIS:T=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",T+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",T+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],T+=" = point("+s.args.coords[1].usrCoords[1]+", ",T+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",T+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],T+=" = point("+s.args.coords[2].usrCoords[1]+", ",T+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",T+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",T+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",T+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",T+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [10, 0], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.dest_sub_ids[3]+".visible = false; ",T+=s.dest_sub_ids[4]+".visible = false; ",P="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],P+="); remove("+s.dest_sub_ids[2]+"); ",P+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:T=X+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); ");P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', id: "'+s.dest_id+'"',T+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); "+P);P+="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],T="point("+L(s.args.usrCoords[1])+","+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; "+a+".glide(",T+=s.src_ids[0]+"); ",P="remove("+a+"); "):a=s.src_ids[0],T+=X+"tangent("+a+") <<"+v+"point1: <<name: '",T+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",T+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",P="remove("+s.dest_sub_ids[0]+"); "+P,P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+P;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"parallel("+s.src_ids[0]+", "+a+") <<"+v+"name: '', point: <<id: '",T+=s.dest_sub_ids[0]+"', name: ''>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_BISECTORLINES:T=(T="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],T+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],T+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],T+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",T+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",T+="'>>>>>>; ",P="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:T="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",T+="<<id: '"+s.dest_id+"'>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(T="",P="",p=s.dest_sub_ids[1],l=s.dest_sub_ids[2],J.useGlider?(T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[0]+")",T+="<<id: '"+p+"', name:'', withLabel:false, priv:true, visible:false >>; ",T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[1]+")",T+="<<id: '"+l+"', name:'', withLabel:false, priv:true, visible:false >>; "):(T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+p+"', ",T+="name:'', withLabel:false, priv:true, visible:false >>; ",T+=p+".glide("+s.src_ids[0]+"); ",T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+l+"', ",T+="name:'', priv:true, visible:false >>; ",T+=l+".glide("+s.src_ids[1]+"); "),P+="remove("+p+"); ",P+="remove("+l+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],T+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",T+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",T+="name:'', priv:true, visible:false >>; ",P+="remove("+c+"); "):c=s.src_ids[2],T+=X+"bisector("+p+", "+c+", "+l+") ",T+="<<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>> >>;",P+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(T=X+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],T+=") <<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>>>>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");");break;case JXG.GENTYPE_NORMAL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"normal("+a+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_PERPSEGMENT:T+=X+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_POINT:T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:J.useGlider?(T=X+"glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=", "+s.src_ids[0]+")",T+=(J.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'",T+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",T+=", snapToGrid: false, snapToPoints: false",T+=">>; "+s.dest_id,T+=".glide("+s.src_ids[0]+"); "),T+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:T=X+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,T+=") <<"+v+" fillColor: '"+JXG.Options.intersection.fillColor+"'",T+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",T+=">>; ",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,Y;if(T="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)P=s.dest_id+".free(); "+s.dest_id,P+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,P+=".strokeColor = '"+s.args.strokeColor+"'; ",P+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",P+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",P+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",P+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",P+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",Y=(x=e.objects[s.dest_id]).slideObject.id,P+=X+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",P+="<<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",P+=s.dest_id+".glide("+Y+"); ";break;case JXG.GENTYPE_COMBINED:for(T=P="",i=0;i<s.args.steps.length;i++)T+=(G=this.generateJCode(s.args.steps[i],e,r))[0],P=G[2]+P;break;case JXG.GENTYPE_CIRCLE:var R="name: '', withLabel: true,";s.args.withName&&(R="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?T+="point("+L(s.args.x)+", "+L(s.args.y)+") ":T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.r)+") <<"+v:T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.radius)+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(T="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],T+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+R,T+=" visible: true>>, "+v+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(T="point("+L(s.args.x1)+", "+L(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+="point("+L(s.args.x2)+", "+L(s.args.y2)+") <<id: '",T+=s.dest_sub_ids[1]+"'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); "):s.args.create_point?(T="point("+L(s.args.x)+", "+L(s.args.y)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T=X+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_LINE:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;if(d="line",n="",_=p+", "+l,s.args.create_point1&&s.args.create_point2&&J.freeLine){for(T="",P="",2===s.args.p1.length&&s.args.p1.unshift(1),2===s.args.p2.length&&s.args.p2.unshift(1),_=JXG.Math.crossProduct(s.args.p1,s.args.p2),i=0;i<_.length;i++)_[i]=L(_[i]);_=_.join(", ")}s.args.first||s.args.last?(s.args.first||(n="straightFirst: "+s.args.first),s.args.last||(n="straightLast: "+s.args.last),n.length>0&&!J.useSymbols&&(n+=", ")):d="segment",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_VECTOR:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: true, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: true, ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;n="",_=p+", "+l,d="arrow",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(T+=", "),T+=s.dest_sub_ids[i]);T+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",T+=", names: ['', '', '']",T+=">>, "+v+" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");T+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],T+="', '",T+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",T+=", names: ['', '', '', '']",T+=">>, "+v,T+=" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.substr(0,1)&&'"'!==s.args.str.substr(0,1)&&"function"!==s.args.str.substr(0,8)&&(s.args.str="'"+s.args.str+"'"),T=X+"text("+L(s.args.x)+", "+L(s.args.y)+", "+s.args.str+") <<",T+=v+"name: ''",void 0!==s.args.anchor&&(T+=", anchor: "+s.args.anchor),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:T=X+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",T+=v+"name: '', precision: "+JXG.Options.trunclen+", point1: <<id: '"+s.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, point2: <<id: '"+s.dest_sub_ids[1]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(s.args.create_point)for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");if(s.dest_sub_ids)for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i!==s.src_ids.length-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=0;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(h=s.args.num_vertices,T="",P="",i=0;i<h;++i)T+=X+"point("+L(s.args.points[i][1])+", "+L(s.args.points[i][2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P+="remove("+s.dest_sub_ids[i]+"); ";for(T+=X+"polygon(",i=0;i<h;++i)T+=s.dest_sub_ids[i],i!==h-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=h;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=h;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(T=X+"regularpolygon("+s.src_ids.join(", ")+", ",T+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)T+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(T+=", "),P="remove("+s.dest_sub_ids[i]+"); "+P;for(T+="]",T+=", names: [",i=0;i<s.args.corners;i++)T+="''",i<s.args.corners-1&&(T+=", ");for(T+="]",T+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)T+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(T+=", "),P="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+P;T+=" ]",T+=", name: ''",T+=">>, "+v,T+=" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_SECTOR:T=X+"sector("+s.src_ids.join(", ")+") ",T+="<<",T+=v+" name: '', fillOpacity: "+JXG.Options.opacityLevel,T+=", arc: <<id: '"+s.dest_sub_ids[0]+"', priv: true>> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:T=X+"angle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?T+=", radius: "+s.args.radius:T+=", radius: '"+s.args.radius+"'"),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:T=X+"nonreflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:T=X+"reflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:T=X+"slopetriangle("+s.src_ids.join(", ")+") <<",T+=v+" name: '',",T+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",T+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",T+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",T+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",T+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(T+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),T+=">>;",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:T=X+s.args.plot_type+"("+s.args.func,(isNaN(s.args.a)||null===s.args.a||void 0===s.args.a||"-infinity"===s.args.a)&&(s.args.a=""),(isNaN(s.args.b)||null===s.args.b||void 0===s.args.b||"infinity"===s.args.b)&&(s.args.b=""),s.args.a!=s.args.b&&(T+=", "+s.args.a+", "+s.args.b),T+=") <<",s.args.isPolar&&(T+="curveType: 'polar', "),T+=v+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(h=s.args.points.length,T=X+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?T+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),y=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),y=s.args.points[i][1].toPrecision(4)),T+="["+O+","+y+"]"),i<h-1&&(T+=",");T+="], "+s.args.tau+", "+s.args.type,T+=") <<",T+=v+"name: '', withLabel: false, ",T+="fixed: false, ",s.args.createPoints||(T+="createPoints: false, "),T+="isArrayOfCoordinates: true, ",T+="strokeWidth: "+s.args.strokeWidth+", ",T+="strokeColor: '"+s.args.strokeColor+"' >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:T=X+"derivative("+s.src_ids+")",T+=" <<",T+="dash: 2",T+=" >>;";break;case JXG.GENTYPE_SLIDER:T=X+"slider(["+L(s.args.x1)+", "+L(s.args.y1)+"], ["+L(s.args.x2),T+=", "+L(s.args.y2)+"], ["+L(s.args.start)+", "+L(s.args.ini)+", ",T+=L(s.args.end)+"]) <<"+v,T+=" snapWidth: 0.1, ",T+="baseline: <<id: '",T+=s.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '",T+=s.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '",T+=s.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '",T+=s.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '",T+=s.dest_sub_ids[4]+"', name: '', priv: true>>",T+=", name: '"+s.args.name+"'>>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(G=[],k=[],N=[],i=0;i<s.args.steps.length;i++)(G=r[s.args.steps[i]].type>50?this.generateJCodeMeta(r[s.args.steps[i]],e):this.generateJCode(r[s.args.steps[i]],e,r)).length>=3&&""!==JXG.trim(G[2])&&(T=G[2]+T),G.length>=4&&JXG.isFunction(G[3])&&k.unshift(G[3]),G.length>=1&&""!==JXG.trim(G[0])&&(P+=G[0]),G.length>=2&&JXG.isFunction(G[1])&&N.push(G[1]);break;case JXG.GENTYPE_COPY:for(b in E=[],s.args.steps)if(s.args.steps.hasOwnProperty(b)){if((f=JXG.deepCopy(r[s.args.steps[b]])).type===JXG.GENTYPE_COPY){for(i=0;i<f.args.map.length;i++)for(t=0;t<s.args.map.length;t++)f.args.map[i].copy===s.args.map[t].orig&&(f.args.map[i].copy=s.args.map[t].copy);f=JXG.SketchReader.replaceStepDestIds(f,f.args.map)}else f=JXG.SketchReader.replaceStepDestIds(f,s.args.map);E.push(f)}for(i=0;i<E.length;i++)G=E[i].type>50?this.generateJCodeMeta(E[i],e):this.generateJCode(E[i],e,r),""!==JXG.trim(G[0])&&(T+=G[0]),JXG.isFunction(G[1])&&k.push(G[1]),""!==JXG.trim(G[2])&&(P=G[2]+P),JXG.isFunction(G[3])&&N.unshift(G[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)I(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(T+=s.args.map[i].copy,T+=".X = function() { return ("+s.args.map[i].orig+".X() - ",T+=L(s.args.x)+"); }; ",T+=s.args.map[i].copy,T+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",T+=L(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)u=I(s.args.free_points[i].orig).coords.usrCoords[1],m=I(s.args.free_points[i].orig).coords.usrCoords[2],T+=s.args.free_points[i].copy+".X = function() { return ",T+=L(u-s.args.x)+"; }; ",T+=s.args.free_points[i].copy+".Y = function() { return ",T+=L(m-s.args.y)+"; }; ",T+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=I(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(T+=s.args.map[t].copy+".setRadius(function () { return ",T+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],T+="', fillOpacity: "+JXG.Options.opacityLevel,T+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",1===s.args.fids.length?s.args.func=s.args.fids[0]+".radius()":s.args.func="dist("+s.args.fids[0]+", "+s.args.fids[1]+")",T+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],T+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",T+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],T+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); remove("+s.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(s.args.obj_type===JXG.OBJECT_TYPE_LINE||s.args.obj_type===JXG.OBJECT_TYPE_VECTOR)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[0])+", ",T+=L(s.args.coords[0].usrCoords[1])+", "+L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",P+=s.args.ystart[0]+"]); ",T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[0])+", ",T+=L(s.args.coords[1].usrCoords[1])+", "+L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",P+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[1])+", ",T+=L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,P+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(T=P="",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i]+".move(["+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+"]); ",P+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],P+="]); ";else JXG.exists(s.args.coords[0])&&(T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[T,k,P,N]},replaceStepDestIds:function(s,e){var r,i,t=[];for(r=0;r<e.length;r++){for(t.push(e[r].copy),s.dest_id===e[r].orig&&(s.dest_id=e[r].copy),i=0;i<s.dest_sub_ids.length;i++)s.dest_sub_ids[i]===e[r].orig&&(s.dest_sub_ids[i]=e[r].copy);for(i=0;i<s.src_ids.length;i++)s.src_ids[i]===e[r].orig&&(s.src_ids[i]=e[r].copy)}for(i=0;i<s.dest_sub_ids.length;i++)JXG.isInArray(t,s.dest_sub_ids[i])||(s.dest_sub_ids[i]=this.id());return s.src_ids=JXG.uniqueArray(s.src_ids),s.dest_sub_ids=JXG.uniqueArray(s.dest_sub_ids),s}}),JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])}();
|
package/package.json
CHANGED
package/src/base/board.js
CHANGED
|
@@ -1664,7 +1664,7 @@ define([
|
|
|
1664
1664
|
},
|
|
1665
1665
|
|
|
1666
1666
|
addKeyboardEventHandlers: function() {
|
|
1667
|
-
if (!this.hasKeyboardHandlers && Env.isBrowser) {
|
|
1667
|
+
if (this.attr.keyboard.enabled && !this.hasKeyboardHandlers && Env.isBrowser) {
|
|
1668
1668
|
Env.addEvent(this.containerObj, 'keydown', this.keyDownListener, this);
|
|
1669
1669
|
Env.addEvent(this.containerObj, 'focusin', this.keyFocusInListener, this);
|
|
1670
1670
|
Env.addEvent(this.containerObj, 'focusout', this.keyFocusOutListener, this);
|
|
@@ -2591,7 +2591,7 @@ define([
|
|
|
2591
2591
|
obj.type === Const.OBJECT_TYPE_TICKS ||
|
|
2592
2592
|
obj.type === Const.OBJECT_TYPE_IMAGE) {
|
|
2593
2593
|
// It's a point, so it's single touch, so we just push it to our touches
|
|
2594
|
-
targets = [
|
|
2594
|
+
targets = [target];
|
|
2595
2595
|
|
|
2596
2596
|
// For the UNDO/REDO of object moves
|
|
2597
2597
|
this.saveStartPos(obj, targets[0]);
|
|
@@ -3136,6 +3136,7 @@ define([
|
|
|
3136
3136
|
dx = Type.evaluate(this.attr.keyboard.dx) / this.unitX,
|
|
3137
3137
|
dy = Type.evaluate(this.attr.keyboard.dy) / this.unitY,
|
|
3138
3138
|
doZoom = false,
|
|
3139
|
+
done = true,
|
|
3139
3140
|
dir, actPos;
|
|
3140
3141
|
|
|
3141
3142
|
if (!this.attr.keyboard.enabled || id_node === '') {
|
|
@@ -3164,6 +3165,8 @@ define([
|
|
|
3164
3165
|
this.clickLeftArrow();
|
|
3165
3166
|
} else if (evt.keyCode === 39) { // right
|
|
3166
3167
|
this.clickRightArrow();
|
|
3168
|
+
} else {
|
|
3169
|
+
done = false;
|
|
3167
3170
|
}
|
|
3168
3171
|
} else {
|
|
3169
3172
|
// Adapt dx, dy to snapToGrid and attractToGrid
|
|
@@ -3216,7 +3219,10 @@ define([
|
|
|
3216
3219
|
this.zoomOut();
|
|
3217
3220
|
} else if (doZoom && evt.key === 'o') { // o
|
|
3218
3221
|
this.zoom100();
|
|
3222
|
+
} else {
|
|
3223
|
+
done = false;
|
|
3219
3224
|
}
|
|
3225
|
+
|
|
3220
3226
|
if (dir && el.isDraggable &&
|
|
3221
3227
|
el.visPropCalc.visible &&
|
|
3222
3228
|
((this.geonextCompatibilityMode &&
|
|
@@ -3242,6 +3248,9 @@ define([
|
|
|
3242
3248
|
|
|
3243
3249
|
this.update();
|
|
3244
3250
|
|
|
3251
|
+
if (done) {
|
|
3252
|
+
evt.preventDefault();
|
|
3253
|
+
}
|
|
3245
3254
|
return true;
|
|
3246
3255
|
},
|
|
3247
3256
|
|
|
@@ -4840,6 +4849,7 @@ define([
|
|
|
4840
4849
|
for (i = 0; i < parents.length; i++) {
|
|
4841
4850
|
if (Type.isString(parents[i]) &&
|
|
4842
4851
|
!(elementType === 'text' && i === 2) &&
|
|
4852
|
+
!(elementType === 'solidofrevolution3d' && i === 2) &&
|
|
4843
4853
|
!((elementType === 'input' || elementType === 'checkbox' || elementType === 'button') &&
|
|
4844
4854
|
(i === 2 || i === 3)) &&
|
|
4845
4855
|
!(elementType === 'curve' && i > 0) // Allow curve plots with jessiecode
|