myqvtkopenglnativewidget.h
#ifndef MYQVTKOPENGLNATIVEWIDGET_H
#define MYQVTKOPENGLNATIVEWIDGET_H
#include <vtkRenderWindow.h>
#include <QVTKOpenGLNativeWidget.h>
// Point Cloud Library
#include <pcl/point_cloud.h>
#include <pcl/io/ply_io.h>
#include <pcl/filters/filter.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/PCLPointCloud2.h>
#include <pcl/visualization/range_image_visualizer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/common/common.h>
// Boost
#include <boost/math/special_functions/round.hpp>
class MyQVTKOpenGLNativeWidget : public QVTKOpenGLNativeWidget
{
Q_OBJECT
public:
explicit MyQVTKOpenGLNativeWidget(QWidget *parent = nullptr);
boost::shared_ptr<pcl::visualization::PCLVisualizer> getViewer();
signals:
protected:
/** @brief The PCL visualizer object */
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer_;
};
#endif // MYQVTKOPENGLNATIVEWIDGET_H
myqvtkopenglnativewidget.cpp
#include "myqvtkopenglnativewidget.h"
#include <QSurfaceFormat>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
#include <vtkCubeSource.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>
MyQVTKOpenGLNativeWidget::MyQVTKOpenGLNativeWidget(QWidget *parent)
: QVTKOpenGLNativeWidget{parent}
{
auto renderer2 = vtkSmartPointer<vtkRenderer>::New();
auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
renderWindow2->AddRenderer(renderer2);
viewer_.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer", false));
viewer_->setBackgroundColor(255, 255, 255);
viewer_->setShowFPS(false);
setRenderWindow(viewer_->getRenderWindow());
viewer_->setupInteractor(this->interactor(), this->renderWindow());
vtkAxesActor* axesActor =vtkAxesActor::New();
axesActor->SetPosition(0, 0, 0); //坐标系的原点位置
axesActor->SetTotalLength(1, 1, 1); //轴的长度
axesActor->SetShaftType(0); //旋转轴的类型:圆柱体、线或者自定义(用于显示)
axesActor->SetAxisLabels(1); //是否显示标签
axesActor->SetCylinderRadius(0.02);
vtkOrientationMarkerWidget* widgetAxes =vtkOrientationMarkerWidget::New();
widgetAxes->SetOrientationMarker(axesActor);
widgetAxes->SetInteractor(this->interactor());
widgetAxes->SetEnabled(1);
widgetAxes->SetInteractive(0);
this->update();
}
boost::shared_ptr<pcl::visualization::PCLVisualizer> MyQVTKOpenGLNativeWidget::getViewer(){
return viewer_;
}
如果要在UI设计师界面中使用,先拖入openglWidget ,然后将这部件提升为MyQVTKOpenGLNativeWidget