#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackball.h>
#include <vtkInteractorStyle.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkTexture.h>
#include <vtkProperty.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void textureSlot();
void backgroundColorSlot();
void foregroundColorSlot();
void scaleSlot();
void positionSlot();
void oritationSlot();
void originSlot();
void dragSlot();
void pickSlot();
private:
vtkSmartPointer<vtkRenderer> pRenderer;
vtkSmartPointer<vtkProperty> pProperty;
vtkSmartPointer<vtkPolyDataMapper> pPolyDataMapper;
vtkSmartPointer<vtkActor> pCylinderActor;
vtkSmartPointer<vtkTexture> pTexture;
vtkSmartPointer<vtkCylinderSource> pCylinderSource;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColorDialog>
#include <QFileDialog>
#include <vtkJPEGReader.h>
#include <vtkPNGReader.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 渲染的场景
pRenderer = vtkSmartPointer<vtkRenderer>::New();
// 圆柱数据
pCylinderSource = vtkSmartPointer<vtkCylinderSource>::New();
pCylinderSource->SetCenter(0, 0, 0);
pCylinderSource->SetResolution(25);
pCylinderSource->SetHeight(2);
pCylinderSource->SetRadius(2);
// 圆柱的Mapper
pPolyDataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
pPolyDataMapper->SetInputConnection(pCylinderSource->GetOutputPort());
// 圆柱的Property
pProperty = vtkSmartPointer<vtkProperty>::New();
pProperty->SetColor(1, 0, 0);
pProperty->SetOpacity(0.5);
pProperty->SetAmbient(0.3);
pProperty->SetDiffuse(0.4);
pProperty->SetSpecular(0.8);
pProperty->SetShading(false);
pProperty->SetLineWidth(2.0);
pProperty->SetPointSize(2.0);
// 圆柱体
pCylinderActor = vtkSmartPointer<vtkActor>::New();
pCylinderActor->SetMapper(pPolyDataMapper);
pCylinderActor->SetProperty(pProperty);
pCylinderActor->SetDragable(false);
pCylinderActor->SetPickable(false);
pC