Browse Source

MINOR,FEAT: Extended and unified methods -naming of TDP class

master
chris 2 weeks ago
parent
commit
d5c4865ecf
  1. 304
      src/sizeSide/siding.js

304
src/sizeSide/siding.js

@ -327,7 +327,10 @@ class PaddingChain extends Sides {
} }
/** /**
* * Class containing two numbers.
* Usually they represent coordinates,
* but they also might serve as length and width
* as this class provides several convenience methods.
*/ */
class TwoDimPoint { class TwoDimPoint {
/** /**
@ -335,72 +338,341 @@ class TwoDimPoint {
* @param {number} x * @param {number} x
* @param {number} y * @param {number} y
*/ */
constructor(x, y) { constructor(x = -1, y = -1) {
this.x = x; this.x = x;
this.y = y; this.y = y;
} }
/** /**
* *
* @returns {string}
*/
toString() {
return `P(${this.x},${this.y})`;
}
/**
* Loads the width and height of an element into the x and y of this TDP.
* @param {HTMLElement} element
* @returns {TwoDimPoint}
*/
loadFromElementDimensions(element) {
let bcr = element.getBoundingClientRect();
this.x = bcr.width;
this.y = bcr.height;
return this;
}
/**
* Loads the coordinates of the top-left corner of an element,
* into the x and y of this TDP.
* @param {HTMLElement} element
* @returns {TwoDimPoint}
*/
loadFromElementZero(element) {
let bcr = element.getBoundingClientRect();
this.x = bcr.left;
this.y = bcr.top;
return this;
}
/**
* Loads the coordinates of the bottom-right corner of an element,
* into the x and y of this TDP.
* @param {HTMLElement} element
* @returns {TwoDimPoint}
*/
loadFromElementMax(element) {
let bcr = element.getBoundingClientRect();
this.x = bcr.left;
this.y = bcr.top;
return this;
}
/**
* If onConditionMet is true (default) and the value of x is positive
* the x of this TDP will be multiplied with -1,
* otherwise nothing will be done.
* @param {boolean} [onConditionMet = true] onConditionMet
* @returns {TwoDimPoint} this TDP Object
*/
setXAsNegative(onConditionMet = true) {
if (onConditionMet & this.x > 0) {
this.x = this.x * -1;
}
return this;
}
/**
* If onConditionMet is true (default) and the value of y is positive
* the y of this TDP will be multiplied with -1,
* otherwise nothing will be done.
* @param {boolean} [onConditionMet = true] onConditionMet
* @returns {TwoDimPoint}
*/
setYAsNegative(onConditionMet = true) {
if (onConditionMet & this.y > 0) {
this.y = this.y * -1;
}
return this;
}
/**
*
* @param {boolean} onConditionMetX
* @param {boolean} onConditionMetY
* @returns {TwoDimPoint}
*/
setAsNegative(onConditionMetX, onConditionMetY) {
this.setXAsNegative(onConditionMetX);
this.setYAsNegative(onConditionMetY);
return this;
}
/**
* Subtracts the given Delta from the x-value
* @param {number} delta * @param {number} delta
* @returns {TwoDimPoint} * @returns {TwoDimPoint}
*/ */
xMinus(delta) { setXMinus(delta) {
this.x = this.x - delta; this.x = this.x - delta;
return this; return this;
} }
/** /**
* * Adds the given Delta from the x-value
* @param {number} delta * @param {number} delta
* @returns {TwoDimPoint} * @returns {TwoDimPoint}
*/ */
xPlus(delta) { setXPlus(delta) {
this.x = this.x + delta; this.x = this.x + delta;
return this; return this;
} }
/** /**
* * Subtracts the given Delta from the y-value
* @param {number} delta * @param {number} delta
* @returns {TwoDimPoint} * @returns {TwoDimPoint}
*/ */
yMinus(delta) { setYMinus(delta) {
this.y = this.y - delta; this.y = this.y - delta;
return this; return this;
} }
/** /**
* * Adds the given Delta from the y-value
* @param {number} delta * @param {number} delta
* @returns {TwoDimPoint} * @returns {TwoDimPoint}
*/ */
yPlus(delta) { setYPlus(delta) {
this.y = this.y + delta; this.y = this.y + delta;
return this; return this;
} }
/**
* Returns the absolute delta between this x and given ref
* @param {number} refnumber
* @returns {number}
*/
getXDeltaTo(refnumber) {
return Math.abs(this.x - refnumber);
}
/**
* Returns the absolute delta between this y and given ref
* @param {number} refnumber
* @returns {number}
*/
getYDeltaTo(refnumber) {
return Math.abs(this.y - refnumber);
}
/**
*
* @param {number} times
* @returns {TwoDimPoint}
*/
setXMultiplied(times) {
this.x = this.x * times;
return this;
}
/**
*
* @param {number} times
* @returns {TwoDimPoint}
*/
setYMultiplied(times) {
this.y = this.y * times;
return this;
}
/** /**
* *
* @param {number} times
* @returns {TwoDimPoint}
*/
setXDivided(times) {
if (times === 0) {
throw new Error("Dividing by 0 is not defined");
}
this.x = this.x / times;
return this;
}
/**
*
* @param {number} times
* @returns {TwoDimPoint}
*/
setYDivided(times) {
if (times === 0) {
throw new Error("Dividing by 0 is not defined");
}
this.y = this.y / times;
return this;
}
/**
* Subtracts the given Delta {TwoDimPoint} TDP from this TDP
* @param {TwoDimPoint} delta * @param {TwoDimPoint} delta
* @returns {TwoDimPoint} * @returns {TwoDimPoint}
*/ */
minusTDP(delta) { setThisByMinusTDP(delta) {
this.x = this.x - delta.x; this.x = this.x - delta.x;
this.y = this.y - delta.y; this.y = this.y - delta.y;
return this; return this;
} }
/** /**
* * Adds the given Delta {TwoDimPoint} TDP to this TDP
* @param {TwoDimPoint} delta * @param {TwoDimPoint} delta
* @returns {TwoDimPoint} * @returns {TwoDimPoint}
*/ */
plusTDP(delta) { setThisByPlusTDP(delta) {
this.x = this.x + delta.x; this.x = this.x + delta.x;
this.y = this.y + delta.y; this.y = this.y + delta.y;
return this; return this;
} }
/**
*
* @param {nr} tdp
* @returns {TwoDimPoint}
*/
setByMultipliedByNumber(nr) {
this.x = this.x * nr;
this.y = this.y * nr;
return this;
}
/**
*
* @param {TwoDimPoint} tdp
* @returns {TwoDimPoint}
*/
setByMultipliedByTDP(tdp) {
this.x = this.x * tdp.x;
this.y = this.y * tdp.y;
return this;
}
/**
* @param {nr} tdp
* @returns {TwoDimPoint}
*/
setByDividedByNumber(nr) {
if (nr === 0) {
throw new Error("Dividing by 0 is not defined");
}
this.x = this.x / nr;
this.y = this.y / nr;
return this;
}
/**
*
* @param {TwoDimPoint} tdp
* @returns {TwoDimPoint}
*/
setByDividedByTDP(tdp) {
if (tdp.x === 0 | tdp.y === 0) {
throw new Error("Dividing by 0 is not defined");
}
this.x = this.x / tdp.x;
this.y = this.y / tdp.y;
return this;
}
/**
* Creates and returns a new TDP
* consisting of the absolute deltas of the x/y coordinates of this and the reference TDP.
* @param {TwoDimPoint} refTDP
* @returns {TwoDimPoint}
*/
getNewDeltaTDP(refTDP) {
return new TwoDimPoint(
this.getXDeltaTo(refTDP.x),
this.getYDeltaTo(refTDP.y)
);
}
/**
* Returns the absolute Distance between two points.
* @param {TwoDimPoint} refTDP
* @returns {number}
*/
getDistanceBetween(refTDP) {
return Math.hypot(
this.getXDeltaTo(refTDP.x),
this.getYDeltaTo(refTDP.y)
);
}
/**
* Returns a new TDP where x and y are calculated,
* based on the given distance and angle (degree).
* @param {number} distance
* @param {number} degrees
* @returns {TwoDimPoint}
*/
getNewTDPByDistance(
distance,
degrees
) {
/** angle in radians */
let angle = ((parseFloat(degrees) * Math.PI) / 180);
return new TwoDimPoint(
this.x + distance * Math.cos(angle),
this.y + distance * Math.sin(angle),
);
}
/**
* Multiplies both (x,y) with -1 to inverse them.
* @returns {TwoDimPoint}
*/
inverse() {
this.x = this.x * -1
this.y = this.y * -1
return this;
}
/**
* Flips/changes x and y with each other.
* @returns {TwoDimPoint}
*/
flip() {
let oldX = this.x;
this.x = this.y;
this.y = oldX;
return this;
}
} }
/** /**

Loading…
Cancel
Save