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