import { Point } from '../../types/point.js'; import { BaseLayoutWithIterations } from '../base-layout.js'; import { ForceSimulation } from './simulation.js'; import { ForceLayoutOptions, ParsedForceLayoutOptions } from './types.js'; /** * 力导向布局 (Force) * * Force-directed layout (Force) * * @remarks * 基于自定义物理模拟的力导向布局,使用库伦定律计算斥力,胡克定律计算引力 * * Force-directed layout based on custom physics simulation, using Coulomb's law for repulsion and Hooke's law for attraction */ declare class ForceLayout extends BaseLayoutWithIterations { id: string; simulation: ForceSimulation | null; protected getDefaultOptions(): Partial; protected layout(): Promise; /** * Initialize physics properties on model nodes and edges */ private initializePhysicsData; /** * Setup simulation and forces */ protected setSimulation(options: ParsedForceLayoutOptions): ForceSimulation; /** * Setup repulsive force (Coulomb's law) */ protected setupRepulsiveForce(simulation: ForceSimulation, options: ParsedForceLayoutOptions): void; /** * Setup attractive force (Hooke's law) */ protected setupAttractiveForce(simulation: ForceSimulation, options: ParsedForceLayoutOptions): void; /** * Setup gravity force toward center */ protected setupGravityForce(simulation: ForceSimulation, options: ParsedForceLayoutOptions): void; /** * Setup collision force to prevent overlap */ protected setupCollideForce(simulation: ForceSimulation, options: ParsedForceLayoutOptions): void; /** * Setup centripetal force (unique to Force) */ protected setupCentripetalForce(simulation: ForceSimulation, options: ParsedForceLayoutOptions): void; /** * Parse and format options */ protected parseOptions(options: ForceLayoutOptions): ParsedForceLayoutOptions; /** * Format centripetal options */ private formatCentripetal; /** * Get same type leaf map for clustering */ private getSameTypeLeafMap; /** * Get core node and sibling leaves */ private getCoreNodeAndSiblingLeaves; /** * Get average position of nodes */ private getAvgNodePosition; /** * Manually step the simulation */ tick(iterations?: number): this; /** * Stop the simulation */ stop(): this; /** * Restart the simulation */ restart(): this; /** * Set fixed position for a node */ setFixedPosition(nodeId: string, position: Point | null): this; } export { ForceLayout, ForceLayoutOptions };