import { BufferAttribute, BufferGeometry, Mesh } from 'three'; import { TilesRenderer } from '3d-tiles-renderer'; /** OID 对应 `_FEATURE_ID_0`,PID 对应 `_FEATURE_ID_1` */ export type PartIdChannel = "oid" | "pid"; export interface ResolvedFeatureChannel { geometry: BufferGeometry; featureIdAttr: BufferAttribute; featureIdConfig: { attribute?: number; propertyTable?: number; } | null; } /** * 解析 OID/PID 通道对应的 feature id 顶点属性。 * PID 在 meshFeatures.featureIds[1] 未声明时,回退读取 geometry 上的 `_feature_id_1`。 */ export declare function resolveFeatureChannelOnMesh(mesh: Mesh, channel: PartIdChannel): ResolvedFeatureChannel | null; /** * split 必须从「隐藏原片前」的完整 index 抽取三角形。 * `hidePartsByOids` 会改写 `geometry.index`;若用当前 index,被高亮 OID 的三角已被删掉 → split 为空。 */ /** 完整 index(优先 userData 备份),供 split / hide 使用 */ export declare function getFeatureSplitSourceIndex(tileMesh: Mesh, geometry: BufferGeometry): ArrayLike | null; /** 首次隐藏前拷贝完整 index,避免在已过滤的 index 上备份 */ export declare function snapshotOriginalIndexForMesh(mesh: Mesh, geometry: BufferGeometry): Uint16Array | Uint32Array | null; export declare function triangleMatchesFeatureIdSet(fa: number, fb: number, fc: number, targetFids: Set, strict: boolean): boolean; /** * split / hide 共用:存在「loose 命中但 strict 不命中」的三角时须用 loose, * 否则 strict 只抽一部分而 hide 会删掉更多 → 高亮缺块。 */ export declare function resolveHideUsesLooseMode(sourceIndex: ArrayLike, featureIdAttr: { getX(index: number): number; }, targetFids: Set): boolean; export declare function buildMergedSplitGeometryForTileMesh(originalMesh: Mesh, oidSet: ReadonlySet): BufferGeometry | null; /** 按 PID 集合从瓦片 mesh 构建合并 split 几何(使用 `_FEATURE_ID_1`) */ export declare function buildMergedSplitGeometryForTileMeshByPids(originalMesh: Mesh, pidSet: ReadonlySet): BufferGeometry | null; export declare function selectDominantTileMeshesForOidSet(candidateTiles: Iterable, oidSet: ReadonlySet): Mesh[]; export declare function selectDominantTileMeshesForPidSet(candidateTiles: Iterable, pidSet: ReadonlySet): Mesh[]; export declare function createMergedSplitMeshFromGeometry(originalMesh: Mesh, newGeometry: BufferGeometry, oidSet: ReadonlySet, options?: { splitGeometryManagedByCache?: boolean; }): Mesh | null; export declare function createMergedSplitMeshFromGeometryByPids(originalMesh: Mesh, newGeometry: BufferGeometry, pidSet: ReadonlySet, options?: { splitGeometryManagedByCache?: boolean; }): Mesh | null; /** * 将同一瓦片 mesh 内、属于给定 OID 集合的所有 feature 合并为 **单个** Mesh(每瓦片最多一个) */ export declare function splitMeshByOidsMerged(originalMesh: Mesh, oidSet: ReadonlySet): Mesh | null; /** 将同一瓦片 mesh 内、属于给定 PID 集合的所有 feature 合并为单个 Mesh */ export declare function splitMeshByPidsMerged(originalMesh: Mesh, pidSet: ReadonlySet): Mesh | null; /** * 释放 tileMesh.userData 上缓存的合并 split BufferGeometry。 * 合并几何与瓦片共享顶点属性引用;直接 `dispose()` 会从 WebGL 移除共享 BufferAttribute,瓦片会发瘪/缺面。 * 需先从合并几何上 deleteAttribute 摘掉共享引用,再 dispose(仅清独立 index 与 dispose 事件)。 */ export declare function disposeMergedSplitGeometryCacheEntry(mergedGeom: BufferGeometry, tileMesh: Mesh): void; /** * 释放 {@link splitMeshByOidsMerged} 生成 mesh 的独占资源。 * - 材质:clone 与瓦片逐贴图比对引用;非共享贴图 dispose,共享贴图先 detach 再 `material.dispose()`,避免误伤瓦片。 * - 几何:不得对整块 `geometry.dispose()`(会波及共享缓冲);仅释放与瓦片非共享的 index 与 attributes。 * - **不要**对 `THREE.Mesh` 调用 `dispose()`:核心库中 `Mesh` 无此方法。 */ export declare function disposeMergedSplitMeshResources(mesh: Mesh): void; /** * 遍历当前已加载的瓦片 feature mesh(tiles.group + 各 tile.engineData.scene,按 uuid 去重)。 * 新瓦片在挂到 group 前只存在于 tile scene,样式/高亮/显隐须走此入口。 */ export declare function forEachLoadedFeatureMesh(tiles: TilesRenderer, fn: (mesh: Mesh) => void): void; /** * 内部数据钩子:在原始属性表数据基础上派生/注入额外字段(如层级 `_path`)。 * 返回新对象;约定不修改入参。 */ export type InternalData = (oid: number, data: Record) => Record; /** * 从瓦片中获取所有 OID */ export declare function getAllOidsFromTiles(tiles: TilesRenderer): number[]; /** * 从瓦片中获取所有 PID(featureIds[1]) */ export declare function getAllPidsFromTiles(tiles: TilesRenderer): number[]; /** * 根据 OID 获取属性数据(从瓦片 structuralMetadata) */ export declare function getPropertyDataByOid(tiles: TilesRenderer, oid: number, internalData?: InternalData): Record | null; /** * 单次遍历场景构建 OID → 属性表数据。 * 批量样式/筛选时使用,避免对每个 OID 重复 traverse(O(n×场景节点))。 */ export declare function getPropertyDataMapFromTiles(tiles: TilesRenderer, internalData?: InternalData): Map | null>; /** * 根据OID获取包含该OID的瓦片mesh */ export declare function getTileMeshesByOid(tiles: TilesRenderer, oid: number): Mesh[]; /** * 根据 PID 获取包含该 PID 的瓦片 mesh */ export declare function getTileMeshesByPid(tiles: TilesRenderer, pid: number): Mesh[]; /** * 根据 PID 获取属性数据(从瓦片 structuralMetadata,featureIds[1]) */ export declare function getPropertyDataByPid(tiles: TilesRenderer, pid: number): Record | null; /** * 单次遍历场景构建 PID → 属性表数据 */ export declare function getPropertyDataMapFromTilesByPid(tiles: TilesRenderer): Map | null>; /** `_FEATURE_ID_N` 索引 → 内部 PartIdChannel(当前仅 0/1 有完整管线) */ export declare function featureIdAttributeToChannel(featureIdAttribute: number): PartIdChannel; export declare function getAllFeatureIdsFromTiles(tiles: TilesRenderer, featureIdAttribute: number): number[]; export declare function getPropertyDataMapFromTilesByFeatureAttribute(tiles: TilesRenderer, featureIdAttribute: number, internalData?: InternalData): Map | null>; export declare function getPropertyDataByFeatureAttribute(tiles: TilesRenderer, featureId: number, featureIdAttribute: number, internalData?: InternalData): Record | null; export declare function getTileMeshesByFeatureAttribute(tiles: TilesRenderer, featureId: number, featureIdAttribute: number): Mesh[]; //# sourceMappingURL=mesh.d.ts.map