/*
JSXGraph 1.1.0
Copyright 2008-2020
Matthias Ehmann,
Michael Gerhaeuser,
Carsten Miller,
Bianca Valentin,
Alfred Wassermann,
Peter Wilfahrt
This file is part of JSXGraph.
JSXGraph is free software dual licensed under the GNU LGPL or MIT License.
You can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version
OR
* MIT License: https://github.com/jsxgraph/jsxgraph/blob/master/LICENSE.MIT
JSXGraph is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License and
the MIT License along with JSXGraph. If not, see
and .
*/
/**
* almond 0.2.5 Copyright (c) 2011-2012, The Dojo Foundation All Rights Reserved.
* Available via the MIT or new BSD license.
* see: https://github.com/jrburke/almond for details
*/
/**
* UTF-8 Decoder by Bjoern Hoehrmann
*
* Copyright (c) 2008-2009 Bjoern Hoehrmann
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
* software and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
* to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
(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,points,key,val,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;i0){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]+") <>; "+step.args.name[1];set_str+=" = point("+step.args.coords[1].usrCoords[1]+", ";set_str+=step.args.coords[1].usrCoords[2]+") <>; "+step.args.name[2];set_str+=" = point("+step.args.coords[2].usrCoords[1]+", ";set_str+=step.args.coords[2].usrCoords[2]+") <>; ";set_str+=step.args.name[3]+" = axis("+step.args.name[0]+", "+step.args.name[1]+") ";set_str+="<>';set_str+=", drawZero: false>>>>; ";set_str+=step.args.name[4]+" = axis("+step.args.name[0]+", "+step.args.name[2]+") ";set_str+="<>';set_str+=", drawZero: false>>>>; ";set_str+=step.dest_sub_ids[3]+".visible = false; ";set_str+=step.dest_sub_ids[4]+".visible = false; ";set_str+="delete jxgBoard1_infobox; ";reset_str="delete "+step.dest_sub_ids[4]+"; delete "+step.dest_sub_ids[3];reset_str+="; delete "+step.dest_sub_ids[2]+"; ";reset_str+="delete "+step.dest_sub_ids[1]+"; delete "+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="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_REFLECTION:if(step.args.type==="polygon"){set_str="";el=step.src_ids[step.src_ids.length-1];for(i=1;i>;\n"}le=step.dest_sub_ids.length/2;set_str+=assign+"polygon(";set_str+=step.dest_sub_ids.slice(0,le).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];console.log(step.args);for(i=1;i>;\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: <>";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>;\n"}le=step.dest_sub_ids.length/2;set_str+=assign+"polygon(";set_str+=step.dest_sub_ids.slice(0,le).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>;\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: <>";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>; "+sub_id+".glide(";set_str+=step.src_ids[0]+"); ";reset_str="delete "+sub_id+"; "}else{sub_id=step.src_ids[0]}set_str+=assign+"tangent("+sub_id+") <<"+attrid+"point1: <>, point2: <> >>; ";reset_str="delete "+step.dest_sub_ids[0]+"; "+reset_str;reset_str="delete "+step.dest_id+"; delete "+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])+") <>; ";reset_str="delete "+sub_id+"; "}else{sub_id=step.src_ids[1]}set_str+=assign+"parallel("+step.src_ids[0]+", "+sub_id+") <<"+attrid+"name: '', point: <> >>; ";reset_str="delete "+step.dest_id+"; delete "+step.dest_sub_ids[0]+"; "+reset_str;break;case JXG.GENTYPE_BISECTORLINES:set_str="bisectorlines("+step.src_ids[0]+", "+step.src_ids[1]+") <>, point2: <>>>, line2: <>, point2: <>>>>>; ";reset_str="delete "+step.dest_sub_ids[5]+"; delete "+step.dest_sub_ids[4]+"; delete ";reset_str+=step.dest_sub_ids[3]+"; delete "+step.dest_sub_ids[2]+"; delete ";reset_str+=step.dest_sub_ids[1]+"; delete "+step.dest_sub_ids[0]+"; ";break;case JXG.GENTYPE_BOARDIMG:set_str="image('"+step.args.s+"', [ "+step.args.anchor+" ], [ "+step.args.scale+" ]) ";set_str+="<>; ";reset_str="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_BISECTOR:if(step.args.create_point){pid1=step.dest_sub_ids[1];set_str="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") ";set_str+="<>; ";set_str+=pid1+".glide("+step.src_ids[0]+"); ";reset_str="delete "+pid1+"; ";pid2=step.dest_sub_ids[2];set_str+="point("+pn(step.args.usrCoords[1])+", "+pn(step.args.usrCoords[2])+") ";set_str+="<>; ";set_str+=pid2+".glide("+step.src_ids[1]+"); ";reset_str+="delete "+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+="<>; ";reset_str+="delete "+pid3+"; "}else{pid3=step.src_ids[2]}set_str+=assign+"bisector("+pid1+", "+pid3+", "+pid2+") ";set_str+="<<"+attrid+"name: '', point: <> >>;";reset_str+="delete "+step.dest_id+"; delete "+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: <>>>;";reset_str="delete "+step.dest_id+"; delete "+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+=") <>; ";reset_str="delete "+sub_id+"; "}else{sub_id=step.src_ids[1]}set_str+=assign+"normal("+sub_id+", "+step.src_ids[0]+") <<"+attrid;set_str+="name: '', point: <> >>; ";reset_str="delete "+step.dest_id+"; delete "+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: <> >>; ";reset_str="delete "+step.dest_id+"; delete "+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?"":" <>")+"; ";reset_str="delete "+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?"":"<>")+";"}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="delete "+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="delete "+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+=" <>"+"; ";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>; ";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="delete "+step.dest_id+"; "+reset_str}else if(step.args.create_by_radius){set_str="point("+pn(step.args.x)+", "+pn(step.args.y)+") <>; ";set_str+=step.dest_sub_ids[0]+".visible = true; ";set_str+=assign+"circle('"+step.dest_sub_ids[0]+"', "+pn(step.args.r)+") <<"+attrid;set_str+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;";reset_str="delete "+step.dest_id+"; delete "+step.dest_sub_ids[0]+"; "}else{set_str=assign+"circle("+step.src_ids[0]+", "+step.src_ids[1]+", "+step.src_ids[2];set_str+=") <>, "+attrid+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";reset_str="delete "+step.dest_id+"; "+reset_str}break;case JXG.GENTYPE_CIRCLE2POINTS:if(step.args.create_two_points){set_str="point("+pn(step.args.x1)+", "+pn(step.args.y1)+") <>; ";set_str+="point("+pn(step.args.x2)+", "+pn(step.args.y2)+") <>; ";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="delete "+step.dest_id+"; delete "+step.dest_sub_ids[1]+"; delete ";reset_str+=step.dest_sub_ids[0]+"; "}else if(step.args.create_point){set_str="point("+pn(step.args.x)+", "+pn(step.args.y)+") <>; ";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="delete "+step.dest_id+"; delete "+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="delete "+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="delete "+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>; ";reset_str="delete "+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>; ";reset_str="delete "+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;i0&&!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+=" <>; "}reset_str="delete "+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>; ";reset_str="delete "+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>; ";reset_str="delete "+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+=" <>; "}reset_str="delete "+step.dest_id+"; "+reset_str;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i>; "}}for(i=0;i0||i>0){set_str+=", "}set_str+=step.dest_sub_ids[i]}}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>; "}}for(i=0;i>, "+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: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+=">>; "+step.dest_id+".setText("+step.args.str;set_str+="); ";reset_str="delete "+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: <>, "+"point2: <> >>; ";reset_str="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_POLYGON:set_str=assign+"polygon(";for(i=0;i>, "+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="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_POLYGONCOPY:le=step.args.num_vertices;set_str="";reset_str="";for(i=0;i>")+"; ";reset_str+="delete "+step.dest_sub_ids[i]+"; "}set_str+=assign+"polygon(";for(i=0;i>, "+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+="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_REGULARPOLYGON:set_str=assign+"regularpolygon("+step.src_ids.join(", ")+", ";set_str+=step.args.corners+") <>, vertices: <>, "+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="delete "+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: <> >>; ";reset_str="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_ANGLE:set_str=assign+"angle("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+="dot: <>, ";set_str+=attrid+" fillOpacity: "+JXG.Options.opacityLevel+">>; ";reset_str="delete "+step.dest_id+"; ";reset_str+="delete "+step.dest_sub_ids[0]+"; ";break;case JXG.GENTYPE_NONREFLEXANGLE:set_str=assign+"nonreflexangle("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+="dot: <>, ";set_str+=attrid+" fillOpacity: "+JXG.Options.opacityLevel+">>; ";reset_str="delete "+step.dest_id+"; ";reset_str+="delete "+step.dest_sub_ids[0]+"; ";break;case JXG.GENTYPE_REFLEXANGLE:set_str=assign+"reflexangle("+step.src_ids.join(", ")+") ";set_str+="<<";set_str+="dot: <>, ";set_str+=attrid+" fillOpacity: "+JXG.Options.opacityLevel+">>; ";reset_str="delete "+step.dest_id+"; ";reset_str+="delete "+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: <>,";set_str+="basepoint: <>, ";set_str+="baseline: <>,";set_str+="glider: <>, ";set_str+="toppoint: <>";if(step.dest_sub_ids.length===8){set_str+=", tangent: <>, point2: <> >>"}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="delete "+step.dest_id+"; ";break;case JXG.GENTYPE_PATH:le=step.args.points.length;if(step.args.doSpline){set_str=assign+"cardinalspline(["}else{set_str=assign+"curve("}for(i=0;i>; ";reset_str="delete "+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: <>, highline: <>, point1: <>, point2: <>, label: <>";set_str+=", name: '"+step.args.name+"'>>; ";reset_str="delete "+step.dest_id+"; delete "+step.dest_sub_ids[4]+"; delete ";reset_str+=step.dest_sub_ids[3]+"; delete "+step.dest_sub_ids[2]+"; delete ";reset_str+=step.dest_sub_ids[1]+"; delete ";reset_str+=step.dest_sub_ids[0]+"; ";break;case JXG.GENTYPE_DELETE:arr=[];ctx_set_str=[];ctx_reset_str=[];for(i=0;i50){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;i50){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>; ";set_str+="circle('"+step.dest_sub_ids[0]+"', 1) <>; ";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>; ";set_str+="parallelpoint('"+step.src_ids[0]+"','"+step.src_ids[1]+"','"+step.dest_sub_ids[0]+"') <>; ";set_str+="arrow('"+step.dest_sub_ids[0]+"','"+step.dest_sub_ids[1]+"') <>; ";for(j=0;j