VTK+Qt的第一个例子

ui界面设计:
VTK+Qt的第一个例子_第1张图片

qvtkwidgetsapplication1.h:

#pragma once

#include 
#include "ui_qvtkwidgetsapplication1.h"

#include "vtkSmartPointer.h"
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkLight.h"
#include "vtkCamera.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include 

VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)

class QVTKWidgetsApplication1 : public QWidget
{
    Q_OBJECT

public:
    QVTKWidgetsApplication1(QWidget *parent = Q_NULLPTR);

private slots:
    void on_pushButton_clicked();

private:
    Ui::QVTKWidgetsApplication1Class ui;


    vtkSmartPointer<vtkCylinderSource> cylinder;
    vtkSmartPointer<vtkPolyDataMapper> cylinderMapper;
    vtkSmartPointer<vtkActor> cylinderActor;
    vtkSmartPointer<vtkLight> light;
    vtkSmartPointer<vtkCamera> camera;
    vtkSmartPointer<vtkRenderer> renderer;
    vtkSmartPointer<vtkRenderWindowInteractor> iren;
    vtkSmartPointer<vtkInteractorStyleTrackballCamera> style;
};

qvtkwidgetsapplication1.cpp:

#include "qvtkwidgetsapplication1.h"
#include "stdafx.h"

QVTKWidgetsApplication1::QVTKWidgetsApplication1(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
}

void QVTKWidgetsApplication1::on_pushButton_clicked() 
{
    cylinder = vtkCylinderSource::New();
    cylinder->SetHeight(3.0);
    cylinder->SetRadius(1.0);
    cylinder->SetResolution(20);

    cylinderMapper = vtkPolyDataMapper::New();
    cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

    cylinderActor = vtkActor::New();
    cylinderActor->SetMapper(cylinderMapper);

    renderer = vtkRenderer::New();
    renderer->AddActor(cylinderActor);
    renderer->SetBackground(0.1, 0.2, 0.3);

    ui.qvtkWidget->GetRenderWindow()->AddRenderer(renderer);
    ui.qvtkWidget->GetRenderWindow()->SetSize(300,400);

    iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());

    style = vtkInteractorStyleTrackballCamera::New();
    iren->SetInteractorStyle(style);

    iren->Initialize();
    iren->Start();
}

总体而言就是注意之前vtkRenderWindow的类不需要新建,直接使用在ui_qvtkwidgetsapplication1.h定义的QVTKWidget *qvtkWidget即可。
效果
点击pushButton即可生成如下效果。
VTK+Qt的第一个例子_第2张图片

你可能感兴趣的:(VTK,Qt)