万象更新(一)VTK 坐标轴、相机方向坐标轴、立方体坐标轴

VTK 坐标轴、相机方向坐标轴、立方体坐标轴

  • [1. 坐标轴、相机方向坐标轴、立方体坐标轴](#1. 坐标轴、相机方向坐标轴、立方体坐标轴)
  • [2. 坐标轴](#2. 坐标轴)
  • [3. 相机方向坐标轴](#3. 相机方向坐标轴)
  • [4. 立方体坐标轴](#4. 立方体坐标轴)

1. 坐标轴、相机方向坐标轴、立方体坐标轴

在 VTK(Visualization Toolkit)中,与坐标轴相关的组件主要包括 坐标轴 (vtkAxesActor)、相机方向坐标轴 (vtkCameraOrientationWidget) 和 立方体坐标轴 (vtkCubeAxesActor)。

控件 名称 作用及适用场景 备注
vtkAxesActor 坐标轴 显示简单坐标轴,适用于世界坐标系、对象坐标系 模型坐标系统显示
vtkCameraOrientationWidget 相机方向坐标轴 提供直观的相机方向参考 增强用户体验
vtkCubeAxesActor 立方体坐标轴 显示带刻度的三维坐标轴,数据可视化,显示数据范围 增强用户体验

2. 坐标轴

  1. vtkAxesActor 控件
    显示一个简单的三维坐标轴,通常用于表示场景的世界坐标系或对象的局部坐标系。示意图如下:
  2. 特点
  • 依赖 vtkRenderer 自动计算对象边界并绘制刻度。
  • 可显示 X、Y、Z 轴的刻度值,类似 Matplotlib 3D 图中的坐标轴。
  1. 示例代码
cpp 复制代码
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);

// 配置 OrientationMarkerWidget
widgetAxes->SetOrientationMarker(axesActor);
widgetAxes->SetInteractor(renderWindow->GetInteractor());
widgetAxes->EnabledOn();
widgetAxes->InteractiveOff();

3. 相机方向坐标轴

  1. vtkCameraOrientationWidget 控件

    窗口角落显示一个小的坐标轴指示器,表示当前相机的方向。示意图如下:

  2. 特点

  • 内部使用 vtkAxesActor 来绘制坐标轴。
  • 允许用户点击控件切换视角,例如切换到 XY、XZ、YZ 平面视角。
  • 提供直观的相机方向参考,方便用户在 3D 视图中定位。
  1. 示例代码
cpp 复制代码
vtkSmartPointer<vtkCameraOrientationWidget> cameraOrientation = vtkSmartPointer<vtkCameraOrientationWidget>::New();
cameraOrientation->CreateDefaultRepresentation();
cameraOrientation->SetParentRenderer(renderer);
cameraOrientation->SetKeyPressActivation(false);
cameraOrientation->On();

4. 立方体坐标轴

  1. vtkCubeAxesActor 控件
    沿着一个对象的边界绘制带刻度的坐标轴,用于展示数据的三维范围。示意图如下:
  2. 特点:
  • 依赖 vtkRenderer 自动计算对象边界并绘制刻度。
  • 可显示 X、Y、Z 轴的刻度值,类似 Matplotlib 3D 图中的坐标轴。
  • 适用于科学可视化场景,帮助用户了解数据的实际尺寸和范围。
  1. 示例代码
cpp 复制代码
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 自动缩放视角以适应整个坐标轴
相关推荐
历程里程碑32 分钟前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun34 分钟前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
小龙报1 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
一只大侠的侠1 小时前
Flutter开源鸿蒙跨平台训练营 Day8获取轮播图网络数据并实现展示
flutter·开源·harmonyos
石去皿1 小时前
【嵌入式就业6】计算机组成原理与操作系统核心机制:夯实底层基础
c++·面试·嵌入式
王老师青少年编程1 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第1题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
一只小小的芙厨2 小时前
AT_tkppc3_d 巨大チェスボード 题解
c++·题解
我在人间贩卖青春2 小时前
C++之继承与派生类的关系
c++·向上造型·向下造型
Trouvaille ~2 小时前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
DolitD2 小时前
云流技术深度剖析:国内云渲染主流技术与开源和海外厂商技术实测对比
功能测试·云原生·开源·云计算·实时云渲染