All files / src/elements/point CircleSlider.ts

100% Statements 67/67
75% Branches 6/8
100% Functions 4/4
100% Lines 67/67

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 681x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 204x 204x 204x 204x 204x 204x 204x 204x 204x 204x 204x 204x 1x 1x 1x 1x 1x 1x 1x 1x 1x 862x 862x 1x 1x 99x 99x 99x 99x 99x 99x 99x 99x 99x 99x 68x 68x 68x 1x  
/*----------------------------------------------------------------------+
|    Title:	CircleSlider.ts                                             |
|    A port of the software Geometry Applet by                          |
|    Author:    David E. Joyce                                          |
|        Department of Mathematics and Computer Science                 |
|        Clark University                                               |
|        Worcester, MA 01610-1477                                       |
|        U.S.A.                                                         |
|                                                                       |
|        http://aleph0.clarku.edu/~djoyce/home.html                     |
|        djoyce@clarku.edu                                              |
|                                                                       |
|    Date:    February, 1996.   Version 2.0.0 May, 1997.                |
|    TypeScript Port: 2019, Nelson Brown, brownnrl@gmail.com            |
|                           https://www.nelsonbrown.net/                |
+----------------------------------------------------------------------*/
import {PointElement} from "./PointElement";
import {CircleElement} from "../circle/CircleElement";
 
export class CircleSlider extends PointElement {
    _C : CircleElement;
    _initx : number;
    _inity : number;
    _initz : number;
 
    _newP : PointElement = new PointElement();
 
    constructor(C: CircleElement,
                x: number, y: number, z: number) {
        super();
        this.dimension = 0;
        this.draggable = true;
        this._C = C;
        this._x = x;
        this._initx = x;
        this._y = y;
        this._inity = y;
        this._z = z;
        this._initz = z;
    }
 
    public reset() {
        this._x = this._initx;
        this._y = this._inity;
        this._z = this._initz;
        this.toCircle(this._C);
    }
 
    public update() {
        this.toCircle(this._C);
    }
 
    public drag(tox: number, toy: number): boolean {
        this._x = tox;
        this._y = toy;
        if (!this.defined()) this._z = this._initz;
        this._newP.to(this).uptoPlane(this._C.AP);
        if (!this._newP.defined())	// vertical plane
            this._newP.to(this).toPlane(this._C.AP);
        this._newP.toSphere(this._C.Center, this._C.radius);
        if ((this._newP.x-this.x)*(this._newP.x-this.x) +
            (this._newP.y-this.y)*(this._newP.y-this.y) < 0.5)
            return false;
        this.to(this._newP);
        return true;
    }
}