Appearance
Interface: ViewerEvents
Defined in: packages/viewer-core/src/public/types.ts:256
viewer 事件清单(key → payload 类型),经 viewer.on() / once() 订阅。 覆盖模型加载生命周期、选中 / hover、LOD 与相机变化、渲染心跳和剖切交互。
Properties
appearance-changed
appearance-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:282
节点外观变化(setNodesAppearance / unsetNodesAppearance);nodeIds 为受影响的节点 id 列表。animated:true 表示由渐变动画完成触发(非即时编辑)。
animated?
optionalanimated?:boolean
nodeIds
nodeIds:
NodeId[]
camera-changed
camera-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:290
相机位姿变化(交互期间约 30Hz 节流)。
position
position:
Vec3
target
target:
Vec3
up
up:
Vec3
camera-interaction-changed
camera-interaction-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:292
相机交互开始/结束(拖拽/平移/缩放);Picker 据此在拖拽时抑制 hover 拾取。
interacting
interacting:
boolean
context-menu-dismissed
context-menu-dismissed:
Record<string,never>
Defined in: packages/viewer-core/src/public/types.ts:350
上一次 context-menu-requested 请求的菜单应当收起 —— 用户在菜单弹出后又落下 第二根手指,说明他要的是双指缩放/平移而不是菜单。宿主必须响应:菜单是 pointer-events: auto 的浮层且弹在手指附近,留在原地会吃掉第二指的 pointerdown,双指手势因此完全失效(表现为「双指没有任何反应」)。
context-menu-requested
context-menu-requested:
object
Defined in: packages/viewer-core/src/public/types.ts:343
用户请求上下文菜单。触控设备上由画布长按触发(触控没有右键),是平板端 唯一的菜单入口 —— 宿主订阅本事件在 (clientX, clientY) 弹自己的菜单即可, 无需自行处理触摸事件。桌面右键仍走 DOM 原生 contextmenu,引擎不代管。 x/y 是画布相对坐标(可直接喂 selection.pick),clientX/clientY 是视口坐标(用于定位浮层)。
clientX
clientX:
number
clientY
clientY:
number
source
source:
"touch"
x
x:
number
y
y:
number
history-changed
history-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:322
统一编辑历史撤销/重做可用性变化(变换 + 可见性共栈,驱动撤销按钮启停)。
canRedo
canRedo:
boolean
canUndo
canUndo:
boolean
hover-changed
hover-changed:
HoverChangeDetail
Defined in: packages/viewer-core/src/public/types.ts:286
hover 对象变化;移出模型时 item 为 null。
label-pick
label-pick:
object
Defined in: packages/viewer-core/src/public/types.ts:328
视口真实拾取(命中实体);携带命中项与世界命中点 / 法向,供序号标签等取表面锚点。程序化选中不发。
item
item:
SelectionItem
worldNormal
worldNormal:
Vec3
worldPoint
worldPoint:
Vec3
labels-changed
labels-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:324
标签集合(增删/移动/样式/绑定)变化。
count
count:
number
lod-changed
lod-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:288
某网格本帧实际显示的 LOD 级切换(由流式加载与屏幕误差驱动)。
fromLod
fromLod:
number
meshId
meshId:
MeshId
toLod
toLod:
number
model-bounds-changed
model-bounds-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:278
场景有效包围球变化(如爆炸偏移外扩)——内部用于让相机 near / far 不裁剪到零件。
boundingSphere
boundingSphere:
BoundingSphere
model-disposed
model-disposed:
Record<string,never>
Defined in: packages/viewer-core/src/public/types.ts:276
当前模型被卸载(显式 unload() 或再次 load() 替换时)。
model-edges-ready
model-edges-ready:
Record<string,never>
Defined in: packages/viewer-core/src/public/types.ts:270
全部可见 mesh 的边线流式挂载完成(在 model-loaded 之后)。
model-error
model-error:
object
Defined in: packages/viewer-core/src/public/types.ts:274
模型加载失败。当前实现中加载错误经 model.load() 的 Promise reject 抛出,此事件为预留通道,尚无发射点。
error
error:
ViewerError
model-geom-progress
model-geom-progress:
object
Defined in: packages/viewer-core/src/public/types.ts:262
几何 chunk 流式加载进度:ready 已到达数 / total 总数。
ready
ready:
number
total
total:
number
model-loaded
model-loaded:
Record<string,never>
Defined in: packages/viewer-core/src/public/types.ts:268
几何加载收敛:引擎不再请求新 chunk 且在飞请求清零。注意这不等于「全部 mesh 都已解码」 ——离屏或亚像素的 mesh 会被有意跳过、永不解码;发此事件前会补发一次 model-geom-progress{ ready: total } 让进度条收口。
model-loading
model-loading:
object
Defined in: packages/viewer-core/src/public/types.ts:258
model.load() 开始,携带原始 source。
source
source:
ModelSource
model-skeleton-ready
model-skeleton-ready:
object
Defined in: packages/viewer-core/src/public/types.ts:260
模型骨架(结构树 + 索引)就绪,model.load() 的 Promise 在此 resolve;几何此后继续后台流式加载。
boundingBox
boundingBox:
Box3
meshCount
meshCount:
number
nodeCount
nodeCount:
number
model-totals-ready
model-totals-ready:
ModelTotals
Defined in: packages/viewer-core/src/public/types.ts:272
整模型全量几何统计(三角/边线总数)算好(骨架就绪后后台读 chunk 头汇总,一次性)。
projection-changed
projection-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:294
相机投影类型切换(透视 ↔ 正交)。
projection
projection:
CameraProjection
render
render:
object
Defined in: packages/viewer-core/src/public/types.ts:296
渲染心跳(约每秒一次):区间平均 fps 与最近一帧渲染耗时。
fps
fps:
number
frameMs
frameMs:
number
section-activated
section-activated:
object
Defined in: packages/viewer-core/src/public/types.ts:300
某 section 被激活(开始参与裁剪)。
sectionId
sectionId:
string
section-changed
section-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:298
剖切状态变化(平面增删改 / 激活集变化);多 section 激活时 activeSectionId 取最近激活者作代表。
activeSectionId
activeSectionId:
string|null
planeCount
planeCount:
number
section-deactivated
section-deactivated:
object
Defined in: packages/viewer-core/src/public/types.ts:302
某 section 被反激活(退出裁剪)。
sectionId
sectionId:
string
section-plane-drag
section-plane-drag:
object
Defined in: packages/viewer-core/src/public/types.ts:306
gizmo 拖拽中,平面每次更新都触发,payload 带当前平面。
plane
plane:
PlaneSpec
planeId
planeId:
string
sectionId
sectionId:
string
section-plane-drag-end
section-plane-drag-end:
object
Defined in: packages/viewer-core/src/public/types.ts:308
gizmo 拖拽结束。
plane
plane:
PlaneSpec
planeId
planeId:
string
sectionId
sectionId:
string
section-plane-drag-start
section-plane-drag-start:
object
Defined in: packages/viewer-core/src/public/types.ts:304
开始用 gizmo 拖拽某剖切平面。
plane
plane:
PlaneSpec
planeId
planeId:
string
sectionId
sectionId:
string
selection-changed
selection-changed:
SelectionChangeDetail
Defined in: packages/viewer-core/src/public/types.ts:284
选中集变化,payload 含本次新增 / 移除与当前完整选中集。
structure-changed
structure-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:326
结构树逻辑编辑(删除/撤销删除/合并/取消合并/批量应用)变化。change="apply" 为 load-time 批量应用(订阅方全量重建、忽略 affected);change="undelete" 额外驱动绿色闪烁。affected=受影响的根/合并根。
affected
affected:
NodeId[]
change
change:
"delete"|"undelete"|"merge"|"unmerge"|"apply"
transform-changed
transform-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:312
变换编辑进行中(拖拽每帧;数值提交时与 transform-end 一并发一次)。
animated?
optionalanimated?:boolean
nodeIds
nodeIds:
NodeId[]
transform-editmode-changed
transform-editmode-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:318
变换编辑模式开关(gizmo 显示/隐藏)。
editing
editing:
boolean
transform-end
transform-end:
object
Defined in: packages/viewer-core/src/public/types.ts:314
变换编辑结束(拖拽松手或一次数值提交后)。
nodeIds
nodeIds:
NodeId[]
transform-history-changed
transform-history-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:320
变换编辑撤销/重做可用性变化(驱动按钮启停)。
canRedo
canRedo:
boolean
canUndo
canUndo:
boolean
transform-reset
transform-reset:
object
Defined in: packages/viewer-core/src/public/types.ts:316
复位某些/全部节点的编辑(resetNode/resetAll)。空数组表示全部复位。
nodeIds
nodeIds:
NodeId[]
transform-start
transform-start:
object
Defined in: packages/viewer-core/src/public/types.ts:310
变换编辑开始(拖拽起或一次数值提交前)。
nodeIds
nodeIds:
NodeId[]
view-applied
view-applied:
object
Defined in: packages/viewer-core/src/public/types.ts:330
一次 view-on-load 应用的结果(成功或被跳过的原因)。
applied
applied:
boolean
reason
reason:
"ok"|"not-found"|"parse-error"|"signature-mismatch"|"empty"
view-changed
view-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:335
视图集状态变化:切换了视图、装载/清空了视图信封、或「已偏离当前视图」翻转。 无视图信封时 count 为 0、index 为 -1、id/name 为 null。
count
count:
number
dirty
dirty:
boolean
id
id:
string|null
index
index:
number
name
name:
string|null
visibility-changed
visibility-changed:
object
Defined in: packages/viewer-core/src/public/types.ts:280
节点可见性变化(hide / show / isolate / reset);hiddenCount 为当前隐藏叶子总数。
hiddenCount
hiddenCount:
number