import { type AnyNode, type AnyNodeId, type WallFinishLayout, type WallMiterData, type WallNode, type WallSlabSupportSegment } from '@pascal-app/core'; import * as THREE from 'three'; import { Brush } from 'three-bvh-csg'; import { type WallFaceBaseRun } from './wall-finish-data'; export { isWallInitialBuildActive } from './wall-build-lifecycle'; export { drainRebuiltWalls } from './wall-rebuild-notifications'; export declare function mergeWallCutoutBrushes(brushes: readonly Brush[]): { cutter: Brush | null; fallbackBrushes: Brush[]; droppedCount: number; }; /** * What decides a face triangle's material: the wall's finish layout (regions and * room spans) and, where the faces stand on different floors, each face's base — * region heights are measured from the face's own base. */ export type WallFinishContext = { layout: WallFinishLayout; faceBase: Record<'a' | 'b', WallFaceBaseRun[]> | null; /** The palette's finish refs (material indices 3..): the layout's, then the foundation's. */ refs: readonly string[]; /** The underpinning's stemwall: triangles below local y `top` take material `index`. */ foundation: { index: number; top: number; } | null; }; export declare function shouldDeferWallRebuild(wallId: string, nodes: Record, rebuiltThisFrame: number, elapsedMs: number): boolean; /** Rebuilds this system still owes — neighbours deferred during a drag. */ export declare function getPendingWallRebuildCount(): number; export type WallGeometryAdapterContext = { isLive: (id: AnyNodeId) => boolean; }; export type WallGeometryAdapter = { prepareChildren?: (wall: WallNode, children: readonly AnyNode[], context: WallGeometryAdapterContext) => { envelopeChildren: AnyNode[]; renderChildren: AnyNode[]; }; buildGeometry?: (wall: WallNode, envelope: THREE.BufferGeometry, children: readonly AnyNode[]) => THREE.BufferGeometry; syncAuxiliaryGeometry?: (wall: WallNode, mesh: THREE.Mesh, geometry: THREE.BufferGeometry) => void; }; export declare const WallSystem: ({ geometryAdapter }?: { geometryAdapter?: WallGeometryAdapter; }) => null; export declare function runWallBuildFrame(geometryAdapter?: WallGeometryAdapter): void; /** * A room's wall finish lives on its zone, so a zone edit must rebuild the walls * bounding it — the old boundary and the new one. Zones without a wall finish * never touch their walls, so ordinary room edits cost nothing here. */ export declare function markWallsForZoneFinishChanges(): void; type WallTerrainBottomSampler = (x: number, z: number) => number | null; export declare function generateExtrudedWall(wallNode: WallNode, childrenNodes: AnyNode[], miterData: WallMiterData, slabElevation?: number, baseElevation?: number, baseSegments?: readonly WallSlabSupportSegment[], storeyHeight?: number, terrainBottomAt?: WallTerrainBottomSampler, faceBase?: { a: readonly WallSlabSupportSegment[]; b: readonly WallSlabSupportSegment[]; }, finishLayout?: WallFinishLayout, sceneNodes?: Readonly>): THREE.BufferGeometry; //# sourceMappingURL=wall-system.d.ts.map