/** * Manifold-based AST Evaluator * * Functional, DRY approach to evaluating OpenSCAD AST nodes using manifold-3d. * This module provides a clean interface that mirrors the WASM evaluator structure * but uses manifold primitives and operations instead. */ import type { ManifoldObject, ManifoldWithMeta } from './types'; import type { Geometry } from '../types/geometry-types'; export interface EvalContext { variables: Map; $fn: number; $fa: number; $fs: number; } export interface EvalParams { [key: string]: any; } export declare function ensureManifoldReady(): Promise; /** * Calculate fragment count for circular primitives (OpenSCAD spec) */ export declare function calculateFragments(radius: number, fn: number, fs: number, fa: number): number; /** * Extract a parameter with fallbacks and defaults */ export declare function getParam(params: EvalParams, names: string[], defaultValue: T): T; /** * Extract radius from various parameter formats (r, radius, d, diameter) */ export declare function extractRadius(params: EvalParams, defaultValue?: number): number; /** * Extract size parameter (number or array) */ export declare function extractSize(params: EvalParams, defaultValue?: number): number | [number, number, number]; /** * Evaluate a primitive node */ export declare function evalPrimitive(op: string, params: EvalParams, ctx: EvalContext): ManifoldObject; /** * Evaluate a transform node */ export declare function evalTransform(op: string, manifold: ManifoldObject, params: EvalParams, ctx: EvalContext): ManifoldObject; /** * Evaluate a boolean operation */ export declare function evalBoolean(op: string, manifolds: ManifoldObject[]): ManifoldObject; export interface NodeMetadata { modifier?: '#' | '%' | '!' | '*'; color?: [number, number, number, number]; objectId?: string; line?: number; } /** * Apply metadata to a manifold */ export declare function applyMetadata(manifold: ManifoldObject, metadata: NodeMetadata): ManifoldWithMeta; /** * Extract metadata from a node */ export declare function extractMetadata(node: any): NodeMetadata; /** * Convert manifold to moicad Geometry format */ export declare function toGeometry(manifold: ManifoldObject | ManifoldWithMeta): Geometry; /** * Create a default evaluation context */ export declare function createDefaultContext(): EvalContext; /** * Update context with special variables */ export declare function updateContext(ctx: EvalContext, variables: Record): EvalContext; //# sourceMappingURL=evaluator.d.ts.map