Skip to content

Interface: ModelManager

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:101

模型加载与节点级外观控制 manager。

职责域:.fmbv 模型的加载 / 卸载、包围盒与结构树元数据查询 (getNodeInfo / iterateNodes / findNodesByName)、节点与面组的 颜色 / 可见性 / 高亮覆盖。典型入口:load() 加载模型,随后经 getRootNodeId() 遍历结构树,用 setNodesColor() / setNodesVisibility() 调整外观。

Remarks

经 Viewer 实例上的 viewer.model 访问,不要直接构造。

Accessors

isLoaded

Get Signature

get isLoaded(): boolean

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:130

当前是否已有模型加载完成(骨架就绪即为 true)。

Returns

boolean


loadProgress

Get Signature

get loadProgress(): object

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:136

当前加载进度快照:skeleton 骨架是否就绪、geomReady/geomTotal 几何 LOD 分块的已到达数 / 总数。

Returns

object

geomReady

geomReady: number

geomTotal

geomTotal: number

skeleton

skeleton: boolean

Methods

_advanceAppearanceAnimation()

_advanceAppearanceAnimation(nowMs): boolean

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:744

RenderLoop 接线:推进外观渐变一帧;finish 时广播一次 animated 事件。 返回本帧过后渐变是否仍未结束(RenderScheduler 的 animating 信号源)。

Parameters

nowMs

number

Returns

boolean


animateAppearance()

animateAppearance(target, durationMs?): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:735

视图切换:把外观从当前态渐变到 target(record-free)。

Parameters

target

AppearanceTarget

durationMs?

number

Returns

void


applyStructureBlock()

applyStructureBlock(block): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:235

应用持久化结构块(load-time seed / sidecar 回放):覆盖 overlay 状态、 隐藏所有(直接或经祖先)被删的叶子实例、重算整模型总量,并广播一次 structure-changed{change:"apply"}(订阅方全量重建、忽略 affected)。 未加载时静默返回。

Parameters

block

StructureBlock

Returns

void


beginAppearanceEdit()

beginAppearanceEdit(ids): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:680

开始一次实时拖拽外观编辑(e.g. 颜色/表面滑块拖动)。 快照 ids 的当前外观作为 before 状态;后续调用 inputAppearance 实时更新(不记录历史); commitAppearanceEdit 结束时将整次拖拽作为一步压入撤销历史。

Parameters

ids

readonly NodeId[]

Returns

void


commitAppearanceEdit()

commitAppearanceEdit(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:711

提交一次外观拖拽:对比 beginAppearanceEdit 时的快照与当前状态, 将净变化作为一步压入共享撤销历史(整次拖拽合并为一步,一次 undo 回到拖拽前)。 提交后触发一次 appearance-changed 事件供 Inspector 同步最终状态。

Returns

void


deleteNodes()

deleteNodes(ids): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:1036

逻辑删除一组节点(含子树):收集有效叶子、静默剪除其序号标签、隐藏几何, 作为一条 doc-level 步压入共享撤销历史(viewId=null,跨视图恒删)。

Parameters

ids

readonly NodeId[]

Returns

void


exportStructureBlock()

exportStructureBlock(): StructureBlock

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:250

导出当前结构编辑(逻辑删除 + 合并)为持久化块;未加载 / 无 overlay → 空块。

Returns

StructureBlock


findNodesByName()

findNodesByName(name): readonly NodeId[]

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:451

按名称精确匹配查找节点(同名节点全部返回);无匹配或未加载返回空数组。

Parameters

name

string

Returns

readonly NodeId[]


finishAppearanceAnimation()

finishAppearanceAnimation(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:753

settle 当前外观渐变到目标(捕快照前调用)。

Returns

void


getBoundingBox()

getBoundingBox(): Box3 | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:363

取整个模型的世界坐标轴对齐包围盒;未加载返回 null。

Returns

Box3 | null


getBoundingSphere()

getBoundingSphere(): BoundingSphere | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:369

取由包围盒推导的模型包围球(球心 = 盒中心,半径 = 到角点距离);未加载返回 null。

Returns

BoundingSphere | null


getFaceGroupAppearance()

getFaceGroupAppearance(id, fg): object

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:627

取单个面组当前的外观(颜色 / 表面材质 / 预设);未设置通道返回 null;未加载时返回全 null。

Parameters

id

NodeId

fg

FaceGroupId

Returns

object

color

color: Color | null

presetId

presetId: string | null

surface

surface: SurfaceOverride | null


getFaceGroupColor()

getFaceGroupColor(id, fg): Color | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:569

取面组当前的覆盖颜色;未设置过返回 null。

Parameters

id

NodeId

fg

FaceGroupId

Returns

Color | null


getFaceGroupCount()

getFaceGroupCount(id): number

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:575

取节点所在 mesh 的面组数量(可染色的面组索引为 0..count-1);未加载 / 无网格返回 0。

Parameters

id

NodeId

Returns

number


getHighlightedNodeIds()

getHighlightedNodeIds(): readonly NodeId[]

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:863

取当前处于高亮状态的节点 id 列表;未加载返回空数组。

Returns

readonly NodeId[]


getInstancesSharingMesh()

getInstancesSharingMesh(nodeId): NodeId[]

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:460

取与 nodeId 同 meshId 的全部实例 NodeId(含自身),按 nodeIdx 升序排列。 nodeId 无关联 mesh(装配节点)或未加载时返回 [nodeId]

Parameters

nodeId

NodeId

Returns

NodeId[]


getLeafNodeIds()

getLeafNodeIds(): readonly NodeId[]

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:439

取全部叶子节点(带几何 meshId 的节点)id 列表;未加载返回空数组。

Returns

readonly NodeId[]


getMergeLeafCount()

getMergeLeafCount(root): number | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:933

合并根折叠的叶子数;非合并根 / 未加载 → null。

Parameters

root

NodeId

Returns

number | null


getModelTotals()

getModelTotals(): ModelTotals | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:224

取整模型全量几何统计(三角/边线总数,含实例倍数);尚未算好 / 未加载返回 null。

Returns

ModelTotals | null


getNodeAppearance()

getNodeAppearance(id): NodeAppearance

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:670

取节点当前的完整外观(颜色 / 表面材质 / 预设);未设置通道返回 null;未加载时返回全 null。

Parameters

id

NodeId

Returns

NodeAppearance


getNodeColor()

getNodeColor(id): Color | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:550

取节点当前的覆盖颜色;未设置过返回 null。

Parameters

id

NodeId

Returns

Color | null


getNodeCount()

getNodeCount(): number

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:445

结构树节点总数(含装配节点);未加载返回 0。与 .fmbview.json 的签名字段同源。

Returns

number


getNodeInfo()

getNodeInfo(id): NodeInfo | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:389

取单个节点的结构信息(名称 / 父子关系 / 包围盒 / meshId 等);id 不存在或未加载返回 null。

Parameters

id

NodeId

Returns

NodeInfo | null


getNodeMaterial()

getNodeMaterial(id): MaterialInfo | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:395

取节点关联的材质信息(由 materials payload 解析);无材质或未加载返回 null。

Parameters

id

NodeId

Returns

MaterialInfo | null


getNodeOpacity()

getNodeOpacity(_id): number

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:894

取节点透明度 — v2 前恒返回 1(不透明)。

Parameters

_id

NodeId

Returns

number


getNodeProperties()

getNodeProperties(id): Promise<readonly NodeProperty[]>

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:409

取节点业务属性(按需:首次调用按节点 offset 发一次 range 请求,memoize)。 无属性 / 无 ATTRIBUTES chunk / 未加载 → 返回 []。

Parameters

id

NodeId

Returns

Promise<readonly NodeProperty[]>


getNodeVisibility()

getNodeVisibility(id): boolean

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:844

查询节点当前是否可见;未加载时按默认可见返回 true。

Parameters

id

NodeId

Returns

boolean


getRootNodeId()

getRootNodeId(): NodeId | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:383

取结构树根节点 id;未加载返回 null。

Returns

NodeId | null


getSubtreeTotals()

getSubtreeTotals(root): Promise<ModelTotals | null>

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:260

合并 Inspector 聚合口径:对 root 子树内的有效叶子(减去已删除子树)建 meshId 实例直方图,复用 computeModelTotals 读各 mesh 的 LOD-0 头汇总三角/边线总数。 未加载 / root 不存在时返回 null。LOD-0 口径,与整模型总量、删除重算口径一致。

Parameters

root

NodeId

Returns

Promise<ModelTotals | null>


inputAppearance()

inputAppearance(patch): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:691

实时应用外观 patch 到 beginAppearanceEdit 指定的节点(不记录历史,不影响撤销栈)。 静默更新引擎属性(viewport 经 rAF 渲染循环自动刷新),不触发 appearance-changed 事件。

Parameters

patch

AppearancePatch

Returns

void


isAnimatingAppearance()

isAnimatingAppearance(): boolean

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:760

Returns

boolean


isNodeDeleted()

isNodeDeleted(id): boolean

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:915

节点是否被逻辑删除(自身或任一祖先在删除集内);未加载 / 无 overlay → false。

Parameters

id

NodeId

Returns

boolean


isNodeMerged()

isNodeMerged(id): boolean

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:921

节点是否是一个已合并折叠根;未加载 / 无 overlay → false。

Parameters

id

NodeId

Returns

boolean


isolateNodes()

isolateNodes(ids): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:831

Isolate:恰好显示 ids(装配自动展开为子树),其余叶子隐藏;保留集内 先前隐藏的叶子复显。ids 为空数组时静默 no-op。 实际发生变化时触发 visibility-changed 并入撤销历史。

Parameters

ids

readonly NodeId[]

Returns

void


iterateNodes()

iterateNodes(visitor): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:433

自根节点深度优先遍历结构树,对每个节点调用 visitor。 visitor 返回 false 时跳过该节点的子树(剪枝),继续遍历其余分支。

Parameters

visitor

(info) => boolean | void

Returns

void


load()

load(source, opts?): Promise<void>

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:153

加载 .fmbv 模型数据(URL / Uint8Array / Blob / 自定义 fetcher)并开始渐进渲染。

触发 model-loading,骨架(结构树 + 索引)就绪并触发 model-skeleton-ready 后本 Promise resolve;几何 LOD 分块在后台继续流式加载,期间触发 model-geom-progress,全部到达后触发 model-loaded。 再次调用会先卸载当前模型(触发 model-disposed)并取消未完成的旧加载。 失败时抛 ViewerError(InvalidModelSource / NetworkFailed / Cancelled 等)。

Parameters

source

ModelSource

opts?

ModelLoadOptions

Returns

Promise<void>


mergeNode()

mergeNode(root): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:1048

把装配折叠为单一零件:成员=该根下有效叶子,作为一条 doc-level 步入栈。

Parameters

root

NodeId

Returns

void


mergeRootOf()

mergeRootOf(id): NodeId | null

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:927

返回 id 的最外层当前合并祖先(折叠头);无则 null。

Parameters

id

NodeId

Returns

NodeId | null


resetFaceAppearances()

resetFaceAppearances(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:593

非记录批量还原:清除所有用户面级外观覆盖(颜色/表面/预设),供 applySnapshot 对称还原,不入撤销历史。

Returns

void


resetFaceGroupColors()

resetFaceGroupColors(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:581

清除所有面组级覆盖颜色。

Returns

void


resetHighlight()

resetHighlight(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:857

清除所有节点高亮。

Returns

void


resetNodesColor()

resetNodesColor(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:514

清除所有节点级覆盖颜色。

Returns

void


resetNodesOpacity()

resetNodesOpacity(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:888

重置节点透明度 — v2 才提供,当前调用必抛 ViewerError

Returns

void


resetNodesPreset()

resetNodesPreset(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:538

非记录批量还原:清除所有节点预设覆盖(供 applySnapshot 对称还原,不入撤销历史)。

Returns

void


resetNodesSurface()

resetNodesSurface(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:526

非记录批量还原:清除所有节点表面覆盖(供 applySnapshot 对称还原,不入撤销历史)。

Returns

void


resetNodesVisibility()

resetNodesVisibility(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:819

重置所有节点可见性(全部恢复显示);实际发生变化时触发 visibility-changed 并入撤销历史。

Returns

void


restoreFaceAppearances()

restoreFaceAppearances(entries): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:602

非记录批量还原:按 entries 还原每个叶子所在 mesh 的面级覆盖,供 applySnapshot 对称还原,不入撤销历史。 每个 entry 经 applyFaceAppearance(clear-then-set)覆盖该 mesh 的全部面级覆盖。

Parameters

entries

readonly object[]

Returns

void


setFaceGroupAppearance()

setFaceGroupAppearance(id, fg, patch): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:615

设置单个面组的外观覆盖(颜色 / 表面材质 / 预设)。 面级覆盖按 (mesh, faceGroup) 存储,同 mesh 的实例共享。 patch 中仅设置的字段生效;缺失字段保持现状;null 值显式清除该通道。 净变化作为一步压入共享撤销历史(撤销时整 mesh 的面级覆盖随节点快照一并还原)。

Parameters

id

NodeId

fg

FaceGroupId

patch

AppearancePatch

Returns

void


setFaceGroupColor()

setFaceGroupColor(id, fg, color): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:557

给节点内单个面组设置覆盖颜色(粒度细于节点级染色)。

Parameters

id

NodeId

fg

FaceGroupId

color

Color

Returns

void


setHighlightColor()

setHighlightColor(color): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:869

设置高亮染色所用的颜色。

Parameters

color

Color

Returns

void


setNodesAppearance()

setNodesAppearance(ids, patch): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:644

批量设置节点外观(颜色 / 表面材质 / 预设)。 patch 中仅设置的字段生效;缺失字段保持现状;null 值显式清除该通道。 设置完成后触发 appearance-changed 事件,并将净变化压入共享撤销历史。

Parameters

ids

readonly NodeId[]

patch

AppearancePatch

Returns

void


setNodesColor()

setNodesColor(ids, color): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:496

给一组节点设置覆盖颜色(不改原始材质,可经 unset / reset 撤销);未加载抛 ModelNotLoaded

Parameters

ids

readonly NodeId[]

color

Color

Returns

void


setNodesColors()

setNodesColors(map): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:502

按映射批量设置节点覆盖颜色(每节点各自一色)。

Parameters

map

ReadonlyMap<NodeId, Color>

Returns

void


setNodesHighlighted()

setNodesHighlighted(ids, on): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:851

程序化设置一组节点的高亮染色(与交互选中走同一外观高亮通道)。

Parameters

ids

readonly NodeId[]

on

boolean

Returns

void


setNodesOpacity()

setNodesOpacity(_ids, _opacity): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:876

节点透明度设置 — v2 才提供,当前调用必抛 ViewerError

Parameters

_ids

readonly NodeId[]

_opacity

number

Returns

void


setNodesPresets()

setNodesPresets(map): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:544

非记录批量还原:按映射设置节点预设覆盖(供 applySnapshot 对称还原,不入撤销历史)。

Parameters

map

ReadonlyMap<NodeId, string>

Returns

void


setNodesSurfaces()

setNodesSurfaces(map): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:532

非记录批量还原:按映射设置节点表面覆盖(供 applySnapshot 对称还原,不入撤销历史)。

Parameters

map

ReadonlyMap<NodeId, SurfaceOverride>

Returns

void


setNodesVisibility()

setNodesVisibility(ids, visible): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:810

设置一组节点的显示 / 隐藏;实际发生变化时触发 visibility-changed 并入撤销历史。

Parameters

ids

readonly NodeId[]

visible

boolean

Returns

void


unload()

unload(): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:206

卸载当前模型并清空场景,触发 model-disposed;未加载时静默返回。

Returns

void


unmergeNode()

unmergeNode(root): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:1058

取消合并(展开折叠根):作为一条独立 doc-level 步入栈(不是 merge 的 redo)。

Parameters

root

NodeId

Returns

void


unsetFaceGroupColor()

unsetFaceGroupColor(id, fg): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:563

撤销单个面组的覆盖颜色。

Parameters

id

NodeId

fg

FaceGroupId

Returns

void


unsetNodesAppearance()

unsetNodesAppearance(ids): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:659

清除一组节点的所有外观覆盖(颜色 / 表面材质 / 预设),触发 appearance-changed 事件,并将净变化压入共享撤销历史。

Parameters

ids

readonly NodeId[]

Returns

void


unsetNodesColor()

unsetNodesColor(ids): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:508

撤销指定节点的覆盖颜色,恢复原始材质色。

Parameters

ids

readonly NodeId[]

Returns

void


unsetNodesOpacity()

unsetNodesOpacity(_ids): void

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:882

撤销节点透明度 — v2 才提供,当前调用必抛 ViewerError

Parameters

_ids

readonly NodeId[]

Returns

void


visibleTreeChildren()

visibleTreeChildren(parent): readonly NodeId[]

Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:939

结构树可见直接子节点(跳过已删除;合并根返回 []);无 overlay 时回落 NodeInfo.childrenIds。

Parameters

parent

NodeId

Returns

readonly NodeId[]