jsxgraph 1.4.0 → 1.4.3

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 (98) hide show
  1. package/README.md +1 -1
  2. package/distrib/README.md +1 -1
  3. package/distrib/geogebra.min.js +3 -3
  4. package/distrib/geonext.min.js +3 -3
  5. package/distrib/index.d.ts +5205 -4629
  6. package/distrib/intergeo.min.js +3 -3
  7. package/distrib/jsxgraph.css +10 -15
  8. package/distrib/jsxgraphcore.js +9 -25
  9. package/distrib/jsxgraphsrc.js +4497 -2180
  10. package/distrib/sketch.min.js +3 -3
  11. package/package.json +3 -2
  12. package/src/3d/box3d.js +264 -0
  13. package/src/3d/curve3d.js +97 -0
  14. package/src/3d/linspace3d.js +375 -0
  15. package/src/3d/point3d.js +200 -0
  16. package/src/3d/surface3d.js +81 -0
  17. package/src/3d/threed.js +38 -0
  18. package/src/3d/view3d.js +459 -0
  19. package/src/base/board.js +139 -85
  20. package/src/base/chart.js +1 -1
  21. package/src/base/circle.js +1 -1
  22. package/src/base/composition.js +1 -1
  23. package/src/base/constants.js +15 -14
  24. package/src/base/coords.js +3 -3
  25. package/src/base/coordselement.js +5 -8
  26. package/src/base/curve.js +1 -1
  27. package/src/base/element.js +36 -28
  28. package/src/base/foreignobject.js +12 -2
  29. package/src/base/group.js +1 -1
  30. package/src/base/image.js +1 -1
  31. package/src/base/line.js +2 -2
  32. package/src/base/point.js +8 -18
  33. package/src/base/polygon.js +89 -34
  34. package/src/base/text.js +8 -7
  35. package/src/base/ticks.js +17 -3
  36. package/src/base/transformation.js +1 -1
  37. package/src/base/turtle.js +1 -1
  38. package/src/element/arc.js +1 -1
  39. package/src/element/button.js +1 -1
  40. package/src/element/checkbox.js +1 -1
  41. package/src/element/comb.js +1 -1
  42. package/src/element/composition.js +2 -2
  43. package/src/element/conic.js +3 -3
  44. package/src/element/input.js +1 -1
  45. package/src/element/locus.js +1 -1
  46. package/src/element/measure.js +9 -4
  47. package/src/element/sector.js +5 -5
  48. package/src/element/slider.js +29 -12
  49. package/src/element/slopetriangle.js +1 -1
  50. package/src/jsxgraph.js +9 -3
  51. package/src/jxg.js +3 -3
  52. package/src/loadjsxgraph.js +18 -12
  53. package/src/math/bst.js +1 -1
  54. package/src/math/clip.js +550 -345
  55. package/src/math/complex.js +1 -1
  56. package/src/math/extrapolate.js +1 -1
  57. package/src/math/geometry.js +85 -6
  58. package/src/math/ia.js +69 -69
  59. package/src/math/math.js +10 -1
  60. package/src/math/metapost.js +1 -1
  61. package/src/math/nlp.js +4 -4
  62. package/src/math/numerics.js +2 -1
  63. package/src/math/plot.js +4 -4
  64. package/src/math/poly.js +1 -1
  65. package/src/math/probfuncs.js +2 -1
  66. package/src/math/qdt.js +11 -11
  67. package/src/math/statistics.js +10 -10
  68. package/src/math/symbolic.js +1 -1
  69. package/src/options.js +96 -40
  70. package/src/options3d.js +123 -0
  71. package/src/parser/ca.js +1297 -1291
  72. package/src/parser/datasource.js +1 -1
  73. package/src/parser/geonext.js +6 -6
  74. package/src/parser/jessiecode.js +369 -73
  75. package/src/parser/jessiescript.js +1 -1
  76. package/src/reader/cinderella.js +1 -1
  77. package/src/reader/file.js +1 -1
  78. package/src/reader/geogebra.js +1 -1
  79. package/src/reader/geonext.js +1 -1
  80. package/src/reader/graph.js +1 -1
  81. package/src/reader/intergeo.js +1 -1
  82. package/src/reader/sketch.js +7 -7
  83. package/src/renderer/abstract.js +8 -2
  84. package/src/renderer/canvas.js +9 -5
  85. package/src/renderer/no.js +2 -1
  86. package/src/renderer/svg.js +10 -13
  87. package/src/renderer/vml.js +1 -1
  88. package/src/server/server.js +1 -1
  89. package/src/utils/base64.js +2 -2
  90. package/src/utils/color.js +8 -9
  91. package/src/utils/dump.js +20 -5
  92. package/src/utils/env.js +13 -54
  93. package/src/utils/event.js +1 -1
  94. package/src/utils/expect.js +1 -1
  95. package/src/utils/type.js +12 -10
  96. package/src/utils/xml.js +1 -1
  97. package/src/utils/zip.js +1 -1
  98. package/CHANGELOG.md +0 -1366
@@ -1,7 +1,7 @@
1
1
  /*
2
- JSXGraph 1.4.0
2
+ JSXGraph 1.4.3
3
3
 
4
- Copyright 2008-2021
4
+ Copyright 2008-2022
5
5
  Matthias Ehmann,
6
6
  Michael Gerhaeuser,
7
7
  Carsten Miller,
@@ -58,4 +58,4 @@
58
58
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
59
59
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
60
60
  */
61
- (function(){"use strict";JXG.SketchReader=function(board,str){this.read=function(){var i,t,arr,unzipped,meta,constr;unzipped=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(str)).unzip();if(!JXG.exists(unzipped[0])){return""}unzipped=JXG.Util.UTF8.decode(unzipped[0][0]);constr=jQuery.parseJSON(unzipped);meta=constr.pop();if(!JXG.exists(meta.unredo)){t=constr.length-1}else{t=meta.unredo}for(i=0;i<=t;i++){if(constr[i].type!==0){try{if(constr[i].type>50){arr=JXG.SketchReader.generateJCodeMeta(constr[i],board)}else{arr=JXG.SketchReader.generateJCode(constr[i],board,constr)}}catch(e){JXG.debug("#steps: "+constr.length);JXG.debug("step: "+i+", type: "+constr[i].type);JXG.debug(constr[i])}board.jc.parse(arr[0],true)}}arr=meta.boundingBox;board.jc.parse("$board.setView("+JSON.stringify(arr)+");");return""}};JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:false,useGlider:false,useSymbols:false},generateJCode:function(step,board,step_log){var i,j,k,sub_id,str,str1,str2,objects,pid1,pid2,pid3,xstart,ystart,el,arr,step2,options,assign,attrid,le,x,y,key,copy_log=[],set_str="",reset_str="",ctx_set_str="",ctx_reset_str="",pn=function(v){if(options.toFixed>0){v=parseFloat(v);return JXG.toFixed(v,options.toFixed)}return v},getObject=function(v){var o;if(options.useSymbols){if(board.jc.scope.locals[v]){o=board.jc.scope.locals[v]}else{o=objects[v]}}else{o=objects[v]}return o};options=JXG.SketchReader.generator;objects=board.objects;assign="";attrid="id: '"+step.dest_id+"', ";if(JXG.exists(board)&&options.useSymbols&&step.type!==JXG.GENTYPE_ABLATION){attrid="";assign=step.dest_id+" = ";for(i=0;i<step.src_ids.length;i++){str=board.jc.findSymbol(getObject(step.src_ids[i]),0);if(str.length>0){step.src_ids[i]=str[0]}}}if(step.type>50){return JXG.SketchReader.generateJCodeMeta(step,board)}switch(step.type){case JXG.GENTYPE_TRUNCATE:set_str="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:set_str=step.args.code;break;case JXG.GENTYPE_AXIS:set_str=step.args.name[0]+" = point("+step.args.coords[0].usrCoords[1]+", ";set_str+=step.args.coords[0].usrCoords[2]+") <<id: '"+step.dest_sub_ids[0]+"', name: '";set_str+=step.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+step.args.name[1];set_str+=" = point("+step.args.coords[1].usrCoords[1]+", ";set_str+=step.args.coords[1].usrCoords[2]+") <<id: '"+step.dest_sub_ids[1]+"', name: '";set_str+=step.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+step.args.name[2];set_str+=" = point("+step.args.coords[2].usrCoords[1]+", ";set_str+=step.args.coords[2].usrCoords[2]+") <<id: '"+step.dest_sub_ids[2]+"', name: '";set_str+=step.args.name[2]+"', fixed: true, priv: true, visible: false>>; ";set_str+=step.args.name[3]+" = axis("+step.args.name[0]+", "+step.args.name[1]+") ";set_str+="<<id: '"+step.dest_sub_ids[3]+"', name: '"+step.args.name[3]+"', ticks: ";set_str+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true";set_str+=', label: <<offset: [-4, -16], parse: false, display: "internal">>';set_str+=", drawZero: false>>>>; ";set_str+=step.args.name[4]+" = axis("+step.args.name[0]+", "+step.args.name[2]+") ";set_str+="<<id: '"+step.dest_sub_ids[4]+"', name: '"+step.args.name[4]+"', ticks: ";set_str+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true";set_str+=', label: <<offset: [10, 0], parse: false, display: "internal">>';set_str+=", drawZero: false>>>>; ";set_str+=step.dest_sub_ids[3]+".visible = false; ";set_str+=step.dest_sub_ids[4]+".visible = false; ";reset_str="remove("+step.dest_sub_ids[4]+"); remove("+step.dest_sub_ids[3];reset_str+="); remove("+step.dest_sub_ids[2]+"); ";reset_str+="remove("+step.dest_sub_ids[1]+"); remove("+step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:set_str=assign+"midpoint("+step.src_ids[0]+", "+step.src_ids[1]+") <<"+attrid;set_str+="fillColor: '"+step.args.fillColor+"'";if(JXG.exists(step.args.strokeColor)){set_str+=", strokeColor: '"+step.args.strokeColor+"'"}set_str+=">>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if(step.args.type==="polygon"){set_str="";el=step.src_ids[step.src_ids.length-1];for(i=1;i<step.src_ids.length-1;i++){set_str+=assign+"reflection("+step.src_ids[i]+", "+el+') <<id:"'+step.dest_sub_ids[i-1]+'"';if(JXG.exists(step.args.subnames)){set_str+=', name:"'+step.args.subnames[i-1]+'"'}else{set_str+=', name: ""'}set_str+=", color: '"+step.args.strokeColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n"}le=step.dest_sub_ids.length/2;set_str+=assign+"polygon(";set_str+=step.dest_sub_ids.slice(0,le).join();set_str+=") <<borders: <<ids: ['"+step.dest_sub_ids.slice(le,2*le).join("', '")+"']";x=[];for(i=0;i<le;i++){x.push("''")}set_str+=", names: ["+x.join()+"]";set_str+=">>, "+attrid+" fillOpacity: ";set_str+=step.args.opacity+", name: '' ";set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;if(step.args.name!==""){set_str+=', name: "'+step.args.name+'"';set_str+=", withLabel: true"}set_str+=", fillColor: '"+step.args.fillColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if(step.args.type==="line"||step.args.type==="vector"){set_str="";el=step.src_ids[step.src_ids.length-1];for(i=1;i<step.src_ids.length-1;i++){set_str+=assign+"reflection("+step.src_ids[i]+", "+el+') <<id:"'+step.dest_sub_ids[i-1]+'"';if(JXG.exists(step.args.subnames)){set_str+=', name:"'+step.args.subnames[i-1]+'"'}else{set_str+=', name: ""'}set_str+=", color: '"+step.args.strokeColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n"}if(step.args.type==="vector"){set_str+=assign+"arrow("+step.dest_sub_ids[0]+","+step.dest_sub_ids[1]+") "}else{set_str+=assign+"line("+step.dest_sub_ids[0]+","+step.dest_sub_ids[1]+") "}set_str+="<<";set_str+=attrid;set_str+="strokeColor: '"+step.args.strokeColor+"'";set_str+=", opacity: '"+step.args.opacity+"'";set_str+=', name: "'+step.args.name+'"';set_str+=', id: "'+step.dest_id+'"';if(JXG.exists(step.args.attr)){for(key in step.args.attr)if(step.args.attr.hasOwnProperty(key)){set_str+=", "+key+": "+step.args.attr[key]+""}}if(step.args.name!==""){set_str+=", withLabel: true"}set_str+=">>; "}else if(step.args.type==="circle"){set_str+=assign+"reflection("+step.src_ids[0]+","+step.src_ids[2]+") ";set_str+="<<";set_str+=attrid;set_str+="strokeColor: '"+step.args.strokeColor+"'";set_str+=", opacity: '"+step.args.opacity+"'";set_str+=', name: "'+step.args.name+'"';set_str+=', id: "'+step.dest_id+'"';if(JXG.exists(step.args.attr)){for(key in step.args.attr)if(step.args.attr.hasOwnProperty(key)){set_str+=", "+key+": "+step.args.attr[key]+""}}if(step.args.name!==""){set_str+=", withLabel: true"}set_str+=', center: <<id:"'+step.dest_sub_ids[0]+'"';if(JXG.exists(step.args.subnames)){set_str+=', name:"'+step.args.subnames[0]+'"'}else{set_str+=', name: ""'}set_str+=", color: '"+step.args.strokeColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>";set_str+=">>; "}else{set_str=assign+"reflection("+step.src_ids[0]+", "+step.src_ids[1]+") <<"+attrid;set_str+="fillColor: '"+step.args.fillColor+"'";if(JXG.exists(step.args.strokeColor)){set_str+=", strokeColor: '"+step.args.strokeColor+"'";set_str+=", opacity: '"+step.args.opacity+"'"}set_str+=', name: "'+step.args.name+'"';set_str+=', id: "'+step.dest_id+'"';if(JXG.exists(step.args.attr)){for(key in step.args.attr)if(step.args.attr.hasOwnProperty(key)){set_str+=", "+key+": "+step.args.attr[key]+""}}if(step.args.name!==""){set_str+=", withLabel: true"}set_str+=">>; "}reset_str="";for(i=0;i<step.dest_sub_ids.length;i++){if(step.dest_sub_ids[i]!==0){reset_str+="remove("+step.dest_sub_ids[i]+"); "}}reset_str+="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if(step.args.type==="polygon"){set_str="";el=step.src_ids[step.src_ids.length-1];for(i=1;i<step.src_ids.length-1;i++){set_str+=assign+"mirrorelement("+step.src_ids[i]+", "+el+') <<id:"'+step.dest_sub_ids[i-1]+'"';if(JXG.exists(step.args.subnames)){set_str+=', name:"'+step.args.subnames[i-1]+'"'}else{set_str+=', name: ""'}set_str+=", color: '"+step.args.strokeColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n"}le=step.dest_sub_ids.length/2;set_str+=assign+"polygon(";set_str+=step.dest_sub_ids.slice(0,le).join();set_str+=") <<borders: <<ids: ['"+step.dest_sub_ids.slice(le,2*le).join("', '")+"']";x=[];for(i=0;i<le;i++){x.push("''")}set_str+=", names: ["+x.join()+"]";set_str+=">>, "+attrid+" fillOpacity: ";set_str+=step.args.opacity+", name: '' ";set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;if(step.args.name!==""){set_str+=', name: "'+step.args.name+'"';set_str+=", withLabel: true"}set_str+=", fillColor: '"+step.args.fillColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if(step.args.type==="line"||step.args.type==="vector"){set_str="";el=step.src_ids[step.src_ids.length-1];for(i=1;i<step.src_ids.length-1;i++){set_str+=assign+"mirrorelement("+step.src_ids[i]+", "+el+') <<id:"'+step.dest_sub_ids[i-1]+'"';if(JXG.exists(step.args.subnames)){set_str+=', name:"'+step.args.subnames[i-1]+'"'}else{set_str+=', name: ""'}set_str+=", color: '"+step.args.strokeColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n"}if(step.args.type==="vector"){set_str+=assign+"arrow("+step.dest_sub_ids[0]+","+step.dest_sub_ids[1]+") "}else{set_str+=assign+"line("+step.dest_sub_ids[0]+","+step.dest_sub_ids[1]+") "}set_str+="<<";set_str+=attrid;set_str+="strokeColor: '"+step.args.strokeColor+"'";set_str+=", opacity: '"+step.args.opacity+"'";set_str+=', name: "'+step.args.name+'"';set_str+=', id: "'+step.dest_id+'"';if(JXG.exists(step.args.attr)){for(key in step.args.attr)if(step.args.attr.hasOwnProperty(key)){set_str+=", "+key+": "+step.args.attr[key]+""}}if(step.args.name!==""){set_str+=", withLabel: true"}set_str+=">>; "}else if(step.args.type==="circle"){set_str+=assign+"mirrorelement("+step.src_ids[0]+","+step.src_ids[2]+") ";set_str+="<<";set_str+=attrid;set_str+="strokeColor: '"+step.args.strokeColor+"'";set_str+=", opacity: '"+step.args.opacity+"'";set_str+=', name: "'+step.args.name+'"';set_str+=', id: "'+step.dest_id+'"';if(JXG.exists(step.args.attr)){for(key in step.args.attr)if(step.args.attr.hasOwnProperty(key)){set_str+=", "+key+": "+step.args.attr[key]+""}}if(step.args.name!==""){set_str+=", withLabel: true"}set_str+=', center: <<id:"'+step.dest_sub_ids[0]+'"';if(JXG.exists(step.args.subnames)){set_str+=', name:"'+step.args.subnames[0]+'"'}else{set_str+=', name: ""'}set_str+=", color: '"+step.args.strokeColor+"'";set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>";set_str+=">>; "}else{set_str=assign+"mirrorelement("+step.src_ids[0]+", "+step.src_ids[1]+") <<"+attrid;set_str+="fillColor: '"+step.args.fillColor+"'";if(JXG.exists(step.args.strokeColor)){set_str+=", strokeColor: '"+step.args.strokeColor+"'";set_str+=", opacity: '"+step.args.opacity+"'"}set_str+=', id: "'+step.dest_id+'"';set_str+=', name: "'+step.args.name+'"';if(JXG.exists(step.args.attr)){for(key in step.args.attr)if(step.args.attr.hasOwnProperty(key)){set_str+=", "+key+": "+step.args.attr[key]+""}}if(step.args.name!==""){set_str+=", withLabel: true"}set_str+=">>; "}reset_str="";for(i=0;i<step.dest_sub_ids.length;i++){if(step.dest_sub_ids[i]!==0){reset_str+="remove("+step.dest_sub_ids[i]+"); "+reset_str}}reset_str+="remove("+step.dest_id+"); "+reset_str;break;case JXG.GENTYPE_TANGENT:if(step.args.create_point){sub_id=step.dest_sub_ids[2];set_str="point("+pn(step.args.usrCoords[1])+","+pn(step.args.usrCoords[2])+") <<id: '";set_str+=sub_id+"', fillColor: '"+step.args.fillColor+"'";if(JXG.exists(step.args.strokeColor)){set_str+=", strokeColor: '"+step.args.strokeColor+"'"}set_str+=">>; "+sub_id+".glide(";set_str+=step.src_ids[0]+"); ";reset_str="remove("+sub_id+"); "}else{sub_id=step.src_ids[0]}set_str+=assign+"tangent("+sub_id+") <<"+attrid+"point1: <<name: '";set_str+="', id: '"+step.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '";set_str+="', id: '"+step.dest_sub_ids[1]+"', priv: true>> >>; ";reset_str="remove("+step.dest_sub_ids[0]+"); "+reset_str;reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[1]+"); "+reset_str;break;case JXG.GENTYPE_PARALLEL:if(step.args.create_point){sub_id=step.dest_sub_ids[1];set_str="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") <<id: '";set_str+=sub_id+"', name: '', visible: false, priv: true>>; ";reset_str="remove("+sub_id+"); "}else{sub_id=step.src_ids[1]}set_str+=assign+"parallel("+step.src_ids[0]+", "+sub_id+") <<"+attrid+"name: '', point: <<id: '";set_str+=step.dest_sub_ids[0]+"', name: ''>> >>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "+reset_str;break;case JXG.GENTYPE_BISECTORLINES:set_str="bisectorlines("+step.src_ids[0]+", "+step.src_ids[1]+") <<line1: <<id: '";set_str=set_str+step.dest_sub_ids[2]+"', point1: <<id: '"+step.dest_sub_ids[1];set_str+="', name: ''>>, point2: <<id: '"+step.dest_sub_ids[0];set_str+="', name: ''>>>>, line2: <<id: '"+step.dest_sub_ids[5];set_str+="', point1: <<id: '"+step.dest_sub_ids[4]+"', name: '";set_str+="'>>, point2: <<id: '"+step.dest_sub_ids[3]+"', name: '";set_str+="'>>>>>>; ";reset_str="remove("+step.dest_sub_ids[5]+"); remove("+step.dest_sub_ids[4]+"); remove(";reset_str+=step.dest_sub_ids[3]+"); remove("+step.dest_sub_ids[2]+"); remove(";reset_str+=step.dest_sub_ids[1]+"); remove("+step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:set_str="image('"+step.args.s+"', [ "+step.args.anchor+" ], [ "+step.args.scale+" ]) ";set_str+="<<id: '"+step.dest_id+"'>>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:if(step.args.create_point){set_str="";reset_str="";pid1=step.dest_sub_ids[1];pid2=step.dest_sub_ids[2];if(options.useGlider){set_str+="glider("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+", "+step.src_ids[0]+")";set_str+="<<id: '"+pid1+"', name:'', withLabel:false, priv:true, visible:false >>; ";set_str+="glider("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+", "+step.src_ids[1]+")";set_str+="<<id: '"+pid2+"', name:'', withLabel:false, priv:true, visible:false >>; "}else{set_str+="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") ";set_str+="<<id:'"+pid1+"', ";set_str+="name:'', withLabel:false, priv:true, visible:false >>; ";set_str+=pid1+".glide("+step.src_ids[0]+"); ";set_str+="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") ";set_str+="<<id:'"+pid2+"', ";set_str+="name:'', priv:true, visible:false >>; ";set_str+=pid2+".glide("+step.src_ids[1]+"); "}reset_str+="remove("+pid1+"); ";reset_str+="remove("+pid2+"); ";if(step.args.create_intersection){pid3=step.dest_sub_ids[3];set_str+="intersection("+step.src_ids[0]+", "+step.src_ids[1]+", 0) ";set_str+="<<id:'"+pid3+"', fillColor: '"+step.args.fillColor+"', ";set_str+="name:'', priv:true, visible:false >>; ";reset_str+="remove("+pid3+"); "}else{pid3=step.src_ids[2]}set_str+=assign+"bisector("+pid1+", "+pid3+", "+pid2+") ";set_str+="<<"+attrid+"name: '', point: <<id: '"+step.dest_sub_ids[0]+"', priv: true, name: '";set_str+=step.dest_sub_ids[0]+"'>> >>;";reset_str+="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+");"}else{set_str=assign+"bisector("+step.src_ids[1]+", "+step.src_ids[2]+", "+step.src_ids[0];set_str+=") <<"+attrid+"name: '', point: <<id: '"+step.dest_sub_ids[0]+"', priv: true, name: '";set_str+=step.dest_sub_ids[0]+"'>>>>;";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+");"}break;case JXG.GENTYPE_NORMAL:if(step.args.create_point){sub_id=step.dest_sub_ids[1];set_str="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2]);set_str+=") <<id: '"+sub_id+"', name: '', visible: false, priv: true>>; ";reset_str="remove("+sub_id+"); "}else{sub_id=step.src_ids[1]}set_str+=assign+"normal("+sub_id+", "+step.src_ids[0]+") <<"+attrid;set_str+="name: '', point: <<id: '"+step.dest_sub_ids[0]+"', name: '";set_str+="'>> >>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "+reset_str;break;case JXG.GENTYPE_PERPSEGMENT:set_str+=assign+"perpendicularsegment("+step.src_ids[1]+", "+step.src_ids[0]+") <<"+attrid;set_str+="name: '', point: <<id: '"+step.dest_sub_ids[0]+"', name: '";set_str+="'>> >>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "+reset_str;break;case JXG.GENTYPE_POINT:set_str=assign+"point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2]);set_str+=")"+(options.useSymbols?"":" <<id: '"+step.dest_id+"'"+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:if(options.useGlider){set_str=assign+"glider("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2]);set_str+=", "+step.src_ids[0]+")";set_str+=(options.useSymbols?"":"<<id: '"+step.dest_id+"'"+", snaptogrid: false, snaptopoints: false"+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"}else{set_str=assign+"point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2]);set_str+=") <<"+attrid+"fillColor: '"+JXG.Options.glider.fillColor+"'";set_str+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'";set_str+=", snapToGrid: false, snapToPoints: false";set_str+=">>; "+step.dest_id;set_str+=".glide("+step.src_ids[0]+"); "}set_str+=step.dest_id+".onPolygon = "+!!step.args.onPolygon+";";if(!(step.args&&step.args.undoIsEmpty)){reset_str="remove("+step.dest_id+"); "}break;case JXG.GENTYPE_INTERSECTION:set_str=assign+"intersection("+step.src_ids[0]+", "+step.src_ids[1]+", "+step.args.choice;set_str+=") <<"+attrid+" fillColor: '"+JXG.Options.intersection.fillColor+"'";set_str+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'";set_str+=">>; ";if(!(step.args&&step.args.undoIsEmpty)){reset_str="remove("+step.dest_id+"); "}break;case JXG.GENTYPE_MIGRATE:set_str="$board.migratePoint("+step.src_ids[0]+", "+step.dest_id+", false); ";if(step.args&&step.args.migrateToGlider){var o,gl,uc1,uc2;reset_str=step.dest_id+".free(); "+step.dest_id;reset_str+=".fillColor = '"+step.args.fillColor+"'; "+step.dest_id;reset_str+=".strokeColor = '"+step.args.strokeColor+"'; ";uc1=step.args.usrCoords[1];uc2=step.args.usrCoords[2];reset_str+="point("+uc1+", "+uc2+")";reset_str+=" <<id: '"+step.src_ids[0]+"', name: ''>>"+"; ";reset_str+="$board.migratePoint("+step.dest_id+", "+step.src_ids[0]+", false); ";reset_str+=step.src_ids[0]+".name = '"+step.args.orig_name+"'; ";reset_str+=step.src_ids[0]+".label.setText('"+step.args.orig_name+"'); ";o=board.objects[step.dest_id];gl=o.slideObject.id;uc1=o.coords.usrCoords[1];uc2=o.coords.usrCoords[2];reset_str+=assign+"point("+uc1+", "+uc2+") ";reset_str+="<<"+attrid+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ";reset_str+=step.dest_id+".glide("+gl+"); "}else{}break;case JXG.GENTYPE_COMBINED:set_str=reset_str="";for(i=0;i<step.args.steps.length;i++){arr=this.generateJCode(step.args.steps[i],board,step_log);set_str=set_str+arr[0];reset_str=arr[2]+reset_str}break;case JXG.GENTYPE_CIRCLE:var withName="name: '', withLabel: true,";if(step.args.withName)withName="withLabel: true,";if(step.args.create_by_additional_point||step.args.create_point){if(!JXG.exists(step.args.center_existing)||!step.args.center_existing){set_str="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") ";set_str+="<<id: '"+step.dest_sub_ids[0]+"', "+withName+" visible: true, priv: false>>; "}set_str+=assign+"circle("+step.dest_sub_ids[0]+", "+step.src_ids[0]+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "}else if(step.args.create_by_radius){set_str="";if(!JXG.exists(step.args.center_existing)||!step.args.center_existing){if(JXG.exists(step.args.x)&&JXG.exists(step.args.y))set_str+="point("+pn(step.args.x)+", "+pn(step.args.y)+") ";else set_str+="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") ";set_str+="<<id: '"+step.dest_sub_ids[0]+"', "+withName+" visible: true, priv: false>>; "}if(JXG.exists(step.args.r))set_str+=assign+"circle('"+step.dest_sub_ids[0]+"', "+pn(step.args.r)+") <<"+attrid;else set_str+=assign+"circle('"+step.dest_sub_ids[0]+"', "+pn(step.args.radius)+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "}else{if(step.src_ids.length===2){set_str="midpoint("+step.src_ids[0]+", "+step.src_ids[1]+")";set_str+="<<id: '"+step.dest_sub_ids[0]+"', "+withName+" visible: true, priv: false>>; ";set_str+=assign+"circle("+step.dest_sub_ids[0]+", "+step.src_ids[0]+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "}else{set_str=assign+"circle("+step.src_ids[0]+", "+step.src_ids[1]+", "+step.src_ids[2];set_str+=") <<center: <<id: '"+step.dest_sub_ids[0]+"', "+withName;set_str+=" visible: true>>, "+attrid+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "}}break;case JXG.GENTYPE_CIRCLE2POINTS:if(step.args.create_two_points){set_str="point("+pn(step.args.x1)+", "+pn(step.args.y1)+") <<id: '"+step.dest_sub_ids[0];set_str+="'>>; ";set_str+="point("+pn(step.args.x2)+", "+pn(step.args.y2)+") <<id: '";set_str+=step.dest_sub_ids[1]+"'>>; ";set_str+=assign+"circle("+step.dest_sub_ids[0]+", "+step.dest_sub_ids[1]+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[1]+"); remove(";reset_str+=step.dest_sub_ids[0]+"); "}else if(step.args.create_point){set_str="point("+pn(step.args.x)+", "+pn(step.args.y)+") <<id: '"+step.dest_sub_ids[0];set_str+="'>>; ";set_str+=assign+"circle("+step.dest_sub_ids[0]+", "+step.src_ids[0]+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[0]+"); "}else if(step.args.create_by_radius){set_str=assign+"circle("+step.src_ids[0]+", "+step.args.r+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";reset_str="remove("+step.dest_id+"); "}else{set_str=assign+"circle("+step.src_ids[0]+", "+step.src_ids[1]+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";reset_str="remove("+step.dest_id+"); "}break;case JXG.GENTYPE_LINE:k=0;j=0;if(step.args.create_point1){pid1=step.dest_sub_ids[k];k+=1;str1=[];for(i=0;i<step.args.p1.length;i++){str1[i]=pn(step.args.p1[i])}set_str="point("+str1.join(", ")+") <<id: '"+pid1+"', name: '', visible: false, ";set_str+="snaptogrid: false, snaptopoints: false, priv: true>>; ";reset_str="remove("+pid1+"); "}else{pid1=step.src_ids[j];j+=1}if(step.args.create_point2){pid2=step.dest_sub_ids[k++];str1=[];for(i=0;i<step.args.p2.length;i++){str1[i]=pn(step.args.p2[i])}set_str+="point("+str1.join(", ")+") <<id: '"+pid2+"', name: '', visible: false, ";set_str+="snaptogrid: false, snaptopoints: false, priv: true>>; ";reset_str="remove("+pid2+"); "+reset_str}else{pid2=step.src_ids[j];j+=1}str="line";str1="";str2=pid1+", "+pid2;if(step.args.create_point1&&step.args.create_point2&&options.freeLine){set_str="";reset_str="";if(step.args.p1.length===2){step.args.p1.unshift(1)}if(step.args.p2.length===2){step.args.p2.unshift(1)}str2=JXG.Math.crossProduct(step.args.p1,step.args.p2);for(i=0;i<str2.length;i++){str2[i]=pn(str2[i])}str2=str2.join(", ")}if(!step.args.first&&!step.args.last){str="segment"}else{if(!step.args.first){str1="straightFirst: "+step.args.first}if(!step.args.last){str1="straightLast: "+step.args.last}if(str1.length>0&&!options.useSymbols){str1+=", "}}if(!options.useSymbols){attrid="id: '"+step.dest_id+"'"}set_str+=assign+str+"("+str2+")";if(str1.length+attrid.length>0){set_str+=" <<"+str1+attrid+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else{set_str+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}reset_str="remove("+step.dest_id+"); "+reset_str;break;case JXG.GENTYPE_VECTOR:k=0;j=0;if(step.args.create_point1){pid1=step.dest_sub_ids[k];k+=1;str1=[];for(i=0;i<step.args.p1.length;i++){str1[i]=pn(step.args.p1[i])}set_str="point("+str1.join(", ")+") <<id: '"+pid1+"', name: '', visible: true, ";set_str+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ";reset_str="remove("+pid1+"); "}else{pid1=step.src_ids[j];j+=1}if(step.args.create_point2){pid2=step.dest_sub_ids[k++];str1=[];for(i=0;i<step.args.p2.length;i++){str1[i]=pn(step.args.p2[i])}set_str+="point("+str1.join(", ")+") <<id: '"+pid2+"', name: '', visible: true, ";set_str+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ";set_str+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ";reset_str="remove("+pid2+"); "+reset_str}else{pid2=step.src_ids[j];j+=1}str1="";str2=pid1+", "+pid2;str="arrow";if(!options.useSymbols){attrid="id: '"+step.dest_id+"'"}set_str+=assign+str+"("+str2+")";if(str1.length+attrid.length>0){set_str+=" <<"+str1+attrid+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else{set_str+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}reset_str="remove("+step.dest_id+"); "+reset_str;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<step.args.create_point.length;i++){if(step.args.create_point[i]){set_str+="point("+pn(step.args.coords[i].usrCoords[1])+", ";set_str+=pn(step.args.coords[i].usrCoords[2])+") <<id: '"+step.dest_sub_ids[i];set_str+="', snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}}for(i=0;i<step.dest_sub_ids.length;i++){if(step.dest_sub_ids[i]!==0){reset_str="remove("+step.dest_sub_ids[i]+"); "+reset_str}}reset_str="remove("+step.dest_id+"); "+reset_str;set_str+=assign+"polygon(";for(i=0;i<step.src_ids.length;i++){set_str+=step.src_ids[i];if(i<step.src_ids.length-1){set_str+=", "}}for(i=0;i<3;i++){if(step.dest_sub_ids[i]!==0){if(step.src_ids.length>0||i>0){set_str+=", "}set_str+=step.dest_sub_ids[i]}}set_str+=") <<borders: <<ids: ['"+step.dest_sub_ids[3]+"', '"+step.dest_sub_ids[4]+"', '"+step.dest_sub_ids[5]+"']";set_str+=", names: ['', '', '']";set_str+=">>, "+attrid+" fillOpacity: ";set_str+=JXG.Options.opacityLevel+", name: '' ";set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<step.args.create_point.length;i++){if(step.args.create_point[i]){set_str+="point("+pn(step.args.coords[i].usrCoords[1])+", ";set_str+=pn(step.args.coords[i].usrCoords[2])+") <<id: '"+step.dest_sub_ids[i];set_str+="', snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}}for(i=0;i<step.dest_sub_ids.length;i++){if(step.dest_sub_ids[i]!==0){reset_str="remove("+step.dest_sub_ids[i]+"); "+reset_str}}reset_str="remove("+step.dest_id+"); "+reset_str;set_str+=assign+"polygon(";for(i=0;i<step.src_ids.length;i++){set_str+=step.src_ids[i];if(i<step.src_ids.length-1){set_str+=", "}}set_str+=") <<borders: <<ids: [ '"+step.dest_sub_ids[4]+"', '"+step.dest_sub_ids[5];set_str+="', '";set_str+=step.dest_sub_ids[6]+"', '"+step.dest_sub_ids[7]+"' ]";set_str+=", names: ['', '', '', '']";set_str+=">>, "+attrid;set_str+=" fillOpacity: ";set_str+=JXG.Options.opacityLevel+", name: '' ";set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;set_str+=", snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:if(step.args.str.substr(0,1)!=="'"&&step.args.str.substr(0,1)!=='"'&&step.args.str.substr(0,8)!=="function"){step.args.str="'"+step.args.str+"'"}set_str=assign+"text("+pn(step.args.x)+", "+pn(step.args.y)+", "+step.args.str+") <<";set_str+=attrid+"name: ''";if(typeof step.args.anchor!="undefined"){set_str+=", anchor: "+step.args.anchor}set_str+=">>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_RULER:set_str=assign+"tapemeasure([ "+step.args.p1+" ], [ "+step.args.p2+" ]) <<";set_str+=attrid+"name: ''"+", precision: "+JXG.Options.trunclen+", point1: <<id: '"+step.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, "+"point2: <<id: '"+step.dest_sub_ids[1]+"'"+", snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(step.args.create_point)for(i=0;i<step.args.create_point.length;i++){if(step.args.create_point[i]){set_str+="point("+pn(step.args.coords[i].usrCoords[1])+", ";set_str+=pn(step.args.coords[i].usrCoords[2])+") <<id: '"+step.dest_sub_ids[i];set_str+="', snaptogrid: "+JXG.Options.elements.snapToGrid;set_str+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}}if(step.dest_sub_ids)for(i=0;i<step.dest_sub_ids.length;i++){if(step.dest_sub_ids[i]!==0){reset_str="remove("+step.dest_sub_ids[i]+"); "+reset_str}}reset_str="remove("+step.dest_id+"); "+reset_str;set_str+=assign+"polygon(";for(i=0;i<step.src_ids.length;i++){set_str+=step.src_ids[i];if(i!==step.src_ids.length-1){set_str+=", "}}set_str+=") <<borders: <<ids: ['";for(i=0;i<step.dest_sub_ids.length;i++){set_str+=step.dest_sub_ids[i];if(i<step.dest_sub_ids.length-1){set_str+="', '"}}set_str+="']";set_str+=", names: [";for(i=0;i<step.dest_sub_ids.length;i++){set_str+="''";if(i<step.dest_sub_ids.length-1){set_str+=", "}}set_str+="]";set_str+=">>, "+attrid+" fillOpacity: "+JXG.Options.opacityLevel;set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;set_str+=", name: ''>>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:le=step.args.num_vertices;set_str="";reset_str="";for(i=0;i<le;++i){set_str+=assign+"point("+pn(step.args.points[i][1])+", "+pn(step.args.points[i][2]);set_str+=")"+(options.useSymbols?"":" <<id: '"+step.dest_sub_ids[i]+"'"+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ";reset_str+="remove("+step.dest_sub_ids[i]+"); "}set_str+=assign+"polygon(";for(i=0;i<le;++i){set_str+=step.dest_sub_ids[i];if(i!==le-1){set_str+=", "}}set_str+=") <<borders: <<ids: ['";for(i=le;i<step.dest_sub_ids.length;i++){set_str+=step.dest_sub_ids[i];if(i<step.dest_sub_ids.length-1){set_str+="', '"}}set_str+="']";set_str+=", names: [";for(i=le;i<step.dest_sub_ids.length;i++){set_str+="''";if(i<step.dest_sub_ids.length-1){set_str+=", "}}set_str+="]";set_str+=">>, "+attrid+" fillOpacity: "+JXG.Options.opacityLevel;set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;set_str+=", name: ''>>; ";reset_str+="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:set_str=assign+"regularpolygon("+step.src_ids.join(", ")+", ";set_str+=step.args.corners+") <<borders: <<ids: [ ";for(i=0;i<step.args.corners;i++){set_str+="'"+step.dest_sub_ids[i]+"'";if(i!==step.args.corners-1){set_str+=", "}reset_str="remove("+step.dest_sub_ids[i]+"); "+reset_str}set_str+="]";set_str+=", names: [";for(i=0;i<step.args.corners;i++){set_str+="''";if(i<step.args.corners-1){set_str+=", "}}set_str+="]";set_str+=">>, vertices: <<ids: [ ";for(i=0;i<step.args.corners-2;i++){set_str+="'"+step.dest_sub_ids[i+parseInt(step.args.corners,10)]+"'";if(i!==step.args.corners-3){set_str+=", "}reset_str="remove("+step.dest_sub_ids[i+parseInt(step.args.corners,10)]+"); "+reset_str}set_str+=" ]";set_str+=", name: ''";set_str+=">>, "+attrid;set_str+=" fillOpacity: "+JXG.Options.opacityLevel;set_str+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints;set_str+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints;set_str+=", name: ''>>; ";reset_str="remove("+step.dest_id+"); "+reset_str;break;case JXG.GENTYPE_SECTOR:set_str=assign+"sector("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+=attrid+" name: '', fillOpacity: "+JXG.Options.opacityLevel;set_str+=", arc: <<id: '"+step.dest_sub_ids[0]+"', priv: true>> >>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:set_str=assign+"angle("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+="dot: <<priv:true, id: '"+step.dest_sub_ids[0]+"', name: ''>>, ";set_str+=attrid+" fillOpacity: "+JXG.Options.opacityLevel;if(JXG.exists(step.args)&&JXG.exists(step.args.radius))if(JXG.isNumber(step.args.radius)){set_str+=", radius: "+step.args.radius}else{set_str+=", radius: '"+step.args.radius+"'"}set_str+=">>; ";reset_str="remove("+step.dest_id+"); ";reset_str+="remove("+step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:set_str=assign+"nonreflexangle("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+="dot: <<priv:true, id: '"+step.dest_sub_ids[0]+"', ";set_str+="name: ''>>, ";set_str+=attrid+" fillOpacity: "+JXG.Options.opacityLevel;if(JXG.exists(step.args)&&JXG.exists(step.args.radius))set_str+=", radius: "+step.args.radius;set_str+=">>; ";reset_str="remove("+step.dest_id+"); ";reset_str+="remove("+step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:set_str=assign+"reflexangle("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+="dot: <<priv:true, id: '"+step.dest_sub_ids[0]+"', ";set_str+="name: ''>>, ";set_str+=attrid+" fillOpacity: "+JXG.Options.opacityLevel;if(JXG.exists(step.args)&&JXG.exists(step.args.radius))set_str+=", radius: "+step.args.radius;set_str+=">>; ";reset_str="remove("+step.dest_id+"); ";reset_str+="remove("+step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:set_str=assign+"slopetriangle("+step.src_ids.join(", ")+") <<";set_str+=attrid+" name: '',";set_str+="borders: <<ids: ['"+step.dest_sub_ids[4]+"', '"+step.dest_sub_ids[5]+"', '"+step.dest_sub_ids[6]+"']>>,";set_str+="basepoint: <<id: '"+step.dest_sub_ids[0]+"', name: '', priv: true >>, ";set_str+="baseline: <<id: '"+step.dest_sub_ids[1]+"', name: '', priv: true >>,";set_str+="glider: <<id: '"+step.dest_sub_ids[2]+"', name: '', priv: false >>, ";set_str+="toppoint: <<id: '"+step.dest_sub_ids[3]+"', name: '', priv: false >>";if(step.dest_sub_ids.length===8){set_str+=", tangent: <<id: '"+step.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"}set_str+=">>;";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_PLOT:set_str=assign+step.args.plot_type+"("+step.args.func;if(isNaN(step.args.a)||step.args.a===null||step.args.a===undefined)step.args.a="-infinity";if(isNaN(step.args.b)||step.args.b===null||step.args.b===undefined)step.args.b="infinity";if(step.args.a!=step.args.b)set_str+=", "+step.args.a+", "+step.args.b;set_str+=") <<";if(step.args.isPolar)set_str+="curveType: 'polar', ";set_str+=attrid+"name: '', withLabel: true, strokeColor: '"+step.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_PATH:le=step.args.points.length;set_str=assign+"cardinalspline([";for(i=0;i<step.args.points.length;i++){if(JXG.isString(step.args.points[i])){set_str+="'"+step.args.points[i]+"'"}else{if(step.args.points[i].length===3){x=step.args.points[i][1].toPrecision(4);y=step.args.points[i][2].toPrecision(4)}else{x=step.args.points[i][0].toPrecision(4);y=step.args.points[i][1].toPrecision(4)}set_str+="["+x+","+y+"]"}if(i<le-1){set_str+=","}}set_str+="], "+step.args.tau+", "+step.args.type;set_str+=") <<";set_str+=attrid+"name: '', withLabel: false, ";set_str+="fixed: false, ";if(!step.args.createPoints){set_str+="createPoints: false, "}set_str+="isArrayOfCoordinates: true, ";set_str+="strokeWidth: "+step.args.strokeWidth+", ";set_str+="strokeColor: '"+step.args.strokeColor+"' >>; ";reset_str="remove("+step.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:set_str=assign+"derivative("+step.src_ids+")";set_str+=" <<";set_str+="dash: 2";set_str+=" >>;";break;case JXG.GENTYPE_SLIDER:set_str=assign+"slider(["+pn(step.args.x1)+", "+pn(step.args.y1)+"], ["+pn(step.args.x2);set_str+=", "+pn(step.args.y2)+"], ["+pn(step.args.start)+", "+pn(step.args.ini)+", ";set_str+=pn(step.args.end)+"]) <<"+attrid;set_str+=" snapWidth: 0.1, ";set_str+="baseline: <<id: '";set_str+=step.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '";set_str+=step.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '";set_str+=step.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '";set_str+=step.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '";set_str+=step.dest_sub_ids[4]+"', name: '', priv: true>>";set_str+=", name: '"+step.args.name+"'>>; ";reset_str="remove("+step.dest_id+"); remove("+step.dest_sub_ids[4]+"); remove(";reset_str+=step.dest_sub_ids[3]+"); remove("+step.dest_sub_ids[2]+"); remove(";reset_str+=step.dest_sub_ids[1]+"); remove(";reset_str+=step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:arr=[];ctx_set_str=[];ctx_reset_str=[];for(i=0;i<step.args.steps.length;i++){if(step_log[step.args.steps[i]].type>50){arr=this.generateJCodeMeta(step_log[step.args.steps[i]],board)}else{arr=this.generateJCode(step_log[step.args.steps[i]],board,step_log)}if(arr.length>=3&&JXG.trim(arr[2])!==""){set_str=arr[2]+set_str}if(arr.length>=4&&JXG.isFunction(arr[3])){ctx_set_str.unshift(arr[3])}if(arr.length>=1&&JXG.trim(arr[0])!==""){reset_str+=arr[0]}if(arr.length>=2&&JXG.isFunction(arr[1])){ctx_reset_str.push(arr[1])}}break;case JXG.GENTYPE_COPY:copy_log=[];for(el in step.args.steps){if(step.args.steps.hasOwnProperty(el)){step2=JXG.deepCopy(step_log[step.args.steps[el]]);if(step2.type===JXG.GENTYPE_COPY){for(i=0;i<step2.args.map.length;i++){for(j=0;j<step.args.map.length;j++){if(step2.args.map[i].copy===step.args.map[j].orig){step2.args.map[i].copy=step.args.map[j].copy}}}step2=JXG.SketchReader.replaceStepDestIds(step2,step2.args.map)}else{step2=JXG.SketchReader.replaceStepDestIds(step2,step.args.map)}copy_log.push(step2)}}for(i=0;i<copy_log.length;i++){if(copy_log[i].type>50){arr=this.generateJCodeMeta(copy_log[i],board)}else{arr=this.generateJCode(copy_log[i],board,step_log)}if(JXG.trim(arr[0])!==""){set_str+=arr[0]}if(JXG.isFunction(arr[1])){ctx_set_str.push(arr[1])}if(JXG.trim(arr[2])!==""){reset_str=arr[2]+reset_str}if(JXG.isFunction(arr[3])){ctx_reset_str.unshift(arr[3])}}if(step.args.dep_copy){for(i=0;i<step.args.map.length;i++){if(getObject(step.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT){set_str+=step.args.map[i].copy;set_str+=".X = function() { return ("+step.args.map[i].orig+".X() - ";set_str+=pn(step.args.x)+"); }; ";set_str+=step.args.map[i].copy;set_str+=".Y = function() { return ("+step.args.map[i].orig+".Y() - ";set_str+=pn(step.args.y)+"); }; "}}}else{for(i=0;i<step.args.free_points.length;i++){xstart=getObject(step.args.free_points[i].orig).coords.usrCoords[1];ystart=getObject(step.args.free_points[i].orig).coords.usrCoords[2];set_str+=step.args.free_points[i].copy+".X = function() { return ";set_str+=pn(xstart-step.args.x)+"; }; ";set_str+=step.args.free_points[i].copy+".Y = function() { return ";set_str+=pn(ystart-step.args.y)+"; }; ";set_str+=step.args.free_points[i].copy+".free(); "}}for(j=0;j<step.args.map.length;j++){el=getObject(step.args.map[j].orig);if(el.type===JXG.OBJECT_TYPE_CIRCLE&&!JXG.exists(el.point2)){set_str+=step.args.map[j].copy+".setRadius(function () { return ";set_str+=step.args.map[j].orig+".radius(); }); "}}break;case JXG.GENTYPE_ABLATION:xstart=getObject(step.src_ids[0]).coords.usrCoords[1];ystart=getObject(step.src_ids[0]).coords.usrCoords[2];set_str="point("+pn(xstart-step.args.x)+", "+pn(ystart-step.args.y)+") <<id: '";set_str+=step.dest_sub_ids[0]+"', name: '', withLabel: false>>; ";set_str+="circle('"+step.dest_sub_ids[0]+"', 1) <<id: '"+step.dest_sub_ids[1];set_str+="', fillOpacity: "+JXG.Options.opacityLevel;set_str+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ";if(step.args.fids.length===1){step.args.func=step.args.fids[0]+".radius()"}else{step.args.func="dist("+step.args.fids[0]+", "+step.args.fids[1]+")"}set_str+=step.dest_sub_ids[1]+".setRadius(function() { return "+step.args.func+"; }); ";for(j=0;j<step.src_ids.length;j++){set_str+=step.src_ids[j]+".addChild("+step.dest_sub_ids[0]+"); ";set_str+=step.src_ids[j]+".addChild("+step.dest_sub_ids[1]+"); "}if(step.args.migrate!==0&&step.args.migrate!==-1){set_str+="$board.migratePoint("+step.dest_sub_ids[0]+", "+step.args.migrate+"); "}reset_str="remove("+step.dest_sub_ids[1]+"); remove("+step.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:xstart=getObject(step.src_ids[0]).coords.usrCoords[1];ystart=getObject(step.src_ids[0]).coords.usrCoords[2];set_str="point("+pn(xstart-step.args.x)+", "+pn(ystart-step.args.y)+") <<id: '";set_str+=step.dest_sub_ids[0]+"', name: '', withLabel: false>>; ";set_str+="parallelpoint('"+step.src_ids[0]+"','"+step.src_ids[1]+"','"+step.dest_sub_ids[0]+"') <<id: '"+step.dest_sub_ids[1];set_str+="', strokeColor: '#888888', visible: true, priv: false, name: '', ";set_str+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ";set_str+="arrow('"+step.dest_sub_ids[0]+"','"+step.dest_sub_ids[1]+"') <<id: '"+step.dest_sub_ids[2];set_str+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ";for(j=0;j<step.src_ids.length;j++){set_str+=step.src_ids[j]+".addChild("+step.dest_sub_ids[0]+"); ";set_str+=step.src_ids[j]+".addChild("+step.dest_sub_ids[1]+"); ";set_str+=step.src_ids[j]+".addChild("+step.dest_sub_ids[2]+"); "}if(step.args.migrate!==0&&step.args.migrate!==-1){set_str+="$board.migratePoint("+step.dest_sub_ids[0]+", "+step.args.migrate+"); "}reset_str="remove("+step.dest_sub_ids[1]+"); remove("+step.dest_sub_ids[0]+"); remove("+step.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(step.args.obj_type===JXG.OBJECT_TYPE_LINE||step.args.obj_type===JXG.OBJECT_TYPE_VECTOR){set_str=step.src_ids[0]+".move(["+pn(step.args.coords[0].usrCoords[0])+", ";set_str+=pn(step.args.coords[0].usrCoords[1])+", "+pn(step.args.coords[0].usrCoords[2])+"]); ";reset_str=step.src_ids[0]+".move(["+step.args.zstart[0]+", "+step.args.xstart[0]+", ";reset_str+=step.args.ystart[0]+"]); ";set_str+=step.src_ids[1]+".move(["+pn(step.args.coords[1].usrCoords[0])+", ";set_str+=pn(step.args.coords[1].usrCoords[1])+", "+pn(step.args.coords[1].usrCoords[2])+"]); ";reset_str+=step.src_ids[1]+".move(["+step.args.zstart[1]+", "+step.args.xstart[1]+", ";reset_str+=step.args.ystart[1]+"]); "}else if(step.args.obj_type===JXG.OBJECT_TYPE_CIRCLE){set_str=step.src_ids[0]+".move(["+pn(step.args.coords[0].usrCoords[1])+", ";set_str+=pn(step.args.coords[0].usrCoords[2])+"]); ";reset_str=step.src_ids[0]+".move(["+step.args.xstart+", "+step.args.ystart+"]); ";if(step.args.has_point2){set_str+=step.src_ids[1]+".move(["+pn(step.args.coords[1].usrCoords[1])+", ";set_str+=pn(step.args.coords[1].usrCoords[2])+"]); ";reset_str+=step.src_ids[1]+".move(["+step.args.old_p2x+", "+step.args.old_p2y;reset_str+="]); "}}else if(step.args.obj_type===JXG.OBJECT_TYPE_POLYGON){set_str=reset_str="";for(i=0;i<step.src_ids.length;i++){set_str+=step.src_ids[i]+".move(["+pn(step.args.coords[i].usrCoords[1])+", ";set_str+=pn(step.args.coords[i].usrCoords[2])+"]); ";reset_str+=step.src_ids[i]+".move(["+step.args.xstart[i]+", "+step.args.ystart[i];reset_str+="]); "}}else{if(JXG.exists(step.args.coords[0])){set_str=step.src_ids[0]+".move(["+pn(step.args.coords[0].usrCoords[1])+", ";set_str+=pn(step.args.coords[0].usrCoords[2])+"]); ";reset_str=step.src_ids[0]+".move(["+step.args.xstart+", "+step.args.ystart+"]); "}}break;default:JXG.debug("No such GENTYPE!"+step.type);return[]}return[set_str,ctx_set_str,reset_str,ctx_reset_str]},replaceStepDestIds:function(step,id_map){var i,j,copy_ids=[];for(i=0;i<id_map.length;i++){copy_ids.push(id_map[i].copy);if(step.dest_id===id_map[i].orig){step.dest_id=id_map[i].copy}for(j=0;j<step.dest_sub_ids.length;j++){if(step.dest_sub_ids[j]===id_map[i].orig){step.dest_sub_ids[j]=id_map[i].copy}}for(j=0;j<step.src_ids.length;j++){if(step.src_ids[j]===id_map[i].orig){step.src_ids[j]=id_map[i].copy}}}for(j=0;j<step.dest_sub_ids.length;j++){if(!JXG.isInArray(copy_ids,step.dest_sub_ids[j])){step.dest_sub_ids[j]=this.id()}}step.src_ids=JXG.uniqueArray(step.src_ids);step.dest_sub_ids=JXG.uniqueArray(step.dest_sub_ids);return step}});JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])})();
61
+ !function(){"use strict";JXG.SketchReader=function(s,e){this.read=function(){var r,i,t,o,a,d;if(o=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(e)).unzip(),!JXG.exists(o[0]))return"";for(o=JXG.Util.UTF8.decode(o[0][0]),a=(d=jQuery.parseJSON(o)).pop(),i=JXG.exists(a.unredo)?a.unredo:d.length-1,r=0;r<=i;r++)if(0!==d[r].type){try{t=d[r].type>50?JXG.SketchReader.generateJCodeMeta(d[r],s):JXG.SketchReader.generateJCode(d[r],s,d)}catch(s){JXG.debug("#steps: "+d.length),JXG.debug("step: "+r+", type: "+d[r].type),JXG.debug(d[r])}s.jc.parse(t[0],!0)}return t=a.boundingBox,s.jc.parse("$board.setView("+JSON.stringify(t)+");"),""}},JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:!1,useGlider:!1,useSymbols:!1},generateJCode:function(s,e,r){var i,t,o,a,d,n,_,g,p,l,c,u,m,b,G,f,J,X,v,h,O,y,C,E=[],T="",P="",k="",N="",L=function(s){return J.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,J.toFixed)):s},I=function(s){return J.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:g[s]};if(J=JXG.SketchReader.generator,g=e.objects,X="",v="id: '"+s.dest_id+"', ",JXG.exists(e)&&J.useSymbols&&s.type!==JXG.GENTYPE_ABLATION)for(v="",X=s.dest_id+" = ",i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(I(s.src_ids[i]),0)).length>0&&(s.src_ids[i]=d[0]);if(s.type>50)return JXG.SketchReader.generateJCodeMeta(s,e);switch(s.type){case JXG.GENTYPE_TRUNCATE:T="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:T=s.args.code;break;case JXG.GENTYPE_AXIS:T=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",T+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",T+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],T+=" = point("+s.args.coords[1].usrCoords[1]+", ",T+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",T+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],T+=" = point("+s.args.coords[2].usrCoords[1]+", ",T+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",T+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",T+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",T+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",T+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [10, 0], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.dest_sub_ids[3]+".visible = false; ",T+=s.dest_sub_ids[4]+".visible = false; ",P="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],P+="); remove("+s.dest_sub_ids[2]+"); ",P+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:T=X+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); ");P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', id: "'+s.dest_id+'"',T+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); "+P);P+="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],T="point("+L(s.args.usrCoords[1])+","+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; "+a+".glide(",T+=s.src_ids[0]+"); ",P="remove("+a+"); "):a=s.src_ids[0],T+=X+"tangent("+a+") <<"+v+"point1: <<name: '",T+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",T+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",P="remove("+s.dest_sub_ids[0]+"); "+P,P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+P;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"parallel("+s.src_ids[0]+", "+a+") <<"+v+"name: '', point: <<id: '",T+=s.dest_sub_ids[0]+"', name: ''>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_BISECTORLINES:T=(T="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],T+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],T+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],T+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",T+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",T+="'>>>>>>; ",P="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:T="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",T+="<<id: '"+s.dest_id+"'>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(T="",P="",p=s.dest_sub_ids[1],l=s.dest_sub_ids[2],J.useGlider?(T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[0]+")",T+="<<id: '"+p+"', name:'', withLabel:false, priv:true, visible:false >>; ",T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[1]+")",T+="<<id: '"+l+"', name:'', withLabel:false, priv:true, visible:false >>; "):(T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+p+"', ",T+="name:'', withLabel:false, priv:true, visible:false >>; ",T+=p+".glide("+s.src_ids[0]+"); ",T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+l+"', ",T+="name:'', priv:true, visible:false >>; ",T+=l+".glide("+s.src_ids[1]+"); "),P+="remove("+p+"); ",P+="remove("+l+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],T+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",T+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",T+="name:'', priv:true, visible:false >>; ",P+="remove("+c+"); "):c=s.src_ids[2],T+=X+"bisector("+p+", "+c+", "+l+") ",T+="<<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>> >>;",P+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(T=X+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],T+=") <<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>>>>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");");break;case JXG.GENTYPE_NORMAL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"normal("+a+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_PERPSEGMENT:T+=X+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_POINT:T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:J.useGlider?(T=X+"glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=", "+s.src_ids[0]+")",T+=(J.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'",T+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",T+=", snapToGrid: false, snapToPoints: false",T+=">>; "+s.dest_id,T+=".glide("+s.src_ids[0]+"); "),T+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:T=X+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,T+=") <<"+v+" fillColor: '"+JXG.Options.intersection.fillColor+"'",T+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",T+=">>; ",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,Y;if(T="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)P=s.dest_id+".free(); "+s.dest_id,P+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,P+=".strokeColor = '"+s.args.strokeColor+"'; ",P+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",P+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",P+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",P+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",P+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",Y=(x=e.objects[s.dest_id]).slideObject.id,P+=X+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",P+="<<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",P+=s.dest_id+".glide("+Y+"); ";break;case JXG.GENTYPE_COMBINED:for(T=P="",i=0;i<s.args.steps.length;i++)T+=(G=this.generateJCode(s.args.steps[i],e,r))[0],P=G[2]+P;break;case JXG.GENTYPE_CIRCLE:var R="name: '', withLabel: true,";s.args.withName&&(R="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?T+="point("+L(s.args.x)+", "+L(s.args.y)+") ":T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.r)+") <<"+v:T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.radius)+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(T="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],T+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+R,T+=" visible: true>>, "+v+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(T="point("+L(s.args.x1)+", "+L(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+="point("+L(s.args.x2)+", "+L(s.args.y2)+") <<id: '",T+=s.dest_sub_ids[1]+"'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); "):s.args.create_point?(T="point("+L(s.args.x)+", "+L(s.args.y)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T=X+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_LINE:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: false, isinfinit: true, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: false, isinfinit: true, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;if(d="line",n="",_=p+", "+l,s.args.create_point1&&s.args.create_point2&&J.freeLine){for(T="",P="",2===s.args.p1.length&&s.args.p1.unshift(1),2===s.args.p2.length&&s.args.p2.unshift(1),_=JXG.Math.crossProduct(s.args.p1,s.args.p2),i=0;i<_.length;i++)_[i]=L(_[i]);_=_.join(", ")}s.args.first||s.args.last?(s.args.first||(n="straightFirst: "+s.args.first),s.args.last||(n="straightLast: "+s.args.last),n.length>0&&!J.useSymbols&&(n+=", ")):d="segment",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_VECTOR:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: true, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: true, ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;n="",_=p+", "+l,d="arrow",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(T+=", "),T+=s.dest_sub_ids[i]);T+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",T+=", names: ['', '', '']",T+=">>, "+v+" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");T+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],T+="', '",T+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",T+=", names: ['', '', '', '']",T+=">>, "+v,T+=" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.substr(0,1)&&'"'!==s.args.str.substr(0,1)&&"function"!==s.args.str.substr(0,8)&&(s.args.str="'"+s.args.str+"'"),T=X+"text("+L(s.args.x)+", "+L(s.args.y)+", "+s.args.str+") <<",T+=v+"name: ''",void 0!==s.args.anchor&&(T+=", anchor: "+s.args.anchor),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:T=X+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",T+=v+"name: '', precision: "+JXG.Options.trunclen+", point1: <<id: '"+s.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, point2: <<id: '"+s.dest_sub_ids[1]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(s.args.create_point)for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");if(s.dest_sub_ids)for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i!==s.src_ids.length-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=0;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(h=s.args.num_vertices,T="",P="",i=0;i<h;++i)T+=X+"point("+L(s.args.points[i][1])+", "+L(s.args.points[i][2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P+="remove("+s.dest_sub_ids[i]+"); ";for(T+=X+"polygon(",i=0;i<h;++i)T+=s.dest_sub_ids[i],i!==h-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=h;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=h;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(T=X+"regularpolygon("+s.src_ids.join(", ")+", ",T+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)T+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(T+=", "),P="remove("+s.dest_sub_ids[i]+"); "+P;for(T+="]",T+=", names: [",i=0;i<s.args.corners;i++)T+="''",i<s.args.corners-1&&(T+=", ");for(T+="]",T+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)T+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(T+=", "),P="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+P;T+=" ]",T+=", name: ''",T+=">>, "+v,T+=" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_SECTOR:T=X+"sector("+s.src_ids.join(", ")+") ",T+="<<",T+=v+" name: '', fillOpacity: "+JXG.Options.opacityLevel,T+=", arc: <<id: '"+s.dest_sub_ids[0]+"', priv: true>> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:T=X+"angle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?T+=", radius: "+s.args.radius:T+=", radius: '"+s.args.radius+"'"),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:T=X+"nonreflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:T=X+"reflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:T=X+"slopetriangle("+s.src_ids.join(", ")+") <<",T+=v+" name: '',",T+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",T+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",T+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",T+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",T+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(T+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),T+=">>;",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:T=X+s.args.plot_type+"("+s.args.func,(isNaN(s.args.a)||null===s.args.a||void 0===s.args.a||"-infinity"===s.args.a)&&(s.args.a=""),(isNaN(s.args.b)||null===s.args.b||void 0===s.args.b||"infinity"===s.args.b)&&(s.args.b=""),s.args.a!=s.args.b&&(T+=", "+s.args.a+", "+s.args.b),T+=") <<",s.args.isPolar&&(T+="curveType: 'polar', "),T+=v+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(h=s.args.points.length,T=X+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?T+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),y=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),y=s.args.points[i][1].toPrecision(4)),T+="["+O+","+y+"]"),i<h-1&&(T+=",");T+="], "+s.args.tau+", "+s.args.type,T+=") <<",T+=v+"name: '', withLabel: false, ",T+="fixed: false, ",s.args.createPoints||(T+="createPoints: false, "),T+="isArrayOfCoordinates: true, ",T+="strokeWidth: "+s.args.strokeWidth+", ",T+="strokeColor: '"+s.args.strokeColor+"' >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:T=X+"derivative("+s.src_ids+")",T+=" <<",T+="dash: 2",T+=" >>;";break;case JXG.GENTYPE_SLIDER:T=X+"slider(["+L(s.args.x1)+", "+L(s.args.y1)+"], ["+L(s.args.x2),T+=", "+L(s.args.y2)+"], ["+L(s.args.start)+", "+L(s.args.ini)+", ",T+=L(s.args.end)+"]) <<"+v,T+=" snapWidth: 0.1, ",T+="baseline: <<id: '",T+=s.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '",T+=s.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '",T+=s.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '",T+=s.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '",T+=s.dest_sub_ids[4]+"', name: '', priv: true>>",T+=", name: '"+s.args.name+"'>>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(G=[],k=[],N=[],i=0;i<s.args.steps.length;i++)(G=r[s.args.steps[i]].type>50?this.generateJCodeMeta(r[s.args.steps[i]],e):this.generateJCode(r[s.args.steps[i]],e,r)).length>=3&&""!==JXG.trim(G[2])&&(T=G[2]+T),G.length>=4&&JXG.isFunction(G[3])&&k.unshift(G[3]),G.length>=1&&""!==JXG.trim(G[0])&&(P+=G[0]),G.length>=2&&JXG.isFunction(G[1])&&N.push(G[1]);break;case JXG.GENTYPE_COPY:for(b in E=[],s.args.steps)if(s.args.steps.hasOwnProperty(b)){if((f=JXG.deepCopy(r[s.args.steps[b]])).type===JXG.GENTYPE_COPY){for(i=0;i<f.args.map.length;i++)for(t=0;t<s.args.map.length;t++)f.args.map[i].copy===s.args.map[t].orig&&(f.args.map[i].copy=s.args.map[t].copy);f=JXG.SketchReader.replaceStepDestIds(f,f.args.map)}else f=JXG.SketchReader.replaceStepDestIds(f,s.args.map);E.push(f)}for(i=0;i<E.length;i++)G=E[i].type>50?this.generateJCodeMeta(E[i],e):this.generateJCode(E[i],e,r),""!==JXG.trim(G[0])&&(T+=G[0]),JXG.isFunction(G[1])&&k.push(G[1]),""!==JXG.trim(G[2])&&(P=G[2]+P),JXG.isFunction(G[3])&&N.unshift(G[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)I(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(T+=s.args.map[i].copy,T+=".X = function() { return ("+s.args.map[i].orig+".X() - ",T+=L(s.args.x)+"); }; ",T+=s.args.map[i].copy,T+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",T+=L(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)u=I(s.args.free_points[i].orig).coords.usrCoords[1],m=I(s.args.free_points[i].orig).coords.usrCoords[2],T+=s.args.free_points[i].copy+".X = function() { return ",T+=L(u-s.args.x)+"; }; ",T+=s.args.free_points[i].copy+".Y = function() { return ",T+=L(m-s.args.y)+"; }; ",T+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=I(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(T+=s.args.map[t].copy+".setRadius(function () { return ",T+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],T+="', fillOpacity: "+JXG.Options.opacityLevel,T+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",1===s.args.fids.length?s.args.func=s.args.fids[0]+".radius()":s.args.func="dist("+s.args.fids[0]+", "+s.args.fids[1]+")",T+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],T+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",T+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],T+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); remove("+s.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(s.args.obj_type===JXG.OBJECT_TYPE_LINE||s.args.obj_type===JXG.OBJECT_TYPE_VECTOR)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[0])+", ",T+=L(s.args.coords[0].usrCoords[1])+", "+L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",P+=s.args.ystart[0]+"]); ",T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[0])+", ",T+=L(s.args.coords[1].usrCoords[1])+", "+L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",P+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[1])+", ",T+=L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,P+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(T=P="",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i]+".move(["+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+"]); ",P+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],P+="]); ";else JXG.exists(s.args.coords[0])&&(T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[T,k,P,N]},replaceStepDestIds:function(s,e){var r,i,t=[];for(r=0;r<e.length;r++){for(t.push(e[r].copy),s.dest_id===e[r].orig&&(s.dest_id=e[r].copy),i=0;i<s.dest_sub_ids.length;i++)s.dest_sub_ids[i]===e[r].orig&&(s.dest_sub_ids[i]=e[r].copy);for(i=0;i<s.src_ids.length;i++)s.src_ids[i]===e[r].orig&&(s.src_ids[i]=e[r].copy)}for(i=0;i<s.dest_sub_ids.length;i++)JXG.isInArray(t,s.dest_sub_ids[i])||(s.dest_sub_ids[i]=this.id());return s.src_ids=JXG.uniqueArray(s.src_ids),s.dest_sub_ids=JXG.uniqueArray(s.dest_sub_ids),s}}),JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])}();
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "jsxgraph",
3
3
  "description": "Interactive geometry, plotting, visualization",
4
4
  "homepage": "https://jsxgraph.org",
5
- "version": "1.4.0",
5
+ "version": "1.4.3",
6
6
  "main": "distrib/jsxgraphcore.js",
7
7
  "types": "distrib/index.d.ts",
8
8
  "maintainers": [
@@ -43,6 +43,7 @@
43
43
  },
44
44
  "devDependencies": {
45
45
  "almond": "^0.3.3",
46
+ "eslint": "^8.4.1",
46
47
  "jasmine-core": "^3.10.1",
47
48
  "jsdoc2": "^2.4.0",
48
49
  "jshint": "^2.13.1",
@@ -52,7 +53,7 @@
52
53
  "karma-jasmine": "^4.0.1",
53
54
  "karma-requirejs": "^1.1.0",
54
55
  "requirejs": "^2.3.6",
55
- "uglify-js": "^3.14.3"
56
+ "terser": "^5.10.0"
56
57
  },
57
58
  "engines": {
58
59
  "node": ">=0.6.0"
@@ -0,0 +1,264 @@
1
+ /*
2
+ Copyright 2008-2022
3
+ Matthias Ehmann,
4
+ Carsten Miller,
5
+ Andreas Walter,
6
+ Alfred Wassermann
7
+
8
+ This file is part of JSXGraph.
9
+
10
+ JSXGraph is free software dual licensed under the GNU LGPL or MIT License.
11
+
12
+ You can redistribute it and/or modify it under the terms of the
13
+
14
+ * GNU Lesser General Public License as published by
15
+ the Free Software Foundation, either version 3 of the License, or
16
+ (at your option) any later version
17
+ OR
18
+ * MIT License: https://github.com/jsxgraph/jsxgraph/blob/master/LICENSE.MIT
19
+
20
+ JSXGraph is distributed in the hope that it will be useful,
21
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
+ GNU Lesser General Public License for more details.
24
+
25
+ You should have received a copy of the GNU Lesser General Public License and
26
+ the MIT License along with JSXGraph. If not, see <http://www.gnu.org/licenses/>
27
+ and <http://opensource.org/licenses/MIT/>.
28
+ */
29
+ /*global JXG:true, define: true*/
30
+
31
+ /**
32
+ * Create axes and rear and front walls of the
33
+ * view3d bounding box bbox3d.
34
+ */
35
+ define(['jxg', 'utils/type', 'math/math', 'math/geometry', '3d/view3d'
36
+ ], function (JXG, Type, Mat, Geometry, ThreeD) {
37
+ "use strict";
38
+
39
+ ThreeD.createAxes = function (board, parents, attributes) {
40
+ var view = parents[0],
41
+ i, j, k, i1, i2,
42
+ attr,
43
+ pos,
44
+ directions = ['x', 'y', 'z'],
45
+ suffixAxis = 'Axis',
46
+ dir, dir1,
47
+ sides = ['Rear', 'Front'],
48
+ rear = [0, 0, 0], // x, y, z
49
+ front = [0, 0, 0], // x, y, z
50
+ from, to,
51
+ vec1, vec2, range1, range2, na,
52
+ ticks_attr,
53
+ axes = {};
54
+
55
+ if (Type.exists(view.D3)) {
56
+ for (i = 0; i < directions.length; i++) {
57
+ rear[i] = view.D3.bbox3d[i][0];
58
+ front[i] = view.D3.bbox3d[i][1];
59
+ }
60
+ } else {
61
+ for (i = 0; i < directions.length; i++) {
62
+ rear[i] = parents[1][i];
63
+ front[i] = parents[2][1];
64
+ }
65
+ }
66
+
67
+ // Axes
68
+ attr = Type.copyAttributes(attributes, board.options, 'axes3d');
69
+
70
+ pos = attr.axesposition;
71
+ for (i = 0; i < directions.length; i++) {
72
+ // Run through ['x', 'y', 'z']
73
+ dir = directions[i];
74
+ na = dir + suffixAxis;
75
+
76
+ if (pos === 'center') { // Axes centered
77
+ from = [0, 0, 0];
78
+ to = [0, 0, 0];
79
+ to[i] = front[i];
80
+ axes[na] = view.create('axis3d', [from, to], attr[na.toLowerCase()]);
81
+ } else {
82
+ na += 'Border'; // Axes bordered
83
+ from = rear.slice();
84
+ to = front.slice();
85
+ if (i === 2) {
86
+ from[1] = front[1];
87
+ to[0] = rear[0];
88
+ } else {
89
+ from[i] = front[i];
90
+ to[2] = rear[2];
91
+ }
92
+ to[i] = front[i];
93
+ attr[na.toLowerCase()].lastArrow = false;
94
+ axes[na] = view.create('axis3d', [from, to], attr[na.toLowerCase()]);
95
+
96
+ // TODO
97
+ ticks_attr = {
98
+ visible: true, // Für z-Ticks wird path nicht berechnet
99
+ minorTicks: 0,
100
+ tickEndings: [0, 1],
101
+ drawLabels: false
102
+ };
103
+ if (i === 2) {
104
+ ticks_attr.tickEndings = [1, 0];
105
+ }
106
+ axes[na + 'Ticks'] = view.create('ticks', [axes[na], 1], ticks_attr);
107
+ }
108
+ }
109
+
110
+ // Origin (2D point)
111
+ axes.O = board.create('intersection', [
112
+ axes[directions[0] + suffixAxis],
113
+ axes[directions[1] + suffixAxis]
114
+ ], {
115
+ name: '', visible: false, withLabel: false
116
+ });
117
+
118
+ // Planes
119
+ for (i = 0; i < directions.length; i++) {
120
+ // Run through ['x', 'y', 'z']
121
+ i1 = (i + 1) % 3;
122
+ i2 = (i + 2) % 3;
123
+
124
+ dir = directions[i];
125
+ for (j = 0; j < sides.length; j++) {
126
+ // Run through ['Rear', 'Front']
127
+
128
+ from = [0, 0, 0];
129
+ from[i] = (j === 0) ? rear[i] : front[i];
130
+ vec1 = [0, 0, 0];
131
+ vec2 = [0, 0, 0];
132
+ vec1[i1] = 1;
133
+ vec2[i2] = 1;
134
+ range1 = [rear[i1], front[i1]];
135
+ range2 = [rear[i2], front[i2]];
136
+ na = dir + 'Plane' + sides[j];
137
+
138
+ axes[na] =
139
+ view.create('plane3d', [from, vec1, vec2, range1, range2], attr[na.toLowerCase()]);
140
+ axes[na].D3.elType = 'axisplane3d';
141
+ }
142
+ }
143
+
144
+ // Axes on planes
145
+ for (i = 0; i < directions.length; i++) {
146
+ // Run through ['x', 'y', 'z']
147
+ dir = directions[i];
148
+ for (j = 0; j < sides.length; j++) {
149
+ for (k = 1; k <= 2; k++) {
150
+ i1 = (i + k) % 3;
151
+ dir1 = directions[i1];
152
+ na = dir + 'Plane' + sides[j] + dir1.toUpperCase() + 'Axis';
153
+
154
+ from = [0, 0, 0];
155
+ to = [0, 0, 0];
156
+ from[i] = to[i] = (j === 0) ? rear[i] : front[i];
157
+
158
+ from[i1] = rear[i1];
159
+ to[i1] = front[i1];
160
+
161
+ axes[na] = view.create('axis3d', [from, to], attr[na.toLowerCase()]);
162
+ }
163
+ }
164
+ }
165
+ // axes.Y2Dxy = view.create('axis3d', [[0, sy, sz], [0, ey, sz]], attr);
166
+
167
+ return axes;
168
+ };
169
+ JXG.registerElement('axes3d', ThreeD.createAxes);
170
+
171
+ ThreeD.createAxis = function (board, parents, attributes) {
172
+ var view = parents[0],
173
+ attr,
174
+ start = parents[1],
175
+ end = parents[2],
176
+ el_start, el_end, el;
177
+
178
+ // Use 2D points to create axis
179
+ attr = Type.copyAttributes(attributes.point1, board.options, 'axis3d', 'point1');
180
+ el_start = board.create('point', [
181
+ (function (xx, yy, zz) {
182
+ return function () { return view.project3DTo2D(xx, yy, zz)[1]; };
183
+ })(start[0], start[1], start[2]),
184
+ (function (xx, yy, zz) {
185
+ return function () { return view.project3DTo2D(xx, yy, zz)[2]; };
186
+ })(start[0], start[1], start[2])
187
+ ], attr);
188
+
189
+ attr = Type.copyAttributes(attributes.point2, board.options, 'axis3d', 'point2');
190
+ el_end = board.create('point', [
191
+ (function (xx, yy, zz) {
192
+ return function () { return view.project3DTo2D(xx, yy, zz)[1]; };
193
+ })(end[0], end[1], end[2]),
194
+ (function (xx, yy, zz) {
195
+ return function () { return view.project3DTo2D(xx, yy, zz)[2]; };
196
+ })(end[0], end[1], end[2])
197
+ ], attr);
198
+
199
+ attr = Type.copyAttributes(attributes, board.options, 'axis3d');
200
+ el = board.create('arrow', [el_start, el_end], attr);
201
+
202
+ return el;
203
+ };
204
+ JXG.registerElement('axis3d', ThreeD.createAxis);
205
+
206
+ ThreeD.createMesh = function (board, parents, attr) {
207
+ var view = parents[0],
208
+ point = parents[1],
209
+ vec1 = parents[2],
210
+ range1 = parents[3],
211
+ vec2 = parents[4],
212
+ range2 = parents[5],
213
+ el;
214
+
215
+ el = board.create('curve', [[], []], attr);
216
+ el.updateDataArray = function () {
217
+ var s1 = range1[0],
218
+ e1 = range1[1],
219
+ s2 = range2[0],
220
+ e2 = range2[1],
221
+ l1, l2, res, i, sol,
222
+ v1 = [0, 0, 0],
223
+ v2 = [0, 0, 0],
224
+ step = 1,
225
+ q = [0, 0, 0];
226
+
227
+ this.dataX = [];
228
+ this.dataY = [];
229
+
230
+ for (i = 0; i < 3; i++) {
231
+ q[i] = Type.evaluate(point[i]);
232
+ v1[i] = Type.evaluate(vec1[i]);
233
+ v2[i] = Type.evaluate(vec2[i]);
234
+ }
235
+ l1 = JXG.Math.norm(v1, 3);
236
+ l2 = JXG.Math.norm(v2, 3);
237
+ for (i = 0; i < 3; i++) {
238
+ v1[i] /= l1;
239
+ v2[i] /= l2;
240
+ }
241
+ if (false) {
242
+ sol = Mat.Geometry.getPlaneBounds(v1, v2, q, s1, e1);
243
+ if (sol !== null) {
244
+ s1 = sol[0];
245
+ e1 = sol[1];
246
+ s2 = sol[2];
247
+ e2 = sol[3];
248
+ }
249
+ }
250
+
251
+ res = view.getMesh(
252
+ function(u, v) { return q[0] + u * v1[0] + v * v2[0]; },
253
+ function(u, v) { return q[1] + u * v1[1] + v * v2[1]; },
254
+ function(u, v) { return q[2] + u * v1[2] + v * v2[2]; },
255
+ [Math.ceil(s1), Math.floor(e1), (Math.ceil(e1) - Math.floor(s1)) / step],
256
+ [Math.ceil(s2), Math.floor(e2), (Math.ceil(e2) - Math.floor(s2)) / step]);
257
+ this.dataX = res[0];
258
+ this.dataY = res[1];
259
+ };
260
+ return el;
261
+ };
262
+ JXG.registerElement('mesh3d', ThreeD.createMesh);
263
+
264
+ });