import { Graph } from '../../Graph'; import { StaticLayout } from './StaticLayout'; class CircleLayout extends StaticLayout { _cx: number; _cy: number; _radius: number; constructor () { super(); this._cx = 0; this._cy = 0; this._radius = 250; } apply (graph: Graph): void { const bbox = graph.boundingBox(); const cx = (bbox[1] + bbox[3]) / 2; const cy = (bbox[0] + bbox[2]) / 2; const w = Math.abs(bbox[1] - bbox[3]); const h = Math.abs(bbox[0] - bbox[2]); const r = 0.8 * Math.min(w, h) / 2; const nodes = graph.nodes(); const a = 2 * Math.PI / nodes.length; nodes.forEach((node, index) => { node.x = cx + r * Math.cos(index * a); node.y = cy + r * Math.sin(index * a); }); } cx (): number; cx (cx: number): this; cx (cx?: number): number | this { return arguments.length ? (this._cx = cx!, this) : this._cx; } cy (): number; cy (cy: number): this; cy (cy?: number): number | this { return arguments.length ? (this._cy = cy!, this) : this._cy; } radius (): number; radius (radius: number): this; radius (radius?: number): number | this { return arguments.length ? (this._radius = radius!, this) : this._radius; } } export { CircleLayout }