Skip to content
导览

剖切管理器 SectioningManager

剖切管理器是用于控制云渲染剖切的工具,通过获取该管理器,用户可以方便地进行剖切的控制和管理。 该工具的主要功能包括:

  1. 操作剖切轴鼠标左键弹起的回调函数
  2. 添加剖切面
  3. 添加剖切盒
  4. 移除剖切操作

我们将提供详细的使用指南和功能说明,帮助用户更好地使用该工具。

剖切

剖切是平面和由平面组成的盒来剖切节点,剖切根据剖切形式可分为:

  1. 包围盒剖切
  2. 面剖切(基于X,Y,Z轴,或在三个维度任意旋转角度)

根据剖切的对象可分为局部剖切、全局剖切。

SectioningManager

用户可以调用云渲染实例 cloud 上的 getSectioningManager() 方法来获取 SectioningManager 剖切管理器。

ts
const SectioningManager = await cloud.getSectioningManager()
const SectioningManager = await cloud.getSectioningManager()

用户调用 cloud.getSectioningManager() 后,SectioningManager 会被自动挂载到当前 cloud 实例上。

ts
await cloud.getSectioningManager()
const SectioningManager = cloud.SectioningManager
await cloud.getSectioningManager()
const SectioningManager = cloud.SectioningManager

操作剖切轴鼠标左键弹起的回调函数 | setChangedCallback

  • 说明:设置操作剖切轴鼠标左键弹起的回调函数

我们可以调用 SectioningManager 上面的 setChangedCallback 方法来设置操作剖切轴鼠标左键弹起的回调函数。

  • 参数说明
NameTypeDescription
fn(SectionInfo: Transform) => void回调函数,SectionInfo指剖切面或盒的Transform

调用示例:

ts
function changeFinished(re: Transform) {
  console.log(re)
}
cloud.sectioningManager.setChangedCallback(changeFinished)
function changeFinished(re: Transform) {
  console.log(re)
}
cloud.sectioningManager.setChangedCallback(changeFinished)

添加剖切面 | addPlaneSection

  • 说明:添加剖切面功能

我们可以调用 SectioningManager 上面的 addPlaneSection 方法来添加剖切面。

  • 参数说明
NameTypeDescription
sectionPosVector3剖切面的位置
operationNodeNode被剖切的节点对象,为空时对根节点进行剖切
dirVector3剖切面的方向
stateNodeState剖切面的颜色(ARGB),显隐

调用示例:

ts
// 六个标准方向
// Vector3(0, -1, 0))//上
// Vector3(0, 1, 0))//下
// Vector3(1, 0, 0)//西
// Vector3(-1, 0, 0))//东
// Vector3(0, 0, 1)//北
// Vector3(0, 0, -1)//南
const sceManager = await cloud.getSceneManager()
const rootNode = await sceManager.getRootNode3D()// 获取根节点
await cloud.getSectioningManager()
const dir = new Vector3(1, 0, 0)
const pos = new Vector3(1, 0, 1)
const state: NodeState = {
  color: '0xFFFF0000',
  opacity: 50,
  show: true,
}
const obj = await cloud.sectioningManager.addPlaneSection(pos, rootNode!, dir, state)
// 六个标准方向
// Vector3(0, -1, 0))//上
// Vector3(0, 1, 0))//下
// Vector3(1, 0, 0)//西
// Vector3(-1, 0, 0))//东
// Vector3(0, 0, 1)//北
// Vector3(0, 0, -1)//南
const sceManager = await cloud.getSceneManager()
const rootNode = await sceManager.getRootNode3D()// 获取根节点
await cloud.getSectioningManager()
const dir = new Vector3(1, 0, 0)
const pos = new Vector3(1, 0, 1)
const state: NodeState = {
  color: '0xFFFF0000',
  opacity: 50,
  show: true,
}
const obj = await cloud.sectioningManager.addPlaneSection(pos, rootNode!, dir, state)

添加剖切盒 | addBoxSection

  • 说明:添加剖切盒功能

我们可以调用 SectioningManager 上面的 addBoxSection 方法来添加剖切盒。

  • 参数说明
NameTypeDescription
transformTransform剖切盒的位置姿态
operationNodeNode被剖切的节点对象,为空时对根节点进行剖切
stateNodeState剖切盒的颜色(ARGB),显隐

调用示例:

ts
await cloud.getSectioningManager()
const sceManager = await cloud.getSceneManager()
const rootNode = await sceManager.getRootNode3D()// 获取根节点
const translation1 = new Vector3(10, 0, 0)
const eulerAngle1 = new Euler(0, 0, 0)
const scaling1 = new Vector3(1, 1, 1)
const trans = new Transform(translation1, eulerAngle1, scaling1)
const state: NodeState = {
  color: '0xFFFF0000',
  opacity: undefined,
  show: true,
}
const obj = await cloud.sectioningManager.addBoxSection(trans, rootNode!, state)
await cloud.getSectioningManager()
const sceManager = await cloud.getSceneManager()
const rootNode = await sceManager.getRootNode3D()// 获取根节点
const translation1 = new Vector3(10, 0, 0)
const eulerAngle1 = new Euler(0, 0, 0)
const scaling1 = new Vector3(1, 1, 1)
const trans = new Transform(translation1, eulerAngle1, scaling1)
const state: NodeState = {
  color: '0xFFFF0000',
  opacity: undefined,
  show: true,
}
const obj = await cloud.sectioningManager.addBoxSection(trans, rootNode!, state)

移除剖切操作 | remove

  • 说明:移除此剖切操作

我们可以调用 SectioningManager 上面的 remove 方法来移除剖切操作。

  • 参数说明
NameTypeDescription
sectionObjSectionObject剖切操作对象

调用示例:

ts
await cloud.getSectioningManager()
const sceManager = await cloud.getSceneManager()
const rootNode = await sceManager.getRootNode3D()// 获取根节点
const translation1 = new Vector3(10, 0, 0)
const eulerAngle1 = new Euler(0, 0, 0)
const scaling1 = new Vector3(1, 1, 1)
const trans = new Transform(translation1, eulerAngle1, scaling1)
const state: NodeState = {
  color: '0xFF0000',
  opacity: undefined,
  show: true,
}
const obj = await cloud.sectioningManager.addBoxSection(trans, rootNode!, state)
await cloud.sectioningManager.remove(obj)
await cloud.getSectioningManager()
const sceManager = await cloud.getSceneManager()
const rootNode = await sceManager.getRootNode3D()// 获取根节点
const translation1 = new Vector3(10, 0, 0)
const eulerAngle1 = new Euler(0, 0, 0)
const scaling1 = new Vector3(1, 1, 1)
const trans = new Transform(translation1, eulerAngle1, scaling1)
const state: NodeState = {
  color: '0xFF0000',
  opacity: undefined,
  show: true,
}
const obj = await cloud.sectioningManager.addBoxSection(trans, rootNode!, state)
await cloud.sectioningManager.remove(obj)