Skip to content

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?

optional animated?: 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?

optional animated?: 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