/** * Interaction Manager * * Manages interactive parts in a Three.js scene, handling selection, * dragging, constraint solving, and state management. */ import * as THREE from 'three'; import { type TransformDelta } from './constraint-solver'; import type { InteractiveModel, InteractivePart, PartState, InteractionManagerOptions, SerializedModelState } from './types'; /** * Interaction Manager - handles interactive parts in a Three.js scene */ export declare class InteractionManager { private scene; private camera; private renderer; private parts; private meshes; private states; private solver; private raycaster; private mouse; private selectedPartId; private hoveredPartId; private isDragging; private dragStartPos; private dragPlane; private options; private events; private animationFrameId; private enabled; constructor(scene: THREE.Scene, camera: THREE.Camera, renderer: THREE.WebGLRenderer, options?: InteractionManagerOptions); /** * Load an interactive model */ loadModel(model: InteractiveModel): void; /** * Add a single part */ addPart(part: InteractivePart): void; /** * Create Three.js mesh from moicad Geometry */ private createMeshFromGeometry; /** * Clear all parts */ clear(): void; /** * Setup mouse/touch event listeners */ private setupEventListeners; /** * Remove event listeners */ private removeEventListeners; /** * Update mouse position for raycasting */ private updateMouse; /** * Raycast to find intersected parts */ private raycastParts; /** * Handle pointer down event */ private onPointerDown; /** * Handle pointer move event */ private onPointerMove; /** * Handle pointer up event */ private onPointerUp; /** * Select a part */ selectPart(partId: string | null): void; /** * Set highlight on a part */ private setPartHighlight; /** * Apply a transform delta to a part */ applyDelta(partId: string, delta: TransformDelta): void; /** * Update a part that's linked to another */ private updateLinkedPart; /** * Start spring-back animation for a part */ private startSpringBackAnimation; /** * Update mesh position/rotation from state */ private updateMeshFromState; /** * Reset all parts to initial state */ resetAll(): void; /** * Reset a single part */ resetPart(partId: string): void; /** * Get current state of all parts */ getState(): Record; /** * Get state of a single part */ getPartState(partId: string): PartState | undefined; /** * Serialize model state for save/load */ serializeState(): SerializedModelState; /** * Restore model state from serialized data */ deserializeState(data: SerializedModelState): void; /** * Enable/disable interactions */ setEnabled(enabled: boolean): void; /** * Get currently selected part ID */ getSelectedPartId(): string | null; /** * Dispose and cleanup */ dispose(): void; } //# sourceMappingURL=interaction-manager.d.ts.map