Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 #pragma once
00040 #include <vtkSmartPointer.h>
00041 #include <vtkPoints.h>
00042 #include <vtkPolygon.h>
00043 #include <vtkUnstructuredGrid.h>
00044 
00046 template <typename PointT> vtkSmartPointer<vtkDataSet> 
00047 pcl::visualization::createPolygon (const typename pcl::PointCloud<PointT>::ConstPtr &cloud)
00048 {
00049   vtkSmartPointer<vtkUnstructuredGrid> poly_grid;
00050   if (cloud->points.empty ())
00051     return (poly_grid);
00052 
00053   vtkSmartPointer<vtkPoints> poly_points = vtkSmartPointer<vtkPoints>::New ();
00054   vtkSmartPointer<vtkPolygon> polygon    = vtkSmartPointer<vtkPolygon>::New ();
00055 
00056   poly_points->SetNumberOfPoints (cloud->points.size ());
00057   polygon->GetPointIds ()->SetNumberOfIds (cloud->points.size ());
00058 
00059   size_t i;
00060   for (i = 0; i < cloud->points.size (); ++i)
00061   {
00062     poly_points->SetPoint (i, cloud->points[i].x, cloud->points[i].y, cloud->points[i].z);
00063     polygon->GetPointIds ()->SetId (i, i);
00064   }
00065 
00066   allocVtkUnstructuredGrid (poly_grid);
00067   poly_grid->Allocate (1, 1);
00068   poly_grid->InsertNextCell (polygon->GetCellType (), polygon->GetPointIds ());
00069   poly_grid->SetPoints (poly_points);
00070   poly_grid->Update ();
00071 
00072   return (poly_grid);
00073 }
00074 
00076 template <typename PointT> vtkSmartPointer<vtkDataSet> 
00077 pcl::visualization::createPolygon (const pcl::PlanarPolygon<PointT> &planar_polygon)
00078 {
00079   vtkSmartPointer<vtkUnstructuredGrid> poly_grid;
00080   if (planar_polygon.getContour ().empty ())
00081     return (poly_grid);
00082 
00083   vtkSmartPointer<vtkPoints> poly_points = vtkSmartPointer<vtkPoints>::New ();
00084   vtkSmartPointer<vtkPolygon> polygon    = vtkSmartPointer<vtkPolygon>::New ();
00085 
00086   poly_points->SetNumberOfPoints (planar_polygon.getContour ().size () + 1);
00087   polygon->GetPointIds ()->SetNumberOfIds (planar_polygon.getContour ().size () + 1);
00088 
00089   size_t i;
00090   for (i = 0; i < planar_polygon.getContour ().size (); ++i)
00091   {
00092     poly_points->SetPoint (i, planar_polygon.getContour ()[i].x, 
00093                               planar_polygon.getContour ()[i].y, 
00094                               planar_polygon.getContour ()[i].z);
00095     polygon->GetPointIds ()->SetId (i, i);
00096   }
00097 
00098   poly_points->SetPoint (i, planar_polygon.getContour ()[0].x, 
00099                             planar_polygon.getContour ()[0].y, 
00100                             planar_polygon.getContour ()[0].z);
00101   polygon->GetPointIds ()->SetId (i, i);
00102   
00103   allocVtkUnstructuredGrid (poly_grid);
00104   poly_grid->Allocate (1, 1);
00105   poly_grid->InsertNextCell (polygon->GetCellType (), polygon->GetPointIds ());
00106   poly_grid->SetPoints (poly_points);
00107   poly_grid->Update ();
00108 
00109   return (poly_grid);
00110 }
00111