Appearance
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
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
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
findNodesByName()
findNodesByName(
name): readonlyNodeId[]
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
fg
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
fg
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
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
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
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
Returns
getNodeColor()
getNodeColor(
id):Color|null
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:550
取节点当前的覆盖颜色;未设置过返回 null。
Parameters
id
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
Returns
NodeInfo | null
getNodeMaterial()
getNodeMaterial(
id):MaterialInfo|null
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:395
取节点关联的材质信息(由 materials payload 解析);无材质或未加载返回 null。
Parameters
id
Returns
MaterialInfo | null
getNodeOpacity()
getNodeOpacity(
_id):number
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:894
取节点透明度 — v2 前恒返回 1(不透明)。
Parameters
_id
Returns
number
getNodeProperties()
getNodeProperties(
id):Promise<readonlyNodeProperty[]>
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:409
取节点业务属性(按需:首次调用按节点 offset 发一次 range 请求,memoize)。 无属性 / 无 ATTRIBUTES chunk / 未加载 → 返回 []。
Parameters
id
Returns
Promise<readonly NodeProperty[]>
getNodeVisibility()
getNodeVisibility(
id):boolean
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:844
查询节点当前是否可见;未加载时按默认可见返回 true。
Parameters
id
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
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
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
Returns
boolean
isNodeMerged()
isNodeMerged(
id):boolean
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:921
节点是否是一个已合并折叠根;未加载 / 无 overlay → false。
Parameters
id
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
opts?
Returns
Promise<void>
mergeNode()
mergeNode(
root):void
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:1048
把装配折叠为单一零件:成员=该根下有效叶子,作为一条 doc-level 步入栈。
Parameters
root
Returns
void
mergeRootOf()
mergeRootOf(
id):NodeId|null
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:927
返回 id 的最外层当前合并祖先(折叠头);无则 null。
Parameters
id
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
fg
patch
Returns
void
setFaceGroupColor()
setFaceGroupColor(
id,fg,color):void
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:557
给节点内单个面组设置覆盖颜色(粒度细于节点级染色)。
Parameters
id
fg
color
Returns
void
setHighlightColor()
setHighlightColor(
color):void
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:869
设置高亮染色所用的颜色。
Parameters
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
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
Returns
void
setNodesColors()
setNodesColors(
map):void
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:502
按映射批量设置节点覆盖颜色(每节点各自一色)。
Parameters
map
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
Returns
void
unsetFaceGroupColor()
unsetFaceGroupColor(
id,fg):void
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:563
撤销单个面组的覆盖颜色。
Parameters
id
fg
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): readonlyNodeId[]
Defined in: packages/viewer-core/src/public/managers/ModelManager.ts:939
结构树可见直接子节点(跳过已删除;合并根返回 []);无 overlay 时回落 NodeInfo.childrenIds。
Parameters
parent
Returns
readonly NodeId[]