QVTKOpenGLWidget и vtkGenericOpenGlRenderWindow с QTDesigner

Я пытаюсь использовать QVTKOpenGLWidget в QTDesigner с vtkGenericOpenGlRenderWindow но я получаю черное окно. Когда я использую PCLVizualizer библиотеки PointCloud (PCL) с vtkGenericOpenGlRenderWindowвсе работает нормально. Я пытаюсь создать пользовательский просмотрщик так же, как 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;
}

Спасибо

Редактировать :
Удаление «Интерактора» решило мою проблему.

0

Решение

Вам нужно будет получить мастер-версию формы PCL https://github.com/PointCloudLibrary/pcl. Это даст PCLVisualizer с большим количеством конструкторов. Итак, вы можете использовать пользовательский виджет, как это:

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();
}

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]