import MovingNode from './MovingNode'; import SkeletonContext from './SkeletonContext'; export default class SkeletonEvent { static INVALID_TIME: number; readonly time: number; protected eventPriority: number; constructor(time: number); compareTo(other: SkeletonEvent): number; onEventQueued(): void; onEventAborted(adjacentNode: MovingNode, ctx: SkeletonContext): void; onEventAborted2(edgeNode0: MovingNode, edgeNode1: MovingNode, ctx?: SkeletonContext): void; handle(ctx: SkeletonContext): void; /** * Always aborts events of 'node'. */ protected static handle(node: MovingNode, ctx: SkeletonContext): void; static handleInit(node: MovingNode, ctx: SkeletonContext): void; /** * Check for valid polygon and handle case in which a polygon degenerates to a line. * @return True if polygon consists of >2 edges. */ private static ensureValidPolygon; static createEvents(node: MovingNode, ctx: SkeletonContext): void; /** * Tests adjacent edges of 'node' against other eligible reflex vertices in MovingNodes-loop. * If 'node' is reflex, tests it against all eligible edges. * Eligible tests: Minimum distance between reflex node and candidate edge = 2 edges in between * * A triangle cannot be concave. A concave quadrilateral (arrowhead) doesn't need split events. * Minimum vertices for split events = 5. */ private static createAllSplitEvents; static createSplitEvents(reflexNode: MovingNode, ctx: SkeletonContext): void; private static handleDegenerateAngle; }