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.
- package/README.md +24 -0
- package/distrib/README.md +24 -0
- package/distrib/geogebra.min.js +1 -1
- package/distrib/geonext.min.js +1 -1
- package/distrib/index.d.ts +351 -39
- package/distrib/intergeo.min.js +1 -1
- package/distrib/jsxgraphcore.js +4 -4
- package/distrib/jsxgraphsrc.js +2909 -389
- package/distrib/sketch.min.js +2 -2
- package/package.json +1 -1
- package/src/3d/box3d.js +268 -0
- package/src/3d/curve3d.js +97 -0
- package/src/3d/linspace3d.js +375 -0
- package/src/3d/point3d.js +238 -0
- package/src/3d/surface3d.js +220 -0
- package/src/3d/threed.js +38 -0
- package/src/3d/view3d.js +529 -0
- package/src/base/board.js +160 -84
- package/src/base/constants.js +1 -1
- package/src/base/coordselement.js +1 -4
- package/src/base/element.js +22 -13
- package/src/base/foreignobject.js +7 -1
- package/src/base/line.js +1 -1
- package/src/base/polygon.js +88 -33
- package/src/base/text.js +42 -13
- package/src/base/ticks.js +3 -1
- package/src/element/composition.js +62 -23
- package/src/element/slider.js +12 -0
- package/src/jsxgraph.js +8 -5
- package/src/loadjsxgraph.js +17 -11
- package/src/math/clip.js +0 -1
- package/src/math/geometry.js +187 -2
- package/src/math/math.js +9 -0
- package/src/math/nlp.js +205 -173
- package/src/options.js +35 -13
- package/src/options3d.js +265 -0
- package/src/parser/jessiecode.js +1 -1
- package/src/reader/sketch.js +2 -2
- package/src/renderer/svg.js +7 -4
- package/src/utils/env.js +10 -10
- package/src/utils/type.js +2 -2
package/distrib/sketch.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
JSXGraph 1.4.
|
|
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
package/src/3d/box3d.js
ADDED
|
@@ -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
|
+
});
|