Skip to content

显示控制

显示控制分布在三个 manager 上:viewer.model 管节点可见性,viewer.edges 管全局边线,viewer.renderMode 管渲染模式(全局与按节点)。三者正交组合,覆盖「隐藏零件」「关边线」「切线框」等常见需求。

下面的 demo 演示渲染模式:点击零件后用底部面板给它单独设置模式,按 M 键循环全局模式:

可交互 demo · 点击零件后用底部面板设按节点模式,M 键循环全局模式,空格键 fit在新窗口打开 ↗

核心 API

ts
import { RenderMode } from "@modelcubes/viewer-core";

// 节点可见性:隐藏一组节点 / 隔离显示一组节点 / 全部恢复显示
viewer.model.setNodesVisibility(hiddenIds, false);
viewer.model.isolateNodes(keepIds);
viewer.model.resetNodesVisibility();

// 边线:全局开关 / 颜色 / 不透明度
viewer.edges.setVisible(false);
viewer.edges.setColor({ r: 0.1, g: 0.1, b: 0.1 });

// 渲染模式:全局切线框,再给个别节点设回实色
viewer.renderMode.set(RenderMode.Wireframe);
viewer.renderMode.setNodes(focusIds, RenderMode.Shaded);
viewer.renderMode.resetNodes(); // 清除全部按节点覆盖

行为要点

  • 节点可见性走 ModelManager:setNodesVisibility(ids, visible) 批量显隐,resetNodesVisibility() 全部恢复,getNodeVisibility(id) 查询。可见性实际发生变化时(hide / show / isolate / reset)触发 visibility-changed 事件(payload 带当前隐藏叶子总数 hiddenCount)。
  • 隔离显示用 isolateNodes(ids):恰好显示 ids——装配节点自动展开为整个子树,其余叶子隐藏;保留集内先前隐藏的叶子复显;空数组静默 no-op。引擎只管可见性,相机编排(isolate 时保存位姿并 fit 到保留集、Show all 时复显并还原)由 viewer-ui 的 isolateZoom helper 负责。
  • 边线开关在 viewer.edges:setVisible 全局开关,setColor / setOpacity 调样式。未显式设置时引擎按视觉默认渲染:深灰 0x3a3a3a、不透明度 0.85。注意 getColor() / getOpacity() 在首次 set 之前返回的是占位初值(黑色 / 1),不代表上述视觉默认。
  • RenderMode 四模式:ShadedWithEdges 实色线框(默认)、Wireframe 线框(仅 BREP 边线)、Shaded 实色(仅面)、HiddenLine 消隐(面作深度遮挡体 + 可见边)。模式语义是「面可见性 × 边可见性」的具名组合,因此 renderMode.setedges.setVisible 作用于同一份状态。
  • 按节点覆盖:setNodes(ids, mode) 给指定节点(非叶节点递归到叶子)设置覆盖模式,clearNodes 回落全局,getNodeMode(id) 取生效模式;HiddenLine 在 v1 仅支持全局,按节点设置会抛 ViewerError
  • 背景:画布背景(纯色 / 渐变 / 图片 / 透明)由 BackgroundManager(viewer.background)管理。

下面的 demo 按 E 键切换全局边线显示:

可交互 demo · E 键切换边线,鼠标拖拽旋转,空格键 fit在新窗口打开 ↗

相关 API