jsxgraph 1.4.2 → 1.4.5

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.
@@ -1,5 +1,5 @@
1
1
  /*
2
- JSXGraph 1.4.2
2
+ JSXGraph 1.4.5
3
3
 
4
4
  Copyright 2008-2022
5
5
  Matthias Ehmann,
@@ -58,4 +58,4 @@
58
58
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
59
59
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
60
60
  */
61
- !function(){"use strict";JXG.SketchReader=function(s,e){this.read=function(){var r,i,t,o,a,d;if(o=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(e)).unzip(),!JXG.exists(o[0]))return"";for(o=JXG.Util.UTF8.decode(o[0][0]),a=(d=jQuery.parseJSON(o)).pop(),i=JXG.exists(a.unredo)?a.unredo:d.length-1,r=0;r<=i;r++)if(0!==d[r].type){try{t=d[r].type>50?JXG.SketchReader.generateJCodeMeta(d[r],s):JXG.SketchReader.generateJCode(d[r],s,d)}catch(s){JXG.debug("#steps: "+d.length),JXG.debug("step: "+r+", type: "+d[r].type),JXG.debug(d[r])}s.jc.parse(t[0],!0)}return t=a.boundingBox,s.jc.parse("$board.setView("+JSON.stringify(t)+");"),""}},JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:!1,useGlider:!1,useSymbols:!1},generateJCode:function(s,e,r){var i,t,o,a,d,n,_,g,p,l,c,u,m,b,G,f,J,X,v,h,O,y,C,E=[],T="",P="",k="",N="",L=function(s){return J.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,J.toFixed)):s},I=function(s){return J.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:g[s]};if(J=JXG.SketchReader.generator,g=e.objects,X="",v="id: '"+s.dest_id+"', ",JXG.exists(e)&&J.useSymbols&&s.type!==JXG.GENTYPE_ABLATION)for(v="",X=s.dest_id+" = ",i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(I(s.src_ids[i]),0)).length>0&&(s.src_ids[i]=d[0]);if(s.type>50)return JXG.SketchReader.generateJCodeMeta(s,e);switch(s.type){case JXG.GENTYPE_TRUNCATE:T="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:T=s.args.code;break;case JXG.GENTYPE_AXIS:T=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",T+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",T+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],T+=" = point("+s.args.coords[1].usrCoords[1]+", ",T+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",T+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],T+=" = point("+s.args.coords[2].usrCoords[1]+", ",T+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",T+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",T+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",T+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",T+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [10, 0], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.dest_sub_ids[3]+".visible = false; ",T+=s.dest_sub_ids[4]+".visible = false; ",P="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],P+="); remove("+s.dest_sub_ids[2]+"); ",P+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:T=X+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); ");P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', id: "'+s.dest_id+'"',T+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); "+P);P+="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],T="point("+L(s.args.usrCoords[1])+","+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; "+a+".glide(",T+=s.src_ids[0]+"); ",P="remove("+a+"); "):a=s.src_ids[0],T+=X+"tangent("+a+") <<"+v+"point1: <<name: '",T+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",T+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",P="remove("+s.dest_sub_ids[0]+"); "+P,P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+P;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"parallel("+s.src_ids[0]+", "+a+") <<"+v+"name: '', point: <<id: '",T+=s.dest_sub_ids[0]+"', name: ''>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_BISECTORLINES:T=(T="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],T+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],T+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],T+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",T+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",T+="'>>>>>>; ",P="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:T="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",T+="<<id: '"+s.dest_id+"'>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(T="",P="",p=s.dest_sub_ids[1],l=s.dest_sub_ids[2],J.useGlider?(T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[0]+")",T+="<<id: '"+p+"', name:'', withLabel:false, priv:true, visible:false >>; ",T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[1]+")",T+="<<id: '"+l+"', name:'', withLabel:false, priv:true, visible:false >>; "):(T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+p+"', ",T+="name:'', withLabel:false, priv:true, visible:false >>; ",T+=p+".glide("+s.src_ids[0]+"); ",T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+l+"', ",T+="name:'', priv:true, visible:false >>; ",T+=l+".glide("+s.src_ids[1]+"); "),P+="remove("+p+"); ",P+="remove("+l+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],T+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",T+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",T+="name:'', priv:true, visible:false >>; ",P+="remove("+c+"); "):c=s.src_ids[2],T+=X+"bisector("+p+", "+c+", "+l+") ",T+="<<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>> >>;",P+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(T=X+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],T+=") <<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>>>>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");");break;case JXG.GENTYPE_NORMAL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"normal("+a+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_PERPSEGMENT:T+=X+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_POINT:T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:J.useGlider?(T=X+"glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=", "+s.src_ids[0]+")",T+=(J.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'",T+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",T+=", snapToGrid: false, snapToPoints: false",T+=">>; "+s.dest_id,T+=".glide("+s.src_ids[0]+"); "),T+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:T=X+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,T+=") <<"+v+" fillColor: '"+JXG.Options.intersection.fillColor+"'",T+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",T+=">>; ",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,Y;if(T="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)P=s.dest_id+".free(); "+s.dest_id,P+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,P+=".strokeColor = '"+s.args.strokeColor+"'; ",P+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",P+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",P+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",P+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",P+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",Y=(x=e.objects[s.dest_id]).slideObject.id,P+=X+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",P+="<<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",P+=s.dest_id+".glide("+Y+"); ";break;case JXG.GENTYPE_COMBINED:for(T=P="",i=0;i<s.args.steps.length;i++)T+=(G=this.generateJCode(s.args.steps[i],e,r))[0],P=G[2]+P;break;case JXG.GENTYPE_CIRCLE:var R="name: '', withLabel: true,";s.args.withName&&(R="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?T+="point("+L(s.args.x)+", "+L(s.args.y)+") ":T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.r)+") <<"+v:T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.radius)+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(T="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],T+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+R,T+=" visible: true>>, "+v+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(T="point("+L(s.args.x1)+", "+L(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+="point("+L(s.args.x2)+", "+L(s.args.y2)+") <<id: '",T+=s.dest_sub_ids[1]+"'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); "):s.args.create_point?(T="point("+L(s.args.x)+", "+L(s.args.y)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T=X+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_LINE:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;if(d="line",n="",_=p+", "+l,s.args.create_point1&&s.args.create_point2&&J.freeLine){for(T="",P="",2===s.args.p1.length&&s.args.p1.unshift(1),2===s.args.p2.length&&s.args.p2.unshift(1),_=JXG.Math.crossProduct(s.args.p1,s.args.p2),i=0;i<_.length;i++)_[i]=L(_[i]);_=_.join(", ")}s.args.first||s.args.last?(s.args.first||(n="straightFirst: "+s.args.first),s.args.last||(n="straightLast: "+s.args.last),n.length>0&&!J.useSymbols&&(n+=", ")):d="segment",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_VECTOR:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: true, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: true, ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;n="",_=p+", "+l,d="arrow",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(T+=", "),T+=s.dest_sub_ids[i]);T+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",T+=", names: ['', '', '']",T+=">>, "+v+" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");T+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],T+="', '",T+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",T+=", names: ['', '', '', '']",T+=">>, "+v,T+=" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.substr(0,1)&&'"'!==s.args.str.substr(0,1)&&"function"!==s.args.str.substr(0,8)&&(s.args.str="'"+s.args.str+"'"),T=X+"text("+L(s.args.x)+", "+L(s.args.y)+", "+s.args.str+") <<",T+=v+"name: ''",void 0!==s.args.anchor&&(T+=", anchor: "+s.args.anchor),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:T=X+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",T+=v+"name: '', precision: "+JXG.Options.trunclen+", point1: <<id: '"+s.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, point2: <<id: '"+s.dest_sub_ids[1]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(s.args.create_point)for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");if(s.dest_sub_ids)for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i!==s.src_ids.length-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=0;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(h=s.args.num_vertices,T="",P="",i=0;i<h;++i)T+=X+"point("+L(s.args.points[i][1])+", "+L(s.args.points[i][2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P+="remove("+s.dest_sub_ids[i]+"); ";for(T+=X+"polygon(",i=0;i<h;++i)T+=s.dest_sub_ids[i],i!==h-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=h;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=h;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(T=X+"regularpolygon("+s.src_ids.join(", ")+", ",T+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)T+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(T+=", "),P="remove("+s.dest_sub_ids[i]+"); "+P;for(T+="]",T+=", names: [",i=0;i<s.args.corners;i++)T+="''",i<s.args.corners-1&&(T+=", ");for(T+="]",T+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)T+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(T+=", "),P="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+P;T+=" ]",T+=", name: ''",T+=">>, "+v,T+=" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_SECTOR:T=X+"sector("+s.src_ids.join(", ")+") ",T+="<<",T+=v+" name: '', fillOpacity: "+JXG.Options.opacityLevel,T+=", arc: <<id: '"+s.dest_sub_ids[0]+"', priv: true>> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:T=X+"angle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?T+=", radius: "+s.args.radius:T+=", radius: '"+s.args.radius+"'"),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:T=X+"nonreflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:T=X+"reflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:T=X+"slopetriangle("+s.src_ids.join(", ")+") <<",T+=v+" name: '',",T+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",T+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",T+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",T+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",T+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(T+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),T+=">>;",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:T=X+s.args.plot_type+"("+s.args.func,(isNaN(s.args.a)||null===s.args.a||void 0===s.args.a||"-infinity"===s.args.a)&&(s.args.a=""),(isNaN(s.args.b)||null===s.args.b||void 0===s.args.b||"infinity"===s.args.b)&&(s.args.b=""),s.args.a!=s.args.b&&(T+=", "+s.args.a+", "+s.args.b),T+=") <<",s.args.isPolar&&(T+="curveType: 'polar', "),T+=v+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(h=s.args.points.length,T=X+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?T+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),y=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),y=s.args.points[i][1].toPrecision(4)),T+="["+O+","+y+"]"),i<h-1&&(T+=",");T+="], "+s.args.tau+", "+s.args.type,T+=") <<",T+=v+"name: '', withLabel: false, ",T+="fixed: false, ",s.args.createPoints||(T+="createPoints: false, "),T+="isArrayOfCoordinates: true, ",T+="strokeWidth: "+s.args.strokeWidth+", ",T+="strokeColor: '"+s.args.strokeColor+"' >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:T=X+"derivative("+s.src_ids+")",T+=" <<",T+="dash: 2",T+=" >>;";break;case JXG.GENTYPE_SLIDER:T=X+"slider(["+L(s.args.x1)+", "+L(s.args.y1)+"], ["+L(s.args.x2),T+=", "+L(s.args.y2)+"], ["+L(s.args.start)+", "+L(s.args.ini)+", ",T+=L(s.args.end)+"]) <<"+v,T+=" snapWidth: 0.1, ",T+="baseline: <<id: '",T+=s.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '",T+=s.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '",T+=s.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '",T+=s.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '",T+=s.dest_sub_ids[4]+"', name: '', priv: true>>",T+=", name: '"+s.args.name+"'>>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(G=[],k=[],N=[],i=0;i<s.args.steps.length;i++)(G=r[s.args.steps[i]].type>50?this.generateJCodeMeta(r[s.args.steps[i]],e):this.generateJCode(r[s.args.steps[i]],e,r)).length>=3&&""!==JXG.trim(G[2])&&(T=G[2]+T),G.length>=4&&JXG.isFunction(G[3])&&k.unshift(G[3]),G.length>=1&&""!==JXG.trim(G[0])&&(P+=G[0]),G.length>=2&&JXG.isFunction(G[1])&&N.push(G[1]);break;case JXG.GENTYPE_COPY:for(b in E=[],s.args.steps)if(s.args.steps.hasOwnProperty(b)){if((f=JXG.deepCopy(r[s.args.steps[b]])).type===JXG.GENTYPE_COPY){for(i=0;i<f.args.map.length;i++)for(t=0;t<s.args.map.length;t++)f.args.map[i].copy===s.args.map[t].orig&&(f.args.map[i].copy=s.args.map[t].copy);f=JXG.SketchReader.replaceStepDestIds(f,f.args.map)}else f=JXG.SketchReader.replaceStepDestIds(f,s.args.map);E.push(f)}for(i=0;i<E.length;i++)G=E[i].type>50?this.generateJCodeMeta(E[i],e):this.generateJCode(E[i],e,r),""!==JXG.trim(G[0])&&(T+=G[0]),JXG.isFunction(G[1])&&k.push(G[1]),""!==JXG.trim(G[2])&&(P=G[2]+P),JXG.isFunction(G[3])&&N.unshift(G[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)I(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(T+=s.args.map[i].copy,T+=".X = function() { return ("+s.args.map[i].orig+".X() - ",T+=L(s.args.x)+"); }; ",T+=s.args.map[i].copy,T+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",T+=L(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)u=I(s.args.free_points[i].orig).coords.usrCoords[1],m=I(s.args.free_points[i].orig).coords.usrCoords[2],T+=s.args.free_points[i].copy+".X = function() { return ",T+=L(u-s.args.x)+"; }; ",T+=s.args.free_points[i].copy+".Y = function() { return ",T+=L(m-s.args.y)+"; }; ",T+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=I(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(T+=s.args.map[t].copy+".setRadius(function () { return ",T+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],T+="', fillOpacity: "+JXG.Options.opacityLevel,T+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",1===s.args.fids.length?s.args.func=s.args.fids[0]+".radius()":s.args.func="dist("+s.args.fids[0]+", "+s.args.fids[1]+")",T+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],T+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",T+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],T+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); remove("+s.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(s.args.obj_type===JXG.OBJECT_TYPE_LINE||s.args.obj_type===JXG.OBJECT_TYPE_VECTOR)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[0])+", ",T+=L(s.args.coords[0].usrCoords[1])+", "+L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",P+=s.args.ystart[0]+"]); ",T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[0])+", ",T+=L(s.args.coords[1].usrCoords[1])+", "+L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",P+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[1])+", ",T+=L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,P+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(T=P="",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i]+".move(["+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+"]); ",P+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],P+="]); ";else JXG.exists(s.args.coords[0])&&(T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[T,k,P,N]},replaceStepDestIds:function(s,e){var r,i,t=[];for(r=0;r<e.length;r++){for(t.push(e[r].copy),s.dest_id===e[r].orig&&(s.dest_id=e[r].copy),i=0;i<s.dest_sub_ids.length;i++)s.dest_sub_ids[i]===e[r].orig&&(s.dest_sub_ids[i]=e[r].copy);for(i=0;i<s.src_ids.length;i++)s.src_ids[i]===e[r].orig&&(s.src_ids[i]=e[r].copy)}for(i=0;i<s.dest_sub_ids.length;i++)JXG.isInArray(t,s.dest_sub_ids[i])||(s.dest_sub_ids[i]=this.id());return s.src_ids=JXG.uniqueArray(s.src_ids),s.dest_sub_ids=JXG.uniqueArray(s.dest_sub_ids),s}}),JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])}();
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.2",
5
+ "version": "1.4.5",
6
6
  "main": "distrib/jsxgraphcore.js",
7
7
  "types": "distrib/index.d.ts",
8
8
  "maintainers": [
@@ -0,0 +1,268 @@
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,
52
+ na, na_parent,
53
+ ticks_attr,
54
+ axes = {};
55
+
56
+ if (Type.exists(view.D3)) {
57
+ for (i = 0; i < directions.length; i++) {
58
+ rear[i] = view.D3.bbox3d[i][0];
59
+ front[i] = view.D3.bbox3d[i][1];
60
+ }
61
+ } else {
62
+ for (i = 0; i < directions.length; i++) {
63
+ rear[i] = parents[1][i];
64
+ front[i] = parents[2][1];
65
+ }
66
+ }
67
+
68
+ // Main 3D axes
69
+ attr = Type.copyAttributes(attributes, board.options, 'axes3d');
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
+ // Front and rear 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
+ attr = Type.copyAttributes(attributes, board.options, 'axes3d', na);
139
+ axes[na] =
140
+ view.create('plane3d', [from, vec1, vec2, range1, range2], attr);
141
+ axes[na].D3.elType = 'axisplane3d';
142
+ }
143
+ }
144
+
145
+ // Axes on front and rear planes
146
+ for (i = 0; i < directions.length; i++) {
147
+ // Run through ['x', 'y', 'z']
148
+ dir = directions[i];
149
+ for (j = 0; j < sides.length; j++) {
150
+ for (k = 1; k <= 2; k++) {
151
+ i1 = (i + k) % 3;
152
+ dir1 = directions[i1];
153
+ na = dir + 'Plane' + sides[j] + dir1.toUpperCase() + 'Axis';
154
+ na_parent = dir + 'Plane' + sides[j];
155
+
156
+ from = [0, 0, 0];
157
+ to = [0, 0, 0];
158
+ from[i] = to[i] = (j === 0) ? rear[i] : front[i];
159
+
160
+ from[i1] = rear[i1];
161
+ to[i1] = front[i1];
162
+
163
+ attr = Type.copyAttributes(attributes, board.options, 'axes3d', na);
164
+ axes[na] = view.create('axis3d', [from, to], attr);
165
+ axes[na_parent].addChild(axes[na]);
166
+ axes[na_parent].inherits.push(axes[na]);
167
+ }
168
+ }
169
+ }
170
+
171
+ return axes;
172
+ };
173
+ JXG.registerElement('axes3d', ThreeD.createAxes);
174
+
175
+ ThreeD.createAxis = function (board, parents, attributes) {
176
+ var view = parents[0],
177
+ attr,
178
+ start = parents[1],
179
+ end = parents[2],
180
+ el_start, el_end, el;
181
+
182
+ // Use 2D points to create axis
183
+ attr = Type.copyAttributes(attributes.point1, board.options, 'axis3d', 'point1');
184
+ el_start = board.create('point', [
185
+ (function (xx, yy, zz) {
186
+ return function () { return view.project3DTo2D(xx, yy, zz)[1]; };
187
+ })(start[0], start[1], start[2]),
188
+ (function (xx, yy, zz) {
189
+ return function () { return view.project3DTo2D(xx, yy, zz)[2]; };
190
+ })(start[0], start[1], start[2])
191
+ ], attr);
192
+
193
+ attr = Type.copyAttributes(attributes.point2, board.options, 'axis3d', 'point2');
194
+ el_end = board.create('point', [
195
+ (function (xx, yy, zz) {
196
+ return function () { return view.project3DTo2D(xx, yy, zz)[1]; };
197
+ })(end[0], end[1], end[2]),
198
+ (function (xx, yy, zz) {
199
+ return function () { return view.project3DTo2D(xx, yy, zz)[2]; };
200
+ })(end[0], end[1], end[2])
201
+ ], attr);
202
+
203
+ attr = Type.copyAttributes(attributes, board.options, 'axis3d');
204
+ el = board.create('arrow', [el_start, el_end], attr);
205
+
206
+ return el;
207
+ };
208
+ JXG.registerElement('axis3d', ThreeD.createAxis);
209
+
210
+ ThreeD.createMesh = function (board, parents, attr) {
211
+ var view = parents[0],
212
+ point = parents[1],
213
+ vec1 = parents[2],
214
+ range1 = parents[3],
215
+ vec2 = parents[4],
216
+ range2 = parents[5],
217
+ el;
218
+
219
+ el = board.create('curve', [[], []], attr);
220
+ el.updateDataArray = function () {
221
+ var s1 = range1[0],
222
+ e1 = range1[1],
223
+ s2 = range2[0],
224
+ e2 = range2[1],
225
+ l1, l2, res, i, sol,
226
+ v1 = [0, 0, 0],
227
+ v2 = [0, 0, 0],
228
+ step = 1,
229
+ q = [0, 0, 0];
230
+
231
+ this.dataX = [];
232
+ this.dataY = [];
233
+
234
+ for (i = 0; i < 3; i++) {
235
+ q[i] = Type.evaluate(point[i]);
236
+ v1[i] = Type.evaluate(vec1[i]);
237
+ v2[i] = Type.evaluate(vec2[i]);
238
+ }
239
+ l1 = JXG.Math.norm(v1, 3);
240
+ l2 = JXG.Math.norm(v2, 3);
241
+ for (i = 0; i < 3; i++) {
242
+ v1[i] /= l1;
243
+ v2[i] /= l2;
244
+ }
245
+ if (false) {
246
+ sol = Mat.Geometry.getPlaneBounds(v1, v2, q, s1, e1);
247
+ if (sol !== null) {
248
+ s1 = sol[0];
249
+ e1 = sol[1];
250
+ s2 = sol[2];
251
+ e2 = sol[3];
252
+ }
253
+ }
254
+
255
+ res = view.getMesh(
256
+ function(u, v) { return q[0] + u * v1[0] + v * v2[0]; },
257
+ function(u, v) { return q[1] + u * v1[1] + v * v2[1]; },
258
+ function(u, v) { return q[2] + u * v1[2] + v * v2[2]; },
259
+ [Math.ceil(s1), Math.floor(e1), (Math.ceil(e1) - Math.floor(s1)) / step],
260
+ [Math.ceil(s2), Math.floor(e2), (Math.ceil(e2) - Math.floor(s2)) / step]);
261
+ this.dataX = res[0];
262
+ this.dataY = res[1];
263
+ };
264
+ return el;
265
+ };
266
+ JXG.registerElement('mesh3d', ThreeD.createMesh);
267
+
268
+ });
@@ -0,0 +1,97 @@
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
+ define(['jxg', 'utils/type', '3d/view3d'
32
+ ], function (JXG, Type, ThreeD) {
33
+ "use strict";
34
+
35
+ ThreeD.createCurve = function (board, parents, attr) {
36
+ var view = parents[0],
37
+ D3, el;
38
+
39
+ D3 = {
40
+ elType: 'curve3D',
41
+ X: parents[1],
42
+ Y: parents[2],
43
+ Z: parents[3],
44
+ };
45
+ D3.F = [D3.X, D3.Y, D3.Z];
46
+
47
+ el = board.create('curve', [[], []], attr);
48
+ el.D3 = D3;
49
+
50
+ if (Type.isFunction(el.D3.X)) {
51
+ // 3D curve given as t -> [X(t), Y(t), Z(t)]
52
+
53
+ el.D3.range = parents[4];
54
+ el.updateDataArray = function () {
55
+ var steps = Type.evaluate(this.visProp.numberpointshigh),
56
+ s = Type.evaluate(this.D3.range[0]),
57
+ e = Type.evaluate(this.D3.range[1]),
58
+ delta = (e - s) / (steps - 1),
59
+ c2d, t, i,
60
+ p = [0, 0, 0];
61
+
62
+ this.dataX = [];
63
+ this.dataY = [];
64
+
65
+ for (t = s; t <= e; t += delta) {
66
+ for (i = 0; i < 3; i++) {
67
+ p[i] = this.D3.F[i](t);
68
+ }
69
+ c2d = view.project3DTo2D(p);
70
+ this.dataX.push(c2d[1]);
71
+ this.dataY.push(c2d[2]);
72
+ }
73
+ };
74
+ } else if (Type.isArray(el.D3.X)) {
75
+ // 3D curve given as array of 3D points
76
+
77
+ el.updateDataArray = function () {
78
+ var i,
79
+ le = this.D3.X.length,
80
+ c2d;
81
+
82
+ this.dataX = [];
83
+ this.dataY = [];
84
+
85
+ for (i = 0; i < le; i++) {
86
+ c2d = view.project3DTo2D([this.D3.X[i], this.D3.Y[i], this.D3.Z[i]]);
87
+ this.dataX.push(c2d[1]);
88
+ this.dataY.push(c2d[2]);
89
+ }
90
+ };
91
+ }
92
+
93
+ return el;
94
+ };
95
+ JXG.registerElement('curve3d', ThreeD.createCurve);
96
+
97
+ });