import { EventDispatcher, Mesh, Object3D } from 'three'; import { TilesRenderer } from '3d-tiles-renderer'; import { InternalData, PartIdChannel } from './mesh-helper'; import { StyleConditionDescriptor } from './plugin/style-appearance-types'; /** 释放该瓦片 mesh 上缓存的 split 几何;瓦片卸载 / dispose 前应调用(或由 {@link MeshSplitResolver.disposeSplitMeshesByTile}) */ export declare function disposeTileMeshSplitGeometryCache(tileMesh: Mesh): void; /** 收集器查询:feature id 范围 + 可选属性条件(语义同 setStyle 的 show / conditions) */ export interface MeshCollectorQuery { /** * 限定在这些 feature id 内收集;不传或空数组时,若提供 condition 则从全场景对应通道中筛选 */ featureIds?: readonly number[]; /** * 顶点属性索引,0 → `_FEATURE_ID_0`,1 → `_FEATURE_ID_1`;默认 0 */ featureIdAttribute?: number; /** * @deprecated 请使用 `featureIds` + `featureIdAttribute: 0` */ oids?: readonly number[]; /** * @deprecated 请使用 `featureIds` + `featureIdAttribute: 1` */ pids?: readonly number[]; /** * 属性表达式,如 `type === "wall"`;也支持 `{ content, featureIdAttribute }` */ condition?: string | StyleConditionDescriptor; /** * 区分样式 / 高亮等(参与 `meshCollectorQueryCacheKey` 等语义),与几何缓存无关。 */ meshCacheNamespace?: string; } export interface ResolvedMeshCollectorQuery { featureIds: number[]; featureIdAttribute: number; condition?: string; } /** 去重并排序 feature id */ export declare function normalizeMeshCollectorFeatureIds(featureIds: readonly number[]): number[]; /** @deprecated 请使用 normalizeMeshCollectorFeatureIds */ export declare function normalizeMeshCollectorOids(oids: readonly number[]): number[]; /** @deprecated 请使用 normalizeMeshCollectorFeatureIds */ export declare function normalizeMeshCollectorPids(pids: readonly number[]): number[]; /** 解析 MeshCollectorQuery,兼容 oids / pids 旧字段 */ export declare function resolveMeshCollectorQuery(query: MeshCollectorQuery): ResolvedMeshCollectorQuery; /** * 由查询生成的语义字符串,可用于日志或外部按查询维度分组。 */ export declare function meshCollectorQueryCacheKey(query: MeshCollectorQuery): string; /** StyleHelper 传入 `meshCollectorQueryCacheKey` 等语义区分 */ export declare const MESH_CACHE_NAMESPACE_STYLE = "style"; /** PartHighlightHelper 传入 `meshCollectorQueryCacheKey` 等语义区分 */ export declare const MESH_CACHE_NAMESPACE_HIGHLIGHT = "highlight"; /** @deprecated 请使用 meshCollectorQueryCacheKey({ featureIds, featureIdAttribute: 0 }) */ export declare function meshCollectorGroupKey(oids: readonly number[]): string; /** * 瓦片级 split mesh 缓存与按 feature id / 条件查询(原 GLTFParserPlugin 内 mesh 合并逻辑) */ export declare class MeshSplitResolver { private readonly getTiles; private readonly getInternalData; constructor(getTiles: () => TilesRenderer | null, getInternalData?: () => InternalData | undefined); /** * 遍历场景,释放所有瓦片 mesh 上挂的 split 几何缓存。 * 调用前须已通过 `disposeMergedSplitMeshResources` 解绑各 split Mesh 对几何的引用。 */ clearCache(): void; /** @deprecated 请使用 getMeshesByFeatureIds(featureIds, 0) */ getMeshesByOids(oids: readonly number[]): Mesh[]; /** @deprecated 请使用 getMeshesByFeatureIds(featureIds, 1) */ getMeshesByPids(pids: readonly number[]): Mesh[]; getMeshesByFeatureIds(featureIds: readonly number[], featureIdAttribute?: number): Mesh[]; /** * 解析结果 + 涉及瓦片 UUID 的稳定签名,供 MeshCollector 在「解析结果未变」时跳过重复 new Mesh。 */ getMeshesForCollectorQuerySignature(params: ResolvedMeshCollectorQuery): string; /** * 按查询收集 mesh:可只传 featureIds、只传 condition(全场景对应通道上筛选)、或两者组合 */ getMeshesForCollectorQuery(params: ResolvedMeshCollectorQuery): Mesh[]; private resolveTargetIdsForCollectorQuery; /** * 按 feature id 集合:每个瓦片 mesh 新建一个 Mesh,几何取自 tileMesh.userData 缓存 */ private getMergedSplitMeshesForIdSet; /** * 释放挂在该 feature mesh `userData` 上的合并 split 几何缓存。 * 通常由插件在 `TilesRenderer` 的 `dispose-model` 中与 {@link releaseSplitMeshesForTileScene} 一起调用。 */ disposeSplitMeshesByTile(tileMesh: Mesh): void; } export interface MeshChangeEvent { type: "mesh-change"; meshes: Mesh[]; } export type MeshCollectorEventMap = { "mesh-change": MeshChangeEvent; }; /** * MeshCollector - 按查询条件监听并收集 split mesh */ export declare class MeshCollector extends EventDispatcher { private static _nextInteractionId; private readonly resolvedQuery; /** 实例唯一键(样式/高亮/冻结等按收集器实例追踪) */ private readonly _interactionGroupKey; private meshSplit; private _meshes; /** 解析 ID + 瓦片集合 + 本收集器 id,未变则不再 new Mesh */ private _lastMeshSignature; private _disposed; constructor(query: MeshCollectorQuery); /** * 挂接到插件(meshSplit、MeshCollectorLifecycle)。须在使用前调用一次。 */ _onRegister(meshSplit: MeshSplitResolver): void; /** 实例唯一标识(样式/高亮监听、冻结/隔离等按收集器实例区分) */ getInteractionGroupKey(): string; getFeatureIds(): readonly number[]; getFeatureIdAttribute(): number; /** @deprecated 请使用 getFeatureIds()(featureIdAttribute 为 0 时) */ getOids(): readonly number[]; /** @deprecated 请使用 getFeatureIds()[0](featureIdAttribute 为 0 时) */ getOid(): number | undefined; /** @deprecated 请使用 getFeatureIds()(featureIdAttribute 为 1 时) */ getPids(): readonly number[]; /** @deprecated 请使用 getFeatureIds()[0](featureIdAttribute 为 1 时) */ getPid(): number | undefined; /** @deprecated 请使用 getFeatureIdAttribute() */ getPartIdChannel(): PartIdChannel; get meshes(): Mesh[]; getCondition(): string | undefined; _updateMeshes(): void; /** * 3d-tiles `dispose-model` 时调用:释放 `userData.originalMesh` 落在该瓦片 scene 内的 split mesh, * 避免随后释放瓦片几何缓存时仍被 split Mesh 引用。 */ releaseSplitMeshesForTileScene(scene: Object3D): void; dispose(): void; } //# sourceMappingURL=MeshCollector.d.ts.map