webcola
Version:
WebCola =======
94 lines (93 loc) • 2.76 kB
TypeScript
export declare class PositionStats {
scale: number;
AB: number;
AD: number;
A2: number;
constructor(scale: number);
addVariable(v: Variable): void;
getPosn(): number;
}
export declare class Constraint {
left: Variable;
right: Variable;
gap: number;
equality: boolean;
lm: number;
active: boolean;
unsatisfiable: boolean;
constructor(left: Variable, right: Variable, gap: number, equality?: boolean);
slack(): number;
}
export declare class Variable {
desiredPosition: number;
weight: number;
scale: number;
offset: number;
block: Block;
cIn: Constraint[];
cOut: Constraint[];
constructor(desiredPosition: number, weight?: number, scale?: number);
dfdv(): number;
position(): number;
visitNeighbours(prev: Variable, f: (c: Constraint, next: Variable) => void): void;
}
export declare class Block {
vars: Variable[];
posn: number;
ps: PositionStats;
blockInd: number;
constructor(v: Variable);
private addVariable;
updateWeightedPosition(): void;
private compute_lm;
private populateSplitBlock;
traverse(visit: (c: Constraint) => any, acc: any[], v?: Variable, prev?: Variable): void;
findMinLM(): Constraint;
private findMinLMBetween;
private findPath;
isActiveDirectedPathBetween(u: Variable, v: Variable): boolean;
static split(c: Constraint): Block[];
private static createSplitBlock;
splitBetween(vl: Variable, vr: Variable): {
constraint: Constraint;
lb: Block;
rb: Block;
};
mergeAcross(b: Block, c: Constraint, dist: number): void;
cost(): number;
}
export declare class Blocks {
vs: Variable[];
private list;
constructor(vs: Variable[]);
cost(): number;
insert(b: Block): void;
remove(b: Block): void;
merge(c: Constraint): void;
forEach(f: (b: Block, i: number) => void): void;
updateBlockPositions(): void;
split(inactive: Constraint[]): void;
}
export declare class Solver {
vs: Variable[];
cs: Constraint[];
bs: Blocks;
inactive: Constraint[];
static LAGRANGIAN_TOLERANCE: number;
static ZERO_UPPERBOUND: number;
constructor(vs: Variable[], cs: Constraint[]);
cost(): number;
setStartingPositions(ps: number[]): void;
setDesiredPositions(ps: number[]): void;
private mostViolated;
satisfy(): void;
solve(): number;
}
export declare function removeOverlapInOneDimension(spans: {
size: number;
desiredCenter: number;
}[], lowerBound?: number, upperBound?: number): {
newCenters: number[];
lowerBound: number;
upperBound: number;
};