/** * CSG (Constructive Solid Geometry) Operations * * Boolean operations for meshes: Union, Subtract, Intersect * * Note: This provides a framework-agnostic interface for CSG operations. * Framework adapters can integrate CSG libraries (e.g., three-csg, csg.js) * or implement their own CSG algorithms. */ import { Mesh } from '../geometry/mesh'; import { Vector3 } from './transform'; export type CSGOperation = 'union' | 'subtract' | 'intersect'; export interface CSGOptions { /** * Whether to merge vertices that are very close together */ mergeVertices?: boolean; /** * Tolerance for vertex merging */ mergeTolerance?: number; /** * Whether to preserve UV coordinates */ preserveUV?: boolean; /** * Whether to preserve textures */ preserveTextures?: boolean; } export interface CSGResult { /** * Resulting mesh from the CSG operation */ result: Mesh; /** * Number of vertices in the result */ vertexCount: number; /** * Number of faces in the result */ faceCount: number; } /** * CSG Provider Interface * Framework adapters should implement this to provide actual CSG functionality */ export interface CSGProvider { /** * Perform union operation (A ∪ B) */ union(meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; /** * Perform subtract operation (A - B) */ subtract(meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; /** * Perform intersect operation (A ∩ B) */ intersect(meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; } /** * Set the CSG provider * Framework adapters should call this during initialization */ export declare function setCSGProvider(provider: CSGProvider): void; /** * Get the current CSG provider */ export declare function getCSGProvider(): CSGProvider; /** * Perform CSG union operation * Combines two meshes into one */ export declare function csgUnion(meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; /** * Perform CSG subtract operation * Subtracts meshB from meshA */ export declare function csgSubtract(meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; /** * Perform CSG intersect operation * Returns the intersection of two meshes */ export declare function csgIntersect(meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; /** * Perform a CSG operation */ export declare function performCSGOperation(operation: CSGOperation, meshA: Mesh, meshB: Mesh, options?: CSGOptions): CSGResult; /** * Helper: Convert Mesh to geometry data for CSG libraries * Framework adapters can use this to prepare mesh data */ export interface MeshGeometryData { vertices: Vector3[]; faces: Array<{ indices: number[]; normal?: Vector3; }>; } /** * Convert Mesh to geometry data format */ export declare function meshToGeometryData(mesh: Mesh): MeshGeometryData; /** * Convert geometry data back to Mesh */ export declare function geometryDataToMesh(data: MeshGeometryData, originalMesh?: Mesh): Mesh; /** * Merge close vertices in a mesh */ export declare function mergeCloseVertices(mesh: Mesh, tolerance?: number): number; //# sourceMappingURL=csg_operations.d.ts.map