Skip to content

Interface: TransformManager

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:59

零部件位置变换编辑 manager(单实例粒度,平移+旋转)。

真值模型:Map<NodeId, 世界增量 D>。节点渲染世界矩阵 = Translate(explode)·D·originalWorld。 D 经 SceneStore.setInstanceEditDelta 推到实例(含边线同步)。装配/内部节点(无 instance)静默跳过。 持久化由宿主层经 getOverrides/setOverrides 完成(本类不做文件 I/O)。

Remarks

经 viewer.transform 访问,不要直接构造。

Methods

animateOverrides()

animateOverrides(list, durationMs?): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:592

批量动画套用编辑覆盖(视图切换时的零件平滑运动)。

构造 union = list 节点 ∪ 当前有编辑的节点,对每个节点从当前 delta(或 identity) 插值到目标 delta(或 identity),用 decompose→slerp→compose 方式做四元数球面插值。 不 pushHistory、不 emit,直到动画完成时 emit transform-changed 一次。

durationMs <= 0 → 直接 setOverrides,不起 tween。 durationMs 省略 → overrideAnimDuration(union.size) 自动计算。

Parameters

list

object[]

durationMs?

number

Returns

void


applyRotation()

applyRotation(nodeIds, eulerDegXYZ, space): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:329

旋转选中节点(欧拉角,单位:度,XYZ 顺序)。绕选中集当前有效世界盒中心 pivot。 space='world' 绕世界轴;'local'(仅单选有意义,多选回退 world)绕节点自身轴。 内部/装配节点(无 instance)跳过。

Parameters

nodeIds

NodeId[]

eulerDegXYZ

[number, number, number]

space

"world" | "local"

Returns

void


applyTranslation()

applyTranslation(nodeIds, v, space): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:285

平移选中节点。space='world' 沿世界轴;space='local' 沿各节点当前世界朝向。 内部/装配节点(无 instance)跳过。

Parameters

nodeIds

NodeId[]

v

[number, number, number]

space

"world" | "local"

Returns

void


canRedo()

canRedo(): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:219

是否有可重做步。

Returns

boolean


canUndo()

canUndo(): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:217

是否有可撤销步。

Returns

boolean


finishOverrideAnimation()

finishOverrideAnimation(): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:690

立即跳到 tween 目标,清 tween,emit transform-changed 一次。无 tween 时 no-op。

Returns

void


getGizmoMode()

getGizmoMode(): GizmoMode

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:477

Returns

GizmoMode


getGizmoSpace()

getGizmoSpace(): GizmoSpace

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:469

Returns

GizmoSpace


getNodeLocalPose()

getNodeLocalPose(nodeId): NodePose

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:522

Local 帧相对位姿:平移分量投影到节点当前有效局部轴(与 applyTranslation('local') 同一基底,故面板按差量施加可往返自洽),旋转沿用编辑欧拉。与 getNodePose(世界绝对、 绕设计原位)一一对应,供面板 Local 帧累计显示——未编辑返回零位姿。

Parameters

nodeId

NodeId

Returns

NodePose


getNodePose()

getNodePose(nodeId): NodePose

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:500

读绝对位姿(平移 mm + 欧拉度 XYZ,绕原始几何中心)。未编辑返回零位姿。

Parameters

nodeId

NodeId

Returns

NodePose


getNodeTransform()

getNodeTransform(nodeId): number[]

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:127

取该节点当前世界增量 D(列主序 number[16]);未编辑返回单位阵。

Parameters

nodeId

NodeId

Returns

number[]


getOverrides()

getOverrides(): object[]

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:264

序列化全部编辑(供宿主写 sidecar)。delta 为列主序 number[16]。

Returns

object[]


getSelectionPivot()

getSelectionPivot(nodeIds): [number, number, number] | null

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:390

选中集当前有效世界盒中心 [x,y,z];空或全内部节点返回 null。供 gizmo 摆位 + 旋转 pivot。

Parameters

nodeIds

NodeId[]

Returns

[number, number, number] | null


hasEdits()

hasEdits(): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:212

是否存在任意编辑。

Returns

boolean


isAnimatingOverrides()

isAnimatingOverrides(): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:698

True while an override tween is in flight.

Returns

boolean


isEdited()

isEdited(nodeId): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:205

该节点是否有编辑。

Parameters

nodeId

NodeId

Returns

boolean


isEditMode()

isEditMode(): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:461

Returns

boolean


isTransformable()

isTransformable(nodeId): boolean

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:116

该节点是否可变换:解析(merge 根→成员、装配/内部节点→子树叶)后至少有一个带 instance 的叶子。叶子(有 instance)恒 true,空装配 / 不存在节点为 false。 供上层 UI 判定选中项能否进变换面板/gizmo(与实际能被平移旋转的集合一致)。

Parameters

nodeId

NodeId

Returns

boolean


redo()

redo(): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:223

重做一步。空栈静默。

Returns

void


resetAll()

resetAll(): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:232

复位全部编辑。

Returns

void


resetNode()

resetNode(nodeId): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:226

复位某节点的编辑(清除 D,恢复原始世界矩阵)。

Parameters

nodeId

NodeId

Returns

void


resetNodes()

resetNodes(nodeIds): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:248

复位给定节点的编辑(清 D,恢复原始世界矩阵),作为一步历史。未编辑的节点跳过;无一可清则静默。

Parameters

nodeIds

NodeId[]

Returns

void


setEditMode()

setEditMode(on): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:455

进入/退出变换编辑模式(显示/隐藏 gizmo)。幂等。

Parameters

on

boolean

Returns

void


setGizmoMode()

setGizmoMode(mode): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:472

gizmo 把手族(默认 translate=平移箭头)。Move 工具→translate,Rotate 工具→rotate。改变触发 controller.setMode(rig 切换族 + 重建)。

Parameters

mode

GizmoMode

Returns

void


setGizmoSpace()

setGizmoSpace(space): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:464

gizmo 参考坐标系(默认 world)。改变触发 rig 重建。

Parameters

space

GizmoSpace

Returns

void


setNodePose()

setNodePose(nodeId, pose): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:547

绝对设置位姿。D = T(pos)·T(p)·R(rot)·T(−p)(绕原始几何中心)。一步历史。无 instance 静默跳过。

Parameters

nodeId

NodeId

pose

NodePose

Returns

void


setNodeTransform()

setNodeTransform(nodeId, deltaWorld): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:133

设该节点的世界增量 D(列主序 number[16])。绝对设值(覆盖既有 D)。无 instance 静默跳过(不污染 deltas,不发事件)。

Parameters

nodeId

NodeId

deltaWorld

number[]

Returns

void


setOverrides()

setOverrides(list): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:271

批量套用编辑(供宿主读 sidecar 后恢复)。会覆盖同名节点的现有 D。无 instance 的节点静默跳过。

Parameters

list

object[]

Returns

void


undo()

undo(): void

Defined in: packages/viewer-core/src/public/managers/TransformManager.ts:221

撤销一步(委托共享栈;可能撤销可见性步)。空栈静默。

Returns

void