      1 /*global JXG:true, define: true*/
      2
      3 import JXG from "./jxg.js";
      4 import Options from "./options.js";
      5
      6 JXG.extend(Options, {
      7     // infobox: {
      8     //     // strokeColor: 'black',
      9     //     // useKatex: false,
     10     //     // useMathjax: false
     11     // },
     12
     13     axes3d: {
     14         /**#@+
     15          * @visprop
     16          */
     17
     18         /**
     19          * Position of the main axes in a View3D element. Possible values are
     20          * 'center', 'border' or 'none'.
     21          *
     22          * @type String
     23          * @name View3D#axesPosition
     24          * @default 'center'
     25          */
     26         axesPosition: "center", // Possible values: 'center', 'border', 'none'
     27
     28         // Main axes
     29         /**
     30          * Attributes of the centered 3D x-axis.
     31          *
     32          * @type Line3D
     33          * @name View3D#xAxis
     34          * @see View3D#axesPosition
     35          */
     36         xAxis: { visible: true, point2: { name: "x" }, strokeColor: JXG.palette.red },
     37
     38         /**
     39          * Attributes of the centered 3D y-axis.
     40          *
     41          * @type Line3D
     42          * @name View3D#yAxis
     43          * @see View3D#axesPosition
     44          */
     45         yAxis: { visible: true, point2: { name: "y" }, strokeColor: JXG.palette.green },
     46
     47         /**
     48          * Attributes of the centered 3D z-axis.
     49          *
     50          * @type Line3D
     51          * @name View3D#zAxis
     52          * @see View3D#axesPosition
     53          */
     54         zAxis: { visible: true, point2: { name: "z" }, strokeColor: JXG.palette.blue },
     55
     56         /**
     57          * Attributes of the 3D x-axis at the border.
     58          *
     59          * @type Line3D
     60          * @name View3D#xAxisBorder
     61          * @see View3D#axesPosition
     62          * @default <pre>{
     63          *   name: 'x',
     64          *   withLabel: false,
     65          *   label: {
     66          *       position: '50% left',
     67          *       offset: [30, 0],
     68          *       fontsize: 15
     69          *   },
     70          *   strokeWidth: 1,
     71          *   lastArrow: false,
     72          *   ticks3d: {
     73          *       label: {
     74          *           anchorX: 'middle',
     75          *           anchorY: 'middle'
     76          *       }
     77          *   }
     78          *}
     79          *</pre>
     80          */
     81         xAxisBorder: {
     82             name: 'x',
     83             withLabel: false,
     84             label: {
     85                 position: '50% left',
     86                 offset: [30, 0],
     87                 fontsize: 15
     88             },
     89             strokeWidth: 1,
     90             lastArrow: false,
     91             ticks3d: {
     92                 label: {
     93                     anchorX: 'middle',
     94                     anchorY: 'middle'
     95                 }
     96
     97             }
     98         },
     99
    100         /**
    101          * Attributes of the 3D y-axis at the border.
    102          *
    103          * @type Line3D
    104          * @name View3D#yAxisBorder
    105          * @see View3D#axesPosition
    106          * @default <pre>{
    107          *   name: 'x',
    108          *   withLabel: false,
    109          *   label: {
    110          *       position: '50% right',
    111          *       offset: [0, -30],
    112          *       fontsize: 15
    113          *   },
    114          *   strokeWidth: 1,
    115          *   lastArrow: false,
    116          *   ticks3d: {
    117          *       label: {
    118          *           anchorX: 'middle',
    119          *       }
    120          *   }
    121          *}
    122          *</pre>
    123          */
    124         yAxisBorder: {
    125             name: 'y',
    126             withLabel: false,
    127             label: {
    128                 position: '50% right',
    129                 offset: [0, -30],
    130                 fontsize: 15
    131             },
    132             strokeWidth: 1,
    133             lastArrow: false,
    134             ticks3d: {
    135                 label: {
    136                     anchorX: 'middle'
    137                 }
    138             }
    139         },
    140
    141         /**
    142          * Attributes of the 3D z-axis at the border.
    143          *
    144          * @type Line3D
    145          * @name View3D#zAxisBorder
    146          * @see View3D#axesPosition
    147          * @default <pre>{
    148          *   name: 'z',
    149          *   withLabel: false,
    150          *   label: {
    151          *       position: '50% right',
    152          *       offset: [30, 0],
    153          *       fontsize: 15
    154          *   },
    155          *   strokeWidth: 1,
    156          *   lastArrow: false,
    157          *   ticks3d: {
    158          *       label: {
    159          *           anchorX: 'middle',
    160          *           anchorY: 'middle'
    161          *       }
    162          *   }
    163          *}
    164          *</pre>
    165          */
    166         zAxisBorder: {
    167             name: 'z',
    168             withLabel: false,
    169             label: {
    170                 position: '50% right',
    171                 offset: [30, 0],
    172                 fontsize: 15
    173             },
    174             strokeWidth: 1,
    175             lastArrow: false,
    176             ticks3d: {
    177                 label: {
    178                     anchorX: 'middle',
    179                     anchorY: 'middle'
    180                 }
    181             }
    182         },
    183
    184         // Planes
    185         /**
    186          * Attributes of the 3D plane orthogonal to the x-axis at the "rear" of the cube.
    187          * @type Plane3D
    188          * @name View3D#xPlaneRear
    189          */
    190         xPlaneRear: {
    191             visible: true,
    192             layer: 0,
    193             strokeWidth: 1,
    194             strokeColor: '#dddddd',
    195             fillColor: '#dddddd',
    196             mesh3d: { layer: 1 }
    197         },
    198
    199         /**
    200          * Attributes of the 3D plane orthogonal to the y-axis at the "rear" of the cube.
    201          * @type Plane3D
    202          * @name View3D#yPlaneRear
    203          */
    204         yPlaneRear: {
    205             visible: true,
    206             strokeWidth: 1,
    207             strokeColor: '#dddddd',
    208             fillColor: '#dddddd',
    209             layer: 0,
    210             mesh3d: { layer: 1 }
    211         },
    212
    213         /**
    214          * Attributes of the 3D plane orthogonal to the z-axis at the "rear" of the cube.
    215          * @type Plane3D
    216          * @name View3D#zPlaneRear
    217          */
    218         zPlaneRear: {
    219             visible: true,
    220             strokeWidth: 1,
    221             strokeColor: '#dddddd',
    222             fillColor: '#dddddd',
    223             layer: 0,
    224             mesh3d: { layer: 1 }
    225         },
    226
    227         /**
    228          * Attributes of the 3D plane orthogonal to the x-axis at the "front" of the cube.
    229          * @type Plane3D
    230          * @name View3D#xPlaneFront
    231          */
    232         xPlaneFront: {
    233             visible: false,
    234             strokeWidth: 1,
    235             strokeColor: '#dddddd',
    236             fillColor: '#dddddd',
    237             layer: 0,
    238             mesh3d: { layer: 1 }
    239         },
    240         /**
    241          * Attributes of the 3D plane orthogonal to the y-axis at the "front" of the cube.
    242          * @type Plane3D
    243          * @name View3D#yPlaneFront
    244          */
    245         yPlaneFront: {
    246             visible: false,
    247             strokeWidth: 1,
    248             strokeColor: '#dddddd',
    249             fillColor: '#dddddd',
    250             layer: 0,
    251             mesh3d: { layer: 1 }
    252         },
    253         /**
    254          * Attributes of the 3D plane orthogonal to the z-axis at the "front" of the cube.
    255          * @type Plane3D
    256          * @name View3D#zPlaneFront
    257          */
    258         zPlaneFront: {
    259             visible: false,
    260             strokeWidth: 1,
    261             strokeColor: '#dddddd',
    262             fillColor: '#dddddd',
    263             layer: 0,
    264             mesh3d: { layer: 1 }
    265         },
    266
    267         // Axes on the planes
    268         /**
    269          * Attributes of the 3D y-axis on the 3D plane orthogonal to the x-axis at the "rear" of the cube.
    270          * @type Plane3D
    271          * @name View3D#xPlaneRearYAxis
    272          */
    273         xPlaneRearYAxis: {
    274             visible: "inherit",
    275             strokeColor: "#888888",
    276             strokeWidth: 1
    277         },
    278         /**
    279          * Attributes of the 3D z-axis on the 3D plane orthogonal to the x-axis at the "rear" of the cube.
    280          * @type Plane3D
    281          * @name View3D#xPlaneRearZAxis
    282          */
    283         xPlaneRearZAxis: {
    284             visible: "inherit",
    285             strokeColor: "#888888",
    286             strokeWidth: 1
    287         },
    288         /**
    289          * Attributes of the 3D y-axis on the 3D plane orthogonal to the x-axis at the "front" of the cube.
    290          * @type Plane3D
    291          * @name View3D#xPlaneFrontYAxis
    292          */
    293         xPlaneFrontYAxis: {
    294             visible: "inherit",
    295             strokeColor: "#888888",
    296             strokeWidth: 1
    297         },
    298         /**
    299          * Attributes of the 3D z-axis on the 3D plane orthogonal to the x-axis at the "front" of the cube.
    300          * @type Plane3D
    301          * @name View3D#xPlaneFrontZAxis
    302          */
    303         xPlaneFrontZAxis: {
    304             visible: "inherit",
    305             strokeColor: "#888888",
    306             strokeWidth: 1
    307         },
    308
    309         /**
    310          * Attributes of the 3D x-axis on the 3D plane orthogonal to the y-axis at the "rear" of the cube.
    311          * @type Plane3D
    312          * @name View3D#yPlaneRearXAxis
    313          */
    314         yPlaneRearXAxis: {
    315             visible: "inherit",
    316             strokeColor: "#888888",
    317             strokeWidth: 1
    318         },
    319         /**
    320          * Attributes of the 3D z-axis on the 3D plane orthogonal to the y-axis at the "rear" of the cube.
    321          * @type Plane3D
    322          * @name View3D#yPlaneRearZAxis
    323          */
    324         yPlaneRearZAxis: {
    325             visible: "inherit",
    326             strokeColor: "#888888",
    327             strokeWidth: 1
    328         },
    329         /**
    330          * Attributes of the 3D x-axis on the 3D plane orthogonal to the y-axis at the "front" of the cube.
    331          * @type Plane3D
    332          * @name View3D#yPlaneFrontXAxis
    333          */
    334         yPlaneFrontXAxis: {
    335             visible: "inherit",
    336             strokeColor: "#888888",
    337             strokeWidth: 1
    338         },
    339         /**
    340          * Attributes of the 3D z-axis on the 3D plane orthogonal to the y-axis at the "front" of the cube.
    341          * @type Plane3D
    342          * @name View3D#yPlaneFrontZAxis
    343          */
    344         yPlaneFrontZAxis: {
    345             visible: "inherit",
    346             strokeColor: "#888888",
    347             strokeWidth: 1
    348         },
    349
    350         /**
    351          * Attributes of the 3D x-axis on the 3D plane orthogonal to the z-axis at the "rear" of the cube.
    352          * @type Plane3D
    353          * @name View3D#zPlaneRearXAxis
    354          */
    355         zPlaneRearXAxis: {
    356             visible: "inherit",
    357             strokeColor: "#888888",
    358             strokeWidth: 1
    359         },
    360         /**
    361          * Attributes of the 3D y-axis on the 3D plane orthogonal to the z-axis at the "rear" of the cube.
    362          * @type Plane3D
    363          * @name View3D#zPlaneRearYAxis
    364          */
    365         zPlaneRearYAxis: {
    366             visible: "inherit",
    367             strokeColor: "#888888",
    368             strokeWidth: 1
    369         },
    370         /**
    371          * Attributes of the 3D x-axis on the 3D plane orthogonal to the z-axis at the "front" of the cube.
    372          * @type Plane3D
    373          * @name View3D#zPlaneFrontXAxis
    374          */
    375         zPlaneFrontXAxis: {
    376             visible: "inherit",
    377             strokeColor: "#888888",
    378             strokeWidth: 1
    379         },
    380         /**
    381          * Attributes of the 3D y-axis on the 3D plane orthogonal to the z-axis at the "front" of the cube.
    382          * @type Plane3D
    383          * @name View3D#zPlaneFrontYAxis
    384          */
    385         zPlaneFrontYAxis: {
    386             visible: "inherit",
    387             strokeColor: "#888888",
    388             strokeWidth: 1
    389         }
    390
    391         /**#@-*/
    392     },
    393
    394     axis3d: {
    395         highlight: false,
    396         fixed: true,
    397         strokecolor: "black",
    398         strokeWidth: 1,
    399         tabindex: null,
    400
    401         point1: { visible: false, name: "" },
    402         point2: { visible: false, name: "", label: { visible: true } }
    403     },
    404
    405     circle3d: {
    406
    407         point: { visible: false, name: "" }
    408     },
    409
    410     curve3d: {
    411         /**#@+
    412          * @visprop
    413          */
    414
    415         highlight: false,
    416         tabindex: -1,
    417         strokeWidth: 1,
    418         numberPointsHigh: 200
    419
    420         /**#@-*/
    421     },
    422
    423     intersectionline3d: {
    424         point1: { visible: false, name: "" }, // Used in point/point
    425         point2: { visible: false, name: "" }
    426     },
    427
    428     line3d: {
    429         strokeWidth: 1,
    430         strokeColor: "black",
    431         fixed: true,
    432         tabindex: null,
    433         gradient: "linear",
    434         gradientSecondColor: "#ffffff",
    435
    436         point: { visible: false, name: "" }, // Used in cases of point/direction/range
    437         point1: { visible: false, name: "" }, // Used in point/point
    438         point2: { visible: false, name: "" }
    439     },
    440
    441     mesh3d: {
    442         /**#@+
    443          * @visprop
    444          */
    445
    446         strokeWidth: 1,
    447         strokeColor: "#9a9a9a",
    448         strokeOpacity: 0.6,
    449         highlight: false,
    450         tabindex: null,
    451
    452         visible: "inherit"
    453
    454         /**#@-*/
    455     },
    456
    457     plane3d: {
    458         strokeWidth: 0,
    459         strokeColor: "black",
    460         strokeOpacity: 1,
    461         highlight: false,
    462         tabindex: null,
    463
    464         gradient: "linear",
    465         gradientSecondColor: "#ffffff",
    466         gradientAngle: Math.PI,
    467         fillColor: "#a7a7a7",
    468         fillOpacity: 0.6,
    469
    470         point: { visible: false, name: "", fixed: true }
    471     },
    472
    473     point3d: {
    474         infoboxDigits: "auto",
    475         strokeWidth: 0,
    476         gradient: "radial",
    477         gradientSecondColor: "#555555",
    478         fillColor: "yellow",
    479         highlightStrokeColor: "#555555",
    480         gradientFX: 0.7,
    481         gradientFY: 0.3
    482     },
    483
    484     polygon3d: {
    485         /**#@+
    486          * @visprop
    487          */
    488
    489         highlight: false,
    490         tabindex: -1,
    491         strokeWidth: 1,
    492         fillColor: 'none'
    493
    494         /**#@-*/
    495     },
    496
    497     sphere3d: {
    498         /**#@+
    499          * @visprop
    500          */
    501
    502         highlight: false,
    503
    504         strokeWidth: 1,
    505         strokeColor: '#00ff80',
    506         fillColor: 'white',
    507         gradient: 'radial',
    508         gradientSecondColor: '#00ff80',
    509         gradientFX: 0.7,
    510         gradientFY: 0.3,
    511         fillOpacity: 0.4
    512
    513         /**#@-*/
    514     },
    515
    516     surface3d: {
    517         /**#@+
    518          * @visprop
    519          */
    520
    521         highlight: false,
    522         tabindex: -1,
    523         strokeWidth: 1,
    524
    525         /**
    526          * Number of intervals the mesh is divided into in direction of parameter u.
    527          * @type Number
    528          * @name ParametricSurface3D#stepsU
    529          */
    530         stepsU: 30,
    531
    532         /**
    533          * Number of intervals the mesh is divided into in direction of parameter v.
    534          * @type Number
    535          * @name ParametricSurface3D#stepsV
    536          */
    537         stepsV: 30
    538
    539         /**#@-*/
    540     },
    541
    542     text3d: {
    543         /**#@+
    544          * @visprop
    545          */
    546
    547         /**#@-*/
    548     },
    549
    550     ticks3d: {
    551         /**#@+
    552          * @visprop
    553          */
    554
    555         visible: true,
    556
    557         ticksDistance: 1,
    558         majorHeight: 10,
    559         minorTicks: 0,
    560         tickEndings: [0, 1],
    561         drawLabels: true,
    562
    563         label: {
    564             visible: true
    565         }
    566
    567         /**#@-*/
    568     },
    569
    570     vectorfield3d: {
    571         /**#@+
    572          * @visprop
    573          */
    574
    575         /**
    576          * Scaling factor of the vectors. This in contrast to slope fields, where this attribute sets the vector to the given length.
    577          * @name scale
    578          * @memberOf Vectorfield3D.prototype
    579          * @type {Number|Function}
    580          * @see Slopefield.scale
    581          * @default 1
    582          */
    583         scale: 1,
    584
    585         /**
    586          * Customize arrow heads of vectors. Be careful! If enabled this will slow down the performance.
    587          * Fields are:
    588          * <ul>
    589          *  <li> enabled: Boolean
    590          *  <li> size: length of the arrow head legs (in pixel)
    591          *  <li> angle: angle of the arrow head legs In radians.
    592          * </ul>
    593          * @name arrowhead
    594          * @memberOf Vectorfield3D.prototype
    595          * @type {Object}
    596          * @default <tt>{enabled: true, size: 5, angle: Math.PI * 0.125}</tt>
    597          */
    598         arrowhead: {
    599             enabled: true,
    600             size: 5,
    601             angle: Math.PI * 0.125
    602         }
    603
    604         /**#@-*/
    605     },
    606
    607     view3d: {
    608         /**#@+
    609          * @visprop
    610          */
    611
    612         needsRegularUpdate: true,
    613
    614         /**
    615          * Choose the projection type to be used: `parallel` or `central`.
    616          * <ul>
    617          * <li> `parallel` is parallel projection, also called orthographic projection
    618          * <li> `central` is central projection, also called perspective projection
    619          * </ul>
    620          *
    621          *
    622          * @name View3D#projection
    623          * @type String
    624          * @default 'parallel'
    625          */
    626         projection: 'parallel',
    627
    628         /**
    629          * Allow vertical dragging of objects, i.e. in direction of the z-axis.
    630          * Subobjects are
    631          * <ul>
    632          *  <li>enabled: true
    633          *  <li>key: 'shift'
    634          * </ul>
    635          * <p>
    636          * Possible values for attribute <i>key</i>: 'shift' or 'ctrl'.
    637          *
    638          * @name View3D#verticalDrag
    639          * @type Object
    640          * @default <tt>{enabled: true, key: 'shift'}</tt>
    641          */
    642         verticalDrag: {
    643             enabled: true,
    644             key: 'shift'
    645         },
    646
    647         /**
    648          * Specify the user handling of the azimuth.
    649          * <ul>
    650          *  <li><tt>pointer</tt> sub-attributes:
    651          *      <ul>
    652          *          <li><tt>enabled</tt>: Boolean that specifies whether pointer navigation is allowed by azimuth.
    653          *          <li><tt>speed</tt>: Number indicating how many passes the range of the az_slider makes when the cursor crosses the entire board once in the horizontal direction.
    654          *          <li><tt>outside</tt>: Boolean that specifies whether the pointer navigation is continued when the cursor leaves the board.
    655          *          <li><tt>button</tt>: Which button of the pointer should be used? (<tt>'-1'</tt> (=no button), <tt>'0'</tt> or <tt>'2'</tt>)
    656          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    657          *      </ul>
    658          *  <li><tt>keyboard</tt> sub-attributes:
    659          *      <ul>
    660          *          <li><tt>enabled</tt>: Boolean that specifies whether the keyboard (arrow keys) can be used to navigate the board.
    661          *          <li><tt>step</tt>: Size of the step per keystroke.
    662          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    663          *      </ul>
    664          *  <li><tt>continuous</tt>: Boolean that specifies whether the az_slider starts again from the beginning when its end is reached.
    665          *  <li><tt>slider</tt> attributes of the az_slider ({@link Slider}) with additional
    666          *      <ul>
    667          *          <li><tt>min</tt>: Minimum value.
    668          *          <li><tt>max</tt>: Maximum value.
    669          *          <li><tt>start</tt>: Start value.
    670          *      </ul>
    671          * </ul>
    672          *
    673          * @name View3D#az
    674          * @type Object
    675          * @default <pre>{
    676          *      pointer: {enabled: true, speed: 1, outside: true, button: -1, key: 'none'},
    677          *      keyboard: {enabled: true, step: 10, key: 'ctrl'},
    678          *      continuous: true,
    679          *      slider: {
    680          *          visible: true,
    681          *          style: 6,
    682          *          point1: {frozen: true},
    683          *          point2: {frozen: true},
    684          *          min: 0,
    685          *          max: 2 * Math.PI,
    686          *          start: 1.0
    687          *      },
    688          * }</pre>
    689          * @example
    690          *     var bound = [-4, 6];
    691          *     var view = board.create('view3d',
    692          *         [[-4, -3], [8, 8],
    693          *         [bound, bound, bound]],
    694          *         {
    695          *             projection: 'parallel',
    696          *             az: {
    697          *                 slider: {visible: true}
    698          *             }
    699          *         });
    700          *
    701          * </pre><div id="JXG4c381f21-f043-4419-941d-75f384c026d0" class="jxgbox" style="width: 300px; height: 300px;"></div>
    702          * <script type="text/javascript">
    703          *     (function() {
    704          *         var board = JXG.JSXGraph.initBoard('JXG4c381f21-f043-4419-941d-75f384c026d0',
    705          *             {boundingbox: [-8, 8, 8,-8], axis: false, showcopyright: false, shownavigation: false});
    706          *         var bound = [-4, 6];
    707          *         var view = board.create('view3d',
    708          *             [[-4, -3], [8, 8],
    709          *             [bound, bound, bound]],
    710          *             {
    711          *                 projection: 'parallel',
    712          *                 az: {
    713          *                     slider: {visible: true}
    714          *                 }
    715          *             });
    716          *
    717          *     })();
    718          *
    719          * </script><pre>
    720          *
    721          */
    722         az: {
    723             pointer: {
    724                 enabled: true,
    725                 speed: 1,
    726                 outside: true,
    727                 button: -1,
    728                 key: 'none'
    729             },
    730             keyboard: {
    731                 enabled: true,
    732                 step: 10,
    733                 key: 'ctrl'
    734             },
    735             continuous: true,
    736             slider: {
    737                 visible: 'inherit',
    738                 style: 6,
    739                 point1: { frozen: true },
    740                 point2: { frozen: true },
    741                 min: 0,
    742                 max: 2 * Math.PI,
    743                 start: 1.0
    744             }
    745         },
    746
    747         /**
    748          * Specify the user handling of the elevation.
    749          * <ul>
    750          *  <li><tt>pointer</tt> sub-attributes:
    751          *      <ul>
    752          *          <li><tt>enabled</tt>: Boolean that specifies whether pointer navigation is allowed by elevation.
    753          *          <li><tt>speed</tt>: Number indicating how many passes the range of the el_slider makes when the cursor crosses the entire board once in the horizontal direction.
    754          *          <li><tt>outside</tt>: Boolean that specifies whether the pointer navigation is continued when the cursor leaves the board.
    755          *          <li><tt>button</tt>: Which button of the pointer should be used? (<tt>'-1'</tt> (=no button), <tt>'0'</tt> or <tt>'2'</tt>)
    756          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    757          *      </ul>
    758          *  <li><tt>keyboard</tt> sub-attributes:
    759          *      <ul>
    760          *          <li><tt>enabled</tt>: Boolean that specifies whether the keyboard (arrow keys) can be used to navigate the board.
    761          *          <li><tt>step</tt>: Size of the step per keystroke.
    762          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    763          *      </ul>
    764          *  <li><tt>continuous</tt>: Boolean that specifies whether the el_slider starts again from the beginning when its end is reached.
    765          *  <li><tt>slider</tt> attributes of the el_slider ({@link Slider}) with additional
    766          *      <ul>
    767          *          <li><tt>min</tt>: Minimum value.
    768          *          <li><tt>max</tt>: Maximum value.
    769          *          <li><tt>start</tt>: Start value.
    770          *      </ul>
    771          * </ul>
    772          *
    773          * @name View3D#el
    774          * @type Object
    775          * @default <pre>{
    776          *      pointer: {enabled: true, speed: 1, outside: true, button: -1, key: 'none'},
    777          *      keyboard: {enabled: true, step: 10, key: 'ctrl'},
    778          *      continuous: true,
    779          *      slider: {
    780          *          visible: true,
    781          *          style: 6,
    782          *          point1: {frozen: true},
    783          *          point2: {frozen: true},
    784          *          min: 0,
    785          *          max: 2 * Math.PI,
    786          *          start: 0.3
    787          *      },
    788          * }<pre>
    789          * @example
    790          *     var bound = [-4, 6];
    791          *     var view = board.create('view3d',
    792          *         [[-4, -3], [8, 8],
    793          *         [bound, bound, bound]],
    794          *         {
    795          *             projection: 'parallel',
    796          *             el: {
    797          *                 slider: {visible: true}
    798          *             }
    799          *         });
    800          *
    801          * </pre><div id="JXG8926f733-c42e-466b-853c-74feb795e879" class="jxgbox" style="width: 300px; height: 300px;"></div>
    802          * <script type="text/javascript">
    803          *     (function() {
    804          *         var board = JXG.JSXGraph.initBoard('JXG8926f733-c42e-466b-853c-74feb795e879',
    805          *             {boundingbox: [-8, 8, 8,-8], axis: false, showcopyright: false, shownavigation: false});
    806          *         var bound = [-4, 6];
    807          *         var view = board.create('view3d',
    808          *             [[-4, -3], [8, 8],
    809          *             [bound, bound, bound]],
    810          *             {
    811          *                 projection: 'parallel',
    812          *                 el: {
    813          *                     slider: {visible: true}
    814          *                 }
    815          *             });
    816          *
    817          *     })();
    818          *
    819          * </script><pre>
    820          *
    821          */
    822         el: {
    823             pointer: {
    824                 enabled: true,
    825                 speed: 1,
    826                 outside: true,
    827                 button: -1,
    828                 key: 'none'
    829             },
    830             keyboard: {
    831                 enabled: true,
    832                 step: 10,
    833                 key: 'ctrl'
    834             },
    835             continuous: true,
    836             slider: {
    837                 visible: 'inherit',
    838                 style: 6,
    839                 point1: { frozen: true },
    840                 point2: { frozen: true },
    841                 min: 0,
    842                 max: 2 * Math.PI,
    843                 start: 0.3
    844             }
    845         },
    846
    847         /**
    848          * Specify the user handling of the bank angle.
    849          * <ul>
    850          *  <li><tt>pointer</tt> sub-attributes:
    851          *      <ul>
    852          *          <li><tt>enabled</tt>: Boolean that specifies whether pointer navigation is allowed by elevation.
    853          *          <li><tt>speed</tt>: Number indicating how many passes the range of the el_slider makes when the cursor crosses the entire board once in the horizontal direction.
    854          *          <li><tt>outside</tt>: Boolean that specifies whether the pointer navigation is continued when the cursor leaves the board.
    855          *          <li><tt>button</tt>: Which button of the pointer should be used? (<tt>'-1'</tt> (=no button), <tt>'0'</tt> or <tt>'2'</tt>)
    856          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    857          *      </ul>
    858          *  <li><tt>keyboard</tt> sub-attributes:
    859          *      <ul>
    860          *          <li><tt>enabled</tt>: Boolean that specifies whether the keyboard (arrow keys) can be used to navigate the board.
    861          *          <li><tt>step</tt>: Size of the step per keystroke.
    862          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    863          *      </ul>
    864          *  <li><tt>continuous</tt>: Boolean that specifies whether the el_slider starts again from the beginning when its end is reached.
    865          *  <li><tt>slider</tt> attributes of the el_slider ({@link Slider}) with additional
    866          *      <ul>
    867          *          <li><tt>min</tt>: Minimum value.
    868          *          <li><tt>max</tt>: Maximum value.
    869          *          <li><tt>start</tt>: Start value.
    870          *      </ul>
    871          * </ul>
    872          *
    873          * @name View3D#bank
    874          * @type Object
    875          * @default <pre>{
    876          *      pointer: {enabled: true, speed: 1, outside: true, button: -1, key: 'none'},
    877          *      keyboard: {enabled: true, step: 10, key: 'ctrl'},
    878          *      continuous: true,
    879          *      slider: {
    880          *          visible: true,
    881          *          style: 6,
    882          *          point1: {frozen: true},
    883          *          point2: {frozen: true},
    884          *          min: 0,
    885          *          max: 2 * Math.PI,
    886          *          start: 0.3
    887          *      },
    888          * }<pre>
    889          * @example
    890          *     var bound = [-4, 6];
    891          *     var view = board.create('view3d',
    892          *         [[-4, -3], [8, 8],
    893          *         [bound, bound, bound]],
    894          *         {
    895          *             projection: 'parallel',
    896          *             bank: {
    897          *                 slider: {visible: true}
    898          *             }
    899          *         });
    900          *
    901          * </pre><div id="JXGb67811ea-c1e3-4d1e-b13c-3537b3436f6c" class="jxgbox" style="width: 300px; height: 300px;"></div>
    902          * <script type="text/javascript">
    903          *     (function() {
    904          *         var board = JXG.JSXGraph.initBoard('JXGb67811ea-c1e3-4d1e-b13c-3537b3436f6c',
    905          *             {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
    906          *         var bound = [-4, 6];
    907          *         var view = board.create('view3d',
    908          *             [[-4, -3], [8, 8],
    909          *             [bound, bound, bound]],
    910          *             {
    911          *                 projection: 'parallel',
    912          *                 bank: {
    913          *                     slider: {visible: true}
    914          *                 }
    915          *             });
    916          *
    917          *     })();
    918          *
    919          * </script><pre>
    920          *
    921          */
    922         bank: {
    923             pointer: {
    924                 enabled: true,
    925                 speed: 0.08,
    926                 outside: true,
    927                 button: -1,
    928                 key: 'none'
    929             },
    930             keyboard: {
    931                 enabled: true,
    932                 step: 10,
    933                 key: 'ctrl'
    934             },
    935             continuous: true,
    936             slider: {
    937                 visible: 'inherit',
    938                 style: 6,
    939                 point1: { frozen: true },
    940                 point2: { frozen: true },
    941                 min: -Math.PI,
    942                 max:  Math.PI,
    943                 start: 0.0
    944             }
    945         },
    946
    947         /**
    948          * Enable user handling by a virtual trackball.
    949          * Sub-attributes:
    950          *      <ul>
    951          *          <li><tt>enabled</tt>: Boolean that specifies whether pointer navigation is allowed by elevation.
    952          *          <li><tt>outside</tt>: Boolean that specifies whether the pointer navigation is continued when the cursor leaves the board.
    953          *          <li><tt>button</tt>: Which button of the pointer should be used? (<tt>'-1'</tt> (=no button), <tt>'0'</tt> or <tt>'2'</tt>)
    954          *          <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
    955          *      </ul>
    956          *
    957          * @name View3D#trackball
    958          * @type Object
    959          * @default <pre>{
    960          *   enabled: false,
    961          *   outside: true,
    962          *   button: -1,
    963          *   key: 'none'
    964          * }
    965          * </pre>
    966          */
    967         trackball: {
    968             enabled: false,
    969             outside: true,
    970             button: -1,
    971             key: 'none'
    972         },
    973
    974         /**
    975          * Distance of the camera to the center of the view.
    976          * If set to 'auto', r will be calculated automatically.
    977          *
    978          * @type {Number|String}
    979          * @default 'auto'
    980          */
    981         r: 'auto',
    982
    983         /**
    984          * Field of View defines the angle of view (in radians) of the camera, determining how much of the scene is captured within the frame.
    985          *
    986          * @type Number
    987          * @default 2/5*Math.PI
    988          */
    989         fov: 1 / 5 * 2 * Math.PI,
    990
    991         /**
    992          * When this option is enabled, points closer to the screen are drawn
    993          * over points further from the screen within each layer.
    994          *
    995          * @name View3D#depthOrderPoints
    996          * @default false
    997          */
    998         depthOrderPoints: false,
    999
    1000         /**
    1001          * Fixed values for the view, which can be changed using keyboard keys `picture-up` and `picture-down`.
    1002          * Array of the form: [[el0, az0, r0], [el1, az1, r1, ...[eln, azn, rn]]
    1003          *
    1004          * @name View3D#values
    1005          * @type Array
    1006          * @default <tt>{[[0, 1.57], [0.78, 0.62], [0, 0], [5.49, 0.62], [4.71, 0], [3.93, 0.62], [3.14, 0], [2.36, 0.62], [1.57, 1.57]]}<tt>
    1007          */
    1008         values: [
    1009             [0, 1.57],
    1010             [0.78, 0.62],
    1011             [0, 0],
    1012             [5.49, 0.62],
    1013             [4.71, 0],
    1014             [3.93, 0.62],
    1015             [3.14, 0],
    1016             [2.36, 0.62],
    1017             [1.57, 1.57]
    1018         ],
    1019
    1020         infobox: {
    1021             strokeColor: '#888888',
    1022             useKatex: false,
    1023             useMathjax: false
    1024         },
    1025
    1026         /**
    1027          * @class
    1028          * @ignore
    1029          */
    1030         _currentView: -1
    1031
    1032         /**#@-*/
    1033     }
    1034 });
    1035
    1036 export default JXG.Options;
    1037