QT學習VTK序列:Cylinder

學習VTK繪製圓柱體

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

/*
 * ModuleName: 模塊名稱
 * Description:
 * 參考代碼:https://lorensen.github.io/VTKExamples/site/Cxx/GeometricObjects/CylinderExample/
 * Author: hsw
 * Date: 2020-03-15
 *
*/

// QT
#include <QMainWindow>
#include <QDebug>

// VTK
#include <vtkSmartPointer.h>
#include <vtkCamera.h>
#include <vtkNamedColors.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkActor.h>
#include <vtkPolyDataMapper.h>
#include <vtkCylinderSource.h>
#include <vtkSmartPointer.h>
#include <vtkProperty.h>
#include <vtkObject.h>
#include <vtkAutoInit.h>

// C++
#include <array>

namespace Ui {
class MainWindow;
}

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingContextOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
private:
    vtkSmartPointer<vtkNamedColors>            colors;
    vtkSmartPointer<vtkCylinderSource>         cylinder;
    vtkSmartPointer<vtkPolyDataMapper>         cylinderMapper;
    vtkSmartPointer<vtkActor>                  cylinderActor;
    vtkSmartPointer<vtkRenderer>               cylinderRenderer;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // vtkNamedColors
    colors = vtkSmartPointer<vtkNamedColors>::New();

    std::array<unsigned char, 4> bkg{{26, 51, 102, 255}};
    colors->SetColor("BkgColor", bkg.data());

    // vtkSource
    cylinder = vtkSmartPointer<vtkCylinderSource>::New();
    cylinder->SetResolution(8);

    // vtkMapper
    cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

    // vtkActor
    cylinderActor = vtkSmartPointer<vtkActor>::New();
    cylinderActor->SetMapper(cylinderMapper);
    cylinderActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
    cylinderActor->RotateX( 30.0);
    cylinderActor->RotateY(-45.0);

    // vtkRenderer
    cylinderRenderer = vtkSmartPointer<vtkRenderer>::New();
    cylinderRenderer->AddActor(cylinderActor);
    cylinderRenderer->SetBackground(colors->GetColor3d("BkgColor").GetData());
    cylinderRenderer->ResetCamera();
    cylinderRenderer->GetActiveCamera()->Zoom(1.5);

    // vtkRenderWindow
    ui->qvtkWidget->GetRenderWindow()->AddRenderer(cylinderRenderer);

}

MainWindow::~MainWindow()
{
    delete ui;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章