import type { PointCloudPlacement } from '../pointcloud/pointCloudPlacement'; import type * as THREE from 'three'; export type PlacementMode = 'translate' | 'rotate' | 'scale'; /** What a target can actually persist. The card hides any control outside this. */ export interface PlacementCapabilities { rotation: 'yaw' | 'full'; scale: boolean; } export declare const FULL_PLACEMENT: PlacementCapabilities; export declare const YAW_ONLY_PLACEMENT: PlacementCapabilities; export declare const SCALABLE_OBJECT_PLACEMENT: PlacementCapabilities; /** * One thing the placement editor can move. Adapters are the only code that knows how a given * kind of target reads and stores its transform. */ export interface PlacementTarget { id: string; name: string; capabilities: PlacementCapabilities; object(): THREE.Object3D | null; read(): PointCloudPlacement; apply(placement: PointCloudPlacement): void; /** A gizmo drag in scene metres, for a target whose own placement is in other units. */ applyDrag?(object: THREE.Object3D): void; bounds(): THREE.Vector3 | null; commit(placement: PointCloudPlacement): Promise; /** Asked before a changed placement is saved; false puts the target back where the session began. */ confirmCommit?(next: PointCloudPlacement, previous: PointCloudPlacement): Promise; } /** Strips whatever the target cannot store, so a dropped value never reaches the user as saved. */ export declare function narrowPlacement(placement: PointCloudPlacement, capabilities: PlacementCapabilities): PointCloudPlacement; //# sourceMappingURL=placementTarget.d.ts.map