學習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;
}
效果