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