发现在win10下pcl1.8在qt中是可以显示,但是pcl1.8却有两个构造函数,因此不能使用QVTKOpenGLWidget了
.h
#ifndef PCLVTKWIDGET_H
#define PCLVTKWIDGET_H
#include <QVTKWidget.h>
#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
class PCLVTKWidget : public QVTKWidget
{
public:
PCLVTKWidget(QWidget* parent = nullptr);
~PCLVTKWidget();
private:
void init_widget();
private:
boost::shared_ptr<pcl::visualization::PCLVisualizer> d_pcl_view;
boost::shared_ptr<pcl::visualization::CloudViewer> d_pcl_cloud_view;
vtkSmartPointer<vtkRenderer> d_ren;
vtkSmartPointer<vtkRenderWindow> d_ren_win;
};
#endif // PCLVTKWIDGET_H
.cpp
#include "PCLVTKWidget.h"
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/console/parse.h>
#include <QDebug>
PCLVTKWidget::PCLVTKWidget(QWidget* parent)
: QVTKWidget(parent)
{
init_widget();
}
PCLVTKWidget::~PCLVTKWidget()
{
}
void
PCLVTKWidget::init_widget()
{
//--------------------------------------------------------
pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
uint8_t r(255), g(15), b(15);
for (float z(-1.0); z <= 1.0; z += 0.05)
{
for (float angle(0.0); angle <= 360.0; angle += 5.0)
{
pcl::PointXYZRGB point;
point.x = 0.5 * cosf (pcl::deg2rad(angle));
point.y = sinf (pcl::deg2rad(angle));
point.z = z;
uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
point.rgb = *reinterpret_cast<float*>(&rgb);
point_cloud_ptr->points.push_back (point);
}
if (z < 0.0)
{
r -= 12;
g += 12;
}
else
{
g -= 12;
b += 12;
}
}
point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
point_cloud_ptr->height = 1;
//--------------------------------------------------------
d_pcl_view.reset( new pcl::visualization::PCLVisualizer("pcl_view", false) );
d_pcl_view->setBackgroundColor(0, 0, 0);
SetRenderWindow(d_pcl_view->getRenderWindow());
d_ren = d_pcl_view->getRendererCollection()->GetFirstRenderer();
d_ren->SetBackground2(0.56, 0.65, 0.9);//light blue
d_ren->SetBackground(0.96, 0.96, 0.96);//#f5f5f5
d_ren->SetGradientBackground(true);
d_pcl_view->addPointCloud(point_cloud_ptr);
}