jsxgraph 1.9.0 → 1.9.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.
Files changed (113) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/distrib/docs.zip +0 -0
  3. package/distrib/geogebra.min.js +2 -2
  4. package/distrib/geonext.min.js +3 -3
  5. package/distrib/index.d.ts +1 -1
  6. package/distrib/intergeo.min.js +2 -2
  7. package/distrib/jsxgraph.css +1 -1
  8. package/distrib/jsxgraph.zip +0 -0
  9. package/distrib/jsxgraphcore.js +3 -3
  10. package/distrib/jsxgraphcore.mjs +3 -3
  11. package/distrib/jsxgraphcore.mjs.map +1 -1
  12. package/distrib/jsxgraphsrc.js +7680 -6865
  13. package/distrib/jsxgraphsrc.mjs +7964 -7150
  14. package/distrib/jsxgraphsrc.mjs.map +1 -1
  15. package/distrib/sketch.min.js +3 -3
  16. package/distrib/themes/mono_thin.js +1 -1
  17. package/package.json +4 -4
  18. package/src/3d/box3d.js +6 -3
  19. package/src/3d/circle3d.js +11 -10
  20. package/src/3d/curve3d.js +3 -1
  21. package/src/3d/element3d.js +1 -1
  22. package/src/3d/linspace3d.js +20 -57
  23. package/src/3d/point3d.js +7 -1
  24. package/src/3d/polygon3d.js +2 -1
  25. package/src/3d/sphere3d.js +48 -44
  26. package/src/3d/surface3d.js +2 -1
  27. package/src/3d/view3d.js +1505 -1068
  28. package/src/base/board.js +177 -56
  29. package/src/base/chart.js +5 -6
  30. package/src/base/circle.js +4 -2
  31. package/src/base/composition.js +1 -1
  32. package/src/base/constants.js +2 -2
  33. package/src/base/coords.js +1 -1
  34. package/src/base/coordselement.js +1 -1
  35. package/src/base/curve.js +2 -1
  36. package/src/base/element.js +39 -31
  37. package/src/base/foreignobject.js +1 -1
  38. package/src/base/group.js +1 -1
  39. package/src/base/image.js +1 -1
  40. package/src/base/line.js +94 -106
  41. package/src/base/point.js +1 -1
  42. package/src/base/polygon.js +2 -2
  43. package/src/base/text.js +6 -2
  44. package/src/base/ticks.js +1 -1
  45. package/src/base/transformation.js +1 -1
  46. package/src/base/turtle.js +1 -1
  47. package/src/element/arc.js +1 -1
  48. package/src/element/button.js +63 -13
  49. package/src/element/checkbox.js +7 -3
  50. package/src/element/comb.js +1 -1
  51. package/src/element/composition.js +1 -1
  52. package/src/element/conic.js +1 -1
  53. package/src/element/grid.js +7 -7
  54. package/src/element/input.js +10 -7
  55. package/src/element/locus.js +1 -1
  56. package/src/element/measure.js +1 -1
  57. package/src/element/sector.js +1 -1
  58. package/src/element/slider.js +43 -40
  59. package/src/element/slopetriangle.js +1 -1
  60. package/src/element/smartlabel.js +1 -1
  61. package/src/element/vectorfield.js +1 -1
  62. package/src/index.d.ts +1 -1
  63. package/src/jsxgraph.js +6 -4
  64. package/src/jxg.js +1 -1
  65. package/src/math/bqdt.js +1 -1
  66. package/src/math/clip.js +1 -1
  67. package/src/math/complex.js +1 -1
  68. package/src/math/extrapolate.js +1 -1
  69. package/src/math/geometry.js +87 -65
  70. package/src/math/ia.js +12 -12
  71. package/src/math/implicitplot.js +1 -1
  72. package/src/math/math.js +48 -6
  73. package/src/math/metapost.js +1 -1
  74. package/src/math/nlp.js +1 -1
  75. package/src/math/numerics.js +1 -1
  76. package/src/math/plot.js +25 -26
  77. package/src/math/poly.js +1 -1
  78. package/src/math/probfuncs.js +1 -1
  79. package/src/math/qdt.js +1 -1
  80. package/src/math/statistics.js +1 -1
  81. package/src/math/symbolic.js +1 -1
  82. package/src/options.js +49 -4
  83. package/src/options3d.js +82 -5
  84. package/src/parser/datasource.js +1 -1
  85. package/src/parser/geonext.js +1 -1
  86. package/src/parser/jessiecode.js +12 -11
  87. package/src/parser/jessiescript.js +1 -1
  88. package/src/parser/prefix.js +9 -2
  89. package/src/reader/cinderella.js +1 -1
  90. package/src/reader/file.js +1 -1
  91. package/src/reader/geogebra.js +1 -1
  92. package/src/reader/geonext.js +1 -1
  93. package/src/reader/graph.js +1 -1
  94. package/src/reader/intergeo.js +1 -1
  95. package/src/reader/sketch.js +107 -1
  96. package/src/renderer/abstract.js +1 -1
  97. package/src/renderer/canvas.js +1 -1
  98. package/src/renderer/no.js +1 -1
  99. package/src/renderer/svg.js +17 -7
  100. package/src/renderer/vml.js +1 -1
  101. package/src/server/server.js +1 -1
  102. package/src/themes/mono_thin.js +1 -1
  103. package/src/unused/bst.js +1 -1
  104. package/src/unused/heap.js +1 -1
  105. package/src/utils/base64.js +1 -1
  106. package/src/utils/color.js +1 -1
  107. package/src/utils/dump.js +1 -1
  108. package/src/utils/env.js +3 -3
  109. package/src/utils/event.js +1 -1
  110. package/src/utils/expect.js +1 -1
  111. package/src/utils/type.js +30 -18
  112. package/src/utils/xml.js +1 -1
  113. package/src/utils/zip.js +1 -1
@@ -1,7 +1,7 @@
1
1
  /*
2
- JSXGraph 1.8.0
2
+ JSXGraph 1.9.1
3
3
 
4
- Copyright 2008-2023
4
+ Copyright 2008-2024
5
5
  Matthias Ehmann,
6
6
  Michael Gerhaeuser,
7
7
  Carsten Miller,
@@ -52,4 +52,4 @@
52
52
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53
53
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
54
54
  */
55
- !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,_,l,p,g,c,u,m,b,G,f,J,X,v,C,h,y,O,E,T,P=[],k="",N="",L="",x="",I=function(s){return v.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,v.toFixed)):s},Y=function(s){return v.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:l[s]};if(v=JXG.SketchReader.generator,l=e.objects,C="",h="id: '"+s.dest_id+"', ",JXG.exists(e)&&v.useSymbols&&s.type!==JXG.GENTYPE_ABLATION&&(h="",C=s.dest_id+" = ",JXG.isArray(s.src_ids)))for(i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(Y(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:k="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:k=s.args.code;break;case JXG.GENTYPE_AXIS:k=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",k+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",k+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],k+=" = point("+s.args.coords[1].usrCoords[1]+", ",k+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",k+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],k+=" = point("+s.args.coords[2].usrCoords[1]+", ",k+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",k+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",k+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",k+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",k+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",k+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',k+=", drawZero: false>>>>; ",k+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",k+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",k+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",k+=', label: <<offset: [10, 0], parse: false, display: "internal">>',k+=", drawZero: false>>>>; ",k+=s.dest_sub_ids[3]+".visible = false; ",k+=s.dest_sub_ids[4]+".visible = false; ",N="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],N+="); remove("+s.dest_sub_ids[2]+"); ",N+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:k=C+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+h,k+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(k+=", strokeColor: '"+s.args.strokeColor+"'"),k+=">>; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(k="",f=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)k+=C+"reflection("+s.src_ids[i]+", "+f+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?k+=', name:"'+s.args.subnames[i-1]+'"':k+=', name: ""',k+=", color: '"+s.args.strokeColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(y=s.dest_sub_ids.length/2,k+=C+"polygon(",k+=s.dest_sub_ids.slice(0,y).join(),k+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(y,2*y).join("', '")+"']",O=[],i=0;i<y;i++)O.push("''");k+=", names: ["+O.join()+"]",k+=">>, "+h+" fillOpacity: ",k+=s.args.opacity+", name: '' ",k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(k+=', name: "'+s.args.name+'"',k+=", withLabel: true"),k+=", fillColor: '"+s.args.fillColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else if("line"===s.args.type||"vector"===s.args.type){for(k="",f=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)k+=C+"reflection("+s.src_ids[i]+", "+f+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?k+=', name:"'+s.args.subnames[i-1]+'"':k+=', name: ""',k+=", color: '"+s.args.strokeColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?k+=C+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":k+=C+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",k+="<<",k+=h,k+="strokeColor: '"+s.args.strokeColor+"'",k+=", opacity: '"+s.args.opacity+"'",k+=', name: "'+s.args.name+'"',k+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(T in s.args.attr)s.args.attr.hasOwnProperty(T)&&(k+=", "+T+": "+s.args.attr[T]);""!==s.args.name&&(k+=", withLabel: true"),k+=">>; "}else if("circle"===s.args.type){if(k+=C+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",k+="<<",k+=h,k+="strokeColor: '"+s.args.strokeColor+"'",k+=", opacity: '"+s.args.opacity+"'",k+=', name: "'+s.args.name+'"',k+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(T in s.args.attr)s.args.attr.hasOwnProperty(T)&&(k+=", "+T+": "+s.args.attr[T]);""!==s.args.name&&(k+=", withLabel: true"),k+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?k+=', name:"'+s.args.subnames[0]+'"':k+=', name: ""',k+=", color: '"+s.args.strokeColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",k+=">>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else{if(k=C+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+h,k+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(k+=", strokeColor: '"+s.args.strokeColor+"'",k+=", opacity: '"+s.args.opacity+"'"),k+=', name: "'+s.args.name+'"',k+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(T in s.args.attr)s.args.attr.hasOwnProperty(T)&&(k+=", "+T+": "+s.args.attr[T]);""!==s.args.name&&(k+=", withLabel: true"),k+=">>; "}for(N="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(N+="remove("+s.dest_sub_ids[i]+"); ");N+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(k="",f=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)k+=C+"mirrorelement("+s.src_ids[i]+", "+f+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?k+=', name:"'+s.args.subnames[i-1]+'"':k+=', name: ""',k+=", color: '"+s.args.strokeColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(y=s.dest_sub_ids.length/2,k+=C+"polygon(",k+=s.dest_sub_ids.slice(0,y).join(),k+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(y,2*y).join("', '")+"']",O=[],i=0;i<y;i++)O.push("''");k+=", names: ["+O.join()+"]",k+=">>, "+h+" fillOpacity: ",k+=s.args.opacity+", name: '' ",k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(k+=', name: "'+s.args.name+'"',k+=", withLabel: true"),k+=", fillColor: '"+s.args.fillColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else if("line"===s.args.type||"vector"===s.args.type){for(k="",f=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)k+=C+"mirrorelement("+s.src_ids[i]+", "+f+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?k+=', name:"'+s.args.subnames[i-1]+'"':k+=', name: ""',k+=", color: '"+s.args.strokeColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?k+=C+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":k+=C+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",k+="<<",k+=h,k+="strokeColor: '"+s.args.strokeColor+"'",k+=", opacity: '"+s.args.opacity+"'",k+=', name: "'+s.args.name+'"',k+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(T in s.args.attr)s.args.attr.hasOwnProperty(T)&&(k+=", "+T+": "+s.args.attr[T]);""!==s.args.name&&(k+=", withLabel: true"),k+=">>; "}else if("circle"===s.args.type){if(k+=C+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",k+="<<",k+=h,k+="strokeColor: '"+s.args.strokeColor+"'",k+=", opacity: '"+s.args.opacity+"'",k+=', name: "'+s.args.name+'"',k+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(T in s.args.attr)s.args.attr.hasOwnProperty(T)&&(k+=", "+T+": "+s.args.attr[T]);""!==s.args.name&&(k+=", withLabel: true"),k+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?k+=', name:"'+s.args.subnames[0]+'"':k+=', name: ""',k+=", color: '"+s.args.strokeColor+"'",k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",k+=">>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else{if(k=C+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+h,k+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(k+=", strokeColor: '"+s.args.strokeColor+"'",k+=", opacity: '"+s.args.opacity+"'"),k+=', id: "'+s.dest_id+'"',k+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(T in s.args.attr)s.args.attr.hasOwnProperty(T)&&(k+=", "+T+": "+s.args.attr[T]);""!==s.args.name&&(k+=", withLabel: true"),k+=">>; "}for(N="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(N+="remove("+s.dest_sub_ids[i]+"); "+N);N+="remove("+s.dest_id+"); "+N;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],k="point("+I(s.args.usrCoords[1])+","+I(s.args.usrCoords[2])+") <<id: '",k+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(k+=", strokeColor: '"+s.args.strokeColor+"'"),k+=">>; "+a+".glide(",k+=s.src_ids[0]+"); ",N="remove("+a+"); "):a=s.src_ids[0],k+=C+"tangent("+a+") <<"+h+"point1: <<name: '",k+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",k+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",N="remove("+s.dest_sub_ids[0]+"); "+N,N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+N;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],k="point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+") <<id: '",k+=a+"', name: '', visible: false, priv: true>>; ",N="remove("+a+"); "):a=s.src_ids[1],k+=C+"parallel("+s.src_ids[0]+", "+a+") <<"+h+"name: '', point: <<id: '",k+=s.dest_sub_ids[0]+"', name: ''>> >>; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+N;break;case JXG.GENTYPE_BISECTORLINES:k=(k="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],k+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],k+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],k+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",k+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",k+="'>>>>>>; ",N="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",N+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",N+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:k="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",k+="<<id: '"+s.dest_id+"'>>; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(k="",N="",p=s.dest_sub_ids[1],g=s.dest_sub_ids[2],v.useGlider?(k+="glider("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+", "+s.src_ids[0]+")",k+="<<id: '"+p+"', name:'', withLabel:false, priv:true, visible:false >>; ",k+="glider("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+", "+s.src_ids[1]+")",k+="<<id: '"+g+"', name:'', withLabel:false, priv:true, visible:false >>; "):(k+="point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+") ",k+="<<id:'"+p+"', ",k+="name:'', withLabel:false, priv:true, visible:false >>; ",k+=p+".glide("+s.src_ids[0]+"); ",k+="point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+") ",k+="<<id:'"+g+"', ",k+="name:'', priv:true, visible:false >>; ",k+=g+".glide("+s.src_ids[1]+"); "),N+="remove("+p+"); ",N+="remove("+g+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],k+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",k+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",k+="name:'', priv:true, visible:false >>; ",N+="remove("+c+"); "):c=s.src_ids[2],k+=C+"bisector("+p+", "+c+", "+g+") ",k+="<<"+h+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",k+=s.dest_sub_ids[0]+"'>> >>;",N+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(k=C+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],k+=") <<"+h+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",k+=s.dest_sub_ids[0]+"'>>>>;",N="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],k="point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2]),k+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",N="remove("+a+"); "):a=s.src_ids[1],k+=C+"normal("+a+", "+s.src_ids[0]+") <<"+h,k+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",k+="'>> >>; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+N;break;case JXG.GENTYPE_PERPSEGMENT:k+=C+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+h,k+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",k+="'>> >>; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+N;break;case JXG.GENTYPE_POINT:k=C+"point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2]),k+=")"+(v.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+(JXG.exists(s.args.name)?", name: '"+s.args.name+"'":"")+">>")+"; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:v.useGlider?(k=C+"glider("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2]),k+=", "+s.src_ids[0]+")",k+=(v.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(k=C+"point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2]),k+=") <<"+h+"fillColor: '"+JXG.Options.glider.fillColor+"'",k+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",k+=", snapToGrid: false, snapToPoints: false",k+=">>; "+s.dest_id,k+=".glide("+s.src_ids[0]+"); "),k+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(N="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:k=C+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,k+=") <<"+h+" fillColor: '"+JXG.Options.intersection.fillColor+"'",k+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",k+=">>; ",s.args&&s.args.undoIsEmpty||(N="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var R,w;if(k="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)N=s.dest_id+".free(); "+s.dest_id,N+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,N+=".strokeColor = '"+s.args.strokeColor+"'; ",N+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",N+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",N+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",N+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",N+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",w=(R=e.objects[s.dest_id]).slideObject.id,N+=C+"point("+R.coords.usrCoords[1]+", "+R.coords.usrCoords[2]+") ",N+="<<"+h+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",N+=s.dest_id+".glide("+w+"); ";break;case JXG.GENTYPE_COMBINED:for(k=N="",i=0;i<s.args.steps.length;i++)k+=(J=this.generateJCode(s.args.steps[i],e,r))[0],N=J[2]+N;break;case JXG.GENTYPE_CIRCLE:var S="name: '', withLabel: true,";s.args.withName&&(S="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(k="point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+") ",k+="<<id: '"+s.dest_sub_ids[0]+"', "+S+" visible: true, priv: false>>; "),k+=C+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+", hasInnerPoints: true>>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(k="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?k+="point("+I(s.args.x)+", "+I(s.args.y)+") ":k+="point("+I(s.args.usrCoords[1])+", "+I(s.args.usrCoords[2])+") ",k+="<<id: '"+s.dest_sub_ids[0]+"', "+S+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?k+=C+"circle('"+s.dest_sub_ids[0]+"', "+I(s.args.r)+") <<"+h:k+=C+"circle('"+s.dest_sub_ids[0]+"', "+I(s.args.radius)+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+", hasInnerPoints: true>>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(k="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",k+="<<id: '"+s.dest_sub_ids[0]+"', "+S+" visible: true, priv: false>>; ",k+=C+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(k=C+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],k+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+S,k+=" visible: true>>, "+h+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(k="point("+I(s.args.x1)+", "+I(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],k+="'>>; ",k+="point("+I(s.args.x2)+", "+I(s.args.y2)+") <<id: '",k+=s.dest_sub_ids[1]+"'>>; ",k+=C+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",N+=s.dest_sub_ids[0]+"); "):s.args.create_point?(k="point("+I(s.args.x)+", "+I(s.args.y)+") <<id: '"+s.dest_sub_ids[0],k+="'>>; ",k+=C+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(k=C+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="remove("+s.dest_id+"); "):(k=C+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+h,k+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="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]=I(s.args.p1[i]);k="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: false, isinfinit: true, ",k+="snaptogrid: false, snaptopoints: false, priv: true>>; ",N="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(g=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=I(s.args.p2[i]);k+="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: false, isinfinit: true, ",k+="snaptogrid: false, snaptopoints: false, priv: true>>; ",N="remove("+g+"); "+N}else g=s.src_ids[t],t+=1;if(d="line",n="",_=p+", "+g,s.args.create_point1&&s.args.create_point2&&v.freeLine){for(k="",N="",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]=I(_[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&&!v.useSymbols&&(n+=", ")):d="segment",v.useSymbols||(h="id: '"+s.dest_id+"'"),k+=C+d+"("+_+")",n.length+h.length>0?k+=" <<"+n+h+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":k+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="remove("+s.dest_id+"); "+N;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]=I(s.args.p1[i]);k="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: true, ",k+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",N="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(g=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=I(s.args.p2[i]);k+="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: true, ",k+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",k+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",N="remove("+g+"); "+N}else g=s.src_ids[t],t+=1;n="",_=p+", "+g,d="arrow",v.useSymbols||(h="id: '"+s.dest_id+"'"),k+=C+d+"("+_+")",n.length+h.length>0?k+=" <<"+n+h+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":k+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",N="remove("+s.dest_id+"); "+N;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(k+="point("+I(s.args.coords[i].usrCoords[1])+", ",k+=I(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],k+="', snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(N="remove("+s.dest_sub_ids[i]+"); "+N);if(N="remove("+s.dest_id+"); "+N,k+=C+"polygon(",3===s.src_ids.length)for(i=0;i<s.src_ids.length;i++)k+=s.src_ids[i],i<s.src_ids.length-1&&(k+=", ");else for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(k+=", "),k+=s.dest_sub_ids[i]);k+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",k+=", names: ['', '', '']",k+=">>, "+h+" fillOpacity: ",k+=JXG.Options.opacityLevel+", name: '' ",k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(k+="point("+I(s.args.coords[i].usrCoords[1])+", ",k+=I(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],k+="', snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(N="remove("+s.dest_sub_ids[i]+"); "+N);for(N="remove("+s.dest_id+"); "+N,k+=C+"polygon(",i=0;i<s.src_ids.length;i++)k+=s.src_ids[i],i<s.src_ids.length-1&&(k+=", ");k+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],k+="', '",k+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",k+=", names: ['', '', '', '']",k+=">>, "+h,k+=" fillOpacity: ",k+=JXG.Options.opacityLevel+", name: '' ",k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,k+=", snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.slice(0,1)&&'"'!==s.args.str.slice(0,1)&&"function"!==s.args.str.slice(0,8)&&(s.args.str="'"+s.args.str+"'"),k=C+"text("+I(s.args.x)+", "+I(s.args.y)+", "+s.args.str+") <<",k+=h+"name: ''",void 0!==s.args.anchor&&(k+=", anchor: "+s.args.anchor),k+=">>; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:k=C+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",k+=h+"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+">> >>; ",N="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]&&(k+="point("+I(s.args.coords[i].usrCoords[1])+", ",k+=I(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],k+="', snaptogrid: "+JXG.Options.elements.snapToGrid,k+=", 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]&&(N="remove("+s.dest_sub_ids[i]+"); "+N);for(N="remove("+s.dest_id+"); "+N,k+=C+"polygon(",i=0;i<s.src_ids.length;i++)k+=s.src_ids[i],i!==s.src_ids.length-1&&(k+=", ");for(k+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)k+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(k+="', '");for(k+="']",k+=", names: [",i=0;i<s.dest_sub_ids.length;i++)k+="''",i<s.dest_sub_ids.length-1&&(k+=", ");k+="]",k+=">>, "+h+" fillOpacity: "+JXG.Options.opacityLevel,k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,k+=", name: ''>>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(y=s.args.num_vertices,k="",N="",i=0;i<y;++i)k+=C+"point("+I(s.args.points[i][1])+", "+I(s.args.points[i][2]),k+=")"+(v.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",N+="remove("+s.dest_sub_ids[i]+"); ";for(k+=C+"polygon(",i=0;i<y;++i)k+=s.dest_sub_ids[i],i!==y-1&&(k+=", ");for(k+=") <<borders: <<ids: ['",i=y;i<s.dest_sub_ids.length;i++)k+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(k+="', '");for(k+="']",k+=", names: [",i=y;i<s.dest_sub_ids.length;i++)k+="''",i<s.dest_sub_ids.length-1&&(k+=", ");k+="]",k+=">>, "+h+" fillOpacity: "+JXG.Options.opacityLevel,k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,k+=", name: ''>>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",N+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(k=C+"regularpolygon("+s.src_ids.join(", ")+", ",k+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)k+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(k+=", "),N="remove("+s.dest_sub_ids[i]+"); "+N;for(k+="]",k+=", names: [",i=0;i<s.args.corners;i++)k+="''",i<s.args.corners-1&&(k+=", ");for(k+="]",k+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)k+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(k+=", "),N="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+N;k+=" ]",k+=", name: ''",k+=">>, "+h,k+=" fillOpacity: "+JXG.Options.opacityLevel,k+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,k+=", name: ''>>; ",k+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",N="remove("+s.dest_id+"); "+N;break;case JXG.GENTYPE_SECTOR:k=C,p=s.dest_id,g=s.dest_sub_ids[0],c=p+(s.args.suffix_glider??"_glider"),u=p+(s.args.suffix_segment1??"_segment1"),m=p+(s.args.suffix_segment2??"_segment2"),k+="sector("+s.src_ids.join(", ")+") ",k+="<<"+h+" name: '', fillOpacity: "+JXG.Options.opacityLevel+", hasInnerPoints: true, arc: <<id: '"+g+"', priv:true>> >>; ",k+=p+".hasInnerPoints = function() { return !("+p+".fillColor == 'transparent' || "+p+".fillColor == 'none' || "+p+".fillOpacity == 0); }; ",k+="glider(function () { return "+s.src_ids[2]+".X(); }, function () { return "+s.src_ids[2]+".Y(); }, "+g+") ",k+="<<id: '"+c+"', name:'', parents: ['"+p+"', '"+g+"', '"+s.src_ids[2]+"'], priv:true>>; ",k+="segment("+s.src_ids[0]+", "+s.src_ids[1]+") ",k+="<<id: '"+u+"', name:'', parents: ['"+p+"', '"+s.src_ids[0]+"', '"+s.src_ids[1]+"'], priv:true>>; ",k+="segment("+s.src_ids[0]+", "+c+") ",k+="<<id: '"+m+"', name:'', parents: ['"+p+"', '"+s.src_ids[0]+"', '"+c+"'], priv:true>>; ",N="",N+="remove("+c+"); ",N+="remove("+u+"); ",N+="remove("+m+"); ",N+="remove("+p+"); ";break;case JXG.GENTYPE_ANGLE:k=C+"angle("+s.src_ids.join(", ")+") ",k+="<<",k+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",k+=h+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?k+=", radius: "+s.args.radius:k+=", radius: '"+s.args.radius+"'"),k+=", hasInnerPoints: true>>; ",N="remove("+s.dest_id+"); ",N+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:k=C+"nonreflexangle("+s.src_ids.join(", ")+") ",k+="<<",k+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",k+="name: ''>>, ",k+=h+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?k+=", radius: "+s.args.radius:k+=", radius: '"+s.args.radius+"'"),k+=">>; ",N="remove("+s.dest_id+"); ",N+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:k=C+"reflexangle("+s.src_ids.join(", ")+") ",k+="<<",k+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",k+="name: ''>>, ",k+=h+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?k+=", radius: "+s.args.radius:k+=", radius: '"+s.args.radius+"'"),k+=">>; ",N="remove("+s.dest_id+"); ",N+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:k=C+"slopetriangle("+s.src_ids.join(", ")+") <<",k+=h+" name: '',",k+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",k+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",k+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",k+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",k+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(k+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),k+=">>;",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:k=C+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&&(k+=", "+s.args.a+", "+s.args.b),k+=") <<",s.args.isPolar&&(k+="curveType: 'polar', "),k+=h+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(y=s.args.points.length,k+=C+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?k+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),E=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),E=s.args.points[i][1].toPrecision(4)),k+="["+O+","+E+"]"),i<y-1&&(k+=",");k+="], function() { o = $('"+s.dest_id+"'); if(o) { return o.tau; } else { return 1; }}, "+s.args.type,k+=") <<",k+=h+"name: '', withLabel: false, tau: "+s.args.tau+", ",k+="fixed: false, ",s.args.createPoints||(k+="createPoints: false, "),k+="isArrayOfCoordinates: true, ",k+="strokeWidth: "+s.args.strokeWidth+", ",k+="strokeColor: '"+s.args.strokeColor+"' >>; ",N="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:k=C+"derivative("+s.src_ids+")",k+=" <<",k+="dash: 2",k+=" >>;";break;case JXG.GENTYPE_SLIDER:k=C+"slider(["+I(s.args.x1)+", "+I(s.args.y1)+"], ["+I(s.args.x2)+", "+I(s.args.y2)+"], ["+I(s.args.min??s.args.start)+", "+I(s.args.start??s.args.ini)+", "+I(s.args.max??s.args.end)+"]) ",k+="<<"+h,k+=" snapWidth: "+I(s.args.step??"0.1")+", ",k+="baseline: <<id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",k+="highline: <<id: '"+s.dest_sub_ids[1]+"', name: ''>>, ",k+="point1: <<id: '"+s.dest_sub_ids[2]+"', name: ''>>, ",k+="point2: <<id: '"+s.dest_sub_ids[3]+"', name: ''>>, ",k+="label: <<id: '"+s.dest_sub_ids[4]+"', name: '', priv: true>>",k+=", name: '"+s.args.name+"'>>; ",N="remove("+s.dest_id+"); ",N+="remove("+s.dest_sub_ids[4]+"); ",N+="remove("+s.dest_sub_ids[3]+"); ",N+="remove("+s.dest_sub_ids[2]+"); ",N+="remove("+s.dest_sub_ids[1]+"); ",N+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(J=[],L=[],x=[],i=0;i<s.args.steps.length;i++)(J=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(J[2])&&(k=J[2]+k),J.length>=4&&JXG.isFunction(J[3])&&L.unshift(J[3]),J.length>=1&&""!==JXG.trim(J[0])&&(N+=J[0]),J.length>=2&&JXG.isFunction(J[1])&&x.push(J[1]);break;case JXG.GENTYPE_COPY:for(f in P=[],s.args.steps)if(s.args.steps.hasOwnProperty(f)){if((X=JXG.deepCopy(r[s.args.steps[f]])).type===JXG.GENTYPE_COPY){for(i=0;i<X.args.map.length;i++)for(t=0;t<s.args.map.length;t++)X.args.map[i].copy===s.args.map[t].orig&&(X.args.map[i].copy=s.args.map[t].copy);X=JXG.SketchReader.replaceStepDestIds(X,X.args.map)}else X=JXG.SketchReader.replaceStepDestIds(X,s.args.map);P.push(X)}for(i=0;i<P.length;i++)J=P[i].type>50?this.generateJCodeMeta(P[i],e):this.generateJCode(P[i],e,r),""!==JXG.trim(J[0])&&(k+=J[0]),JXG.isFunction(J[1])&&L.push(J[1]),""!==JXG.trim(J[2])&&(N=J[2]+N),JXG.isFunction(J[3])&&x.unshift(J[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)Y(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(k+=s.args.map[i].copy,k+=".X = function() { return ("+s.args.map[i].orig+".X() - ",k+=I(s.args.x)+"); }; ",k+=s.args.map[i].copy,k+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",k+=I(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)b=Y(s.args.free_points[i].orig).coords.usrCoords[1],G=Y(s.args.free_points[i].orig).coords.usrCoords[2],k+=s.args.free_points[i].copy+".X = function() { return ",k+=I(b-s.args.x)+"; }; ",k+=s.args.free_points[i].copy+".Y = function() { return ",k+=I(G-s.args.y)+"; }; ",k+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(f=Y(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(f.point2)||(k+=s.args.map[t].copy+".setRadius(function () { return ",k+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(b=Y(s.src_ids[0]).coords.usrCoords[1],G=Y(s.src_ids[0]).coords.usrCoords[2],k="point("+I(b-s.args.x)+", "+I(G-s.args.y)+") <<id: '",k+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",k+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],k+="', fillOpacity: "+JXG.Options.opacityLevel,k+=", 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]+")",k+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)k+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",k+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(k+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),N="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(b=Y(s.src_ids[0]).coords.usrCoords[1],G=Y(s.src_ids[0]).coords.usrCoords[2],k="point("+I(b-s.args.x)+", "+I(G-s.args.y)+") <<id: '",k+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",k+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],k+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",k+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",k+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],k+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)k+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",k+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",k+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(k+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),N="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)k=s.src_ids[0]+".move(["+I(s.args.coords[0].usrCoords[0])+", ",k+=I(s.args.coords[0].usrCoords[1])+", "+I(s.args.coords[0].usrCoords[2])+"]); ",N=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",N+=s.args.ystart[0]+"]); ",k+=s.src_ids[1]+".move(["+I(s.args.coords[1].usrCoords[0])+", ",k+=I(s.args.coords[1].usrCoords[1])+", "+I(s.args.coords[1].usrCoords[2])+"]); ",N+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",N+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)k=s.src_ids[0]+".move(["+I(s.args.coords[0].usrCoords[1])+", ",k+=I(s.args.coords[0].usrCoords[2])+"]); ",N=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(k+=s.src_ids[1]+".move(["+I(s.args.coords[1].usrCoords[1])+", ",k+=I(s.args.coords[1].usrCoords[2])+"]); ",N+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,N+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(k=N="",i=0;i<s.src_ids.length;i++)k+=s.src_ids[i]+".move(["+I(s.args.coords[i].usrCoords[1])+", ",k+=I(s.args.coords[i].usrCoords[2])+"]); ",N+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],N+="]); ";else JXG.exists(s.args.coords[0])&&(k=s.src_ids[0]+".move(["+I(s.args.coords[0].usrCoords[1])+", ",k+=I(s.args.coords[0].usrCoords[2])+"]); ",N=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[k,L,N,x]},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"])}();
55
+ !function(){"use strict";JXG.extendConstants(JXG,{GENTYPE_ABC:1,GENTYPE_AXIS:2,GENTYPE_MID:3,GENTYPE_REFLECTION:4,GENTYPE_MIRRORELEMENT:5,GENTYPE_REFLECTION_ON_LINE:4,GENTYPE_REFLECTION_ON_POINT:5,GENTYPE_TANGENT:6,GENTYPE_PARALLEL:7,GENTYPE_BISECTORLINES:8,GENTYPE_BOARDIMG:9,GENTYPE_BISECTOR:10,GENTYPE_NORMAL:11,GENTYPE_POINT:12,GENTYPE_GLIDER:13,GENTYPE_INTERSECTION:14,GENTYPE_CIRCLE:15,GENTYPE_CIRCLE2POINTS:16,GENTYPE_LINE:17,GENTYPE_TRIANGLE:18,GENTYPE_QUADRILATERAL:19,GENTYPE_TEXT:20,GENTYPE_POLYGON:21,GENTYPE_REGULARPOLYGON:22,GENTYPE_SECTOR:23,GENTYPE_ANGLE:24,GENTYPE_PLOT:25,GENTYPE_SLIDER:26,GENTYPE_TRUNCATE:27,GENTYPE_JCODE:28,GENTYPE_MOVEMENT:29,GENTYPE_COMBINED:30,GENTYPE_RULER:31,GENTYPE_SLOPETRIANGLE:32,GENTYPE_PERPSEGMENT:33,GENTYPE_LABELMOVEMENT:34,GENTYPE_VECTOR:35,GENTYPE_NONREFLEXANGLE:36,GENTYPE_REFLEXANGLE:37,GENTYPE_PATH:38,GENTYPE_DERIVATIVE:39,GENTYPE_DELETE:41,GENTYPE_COPY:42,GENTYPE_MIRROR:43,GENTYPE_ROTATE:44,GENTYPE_ABLATION:45,GENTYPE_MIGRATE:46,GENTYPE_VECTORCOPY:47,GENTYPE_POLYGONCOPY:48,GENTYPE_CTX_TYPE_G:51,GENTYPE_CTX_TYPE_P:52,GENTYPE_CTX_TRACE:53,GENTYPE_CTX_VISIBILITY:54,GENTYPE_CTX_CCVISIBILITY:55,GENTYPE_CTX_MPVISIBILITY:56,GENTYPE_CTX_WITHLABEL:57,GENTYPE_CTX_LABEL:58,GENTYPE_CTX_FIXED:59,GENTYPE_CTX_STROKEWIDTH:60,GENTYPE_CTX_LABELSIZE:61,GENTYPE_CTX_SIZE:62,GENTYPE_CTX_FACE:63,GENTYPE_CTX_STRAIGHT:64,GENTYPE_CTX_ARROW:65,GENTYPE_CTX_COLOR:66,GENTYPE_CTX_RADIUS:67,GENTYPE_CTX_COORDS:68,GENTYPE_CTX_TEXT:69,GENTYPE_CTX_ANGLERADIUS:70,GENTYPE_CTX_DOTVISIBILITY:71,GENTYPE_CTX_FILLOPACITY:72,GENTYPE_CTX_PLOT:73,GENTYPE_CTX_SCALE:74,GENTYPE_CTX_SLIDER_BOUND:75,GENTYPE_CTX_POINT1:76,GENTYPE_CTX_POINT2:77,GENTYPE_CTX_LABELSTICKY:78,GENTYPE_CTX_TYPE_I:79,GENTYPE_CTX_HASINNERPOINTS:80,GENTYPE_CTX_SLIDER_STEP:81,GENTYPE_CTX_SNAPTOGRID:82,GENTYPE_CTX_SNAPTOPOINTS:83,GENTYPE_CTX_STROKEDASH:84,GENTYPE_CTX_SLIDER_VALUE:85,GENTYPE_CTX_SECTORBORDERS:86,GENTYPE_CTX_CURVETAU:87,GENTYPE_CTX_SLIDER_POS:88}),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,_,l,p,g,c,u,E,G,m,b,T,f,X,P,C,J,O,N,v,h=[],y="",Y="",I="",L="",R=function(s){return X.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,X.toFixed)):s},k=function(s){return X.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:l[s]};if(X=JXG.SketchReader.generator,l=e.objects,P="",C="id: '"+s.dest_id+"', ",JXG.exists(e)&&X.useSymbols&&s.type!==JXG.GENTYPE_ABLATION&&(C="",P=s.dest_id+" = ",JXG.isArray(s.src_ids)))for(i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(k(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:y="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:y=s.args.code;break;case JXG.GENTYPE_AXIS:y=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",y+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",y+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],y+=" = point("+s.args.coords[1].usrCoords[1]+", ",y+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",y+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],y+=" = point("+s.args.coords[2].usrCoords[1]+", ",y+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",y+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",y+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",y+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",y+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",y+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',y+=", drawZero: false>>>>; ",y+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",y+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",y+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",y+=', label: <<offset: [10, 0], parse: false, display: "internal">>',y+=", drawZero: false>>>>; ",y+=s.dest_sub_ids[3]+".visible = false; ",y+=s.dest_sub_ids[4]+".visible = false; ",Y="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],Y+="); remove("+s.dest_sub_ids[2]+"); ",Y+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:y=P+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+C,y+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(y+=", strokeColor: '"+s.args.strokeColor+"'"),y+=">>; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(y="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)y+=P+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?y+=', name:"'+s.args.subnames[i-1]+'"':y+=', name: ""',y+=", color: '"+s.args.strokeColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(J=s.dest_sub_ids.length/2,y+=P+"polygon(",y+=s.dest_sub_ids.slice(0,J).join(),y+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(J,2*J).join("', '")+"']",O=[],i=0;i<J;i++)O.push("''");y+=", names: ["+O.join()+"]",y+=">>, "+C+" fillOpacity: ",y+=s.args.opacity+", name: '' ",y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(y+=', name: "'+s.args.name+'"',y+=", withLabel: true"),y+=", fillColor: '"+s.args.fillColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else if("line"===s.args.type||"vector"===s.args.type){for(y="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)y+=P+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?y+=', name:"'+s.args.subnames[i-1]+'"':y+=', name: ""',y+=", color: '"+s.args.strokeColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?y+=P+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":y+=P+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",y+="<<",y+=C,y+="strokeColor: '"+s.args.strokeColor+"'",y+=", opacity: '"+s.args.opacity+"'",y+=', name: "'+s.args.name+'"',y+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(v in s.args.attr)s.args.attr.hasOwnProperty(v)&&(y+=", "+v+": "+s.args.attr[v]);""!==s.args.name&&(y+=", withLabel: true"),y+=">>; "}else if("circle"===s.args.type){if(y+=P+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",y+="<<",y+=C,y+="strokeColor: '"+s.args.strokeColor+"'",y+=", opacity: '"+s.args.opacity+"'",y+=', name: "'+s.args.name+'"',y+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(v in s.args.attr)s.args.attr.hasOwnProperty(v)&&(y+=", "+v+": "+s.args.attr[v]);""!==s.args.name&&(y+=", withLabel: true"),y+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?y+=', name:"'+s.args.subnames[0]+'"':y+=', name: ""',y+=", color: '"+s.args.strokeColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",y+=">>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else{if(y=P+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+C,y+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(y+=", strokeColor: '"+s.args.strokeColor+"'",y+=", opacity: '"+s.args.opacity+"'"),y+=', name: "'+s.args.name+'"',y+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(v in s.args.attr)s.args.attr.hasOwnProperty(v)&&(y+=", "+v+": "+s.args.attr[v]);""!==s.args.name&&(y+=", withLabel: true"),y+=">>; "}for(Y="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(Y+="remove("+s.dest_sub_ids[i]+"); ");Y+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(y="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)y+=P+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?y+=', name:"'+s.args.subnames[i-1]+'"':y+=', name: ""',y+=", color: '"+s.args.strokeColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(J=s.dest_sub_ids.length/2,y+=P+"polygon(",y+=s.dest_sub_ids.slice(0,J).join(),y+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(J,2*J).join("', '")+"']",O=[],i=0;i<J;i++)O.push("''");y+=", names: ["+O.join()+"]",y+=">>, "+C+" fillOpacity: ",y+=s.args.opacity+", name: '' ",y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(y+=', name: "'+s.args.name+'"',y+=", withLabel: true"),y+=", fillColor: '"+s.args.fillColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else if("line"===s.args.type||"vector"===s.args.type){for(y="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)y+=P+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?y+=', name:"'+s.args.subnames[i-1]+'"':y+=', name: ""',y+=", color: '"+s.args.strokeColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?y+=P+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":y+=P+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",y+="<<",y+=C,y+="strokeColor: '"+s.args.strokeColor+"'",y+=", opacity: '"+s.args.opacity+"'",y+=', name: "'+s.args.name+'"',y+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(v in s.args.attr)s.args.attr.hasOwnProperty(v)&&(y+=", "+v+": "+s.args.attr[v]);""!==s.args.name&&(y+=", withLabel: true"),y+=">>; "}else if("circle"===s.args.type){if(y+=P+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",y+="<<",y+=C,y+="strokeColor: '"+s.args.strokeColor+"'",y+=", opacity: '"+s.args.opacity+"'",y+=', name: "'+s.args.name+'"',y+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(v in s.args.attr)s.args.attr.hasOwnProperty(v)&&(y+=", "+v+": "+s.args.attr[v]);""!==s.args.name&&(y+=", withLabel: true"),y+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?y+=', name:"'+s.args.subnames[0]+'"':y+=', name: ""',y+=", color: '"+s.args.strokeColor+"'",y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",y+=">>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; "}else{if(y=P+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+C,y+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(y+=", strokeColor: '"+s.args.strokeColor+"'",y+=", opacity: '"+s.args.opacity+"'"),y+=', id: "'+s.dest_id+'"',y+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(v in s.args.attr)s.args.attr.hasOwnProperty(v)&&(y+=", "+v+": "+s.args.attr[v]);""!==s.args.name&&(y+=", withLabel: true"),y+=">>; "}for(Y="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(Y+="remove("+s.dest_sub_ids[i]+"); "+Y);Y+="remove("+s.dest_id+"); "+Y;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],y="point("+R(s.args.usrCoords[1])+","+R(s.args.usrCoords[2])+") <<id: '",y+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(y+=", strokeColor: '"+s.args.strokeColor+"'"),y+=">>; "+a+".glide(",y+=s.src_ids[0]+"); ",Y="remove("+a+"); "):a=s.src_ids[0],y+=P+"tangent("+a+") <<"+C+"point1: <<name: '",y+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",y+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",Y="remove("+s.dest_sub_ids[0]+"); "+Y,Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+Y;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],y="point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+") <<id: '",y+=a+"', name: '', visible: false, priv: true>>; ",Y="remove("+a+"); "):a=s.src_ids[1],y+=P+"parallel("+s.src_ids[0]+", "+a+") <<"+C+"name: '', point: <<id: '",y+=s.dest_sub_ids[0]+"', name: ''>> >>; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+Y;break;case JXG.GENTYPE_BISECTORLINES:y=(y="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],y+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],y+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],y+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",y+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",y+="'>>>>>>; ",Y="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",Y+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",Y+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:y="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",y+="<<id: '"+s.dest_id+"'>>; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(y="",Y="",p=s.dest_sub_ids[1],g=s.dest_sub_ids[2],X.useGlider?(y+="glider("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+", "+s.src_ids[0]+")",y+="<<id: '"+p+"', name:'', withLabel:false, priv:true, visible:false >>; ",y+="glider("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+", "+s.src_ids[1]+")",y+="<<id: '"+g+"', name:'', withLabel:false, priv:true, visible:false >>; "):(y+="point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+") ",y+="<<id:'"+p+"', ",y+="name:'', withLabel:false, priv:true, visible:false >>; ",y+=p+".glide("+s.src_ids[0]+"); ",y+="point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+") ",y+="<<id:'"+g+"', ",y+="name:'', priv:true, visible:false >>; ",y+=g+".glide("+s.src_ids[1]+"); "),Y+="remove("+p+"); ",Y+="remove("+g+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],y+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",y+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",y+="name:'', priv:true, visible:false >>; ",Y+="remove("+c+"); "):c=s.src_ids[2],y+=P+"bisector("+p+", "+c+", "+g+") ",y+="<<"+C+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",y+=s.dest_sub_ids[0]+"'>> >>;",Y+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(y=P+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],y+=") <<"+C+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",y+=s.dest_sub_ids[0]+"'>>>>;",Y="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],y="point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2]),y+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",Y="remove("+a+"); "):a=s.src_ids[1],y+=P+"normal("+a+", "+s.src_ids[0]+") <<"+C,y+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",y+="'>> >>; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+Y;break;case JXG.GENTYPE_PERPSEGMENT:y+=P+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+C,y+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",y+="'>> >>; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+Y;break;case JXG.GENTYPE_POINT:y=P+"point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2]),y+=")"+(X.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+(JXG.exists(s.args.name)?", name: '"+s.args.name+"'":"")+">>")+"; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:X.useGlider?(y=P+"glider("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2]),y+=", "+s.src_ids[0]+")",y+=(X.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(y=P+"point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2]),y+=") <<"+C+"fillColor: '"+JXG.Options.glider.fillColor+"'",y+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",y+=", snapToGrid: false, snapToPoints: false",y+=">>; "+s.dest_id,y+=".glide("+s.src_ids[0]+"); "),y+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(Y="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:y=P+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,y+=") <<"+C+" fillColor: '"+JXG.Options.intersection.fillColor+"'",y+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",y+=">>; ",s.args&&s.args.undoIsEmpty||(Y="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,A;if(y="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)Y=s.dest_id+".free(); "+s.dest_id,Y+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,Y+=".strokeColor = '"+s.args.strokeColor+"'; ",Y+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",Y+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",Y+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",Y+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",Y+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",A=(x=e.objects[s.dest_id]).slideObject.id,Y+=P+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",Y+="<<"+C+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",Y+=s.dest_id+".glide("+A+"); ";break;case JXG.GENTYPE_COMBINED:for(y=Y="",i=0;i<s.args.steps.length;i++)y+=(T=this.generateJCode(s.args.steps[i],e,r))[0],Y=T[2]+Y;break;case JXG.GENTYPE_CIRCLE:var S="name: '', withLabel: true,";s.args.withName&&(S="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(y="point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+") ",y+="<<id: '"+s.dest_sub_ids[0]+"', "+S+" visible: true, priv: false>>; "),y+=P+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+", hasInnerPoints: true>>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(y="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?y+="point("+R(s.args.x)+", "+R(s.args.y)+") ":y+="point("+R(s.args.usrCoords[1])+", "+R(s.args.usrCoords[2])+") ",y+="<<id: '"+s.dest_sub_ids[0]+"', "+S+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?y+=P+"circle('"+s.dest_sub_ids[0]+"', "+R(s.args.r)+") <<"+C:y+=P+"circle('"+s.dest_sub_ids[0]+"', "+R(s.args.radius)+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+", hasInnerPoints: true>>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(y="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",y+="<<id: '"+s.dest_sub_ids[0]+"', "+S+" visible: true, priv: false>>; ",y+=P+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(y=P+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],y+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+S,y+=" visible: true>>, "+C+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(y="point("+R(s.args.x1)+", "+R(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],y+="'>>; ",y+="point("+R(s.args.x2)+", "+R(s.args.y2)+") <<id: '",y+=s.dest_sub_ids[1]+"'>>; ",y+=P+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",Y+=s.dest_sub_ids[0]+"); "):s.args.create_point?(y="point("+R(s.args.x)+", "+R(s.args.y)+") <<id: '"+s.dest_sub_ids[0],y+="'>>; ",y+=P+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(y=P+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="remove("+s.dest_id+"); "):(y=P+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+C,y+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="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]=R(s.args.p1[i]);y="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: false, isinfinit: true, ",y+="snaptogrid: false, snaptopoints: false, priv: true>>; ",Y="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(g=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=R(s.args.p2[i]);y+="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: false, isinfinit: true, ",y+="snaptogrid: false, snaptopoints: false, priv: true>>; ",Y="remove("+g+"); "+Y}else g=s.src_ids[t],t+=1;if(d="line",n="",_=p+", "+g,s.args.create_point1&&s.args.create_point2&&X.freeLine){for(y="",Y="",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]=R(_[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&&!X.useSymbols&&(n+=", ")):d="segment",X.useSymbols||(C="id: '"+s.dest_id+"'"),y+=P+d+"("+_+")",n.length+C.length>0?y+=" <<"+n+C+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":y+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="remove("+s.dest_id+"); "+Y;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]=R(s.args.p1[i]);y="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: true, ",y+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",Y="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(g=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=R(s.args.p2[i]);y+="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: true, ",y+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",y+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",Y="remove("+g+"); "+Y}else g=s.src_ids[t],t+=1;n="",_=p+", "+g,d="arrow",X.useSymbols||(C="id: '"+s.dest_id+"'"),y+=P+d+"("+_+")",n.length+C.length>0?y+=" <<"+n+C+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":y+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",Y="remove("+s.dest_id+"); "+Y;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(y+="point("+R(s.args.coords[i].usrCoords[1])+", ",y+=R(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],y+="', snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(Y="remove("+s.dest_sub_ids[i]+"); "+Y);if(Y="remove("+s.dest_id+"); "+Y,y+=P+"polygon(",3===s.src_ids.length)for(i=0;i<s.src_ids.length;i++)y+=s.src_ids[i],i<s.src_ids.length-1&&(y+=", ");else for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(y+=", "),y+=s.dest_sub_ids[i]);y+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",y+=", names: ['', '', '']",y+=">>, "+C+" fillOpacity: ",y+=JXG.Options.opacityLevel+", name: '' ",y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(y+="point("+R(s.args.coords[i].usrCoords[1])+", ",y+=R(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],y+="', snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(Y="remove("+s.dest_sub_ids[i]+"); "+Y);for(Y="remove("+s.dest_id+"); "+Y,y+=P+"polygon(",i=0;i<s.src_ids.length;i++)y+=s.src_ids[i],i<s.src_ids.length-1&&(y+=", ");y+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],y+="', '",y+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",y+=", names: ['', '', '', '']",y+=">>, "+C,y+=" fillOpacity: ",y+=JXG.Options.opacityLevel+", name: '' ",y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,y+=", snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.slice(0,1)&&'"'!==s.args.str.slice(0,1)&&"function"!==s.args.str.slice(0,8)&&(s.args.str="'"+s.args.str+"'"),y=P+"text("+R(s.args.x)+", "+R(s.args.y)+", "+s.args.str+") <<",y+=C+"name: ''",void 0!==s.args.anchor&&(y+=", anchor: "+s.args.anchor),y+=">>; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:y=P+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",y+=C+"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+">> >>; ",Y="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]&&(y+="point("+R(s.args.coords[i].usrCoords[1])+", ",y+=R(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],y+="', snaptogrid: "+JXG.Options.elements.snapToGrid,y+=", 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]&&(Y="remove("+s.dest_sub_ids[i]+"); "+Y);for(Y="remove("+s.dest_id+"); "+Y,y+=P+"polygon(",i=0;i<s.src_ids.length;i++)y+=s.src_ids[i],i!==s.src_ids.length-1&&(y+=", ");for(y+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)y+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(y+="', '");for(y+="']",y+=", names: [",i=0;i<s.dest_sub_ids.length;i++)y+="''",i<s.dest_sub_ids.length-1&&(y+=", ");y+="]",y+=">>, "+C+" fillOpacity: "+JXG.Options.opacityLevel,y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,y+=", name: ''>>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(J=s.args.num_vertices,y="",Y="",i=0;i<J;++i)y+=P+"point("+R(s.args.points[i][1])+", "+R(s.args.points[i][2]),y+=")"+(X.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",Y+="remove("+s.dest_sub_ids[i]+"); ";for(y+=P+"polygon(",i=0;i<J;++i)y+=s.dest_sub_ids[i],i!==J-1&&(y+=", ");for(y+=") <<borders: <<ids: ['",i=J;i<s.dest_sub_ids.length;i++)y+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(y+="', '");for(y+="']",y+=", names: [",i=J;i<s.dest_sub_ids.length;i++)y+="''",i<s.dest_sub_ids.length-1&&(y+=", ");y+="]",y+=">>, "+C+" fillOpacity: "+JXG.Options.opacityLevel,y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,y+=", name: ''>>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",Y+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(y=P+"regularpolygon("+s.src_ids.join(", ")+", ",y+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)y+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(y+=", "),Y="remove("+s.dest_sub_ids[i]+"); "+Y;for(y+="]",y+=", names: [",i=0;i<s.args.corners;i++)y+="''",i<s.args.corners-1&&(y+=", ");for(y+="]",y+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)y+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(y+=", "),Y="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+Y;y+=" ]",y+=", name: ''",y+=">>, "+C,y+=" fillOpacity: "+JXG.Options.opacityLevel,y+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,y+=", name: ''>>; ",y+=s.dest_id+".hasInnerPoints = function() { return !("+s.dest_id+".fillColor == 'transparent' || "+s.dest_id+".fillColor == 'none' || "+s.dest_id+".fillOpacity == 0); }; ",Y="remove("+s.dest_id+"); "+Y;break;case JXG.GENTYPE_SECTOR:y=P,p=s.dest_id,g=s.dest_sub_ids[0],c=p+(s.args.suffix_glider??"_glider"),u=p+(s.args.suffix_segment1??"_segment1"),E=p+(s.args.suffix_segment2??"_segment2"),y+="sector("+s.src_ids.join(", ")+") ",y+="<<"+C+" name: '', fillOpacity: "+JXG.Options.opacityLevel+", hasInnerPoints: true, arc: <<id: '"+g+"', priv:true>> >>; ",y+=p+".hasInnerPoints = function() { return !("+p+".fillColor == 'transparent' || "+p+".fillColor == 'none' || "+p+".fillOpacity == 0); }; ",y+="glider(function () { return "+s.src_ids[2]+".X(); }, function () { return "+s.src_ids[2]+".Y(); }, "+g+") ",y+="<<id: '"+c+"', name:'', parents: ['"+p+"', '"+g+"', '"+s.src_ids[2]+"'], priv:true>>; ",y+="segment("+s.src_ids[0]+", "+s.src_ids[1]+") ",y+="<<id: '"+u+"', name:'', parents: ['"+p+"', '"+s.src_ids[0]+"', '"+s.src_ids[1]+"'], priv:true>>; ",y+="segment("+s.src_ids[0]+", "+c+") ",y+="<<id: '"+E+"', name:'', parents: ['"+p+"', '"+s.src_ids[0]+"', '"+c+"'], priv:true>>; ",Y="",Y+="remove("+c+"); ",Y+="remove("+u+"); ",Y+="remove("+E+"); ",Y+="remove("+p+"); ";break;case JXG.GENTYPE_ANGLE:y=P+"angle("+s.src_ids.join(", ")+") ",y+="<<",y+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",y+=C+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?y+=", radius: "+s.args.radius:y+=", radius: '"+s.args.radius+"'"),y+=", hasInnerPoints: true>>; ",Y="remove("+s.dest_id+"); ",Y+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:y=P+"nonreflexangle("+s.src_ids.join(", ")+") ",y+="<<",y+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",y+="name: ''>>, ",y+=C+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?y+=", radius: "+s.args.radius:y+=", radius: '"+s.args.radius+"'"),y+=">>; ",Y="remove("+s.dest_id+"); ",Y+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:y=P+"reflexangle("+s.src_ids.join(", ")+") ",y+="<<",y+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",y+="name: ''>>, ",y+=C+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?y+=", radius: "+s.args.radius:y+=", radius: '"+s.args.radius+"'"),y+=">>; ",Y="remove("+s.dest_id+"); ",Y+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:y=P+"slopetriangle("+s.src_ids.join(", ")+") <<",y+=C+" name: '',",y+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",y+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",y+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",y+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",y+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(y+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),y+=">>;",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:y=P+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&&(y+=", "+s.args.a+", "+s.args.b),y+=") <<",s.args.isPolar&&(y+="curveType: 'polar', "),y+=C+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(J=s.args.points.length,y+=P+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?y+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),N=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),N=s.args.points[i][1].toPrecision(4)),y+="["+O+","+N+"]"),i<J-1&&(y+=",");y+="], function() { o = $('"+s.dest_id+"'); if(o) { return o.tau; } else { return 1; }}, "+s.args.type,y+=") <<",y+=C+"name: '', withLabel: false, tau: "+s.args.tau+", ",y+="fixed: false, ",s.args.createPoints||(y+="createPoints: false, "),y+="isArrayOfCoordinates: true, ",y+="strokeWidth: "+s.args.strokeWidth+", ",y+="strokeColor: '"+s.args.strokeColor+"' >>; ",Y="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:y=P+"derivative("+s.src_ids+")",y+=" <<",y+="dash: 2",y+=" >>;";break;case JXG.GENTYPE_SLIDER:y=P+"slider(["+R(s.args.x1)+", "+R(s.args.y1)+"], ["+R(s.args.x2)+", "+R(s.args.y2)+"], ["+R(s.args.min??s.args.start)+", "+R(s.args.start??s.args.ini)+", "+R(s.args.max??s.args.end)+"]) ",y+="<<"+C,y+=" snapWidth: "+R(s.args.step??"0.1")+", ",y+="baseline: <<id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",y+="highline: <<id: '"+s.dest_sub_ids[1]+"', name: ''>>, ",y+="point1: <<id: '"+s.dest_sub_ids[2]+"', name: ''>>, ",y+="point2: <<id: '"+s.dest_sub_ids[3]+"', name: ''>>, ",y+="label: <<id: '"+s.dest_sub_ids[4]+"', name: '', priv: true>>",y+=", name: '"+s.args.name+"'>>; ",Y="remove("+s.dest_id+"); ",Y+="remove("+s.dest_sub_ids[4]+"); ",Y+="remove("+s.dest_sub_ids[3]+"); ",Y+="remove("+s.dest_sub_ids[2]+"); ",Y+="remove("+s.dest_sub_ids[1]+"); ",Y+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(T=[],I=[],L=[],i=0;i<s.args.steps.length;i++)(T=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(T[2])&&(y=T[2]+y),T.length>=4&&JXG.isFunction(T[3])&&I.unshift(T[3]),T.length>=1&&""!==JXG.trim(T[0])&&(Y+=T[0]),T.length>=2&&JXG.isFunction(T[1])&&L.push(T[1]);break;case JXG.GENTYPE_COPY:for(b in h=[],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);h.push(f)}for(i=0;i<h.length;i++)T=h[i].type>50?this.generateJCodeMeta(h[i],e):this.generateJCode(h[i],e,r),""!==JXG.trim(T[0])&&(y+=T[0]),JXG.isFunction(T[1])&&I.push(T[1]),""!==JXG.trim(T[2])&&(Y=T[2]+Y),JXG.isFunction(T[3])&&L.unshift(T[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)k(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(y+=s.args.map[i].copy,y+=".X = function() { return ("+s.args.map[i].orig+".X() - ",y+=R(s.args.x)+"); }; ",y+=s.args.map[i].copy,y+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",y+=R(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)G=k(s.args.free_points[i].orig).coords.usrCoords[1],m=k(s.args.free_points[i].orig).coords.usrCoords[2],y+=s.args.free_points[i].copy+".X = function() { return ",y+=R(G-s.args.x)+"; }; ",y+=s.args.free_points[i].copy+".Y = function() { return ",y+=R(m-s.args.y)+"; }; ",y+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=k(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(y+=s.args.map[t].copy+".setRadius(function () { return ",y+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(G=k(s.src_ids[0]).coords.usrCoords[1],m=k(s.src_ids[0]).coords.usrCoords[2],y="point("+R(G-s.args.x)+", "+R(m-s.args.y)+") <<id: '",y+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",y+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],y+="', fillOpacity: "+JXG.Options.opacityLevel,y+=", 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]+")",y+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)y+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",y+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(y+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),Y="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(G=k(s.src_ids[0]).coords.usrCoords[1],m=k(s.src_ids[0]).coords.usrCoords[2],y="point("+R(G-s.args.x)+", "+R(m-s.args.y)+") <<id: '",y+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",y+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],y+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",y+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",y+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],y+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)y+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",y+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",y+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(y+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),Y="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)y=s.src_ids[0]+".move(["+R(s.args.coords[0].usrCoords[0])+", ",y+=R(s.args.coords[0].usrCoords[1])+", "+R(s.args.coords[0].usrCoords[2])+"]); ",Y=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",Y+=s.args.ystart[0]+"]); ",y+=s.src_ids[1]+".move(["+R(s.args.coords[1].usrCoords[0])+", ",y+=R(s.args.coords[1].usrCoords[1])+", "+R(s.args.coords[1].usrCoords[2])+"]); ",Y+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",Y+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)y=s.src_ids[0]+".move(["+R(s.args.coords[0].usrCoords[1])+", ",y+=R(s.args.coords[0].usrCoords[2])+"]); ",Y=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(y+=s.src_ids[1]+".move(["+R(s.args.coords[1].usrCoords[1])+", ",y+=R(s.args.coords[1].usrCoords[2])+"]); ",Y+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,Y+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(y=Y="",i=0;i<s.src_ids.length;i++)y+=s.src_ids[i]+".move(["+R(s.args.coords[i].usrCoords[1])+", ",y+=R(s.args.coords[i].usrCoords[2])+"]); ",Y+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],Y+="]); ";else JXG.exists(s.args.coords[0])&&(y=s.src_ids[0]+".move(["+R(s.args.coords[0].usrCoords[1])+", ",y+=R(s.args.coords[0].usrCoords[2])+"]); ",Y=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[y,I,Y,L]},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"])}();
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Alfred Wassermann
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "jsxgraph",
3
3
  "description": "Interactive geometry, plotting, visualization",
4
4
  "homepage": "https://jsxgraph.org",
5
- "version": "1.9.0",
5
+ "version": "1.9.2",
6
6
  "exports": {
7
7
  "types": "./src/index.d.ts",
8
8
  "default": "./src/index.js"
@@ -69,9 +69,9 @@
69
69
  "jsdoc2": "^2.4.0",
70
70
  "jshint": "^2.13.1",
71
71
  "jslint": "^0.12.1",
72
- "karma": "^6.4.1",
73
- "karma-chrome-launcher": "^3.1.0",
74
- "karma-jasmine": "^4.0.1",
72
+ "karma": "^6.4.3",
73
+ "karma-chrome-launcher": "^3.2.0",
74
+ "karma-jasmine": "^5.1.0",
75
75
  "npmignore": "^0.3.1",
76
76
  "path-browserify": "^1.0.1",
77
77
  "prettier": "^2.7.1",
package/src/3d/box3d.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Andreas Walter,
@@ -78,6 +78,7 @@ JXG.createAxes3D = function (board, parents, attributes) {
78
78
  to = [0, 0, 0];
79
79
  to[i] = front[i];
80
80
  axes[na] = view.create("axis3d", [from, to], attr[na.toLowerCase()]);
81
+ axes[na].view = view;
81
82
  } else {
82
83
  na += "Border"; // Axes bordered
83
84
  from = rear.slice();
@@ -104,6 +105,7 @@ JXG.createAxes3D = function (board, parents, attributes) {
104
105
  ticks_attr.tickEndings = [1, 0];
105
106
  }
106
107
  axes[na + "Ticks"] = view.create("ticks", [axes[na], 1], ticks_attr);
108
+ axes[na + "Ticks"].view = view;
107
109
  }
108
110
  }
109
111
 
@@ -117,6 +119,7 @@ JXG.createAxes3D = function (board, parents, attributes) {
117
119
  withLabel: false
118
120
  }
119
121
  );
122
+ axes.O.view = view;
120
123
 
121
124
  // Front and rear planes
122
125
  for (i = 0; i < directions.length; i++) {
@@ -137,7 +140,6 @@ JXG.createAxes3D = function (board, parents, attributes) {
137
140
  range1 = [rear[i1], front[i1]];
138
141
  range2 = [rear[i2], front[i2]];
139
142
  na = dir + "Plane" + sides[j];
140
-
141
143
  attr = Type.copyAttributes(attributes, board.options, "axes3d", na);
142
144
  axes[na] = view.create("plane3d", [from, vec1, vec2, range1, range2], attr);
143
145
  axes[na].elType = "axisplane3d";
@@ -164,6 +166,7 @@ JXG.createAxes3D = function (board, parents, attributes) {
164
166
 
165
167
  attr = Type.copyAttributes(attributes, board.options, "axes3d", na);
166
168
  axes[na] = view.create("axis3d", [from, to], attr);
169
+ axes[na].view = view;
167
170
  axes[na_parent].addChild(axes[na]);
168
171
  axes[na_parent].element2D.inherits.push(axes[na]); // TODO: Access of element2D is not nice
169
172
  }
@@ -246,7 +249,7 @@ JXG.createMesh3D = function (board, parents, attr) {
246
249
  s2 = range2[0],
247
250
  e2 = range2[1],
248
251
  l1, l2, res, i,
249
- sol,
252
+ // sol,
250
253
  v1 = [0, 0, 0],
251
254
  v2 = [0, 0, 0],
252
255
  step = 1,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Aaron Fenyes,
5
5
  Carsten Miller,
@@ -51,6 +51,8 @@ import Geometry from '../math/geometry.js';
51
51
  * @see JXG.Board#generateName
52
52
  */
53
53
  JXG.Circle3D = function (view, center, normal, radius, attributes) {
54
+ var altFrame1;
55
+
54
56
  this.constructor(view.board, attributes, Const.OBJECT_TYPE_CIRCLE3D, Const.OBJECT_CLASS_3D);
55
57
  this.constructor3D(view, "circle3d");
56
58
 
@@ -129,9 +131,8 @@ JXG.Circle3D = function (view, center, normal, radius, attributes) {
129
131
  // [1, 0, 0] or [-0.5, sqrt(3)/2, 0]---whichever is further away on the unit
130
132
  // sphere. every vector is at least 60 degrees from one of these, which
131
133
  // should be good enough to make the frame vector numerically accurate
132
- const sqrt3_2 = 0.8660254037844386;
133
134
  this.frame1 = Mat.crossProduct(this.normal, [1, 0, 0]);
134
- var altFrame1 = Mat.crossProduct(this.normal, [-0.5, sqrt3_2, 0]);
135
+ altFrame1 = Mat.crossProduct(this.normal, [-0.5, 0.8660254037844386, 0]); // [1/2, sqrt(3)/2, 0]
135
136
  if (Mat.norm(altFrame1) > Mat.norm(this.frame1)) {
136
137
  this.frame1 = altFrame1;
137
138
  }
@@ -149,7 +150,7 @@ JXG.Circle3D = function (view, center, normal, radius, attributes) {
149
150
  (t) => this.center.X() + this.Radius() * (Math.cos(t) * this.frame1[0] + Math.sin(t) * this.frame2[0]),
150
151
  (t) => this.center.Y() + this.Radius() * (Math.cos(t) * this.frame1[1] + Math.sin(t) * this.frame2[1]),
151
152
  (t) => this.center.Z() + this.Radius() * (Math.cos(t) * this.frame1[2] + Math.sin(t) * this.frame2[2]),
152
- [0, 2*Math.PI] // parameter range
153
+ [0, 2 * Math.PI] // parameter range
153
154
  ],
154
155
  attributes
155
156
  );
@@ -199,7 +200,7 @@ JXG.extend(
199
200
  return Math.abs(this.updateRadius());
200
201
  },
201
202
 
202
- normalizeFrame: function() {
203
+ normalizeFrame: function () {
203
204
  // normalize frame
204
205
  var len1 = Mat.norm(this.frame1),
205
206
  len2 = Mat.norm(this.frame2),
@@ -351,7 +352,7 @@ JXG.createIntersectionCircle3D = function (board, parents, attributes) {
351
352
  attr = Type.copyAttributes(attributes, board.options, "intersectioncircle3d");
352
353
 
353
354
  func = Geometry.intersectionFunction3D(view, el1, el2);
354
- center = view.create('point3d', func[0], {visible: false});
355
+ center = view.create('point3d', func[0], { visible: false });
355
356
  ixnCircle = view.create('circle3d', [center, func[1], func[2]], attr);
356
357
 
357
358
  try {
@@ -360,10 +361,10 @@ JXG.createIntersectionCircle3D = function (board, parents, attributes) {
360
361
  } catch (e) {
361
362
  throw new Error(
362
363
  "JSXGraph: Can't create 'intersection' with parent types '" +
363
- typeof parents[0] +
364
- "' and '" +
365
- typeof parents[1] +
366
- "'."
364
+ typeof parents[0] +
365
+ "' and '" +
366
+ typeof parents[1] +
367
+ "'."
367
368
  );
368
369
  }
369
370
 
package/src/3d/curve3d.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Andreas Walter,
@@ -228,6 +228,8 @@ JXG.createCurve3D = function (board, parents, attributes) {
228
228
 
229
229
  attr = el.setAttr2D(attr);
230
230
  el.element2D = view.create("curve", [[], []], attr);
231
+ el.element2D.view = view;
232
+
231
233
  /**
232
234
  * @class
233
235
  * @ignore
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Andreas Walter,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Aaron Fenyes,
5
5
  Carsten Miller,
@@ -173,52 +173,10 @@ JXG.extend(
173
173
  },
174
174
 
175
175
  projectScreenCoords: function (pScr) {
176
- var p0_coords = this.getPointCoords(0),
177
- p1_coords = this.getPointCoords(1),
178
- p0_2d = this.view.project3DTo2D(p0_coords).slice(1, 3),
179
- p1_2d = this.view.project3DTo2D(p1_coords).slice(1, 3),
180
- dir_2d = [
181
- p1_2d[0] - p0_2d[0],
182
- p1_2d[1] - p0_2d[1]
183
- ],
184
- dir_2d_norm_sq = Mat.innerProduct(dir_2d, dir_2d),
185
- diff = [
186
- pScr[0] - p0_2d[0],
187
- pScr[1] - p0_2d[1]
188
- ],
189
- s = Mat.innerProduct(diff, dir_2d) / dir_2d_norm_sq, // Screen-space affine parameter
190
- t, // view-space affine parameter
191
- t_clamped, // affine parameter clamped to range
192
- c3d;
176
+ var end0 = this.getPointCoords(0),
177
+ end1 = this.getPointCoords(1);
193
178
 
194
- if (this.view.projectionType === 'central') {
195
- const mid_coords = this.getPointCoords(0.5),
196
- mid_2d = this.view.project3DTo2D(mid_coords).slice(1, 3),
197
- mid_diff = [
198
- mid_2d[0] - p0_2d[0],
199
- mid_2d[1] - p0_2d[1]
200
- ],
201
- m = Mat.innerProduct(mid_diff, dir_2d) / dir_2d_norm_sq;
202
-
203
- // The view-space affine parameter s is related to the
204
- // screen-space affine parameter t by a Möbius transformation,
205
- // which is determined by the following relations:
206
- //
207
- // s | t
208
- // -----
209
- // 0 | 0
210
- // m | 1/2
211
- // 1 | 1
212
- //
213
- t = (1 - m) * s / ((1 - 2 * m) * s + m);
214
- } else {
215
- t = s;
216
- }
217
-
218
- t_clamped = Math.min(Math.max(t, this.range[0]), this.range[1]);
219
- c3d = this.getPointCoords(t_clamped).slice();
220
- c3d.unshift(1);
221
- return c3d;
179
+ return this.view.projectScreenToSegment(pScr, end0, end1);
222
180
  }
223
181
  }
224
182
  );
@@ -321,7 +279,7 @@ JXG.createLine3D = function (board, parents, attributes) {
321
279
  [0, 0, 0],
322
280
  [0, 0, 0]
323
281
  ],
324
- {visible: false},
282
+ { visible: false },
325
283
  'line3d',
326
284
  ['point1', 'point2']
327
285
  );
@@ -348,6 +306,7 @@ JXG.createLine3D = function (board, parents, attributes) {
348
306
  attr.straightfirst = false;
349
307
  attr.straightlast = false;
350
308
  el.element2D = view.create('segment', [endpoints[0].element2D, endpoints[1].element2D], attr);
309
+ el.element2D.view = view;
351
310
 
352
311
  /**
353
312
  * Shadow points that determine the visible line.
@@ -420,6 +379,7 @@ JXG.createLine3D = function (board, parents, attributes) {
420
379
  attr.straightfirst = false;
421
380
  attr.straightlast = false;
422
381
  el.element2D = view.create('segment', [point1.element2D, point2.element2D], attr);
382
+ el.element2D.view = view;
423
383
 
424
384
  el.endpoints = points;
425
385
  }
@@ -813,6 +773,7 @@ JXG.createPlane3D = function (board, parents, attributes) {
813
773
 
814
774
  attr = el.setAttr2D(attr);
815
775
  el.element2D = view.create('curve', [[], []], attr);
776
+ el.element2D.view = view;
816
777
 
817
778
  /**
818
779
  * @class
@@ -835,16 +796,18 @@ JXG.createPlane3D = function (board, parents, attributes) {
835
796
  Math.abs(el.range2[1]) !== Infinity
836
797
  ) {
837
798
  grid = view.create('mesh3d', [
838
- function () {
839
- return point.coords;
840
- },
841
- dir1, range1, dir2, range2
842
- ], attr
799
+ function () {
800
+ return point.coords;
801
+ },
802
+ dir1, range1, dir2, range2
803
+ ], attr
843
804
  );
844
805
  el.grid = grid;
845
806
  el.addChild(grid);
846
807
  el.inherits.push(grid);
847
808
  grid.setParents(el);
809
+ el.grid.view = view;
810
+
848
811
  }
849
812
 
850
813
  el.element2D.prepareUpdate().update();
@@ -947,13 +910,13 @@ JXG.createIntersectionLine3D = function (board, parents, attributes) {
947
910
  try {
948
911
  el1.addChild(ixnLine);
949
912
  el2.addChild(ixnLine);
950
- } catch (e) {
913
+ } catch (_e) {
951
914
  throw new Error(
952
915
  "JSXGraph: Can't create 'intersection' with parent types '" +
953
- typeof parents[0] +
954
- "' and '" +
955
- typeof parents[1] +
956
- "'."
916
+ typeof parents[0] +
917
+ "' and '" +
918
+ typeof parents[1] +
919
+ "'."
957
920
  );
958
921
  }
959
922
 
package/src/3d/point3d.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Andreas Walter,
@@ -54,6 +54,11 @@ JXG.Point3D = function (view, F, slide, attributes) {
54
54
 
55
55
  this.board.finalizeAdding(this);
56
56
 
57
+ // add the new point to its view's point list
58
+ if (view.visProp.depthorderpoints) {
59
+ view.points.push(this);
60
+ }
61
+
57
62
  /**
58
63
  * Homogeneous coordinates of a Point3D, i.e. array of length 4: [w, x, y, z]. Usually, w=1 for finite points and w=0 for points
59
64
  * which are infinitely far.
@@ -451,6 +456,7 @@ JXG.createPoint3D = function (board, parents, attributes) {
451
456
 
452
457
  attr = el.setAttr2D(attr);
453
458
  el.element2D = view.create('point', c2d, attr);
459
+ el.element2D.view = view;
454
460
  el.addChild(el.element2D);
455
461
  el.inherits.push(el.element2D);
456
462
  el.element2D.setParents(el);