万象更新(一)VTK 坐标轴、相机方向坐标轴、立方体坐标轴_vtk默认坐标轴方向
VTK 坐标轴、相机方向坐标轴、立方体坐标轴
- 1. 坐标轴、相机方向坐标轴、立方体坐标轴
- 2. 坐标轴
- 3. 相机方向坐标轴
- 4. 立方体坐标轴
1. 坐标轴、相机方向坐标轴、立方体坐标轴
在 VTK(Visualization Toolkit)中,与坐标轴相关的组件主要包括 坐标轴 (vtkAxesActor)、相机方向坐标轴 (vtkCameraOrientationWidget) 和 立方体坐标轴 (vtkCubeAxesActor)。
2. 坐标轴
- vtkAxesActor 控件
显示一个简单的三维坐标轴,通常用于表示场景的世界坐标系或对象的局部坐标系。示意图如下:
- 特点
- 依赖 vtkRenderer 自动计算对象边界并绘制刻度。
- 可显示 X、Y、Z 轴的刻度值,类似 Matplotlib 3D 图中的坐标轴。
- 示例代码
vtkSmartPointer<vtkAxesActor> axesActor = vtkSmartPointer<vtkAxesActor>::New();vtkSmartPointer<vtkOrientationMarkerWidget> widgetAxes= vtkSmartPointer<vtkOrientationMarkerWidget>::New();// 设置坐标系的位置为右下角// 左(0.8): 视口的左边界,0.8 表示在窗口宽度的 80% 处。// 下(0.0): 视口的下边界,0.0 表示窗口的底部。// 右(1.0): 视口的右边界,1.0 表示窗口的最右边。// 上(0.2): 视口的上边界,0.2 表示窗口高度的 20% 处。double rightBottomViewport[4] = {0.8, 0.0, 1.0, 0.2}; // {左, 下, 右, 上}widgetAxes->SetViewport(rightBottomViewport);// 配置 OrientationMarkerWidgetwidgetAxes->SetOrientationMarker(axesActor);widgetAxes->SetInteractor(renderWindow->GetInteractor());widgetAxes->EnabledOn();widgetAxes->InteractiveOff();
3. 相机方向坐标轴
-
vtkCameraOrientationWidget 控件
窗口角落显示一个小的坐标轴指示器,表示当前相机的方向。示意图如下:
-
特点
- 内部使用 vtkAxesActor 来绘制坐标轴。
- 允许用户点击控件切换视角,例如切换到 XY、XZ、YZ 平面视角。
- 提供直观的相机方向参考,方便用户在 3D 视图中定位。
- 示例代码
vtkSmartPointer<vtkCameraOrientationWidget> cameraOrientation = vtkSmartPointer<vtkCameraOrientationWidget>::New();cameraOrientation->CreateDefaultRepresentation();cameraOrientation->SetParentRenderer(renderer);cameraOrientation->SetKeyPressActivation(false);cameraOrientation->On();
4. 立方体坐标轴
- vtkCubeAxesActor 控件
沿着一个对象的边界绘制带刻度的坐标轴,用于展示数据的三维范围。示意图如下:
- 特点:
- 依赖 vtkRenderer 自动计算对象边界并绘制刻度。
- 可显示 X、Y、Z 轴的刻度值,类似 Matplotlib 3D 图中的坐标轴。
- 适用于科学可视化场景,帮助用户了解数据的实际尺寸和范围。
- 示例代码
vtkSmartPointer<vtkCubeAxesActor> cubeAxesActor = vtkSmartPointer<vtkCubeAxesActor>::New();// 基础配置cubeAxesActor->SetXLabelFormat(\"%.2f\"); // X轴标签格式cubeAxesActor->SetYLabelFormat(\"%.2f\"); // Y轴标签格式cubeAxesActor->SetZLabelFormat(\"%.2f\"); // Z轴标签格式cubeAxesActor->SetFlyModeToStaticEdges(); // 坐标轴固定在数据边界cubeAxesActor->SetCamera(renderer->GetActiveCamera()); // 关联相机// 字体和颜色配置cubeAxesActor->GetTitleTextProperty(0)->SetColor(1,0,0); // X轴红色cubeAxesActor->GetTitleTextProperty(1)->SetColor(0,1,0); // Y轴绿色cubeAxesActor->GetTitleTextProperty(2)->SetColor(0,0,1); // Z轴蓝色cubeAxesActor->GetLabelTextProperty(0)->SetColor(1,0,0);cubeAxesActor->GetLabelTextProperty(1)->SetColor(0,1,0);cubeAxesActor->GetLabelTextProperty(2)->SetColor(0,0,1);cubeAxesActor->SetVisibility(true);// 默认隐藏,加载数据后显示renderer->AddActor(cubeAxesActor); // 将坐标轴演员添加到渲染器中renderer->ResetCamera(); // 让 VTK 自动缩放视角以适应整个坐标轴