Example #1
0
void 
pcl::modeler::SceneTree::slotImportPointCloud()
{
  MainWindow* main_window = &MainWindow::getInstance();

  if (selectedRenderWindowItems().empty())
  {
    QMessageBox::warning(main_window, 
      tr("Failed to Import Point Cloud"), 
      tr("Please specify in which render window(s) you want to import the point cloud(s)"));
    return;
  }

  QStringList filenames = QFileDialog::getOpenFileNames(main_window,
    tr("Import Point Cloud"),
    main_window->getRecentFolder(),
    tr("Point Cloud(*.pcd)\n")
    );
  if (filenames.isEmpty())
    return;

  for (QStringList::const_iterator filenames_it = filenames.begin();
    filenames_it != filenames.end();
    ++ filenames_it)
  {
    if (!openPointCloud(*filenames_it))
      QMessageBox::warning(main_window, 
      tr("Failed to Import Point Cloud"), 
      tr("Can not import point cloud file %1, please check if it's in valid .pcd format!").arg(*filenames_it));
  }

  return;
}
Example #2
0
void 
pcl::modeler::SceneTree::slotOpenPointCloud()
{
  MainWindow* main_window = &MainWindow::getInstance();
  QList<RenderWindowItem*> selected_render_window_items = selectedRenderWindowItems();

  if (selected_render_window_items.empty())
  {
    QMessageBox::warning(main_window, 
    tr("Failed to Open Point Cloud"), 
    tr("Please specify in which render window(s) you want to open the point cloud(s)"));
    return;
  }

  QStringList filenames = QFileDialog::getOpenFileNames(main_window,
    tr("Open Point Cloud"),
    main_window->getRecentFolder(),
    tr("Point Cloud(*.pcd)\n")
    );

  if (filenames.isEmpty())
    return;

  for (QList<RenderWindowItem*>::iterator selected_render_window_items_it = selected_render_window_items.begin();
    selected_render_window_items_it != selected_render_window_items.end();
    ++ selected_render_window_items_it)
  {
    RenderWindowItem* render_window_item = *selected_render_window_items_it;

    QList<CloudMeshItem*> cloud_mesh_items;
    for (int i = 0, i_end = render_window_item->childCount(); i < i_end; ++ i)
      cloud_mesh_items.push_back(dynamic_cast<CloudMeshItem*>(render_window_item->child(i)));

    closePointCloud(cloud_mesh_items);
  }

  for (QStringList::const_iterator filenames_it = filenames.begin();
    filenames_it != filenames.end();
    ++ filenames_it)
  {
    if (!openPointCloud(*filenames_it))
      QMessageBox::warning(main_window, 
      tr("Failed to Open Point Cloud"), 
      tr("Can not open point cloud file %1, please check if it's in valid .pcd format!").arg(*filenames_it));
  }

  return;
}
Example #3
0
bool 
pcl::modeler::SceneTree::openPointCloud(const QString& filename)
{
  QList<RenderWindowItem*> selected_render_window_items = selectedRenderWindowItems();

  for (auto &selected_render_window_item : selected_render_window_items)
  {
    if(!selected_render_window_item->openPointCloud(filename))
      return (false);
    expandItem(selected_render_window_item);
  }

  emit fileOpened(filename);

  return (true);
}
Example #4
0
bool 
pcl::modeler::SceneTree::openPointCloud(const QString& filename)
{
  QList<RenderWindowItem*> selected_render_window_items = selectedRenderWindowItems();

  for (QList<RenderWindowItem*>::iterator selected_render_window_items_it = selected_render_window_items.begin();
    selected_render_window_items_it != selected_render_window_items.end();
    ++ selected_render_window_items_it)
  {
    if(!(*selected_render_window_items_it)->openPointCloud(filename))
      return (false);
    expandItem(*selected_render_window_items_it);
  }

  emit fileOpened(filename);

  return (true);
}
Example #5
0
void
pcl::modeler::SceneTree::slotICPRegistration()
{
  QList<CloudMeshItem*> selected_cloud_mesh_items = selectedTypeItems<CloudMeshItem>();
  CloudMesh::PointCloudPtr result(new CloudMesh::PointCloud());

  AbstractWorker* worker = new ICPRegistrationWorker(result, selected_cloud_mesh_items,&MainWindow::getInstance());
  ThreadController* thread_controller = new ThreadController();

  QList<RenderWindowItem*> selected_render_window_items = selectedRenderWindowItems();
  for (auto &selected_render_window_item : selected_render_window_items)
  {
    CloudMeshItem* cloud_mesh_item = selected_render_window_item->addPointCloud(result);
    expandItem(selected_render_window_item);
    connect(worker, SIGNAL(finished()), new CloudMeshItemUpdater(cloud_mesh_item), SLOT(updateCloudMeshItem()));
  }
  
  thread_controller->runWorker(worker);

  return;
}