VTK实战笔记(2)将vtk嵌入到QWidget内并绘制显示3d坐标轴

一、实现效果
VTK实战笔记(2)将vtk嵌入到QWidget内并绘制显示3d坐标轴_第1张图片
二、实现原理

1.自定义VTKWidget类,继承QVTKOpenGLNativeWidget;
2.在VTKWidget构造函数中进行坐标轴绘制和绑定,步骤为:
(1)创建VTK渲染窗口,绑定到QVTK控件(setRenderWindow);
(2)创建渲染器,绑定到第一步创建的渲染窗口(AddRenderer);
(3)创建坐标轴,绑定到上一步创建的渲染器(AddActor);
(4)渲染器设置背景色及重置,让相机自动聚焦到场景内容;
(5)交互器设置及初始化;
(6)渲染窗口主动触发一次渲染。
3.在主窗口中实例化VTKWidget类对象并添加。

三、参考代码

//VTKWidget 类
#pragma once 
#include 
#include 
#include 

class VTKWidget : public QVTKOpenGLNativeWidget {
    Q_OBJECT

public:
    explicit VTKWidget(QWidget* parent = nullptr);
};
#include "vtkwidget.h"

#include 
#include 
#include 
#include 

VTKWidget::VTKWidget(QWidget* parent)
    : QVTKOpenGLNativeWidget(parent)  // 继承自 VTK 提供的 Qt 控件
{
    // 创建 VTK 渲染窗口,并绑定到当前 Qt 控件
    auto renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    this->setRenderWindow(renderWindow);  // 绑定给 QVTK 控件

    auto renderer = vtkSmartPointer<vtkRenderer>::New();
    this->renderWindow()->AddRenderer(renderer);  // 添加渲染器到窗口

    auto axes = vtkSmartPointer<vtkAxesActor>::New();
    renderer->AddActor(axes);  // 添加坐标轴到主渲染器中(也会显示在中央)

    renderer->SetBackground(0.1, 0.2, 0.3);  // 深蓝色背景

    renderer->ResetCamera();

    auto interactor = this->interactor();

    auto marker = vtkSmartPointer<vtkOrientationMarkerWidget>::New();
    marker->SetOrientationMarker(axes);     // 使用同一个坐标轴对象
    marker->SetInteractor(interactor);      // 绑定交互器
    marker->SetViewport(0.0, 0.0, 0.2, 0.2); // 设置显示区域(左下角 20%)
    marker->SetEnabled(1);                  // 启用该控件
    marker->InteractiveOn();                // 开启鼠标交互(可拖动旋转)

    // 初始化交互器(VTK 必须)
    interactor->Initialize();

    // 触发一次渲染(否则窗口不显示内容)
    this->renderWindow()->Render();
}
//mainwindow中嵌入
void MainWindow::initUI()
{ 
    auto vtkWidget = new VTKWidget(this);
    setCentralWidget(vtkWidget);
}

你可能感兴趣的:(Vtk实战笔记,笔记,vtk,qt,坐标轴,3d)