/** * CADOrbitControls - Extended OrbitControls for CAD applications * * Adds: * - Public rotateLeft/rotateUp methods for programmatic rotation * - Quaternion-based saveState/reset * - Modifier key rotation restrictions (ctrl: vertical only, meta: horizontal only) * * Internal OrbitControls methods/properties used (see three-augmentation.d.ts): * - _onMouseDown: Replaced to customize modifier key behavior (shift=pan, ctrl/meta=rotate with axis lock) * - _handleMouseDownRotate: Called to initialize rotation state * - _handleMouseDownDolly: Called to initialize dolly/zoom state * - _handleMouseDownPan: Called to initialize pan state * - _sphericalDelta: Modified in _rotateLeft/_rotateUp overrides to implement axis locking * - state: Set to track current interaction mode (ROTATE/DOLLY/PAN/NONE) */ import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { Quaternion, Vector3, Camera } from "three"; declare class CADOrbitControls extends OrbitControls { quaternion0: Quaternion; private _horizontalRotate; private _verticalRotate; private _onCADPointerDown?; private _onCADPointerUp?; state: number; _sphericalDelta: { theta: number; phi: number; }; zoom0: number; target0: Vector3; position0: Vector3; _onMouseDown: (event: MouseEvent) => void; _handleMouseDownRotate: (event: MouseEvent) => void; _handleMouseDownDolly: (event: MouseEvent) => void; _handleMouseDownPan: (event: MouseEvent) => void; /** * Constructs CAD-enhanced orbit controls. * * @param object - The camera to control. * @param domElement - The HTML element for event listeners. */ constructor(object: Camera, domElement?: HTMLElement | null); /** * Handle pointer down to check modifier keys for rotation restriction. */ private _handleCADPointerDown; /** * Handle pointer up to reset rotation restrictions. */ private _handleCADPointerUp; /** * Override dispose to clean up our event listeners. */ dispose(): void; /** * Custom mouse down handler for rotation restriction via modifier keys. * * Original OrbitControls: ctrl/meta/shift + left mouse = pan * CADOrbitControls: ctrl = vertical rotate only, meta = horizontal rotate only, * shift = pan (via KeyMapper) */ private _handleMouseDown; /** * Override _rotateLeft to respect horizontal rotation restriction. */ _rotateLeft(angle: number): void; /** * Override _rotateUp to respect vertical rotation restriction. */ _rotateUp(angle: number): void; /** * Save the current state including quaternion. */ saveState(): void; /** * Reset to saved state including quaternion. */ reset(): void; /** * Rotate camera left (around the up axis). * Programmatic rotation bypasses modifier key restrictions. */ rotateLeft(angle: number): void; /** * Rotate camera up (around the right axis). * Programmatic rotation bypasses modifier key restrictions. */ rotateUp(angle: number): void; } export { CADOrbitControls };