带有QTDesigner的QVTKOpenGLWidget和vtkGenericOpenGlRenderWindow [英] QVTKOpenGLWidget and vtkGenericOpenGlRenderWindow with QTDesigner

查看:1343
本文介绍了带有QTDesigner的QVTKOpenGLWidget和vtkGenericOpenGlRenderWindow的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在QTDesigner中将QVTKOpenGLWidgetvtkGenericOpenGlRenderWindow一起使用,但是却获得了一个黑色的窗口.当我将PointCloud Library(PCL)的PCLVizualizervtkGenericOpenGlRenderWindow一起使用时,一切正常.我正在尝试以与PCL相同的方式创建自定义查看器.

I'm trying to use QVTKOpenGLWidget in QTDesigner with vtkGenericOpenGlRenderWindow but I obtain a black window. When I use PCLVizualizer of PointCloud Library (PCL) with vtkGenericOpenGlRenderWindow, everything works fine. I'm trying to create a custom viewer the same way as PCL.

QMainPanel::QMainPanel( HWND hWnd ) :
    QWinWidget( hWnd ),
    ui(new Ui::QMainPanel)
{
    ui->setupUi(this);

    rendererTest = vtkSmartPointer<vtkRenderer>::New();
    rendererTest->GradientBackgroundOn();
    rendererTest->SetBackground(0.27,0.27,0.27);
    rendererTest->SetBackground2(0.44,0.44,0.44);
    windowTest = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    windowTest->AddRenderer(rendererTest);
    interactorTest = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactorTest->SetRenderWindow( windowTest );
    ui->openGLWidget->SetRenderWindow( windowTest ); //  QVTKOpenGLWidget *openGLWidget;
}

谢谢

删除交互器"即可解决我的问题.

Edit : Remove "Interactor" solved my problem.

推荐答案

您将需要获取PCL表格的主版本 https://github.com/PointCloudLibrary/pcl .这将使PCLVisualizer具有更多的构造函数.因此,您可以使用这样的自定义小部件:

You will need to get the master version of PCL form https://github.com/PointCloudLibrary/pcl. This will give a PCLVisualizer with more constructors. So, you can use a custom widget like this:

VideoQVTKOpenGLWidget.h



    #ifndef VIDEOQVKTOPENGLWIDGET_H
    #define VIDEOQVKTOPENGLWIDGET_H

    #include <QWidget>
    #include <QVTKOpenGLWidget.h>
    #include <pcl/visualization/pcl_visualizer.h>
    using namespace pcl::visualization;

    class VideoQVTKOpenGLWidget : public QVTKOpenGLWidget
    {
      public:
        explicit VideoQVTKOpenGLWidget(QWidget *parent = 0);
        void populateCloud(pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud);

      private:
        boost::shared_ptr<PCLVisualizer> _viewer;
        vtkSmartPointer<vtkGenericOpenGLRenderWindow> _renderWindow;
    };

    #endif // VIDEOQVKTOPENGLWIDGET_H

VideoQVTKOpenGLWidget.cpp



    #include "VideoQVTKOpenGLWidget.h"

    #include <vtkPointPicker.h>
    #include <vtkGenericOpenGLRenderWindow.h>

    VideoQVTKOpenGLWidget::VideoQVTKOpenGLWidget(QWidget *parent)
      : QVTKOpenGLWidget(parent)
    {
      auto renderer = vtkSmartPointer<vtkRenderer>::New();
      _renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
      _renderWindow->AddRenderer(renderer);
      _viewer.reset(new PCLVisualizer(renderer, _renderWindow, "viewer", false));
      this->SetRenderWindow(_viewer->getRenderWindow());
      this->update();
    }

    void VideoQVTKOpenGLWidget::populateCloud(pcl::PointCloud <pcl::PointXYZRGBA>::Ptr cloud)
    {
      if(!_viewer->updatePointCloud(cloud, "cloud")) {
        _viewer->addPointCloud(cloud, "cloud");
      }
      _renderWindow->Render();
    }

这篇关于带有QTDesigner的QVTKOpenGLWidget和vtkGenericOpenGlRenderWindow的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆