QT學習VTK序列: Axis

學習VTK繪製座標軸

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

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

// VTK
#include <vtkActor.h>
#include <vtkAxesActor.h>
#include <vtkCamera.h>
#include <vtkCaptionActor2D.h>
#include <vtkNamedColors.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkTextProperty.h>
#include <vtkTransform.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<vtkSphereSource>           sphere;
    vtkSmartPointer<vtkPolyDataMapper>         sphereMapper;
    vtkSmartPointer<vtkActor>                  coneActor;
    vtkSmartPointer<vtkRenderer>               renderer;
    vtkSmartPointer<vtkTransform>              transform;
    vtkSmartPointer<vtkAxesActor>              axes;
};
#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();

    // vtkSource
    sphere = vtkSmartPointer<vtkSphereSource>::New();
    sphere->SetCenter(0.0, 0.0, 0.0);
    sphere->SetRadius(0.5);

    // vtkMapper
    sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    sphereMapper->SetInputConnection(sphere->GetOutputPort());

    // vtkActor
    coneActor = vtkSmartPointer<vtkActor>::New();
    coneActor->SetMapper(sphereMapper);

    // vtkRenderer
    renderer = vtkSmartPointer<vtkRenderer>::New();
    renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());

    // vtkTransform
    transform = vtkSmartPointer<vtkTransform>::New();
    transform->Translate(1.0, 0.0, 0.0);

    // vtkAxesActor
    axes = vtkSmartPointer<vtkAxesActor>::New();
    axes->SetUserTransform(transform);

    // Add vtkActor
    renderer->AddActor(axes);
    renderer->AddActor(coneActor);

    // vtkRenderer Camera
    renderer->GetActiveCamera()->Azimuth(50);
    renderer->GetActiveCamera()->Elevation(-3.0);
    renderer->ResetCamera();

    // vtkRenderWindow
    ui->qvtkWidget->GetRenderWindow()->AddRenderer(renderer);
}

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

效果

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