概述
vtkCoordinate
类在 vtk.js 中用于表示和处理不同坐标系下的位置转换。它支持相对定位,允许创建坐标对象的级联(无循环),从而在不同对象之间建立相对位置关系。典型用法包括设置坐标系、设置坐标值,以及转换为其他坐标系下的值。
坐标系类型
vtk.js 中支持多种坐标系,包括但不限于:
DISPLAY
:屏幕坐标系,原点在左下角,单位为像素。NORMALIZED_DISPLAY
:归一化屏幕坐标系,范围从 (0,0) 到 (1,1)。VIEWPORT
:视口坐标系,与 DISPLAY 类似,但基于当前视口。NORMALIZED_VIEWPORT
:归一化视口坐标系。VIEW
:视图坐标系,范围通常为 (-1, -1, -1) 到 (1, 1, 1)。WORLD
:世界坐标系,全局坐标值。
核心方法
设置坐标系
setCoordinateSystem(coordinateSystem: Coordinate)
:设置当前坐标系统。setCoordinateSystemToDisplay()
:设置为 DISPLAY 坐标系。setCoordinateSystemToNormalizedDisplay()
:设置为 NORMALIZED_DISPLAY 坐标系。- ...(其他坐标系类似)
获取坐标系
getCoordinateSystem()
:获取当前坐标系统(返回Coordinate
枚举值)。getCoordinateSystemAsString()
:获取当前坐标系统(返回字符串)。
设置和获取坐标值
setValue(value: number[])
:设置坐标值。getValue()
:获取当前坐标值。
坐标转换
getComputedWorldValue(ren: vtkRenderer)
:基于当前坐标系和渲染器,计算并返回世界坐标系下的值。getComputedViewportValue(ren: vtkRenderer)
:返回视口坐标系下的值。getComputedDisplayValue(ren: vtkRenderer)
:返回屏幕坐标系下的值。- ...(其他转换方法类似)
使用示例
以下是一个简单的示例,展示了如何将屏幕坐标转换为世界坐标:
import vtkCoordinate from 'vtk.js/Sources/Rendering/Core/Coordinate';
import vtkRenderer from 'vtk.js/Sources/Rendering/Core/Renderer';
// 假设已有 vtkRenderer 实例 renderer
const renderer = vtkRenderer.newInstance();
// 创建 vtkCoordinate 实例
const coordinate = vtkCoordinate.newInstance();
// 设置坐标系为 DISPLAY(屏幕坐标系)
coordinate.setCoordinateSystemToDisplay();
// 设置屏幕坐标值 (x, y, z),z 通常设为 0
coordinate.setValue(100, 200, 0);
// 获取世界坐标系下的值
const worldCoords = coordinate.getComputedWorldValue(renderer);
console.log('World Coordinates:', worldCoords);
注意事项
- 在进行坐标转换时,必须传入正确的
vtkRenderer
实例,因为它包含了必要的视口和相机参数。 - 坐标系设置和转换操作应确保逻辑上的一致性,避免出现无效的转换或结果。
- 对于复杂的场景,可能需要结合多个坐标系和转换方法来实现所需的功能。
通过学习 vtkCoordinate
API,可以更灵活地处理 vtk.js 中的坐标转换问题,为 3D 可视化应用提供更加精确和灵活的定位能力。