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 #include <pcl/io/pcd_io.h>
00040 #include <pcl/io/vtk_io.h>
00041 #include <pcl/console/print.h>
00042 #include <pcl/console/parse.h>
00043 #include <pcl/console/time.h>
00044 
00045 using namespace pcl;
00046 using namespace pcl::io;
00047 using namespace pcl::console;
00048 
00049 void
00050 printHelp (int, char **argv)
00051 {
00052   print_error ("Syntax is: %s input.pcd output.vtk\n", argv[0]);
00053 }
00054 
00055 bool
00056 loadCloud (const std::string &filename, pcl::PCLPointCloud2 &cloud)
00057 {
00058   TicToc tt;
00059   print_highlight ("Loading "); print_value ("%s ", filename.c_str ());
00060 
00061   tt.tic ();
00062   if (loadPCDFile (filename, cloud) < 0)
00063     return (false);
00064   print_info ("[done, "); print_value ("%g", tt.toc ()); print_info (" ms : "); print_value ("%d", cloud.width * cloud.height); print_info (" points]\n");
00065   print_info ("Available dimensions: "); print_value ("%s\n", pcl::getFieldsList (cloud).c_str ());
00066 
00067   return (true);
00068 }
00069 
00070 void
00071 saveCloud (const std::string &filename, const pcl::PCLPointCloud2 &cloud)
00072 {
00073   TicToc tt;
00074   tt.tic ();
00075 
00076   print_highlight ("Saving "); print_value ("%s ", filename.c_str ());
00077   
00078   saveVTKFile (filename, cloud);
00079   
00080   print_info ("[done, "); print_value ("%g", tt.toc ()); print_info (" ms : "); print_value ("%d", cloud.width * cloud.height); print_info (" points]\n");
00081 }
00082 
00083 
00084 int
00085 main (int argc, char** argv)
00086 {
00087   print_info ("Convert a PCD file to VTK format. For more information, use: %s -h\n", argv[0]);
00088 
00089   if (argc < 3)
00090   {
00091     printHelp (argc, argv);
00092     return (-1);
00093   }
00094 
00095   
00096   std::vector<int> pcd_file_indices = parse_file_extension_argument (argc, argv, ".pcd");
00097   std::vector<int> vtk_file_indices = parse_file_extension_argument (argc, argv, ".vtk");
00098   if (pcd_file_indices.size () != 1 || vtk_file_indices.size () != 1)
00099   {
00100     print_error ("Need one input PCD file and one output VTK file.\n");
00101     return (-1);
00102   }
00103 
00104   
00105   pcl::PCLPointCloud2 cloud;
00106   if (!loadCloud (argv[pcd_file_indices[0]], cloud)) 
00107     return (-1);
00108 
00109   
00110   saveCloud (argv[vtk_file_indices[0]], cloud);
00111 
00112   return (0);
00113 }
00114