opensheetmusicdisplay
Version:
An open source JavaScript engine for displaying MusicXML based on VexFlow.
173 lines (172 loc) • 6.78 kB
TypeScript
import { PointF2D } from "../../Common/DataObjects/PointF2D";
import { SizeF2D } from "../../Common/DataObjects/SizeF2D";
import { RectangleF2D } from "../../Common/DataObjects/RectangleF2D";
import { GraphicalObject } from "./GraphicalObject";
/**
* A bounding box delimits an area on the 2D plane.
* @param dataObject Graphical object where the bounding box will be attached
* @param parent Parent bounding box of an object in a higher hierarchy position
* @param connectChildToParent Create a child to parent relationship too. Will be true by default
*/
export declare class BoundingBox {
protected isSymbol: boolean;
protected relativePositionHasBeenSet: boolean;
protected xBordersHaveBeenSet: boolean;
protected yBordersHaveBeenSet: boolean;
protected absolutePosition: PointF2D;
protected relativePosition: PointF2D;
protected size: SizeF2D;
protected marginSize: SizeF2D;
protected upperLeftCorner: PointF2D;
protected upperLeftMarginCorner: PointF2D;
protected borderLeft: number;
protected borderRight: number;
protected borderTop: number;
protected borderBottom: number;
protected borderMarginLeft: number;
protected borderMarginRight: number;
protected borderMarginTop: number;
protected borderMarginBottom: number;
protected boundingRectangle: RectangleF2D;
protected boundingMarginRectangle: RectangleF2D;
protected childElements: BoundingBox[];
protected parent: BoundingBox;
protected dataObject: Object;
/**
* Create a bounding box
* @param dataObject Graphical object where the bounding box will be attached
* @param parent Parent bounding box of an object in a higher hierarchy position
* @param isSymbol Defines the bounding box to be symbol thus not calculating its boundaries by itself. NOTE: Borders need to be set!
*/
constructor(dataObject?: Object, parent?: BoundingBox, isSymbol?: boolean);
get RelativePositionHasBeenSet(): boolean;
get XBordersHaveBeenSet(): boolean;
set XBordersHaveBeenSet(value: boolean);
get YBordersHaveBeenSet(): boolean;
set YBordersHaveBeenSet(value: boolean);
get AbsolutePosition(): PointF2D;
set AbsolutePosition(value: PointF2D);
get RelativePosition(): PointF2D;
set RelativePosition(value: PointF2D);
get Size(): SizeF2D;
set Size(value: SizeF2D);
get MarginSize(): SizeF2D;
get UpperLeftCorner(): PointF2D;
get UpperLeftMarginCorner(): PointF2D;
get BorderLeft(): number;
set BorderLeft(value: number);
get BorderRight(): number;
set BorderRight(value: number);
get BorderTop(): number;
set BorderTop(value: number);
get BorderBottom(): number;
set BorderBottom(value: number);
get BorderMarginLeft(): number;
set BorderMarginLeft(value: number);
get BorderMarginRight(): number;
set BorderMarginRight(value: number);
get BorderMarginTop(): number;
set BorderMarginTop(value: number);
get BorderMarginBottom(): number;
set BorderMarginBottom(value: number);
get BoundingRectangle(): RectangleF2D;
get BoundingMarginRectangle(): RectangleF2D;
get ChildElements(): BoundingBox[];
set ChildElements(value: BoundingBox[]);
get Parent(): BoundingBox;
set Parent(value: BoundingBox);
get DataObject(): Object;
/**
* Get the center of a bounding box
* @param boundingBox Bounding box to check
*/
get Center(): PointF2D;
setAbsolutePositionFromParent(): void;
/**
* Calculate the the absolute position by adding up all relative positions of all parents (including the own rel. pos.)
*/
calculateAbsolutePosition(): void;
/**
* This method calculates the Absolute Positions recursively
*/
calculateAbsolutePositionsRecursiveWithoutTopelement(): void;
/**
* This method calculates the Absolute Positions recursively
* from the root element down to the leaf elements
* @param x
* @param y
*/
calculateAbsolutePositionsRecursive(x: number, y: number): void;
/**
* calculates the absolute positions of all children of this boundingBox
*/
calculateAbsolutePositionsOfChildren(): void;
/**
* This method calculates the BoundingBoxes
*/
calculateBoundingBox(ignoreClasses?: string[]): void;
calculateTopBottomBorders(): void;
/**
* This method computes the first non-overlapping position in the placementPsi Element for the current (this) positionAndShapeInfo
* @param placementPsi
* @param direction
* @param position
*/
computeNonOverlappingPositionWithMargin(placementPsi: BoundingBox, direction: ColDirEnum, position: PointF2D): void;
/**
* This method detects a collision (without margins)
* @param psi
* @returns {boolean}
*/
collisionDetection(psi: BoundingBox): boolean;
/**
* This method checks if the given Psi's Margins lie inside the current Psi's Margins.
* @param psi
* @returns {boolean}
*/
liesInsideBorders(psi: BoundingBox): boolean;
pointLiesInsideBorders(position: PointF2D): boolean;
/**
* This method detects a collision (margin-wide)
* @param psi
* @returns {boolean}
*/
marginCollisionDetection(psi: BoundingBox): boolean;
/**
* This method checks if the given Psi's Margins lie inside the current Psi's Margins
* @param psi
* @returns {boolean}
*/
liesInsideMargins(psi: BoundingBox): boolean;
pointLiesInsideMargins(position: PointF2D): boolean;
/**
* This method computes the first non-overlapping position in the placementPsi Element for the current (this) positionAndShapeInfo
* @param placementPsi
* @param direction
* @param position
*/
computeNonOverlappingPosition(placementPsi: BoundingBox, direction: ColDirEnum, position: PointF2D): void;
getClickedObjectOfType<T>(clickPosition: PointF2D): T;
getObjectsInRegion<T extends GraphicalObject>(region: BoundingBox, liesInside?: boolean, className?: string): T[];
protected calculateRectangle(): void;
protected calculateMarginRectangle(): void;
/**
* This method calculates the margin border along the given direction so that no collision takes place along this direction
* @param toBePlaced
* @param direction
*/
private calculateMarginPositionAlongDirection;
/**
* This method calculates the border along the given direction so that no collision takes place along this direction
* @param toBePlaced
* @param direction
*/
private calculatePositionAlongDirection;
}
export declare enum ColDirEnum {
Left = 0,
Right = 1,
Up = 2,
Down = 3,
NotYetDefined = 4
}