剖切管理器 SectioningManager
剖切管理器是用于控制云渲染剖切的工具,通过获取该管理器,用户可以方便地进行剖切的控制和管理。 该工具的主要功能包括:
- 操作剖切轴鼠标左键弹起的回调函数
- 添加剖切面
- 添加剖切盒
- 移除剖切操作
我们将提供详细的使用指南和功能说明,帮助用户更好地使用该工具。
剖切
剖切是平面和由平面组成的盒来剖切节点,剖切根据剖切形式可分为:
- 包围盒剖切
- 面剖切(基于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
方法来设置操作剖切轴鼠标左键弹起的回调函数。
- 参数说明
Name | Type | Description |
---|---|---|
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
方法来添加剖切面。
- 参数说明
Name | Type | Description |
---|---|---|
sectionPos | Vector3 | 剖切面的位置 |
operationNode | Node | 被剖切的节点对象,为空时对根节点进行剖切 |
dir | Vector3 | 剖切面的方向 |
state | NodeState | 剖切面的颜色(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
方法来添加剖切盒。
- 参数说明
Name | Type | Description |
---|---|---|
transform | Transform | 剖切盒的位置姿态 |
operationNode | Node | 被剖切的节点对象,为空时对根节点进行剖切 |
state | NodeState | 剖切盒的颜色(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
方法来移除剖切操作。
- 参数说明
Name | Type | Description |
---|---|---|
sectionObj | SectionObject | 剖切操作对象 |
调用示例:
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)