edeap
Version:
Euler Diagrams Drawn with Ellipses Area-Proportionally (Edeap)
168 lines (167 loc) • 3.94 kB
TypeScript
export type HitInfo = {
smallHitArray: number[];
smallHitArraySizeX: number;
position: Point;
endPosition: Point;
needsFilling?: boolean;
};
export type RangeType = {
angle: number;
depth: number;
x: number;
y: number;
distanceToNearest: number;
};
export type EllipseParams = {
A: number;
B: number;
R: number;
X: number;
Y: number;
};
export type Point = {
x: number;
y: number;
};
export type Fitness = {
zoneAreaDifference: number;
unwantedZone: number;
circleDistortion: number;
splitZone: number;
missingOneLabelZone: number;
missingTwoOrMoreLabelZone: number;
unwantedExpandedOverlap: number;
};
export type ZoneInfo = {
points: number;
bitmap?: boolean[];
avgPos: {
x: number;
y: number;
count: number;
firstX: number;
firstY: number;
firstXIndex: number;
firstYIndex: number;
};
};
export type FitnessData = {
overallBoundingBox: {
p1: Point;
p2: Point;
};
boundingBoxes: {
p1: Point;
p2: Point;
}[];
zoneAreaProportions: Record<string, number>;
splitZoneAreaProportions: Record<string, number>;
expandedZoneAreaProportions: Record<string, number>;
zoneLabelPositions: Record<string, Point> | undefined;
zoneAveragePositions: Record<string, ZoneInfo["avgPos"]> | undefined;
};
export type State = {
ellipseParams: EllipseParams[];
ellipseDuplication: number[];
contours: string[];
contourAreas: number[];
proportions: number[];
originalProportions: number[];
zones: string[][];
zoneStrings: string[];
};
export type ISetOverlap = {
sets: string[];
size: number;
};
export type SetOverlaps = ISetOverlap[];
export type TransformedSets = {
contours: string[];
zones: string[][];
proportions: number[];
};
export type ColorGenerator = (index: number, label: string) => string;
export interface ITextDimensions {
init(fontSize: number, fontName: string): void;
measure(str: string): {
width: number;
height: number;
};
destroy(): void;
}
export type InitConfig = {
/**
* Definition of overlapping sets. Uses the same format as [venn.js](https://github.com/upsetjs/venn.js).
*/
overlaps: SetOverlaps;
/**
* @default "default"
*/
initialLayout?: "default" | "random";
};
export type OptimizerConfig = {
/**
* optmization strategy: HILL_CLIMBING | SIMULATED_ANNEALING
* @default HILL_CLIMBING
*/
strategy?: 1 | 2;
/**
* callback to vizualize progress
* @default undefined
*/
onStep?: (final: boolean) => void;
};
export type SVGConfig = {
/**
* width of SVG
* @default 1000
*/
width?: number;
/**
* height of SVG
* @default 500
*/
height?: number;
/**
* show labels or not
* @default true
*/
showLabels?: boolean;
/**
* show size of set or not
* @default true
*/
showValues?: boolean;
/**
* If `true` generates standalone SVG (with doctype)
* if `false` generates SVG for embeding in HTML (without doctype)
* @default false
*/
standalone?: boolean;
/**
* font size for labels
* @default 16px
*/
labelSize?: number;
/**
* font name for labels
* @default Helvetica
*/
labelFont?: string;
/**
* font size for values (set sizes)
* @default 16px
*/
valueSize?: number;
/**
* function for generating colors for labels and ellipses
* @default Tableau10
*/
color?: ColorGenerator;
/**
* instance of a class to calculate text dimensions.
* Otions: TextDimensionsBrowser, TextDimensionsServer or you can provide your own implementation
* @default TextDimensionsNaive
*/
dimensions?: ITextDimensions;
};