import * as THREE from "three"; import type { AnnotationVertex, SurfaceHit } from "./types"; /** * State machine for one stroke in mode A (freehand). * On pointermove it keeps calling addSample; samples whose world distance from the previous * sample is < minGap are dropped to avoid over-density. * Vertices are stored in local space (the mesh converts the world hit point to local). */ export declare class StrokeContour { private minGap; private maxJump; private mesh; private verts; private last; private lastNormal; private has; /** * @param minGap minimum sample spacing (world space), debounce * @param maxJump jump threshold (world space): drop the sample when distance > maxJump and the * normal flips sharply, to prevent adjacent points landing at different depths * (and the straight segment cutting through the model) when the stroke grazes a * groove or contour edge. */ constructor(minGap: number, maxJump: number, mesh: THREE.Mesh); begin(): void; addSample(hit: SurfaceHit): void; get vertices(): AnnotationVertex[]; end(): AnnotationVertex[]; }