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