Визуализация PCL в Qt с использованием QVTK

Я новичок в программировании Qt, и я пытаюсь визуализировать облако точек из PCL внутри виджета Qt. Я пытался использовать этот подход: https://stackoverflow.com/a/11939703/2339680 или (аналогично) : http://www.pcl-users.org/QT-PCLVisualizer-mostly-working-td3285187.html.

Я получаю ошибку компиляции: «invalid static_cast from type ‘vtkObjectBase* const’ to type ‘vtkRenderWindow*’» при попытке установить окно рендеринга в моем QVTKWidget.

Для справки я включил код из второго источника ниже, который воспроизводит ошибку.

#include <pcl/sample_consensus/sac_model_plane.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/common/common.h>
#include <QVTKWidget.h>

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  QVTKWidget widget;
  widget.resize(512, 256);

  //
  {
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz (new pcl::PointCloud<pcl::PointXYZ>);
    {

      for (float y = -0.5f; y <= 0.5f; y += 0.01f)
      {
        for (float z = -0.5f; z <= 0.5f; z += 0.01f)
        {
          pcl::PointXYZ point;
          point.x = 2.0f - y;
          point.y = y;
          point.z = z;
          cloud_xyz->points.push_back (point);
        }
      }
      cloud_xyz->width = cloud_xyz->points.size ();
      cloud_xyz->height = 1;

    }

    // this creates and displays a window named "test_viz"
    // upon calling PCLVisualizerInteractor interactor_->Initialize ();
    // how to disable that?
    pcl::visualization::PCLVisualizer pviz ("test_viz");

    pviz.addPointCloud<pcl::PointXYZ>(cloud_xyz);
    pviz.setBackgroundColor(0, 0, 0.1);

    vtkSmartPointer<vtkRenderWindow> renderWindow = pviz.getRenderWindow();
    widget.SetRenderWindow(renderWindow);
  }

  widget.show();
  app.exec();

  return EXIT_SUCCESS;
}

Ошибка возникает в строке

widget.SetRenderWindow(renderWindow);

Я использую Qt 4.8.0 и PCL 1.7.0. Кто-нибудь знает, можно ли это обойти?


person rasmusskov    schedule 04.12.2013    source источник
comment
Удалось ли вам отключить окно, созданное PCLVisualizer?   -  person Bull    schedule 19.07.2014


Ответы (1)


Вдохновленный https://stackoverflow.com/a/5808864/2339680, я предполагаю, что проблема в том, что vtkRenderWindow доступен только для компилятора в виде предварительного объявления. Если вы включите

#include "vtkRenderWindow.h"

в начале все должно компилироваться.

person Sigurd V    schedule 04.12.2013