|
Point Cloud Library (PCL)
1.5.1
|
00001 /* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Point Cloud Library (PCL) - www.pointclouds.org 00005 * Copyright (c) 2010-2011, Willow Garage, Inc. 00006 * 00007 * All rights reserved. 00008 * 00009 * Redistribution and use in source and binary forms, with or without 00010 * modification, are permitted provided that the following conditions 00011 * are met: 00012 * 00013 * * Redistributions of source code must retain the above copyright 00014 * notice, this list of conditions and the following disclaimer. 00015 * * Redistributions in binary form must reproduce the above 00016 * copyright notice, this list of conditions and the following 00017 * disclaimer in the documentation and/or other materials provided 00018 * with the distribution. 00019 * * Neither the name of Willow Garage, Inc. nor the names of its 00020 * contributors may be used to endorse or promote products derived 00021 * from this software without specific prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00026 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00027 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00028 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00029 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00030 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00031 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00032 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00033 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00034 * POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 * $Id: point_cloud_handlers.h 4702 2012-02-23 09:39:33Z gedikli $ 00037 * 00038 */ 00039 #ifndef PCL_POINT_CLOUD_HANDLERS_H_ 00040 #define PCL_POINT_CLOUD_HANDLERS_H_ 00041 00042 #include <pcl/visualization/common/common.h> 00043 // PCL includes 00044 #include <pcl/point_types.h> 00045 #include <pcl/point_cloud.h> 00046 #include <pcl/common/io.h> 00047 // VTK includes 00048 #include <vtkSmartPointer.h> 00049 #include <vtkDataArray.h> 00050 #include <vtkUnsignedCharArray.h> 00051 #include <vtkFloatArray.h> 00052 #include <vtkPoints.h> 00053 00054 namespace pcl 00055 { 00056 namespace visualization 00057 { 00061 template <typename PointT> 00062 class PointCloudGeometryHandler 00063 { 00064 public: 00065 typedef pcl::PointCloud<PointT> PointCloud; 00066 typedef typename PointCloud::Ptr PointCloudPtr; 00067 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00068 00069 typedef typename boost::shared_ptr<PointCloudGeometryHandler<PointT> > Ptr; 00070 typedef typename boost::shared_ptr<const PointCloudGeometryHandler<PointT> > ConstPtr; 00071 00073 PointCloudGeometryHandler (const PointCloudConstPtr &cloud) : 00074 cloud_ (cloud), capable_ (false) 00075 {} 00076 00080 virtual std::string 00081 getName () const = 0; 00082 00084 virtual std::string 00085 getFieldName () const = 0; 00086 00088 inline bool 00089 isCapable () const { return (capable_); } 00090 00094 virtual void 00095 getGeometry (vtkSmartPointer<vtkPoints> &points) const = 0; 00096 00097 protected: 00099 PointCloudConstPtr cloud_; 00100 00104 bool capable_; 00105 00107 int field_x_idx_; 00108 00110 int field_y_idx_; 00111 00113 int field_z_idx_; 00114 00116 std::vector<sensor_msgs::PointField> fields_; 00117 }; 00118 00120 00124 template <typename PointT> 00125 class PointCloudGeometryHandlerXYZ : public PointCloudGeometryHandler<PointT> 00126 { 00127 public: 00128 typedef typename PointCloudGeometryHandler<PointT>::PointCloud PointCloud; 00129 typedef typename PointCloud::Ptr PointCloudPtr; 00130 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00131 00132 typedef typename boost::shared_ptr<PointCloudGeometryHandlerXYZ<PointT> > Ptr; 00133 typedef typename boost::shared_ptr<const PointCloudGeometryHandlerXYZ<PointT> > ConstPtr; 00134 00136 PointCloudGeometryHandlerXYZ (const PointCloudConstPtr &cloud); 00137 00139 virtual inline std::string 00140 getName () const { return ("PointCloudGeometryHandlerXYZ"); } 00141 00143 virtual std::string 00144 getFieldName () const { return ("xyz"); } 00145 00149 virtual void 00150 getGeometry (vtkSmartPointer<vtkPoints> &points) const; 00151 00152 private: 00153 // Members derived from the base class 00154 using PointCloudGeometryHandler<PointT>::cloud_; 00155 using PointCloudGeometryHandler<PointT>::capable_; 00156 using PointCloudGeometryHandler<PointT>::field_x_idx_; 00157 using PointCloudGeometryHandler<PointT>::field_y_idx_; 00158 using PointCloudGeometryHandler<PointT>::field_z_idx_; 00159 using PointCloudGeometryHandler<PointT>::fields_; 00160 }; 00161 00163 00168 template <typename PointT> 00169 class PointCloudGeometryHandlerSurfaceNormal : public PointCloudGeometryHandler<PointT> 00170 { 00171 public: 00172 typedef typename PointCloudGeometryHandler<PointT>::PointCloud PointCloud; 00173 typedef typename PointCloud::Ptr PointCloudPtr; 00174 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00175 00176 typedef typename boost::shared_ptr<PointCloudGeometryHandlerSurfaceNormal<PointT> > Ptr; 00177 typedef typename boost::shared_ptr<const PointCloudGeometryHandlerSurfaceNormal<PointT> > ConstPtr; 00178 00180 PointCloudGeometryHandlerSurfaceNormal (const PointCloudConstPtr &cloud); 00181 00183 virtual inline std::string 00184 getName () const { return ("PointCloudGeometryHandlerSurfaceNormal"); } 00185 00187 virtual std::string 00188 getFieldName () const { return ("normal_xyz"); } 00189 00193 virtual void 00194 getGeometry (vtkSmartPointer<vtkPoints> &points) const; 00195 00196 private: 00197 // Members derived from the base class 00198 using PointCloudGeometryHandler<PointT>::cloud_; 00199 using PointCloudGeometryHandler<PointT>::capable_; 00200 using PointCloudGeometryHandler<PointT>::field_x_idx_; 00201 using PointCloudGeometryHandler<PointT>::field_y_idx_; 00202 using PointCloudGeometryHandler<PointT>::field_z_idx_; 00203 using PointCloudGeometryHandler<PointT>::fields_; 00204 }; 00205 00207 00212 template <typename PointT> 00213 class PointCloudGeometryHandlerCustom : public PointCloudGeometryHandler<PointT> 00214 { 00215 public: 00216 typedef typename PointCloudGeometryHandler<PointT>::PointCloud PointCloud; 00217 typedef typename PointCloud::Ptr PointCloudPtr; 00218 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00219 00220 typedef typename boost::shared_ptr<PointCloudGeometryHandlerCustom<PointT> > Ptr; 00221 typedef typename boost::shared_ptr<const PointCloudGeometryHandlerCustom<PointT> > ConstPtr; 00222 00224 PointCloudGeometryHandlerCustom (const PointCloudConstPtr &cloud, 00225 const std::string &x_field_name, 00226 const std::string &y_field_name, 00227 const std::string &z_field_name); 00228 00230 virtual inline std::string 00231 getName () const { return ("PointCloudGeometryHandlerCustom"); } 00232 00234 virtual std::string 00235 getFieldName () const { return (field_name_); } 00236 00240 virtual void 00241 getGeometry (vtkSmartPointer<vtkPoints> &points) const; 00242 00243 private: 00244 // Members derived from the base class 00245 using PointCloudGeometryHandler<PointT>::cloud_; 00246 using PointCloudGeometryHandler<PointT>::capable_; 00247 using PointCloudGeometryHandler<PointT>::field_x_idx_; 00248 using PointCloudGeometryHandler<PointT>::field_y_idx_; 00249 using PointCloudGeometryHandler<PointT>::field_z_idx_; 00250 using PointCloudGeometryHandler<PointT>::fields_; 00251 00253 std::string field_name_; 00254 }; 00255 00257 00260 template <> 00261 class PCL_EXPORTS PointCloudGeometryHandler<sensor_msgs::PointCloud2> 00262 { 00263 public: 00264 typedef sensor_msgs::PointCloud2 PointCloud; 00265 typedef PointCloud::Ptr PointCloudPtr; 00266 typedef PointCloud::ConstPtr PointCloudConstPtr; 00267 00268 typedef boost::shared_ptr<PointCloudGeometryHandler<PointCloud> > Ptr; 00269 typedef boost::shared_ptr<const PointCloudGeometryHandler<PointCloud> > ConstPtr; 00270 00272 PointCloudGeometryHandler (const PointCloudConstPtr &cloud, const Eigen::Vector4f &sensor_origin = Eigen::Vector4f::Zero ()) 00273 : cloud_ (cloud) 00274 , capable_ (false) 00275 { 00276 fields_ = cloud_->fields; 00277 } 00278 00280 virtual std::string 00281 getName () const = 0; 00282 00284 virtual std::string 00285 getFieldName () const = 0; 00286 00288 inline bool 00289 isCapable () const { return (capable_); } 00290 00294 virtual void 00295 getGeometry (vtkSmartPointer<vtkPoints> &points) const; 00296 00297 protected: 00299 PointCloudConstPtr cloud_; 00300 00304 bool capable_; 00305 00307 int field_x_idx_; 00308 00310 int field_y_idx_; 00311 00313 int field_z_idx_; 00314 00316 std::vector<sensor_msgs::PointField> fields_; 00317 }; 00318 00320 00324 template <> 00325 class PCL_EXPORTS PointCloudGeometryHandlerXYZ<sensor_msgs::PointCloud2> : public PointCloudGeometryHandler<sensor_msgs::PointCloud2> 00326 { 00327 public: 00328 typedef PointCloudGeometryHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00329 typedef PointCloud::Ptr PointCloudPtr; 00330 typedef PointCloud::ConstPtr PointCloudConstPtr; 00331 00332 typedef boost::shared_ptr<PointCloudGeometryHandlerXYZ<PointCloud> > Ptr; 00333 typedef boost::shared_ptr<const PointCloudGeometryHandlerXYZ<PointCloud> > ConstPtr; 00334 00336 PointCloudGeometryHandlerXYZ (const PointCloudConstPtr &cloud); 00337 00339 virtual inline 00340 std::string getName () const { return ("PointCloudGeometryHandlerXYZ"); } 00341 00343 virtual std::string 00344 getFieldName () const { return ("xyz"); } 00345 }; 00346 00348 00353 template <> 00354 class PCL_EXPORTS PointCloudGeometryHandlerSurfaceNormal<sensor_msgs::PointCloud2> : public PointCloudGeometryHandler<sensor_msgs::PointCloud2> 00355 { 00356 public: 00357 typedef PointCloudGeometryHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00358 typedef PointCloud::Ptr PointCloudPtr; 00359 typedef PointCloud::ConstPtr PointCloudConstPtr; 00360 00361 typedef boost::shared_ptr<PointCloudGeometryHandlerSurfaceNormal<PointCloud> > Ptr; 00362 typedef boost::shared_ptr<const PointCloudGeometryHandlerSurfaceNormal<PointCloud> > ConstPtr; 00363 00365 PointCloudGeometryHandlerSurfaceNormal (const PointCloudConstPtr &cloud); 00366 00368 virtual inline std::string 00369 getName () const { return ("PointCloudGeometryHandlerSurfaceNormal"); } 00370 00372 virtual std::string 00373 getFieldName () const { return ("normal_xyz"); } 00374 }; 00375 00377 00382 template <> 00383 class PCL_EXPORTS PointCloudGeometryHandlerCustom<sensor_msgs::PointCloud2> : public PointCloudGeometryHandler<sensor_msgs::PointCloud2> 00384 { 00385 public: 00386 typedef PointCloudGeometryHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00387 typedef PointCloud::Ptr PointCloudPtr; 00388 typedef PointCloud::ConstPtr PointCloudConstPtr; 00389 00391 PointCloudGeometryHandlerCustom (const PointCloudConstPtr &cloud, 00392 const std::string &x_field_name, 00393 const std::string &y_field_name, 00394 const std::string &z_field_name); 00395 00397 virtual inline std::string 00398 getName () const { return ("PointCloudGeometryHandlerCustom"); } 00399 00401 virtual std::string 00402 getFieldName () const { return (field_name_); } 00403 00404 private: 00406 std::string field_name_; 00407 }; 00408 00410 00413 template <typename PointT> 00414 class PointCloudColorHandler 00415 { 00416 public: 00417 typedef pcl::PointCloud<PointT> PointCloud; 00418 typedef typename PointCloud::Ptr PointCloudPtr; 00419 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00420 00421 typedef boost::shared_ptr<PointCloudColorHandler<PointT> > Ptr; 00422 typedef boost::shared_ptr<const PointCloudColorHandler<PointT> > ConstPtr; 00423 00425 PointCloudColorHandler (const PointCloudConstPtr &cloud) : 00426 cloud_ (cloud), capable_ (false) 00427 {} 00428 00430 inline bool 00431 isCapable () const { return (capable_); } 00432 00434 virtual std::string 00435 getName () const = 0; 00436 00438 virtual std::string 00439 getFieldName () const = 0; 00440 00444 virtual void 00445 getColor (vtkSmartPointer<vtkDataArray> &scalars) const = 0; 00446 00447 protected: 00449 PointCloudConstPtr cloud_; 00450 00454 bool capable_; 00455 00457 int field_idx_; 00458 00460 std::vector<sensor_msgs::PointField> fields_; 00461 }; 00462 00464 00467 template <typename PointT> 00468 class PointCloudColorHandlerRandom : public PointCloudColorHandler<PointT> 00469 { 00470 typedef typename PointCloudColorHandler<PointT>::PointCloud PointCloud; 00471 typedef typename PointCloud::Ptr PointCloudPtr; 00472 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00473 00474 public: 00475 typedef boost::shared_ptr<PointCloudColorHandlerRandom<PointT> > Ptr; 00476 typedef boost::shared_ptr<const PointCloudColorHandlerRandom<PointT> > ConstPtr; 00477 00479 PointCloudColorHandlerRandom (const PointCloudConstPtr &cloud) : 00480 PointCloudColorHandler<PointT> (cloud) 00481 { 00482 capable_ = true; 00483 } 00484 00486 virtual inline std::string 00487 getName () const { return ("PointCloudColorHandlerRandom"); } 00488 00490 virtual std::string 00491 getFieldName () const { return ("[random]"); } 00492 00496 virtual void 00497 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00498 00499 protected: 00500 // Members derived from the base class 00501 using PointCloudColorHandler<PointT>::cloud_; 00502 using PointCloudColorHandler<PointT>::capable_; 00503 }; 00504 00506 00510 template <typename PointT> 00511 class PointCloudColorHandlerCustom : public PointCloudColorHandler<PointT> 00512 { 00513 typedef typename PointCloudColorHandler<PointT>::PointCloud PointCloud; 00514 typedef typename PointCloud::Ptr PointCloudPtr; 00515 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00516 00517 public: 00518 typedef boost::shared_ptr<PointCloudColorHandlerCustom<PointT> > Ptr; 00519 typedef boost::shared_ptr<const PointCloudColorHandlerCustom<PointT> > ConstPtr; 00520 00522 PointCloudColorHandlerCustom (const PointCloudConstPtr &cloud, 00523 double r, double g, double b) 00524 : PointCloudColorHandler<PointT> (cloud) 00525 { 00526 capable_ = true; 00527 r_ = r; 00528 g_ = g; 00529 b_ = b; 00530 } 00531 00533 virtual inline std::string 00534 getName () const { return ("PointCloudColorHandlerCustom"); } 00535 00537 virtual std::string 00538 getFieldName () const { return (""); } 00539 00543 virtual void 00544 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00545 00546 protected: 00547 // Members derived from the base class 00548 using PointCloudColorHandler<PointT>::cloud_; 00549 using PointCloudColorHandler<PointT>::capable_; 00550 00552 double r_, g_, b_; 00553 }; 00554 00556 00560 template <typename PointT> 00561 class PointCloudColorHandlerRGBField : public PointCloudColorHandler<PointT> 00562 { 00563 typedef typename PointCloudColorHandler<PointT>::PointCloud PointCloud; 00564 typedef typename PointCloud::Ptr PointCloudPtr; 00565 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00566 00567 public: 00568 typedef boost::shared_ptr<PointCloudColorHandlerRGBField<PointT> > Ptr; 00569 typedef boost::shared_ptr<const PointCloudColorHandlerRGBField<PointT> > ConstPtr; 00570 00572 PointCloudColorHandlerRGBField (const PointCloudConstPtr &cloud); 00573 00575 virtual std::string 00576 getFieldName () const { return ("rgb"); } 00577 00581 virtual void 00582 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00583 00584 protected: 00586 virtual inline std::string 00587 getName () const { return ("PointCloudColorHandlerRGBField"); } 00588 00589 private: 00590 // Members derived from the base class 00591 using PointCloudColorHandler<PointT>::cloud_; 00592 using PointCloudColorHandler<PointT>::capable_; 00593 using PointCloudColorHandler<PointT>::field_idx_; 00594 using PointCloudColorHandler<PointT>::fields_; 00595 }; 00596 00598 00602 template <typename PointT> 00603 class PointCloudColorHandlerHSVField : public PointCloudColorHandler<PointT> 00604 { 00605 typedef typename PointCloudColorHandler<PointT>::PointCloud PointCloud; 00606 typedef typename PointCloud::Ptr PointCloudPtr; 00607 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00608 00609 public: 00610 typedef boost::shared_ptr<PointCloudColorHandlerHSVField<PointT> > Ptr; 00611 typedef boost::shared_ptr<const PointCloudColorHandlerHSVField<PointT> > ConstPtr; 00612 00614 PointCloudColorHandlerHSVField (const PointCloudConstPtr &cloud); 00615 00617 virtual std::string 00618 getFieldName () const { return ("hsv"); } 00619 00623 virtual void 00624 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00625 00626 protected: 00628 virtual inline std::string 00629 getName () const { return ("PointCloudColorHandlerHSVField"); } 00630 00632 int s_field_idx_; 00633 00635 int v_field_idx_; 00636 private: 00637 // Members derived from the base class 00638 using PointCloudColorHandler<PointT>::cloud_; 00639 using PointCloudColorHandler<PointT>::capable_; 00640 using PointCloudColorHandler<PointT>::field_idx_; 00641 using PointCloudColorHandler<PointT>::fields_; 00642 }; 00643 00645 00649 template <typename PointT> 00650 class PointCloudColorHandlerGenericField : public PointCloudColorHandler<PointT> 00651 { 00652 typedef typename PointCloudColorHandler<PointT>::PointCloud PointCloud; 00653 typedef typename PointCloud::Ptr PointCloudPtr; 00654 typedef typename PointCloud::ConstPtr PointCloudConstPtr; 00655 00656 public: 00657 typedef boost::shared_ptr<PointCloudColorHandlerGenericField<PointT> > Ptr; 00658 typedef boost::shared_ptr<const PointCloudColorHandlerGenericField<PointT> > ConstPtr; 00659 00661 PointCloudColorHandlerGenericField (const PointCloudConstPtr &cloud, 00662 const std::string &field_name); 00663 00665 virtual std::string getFieldName () const { return (field_name_); } 00666 00670 virtual void 00671 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00672 00673 protected: 00675 virtual inline std::string 00676 getName () const { return ("PointCloudColorHandlerGenericField"); } 00677 00678 private: 00679 using PointCloudColorHandler<PointT>::cloud_; 00680 using PointCloudColorHandler<PointT>::capable_; 00681 using PointCloudColorHandler<PointT>::field_idx_; 00682 using PointCloudColorHandler<PointT>::fields_; 00683 00685 std::string field_name_; 00686 }; 00687 00689 00692 template <> 00693 class PCL_EXPORTS PointCloudColorHandler<sensor_msgs::PointCloud2> 00694 { 00695 public: 00696 typedef sensor_msgs::PointCloud2 PointCloud; 00697 typedef PointCloud::Ptr PointCloudPtr; 00698 typedef PointCloud::ConstPtr PointCloudConstPtr; 00699 00700 typedef boost::shared_ptr<PointCloudColorHandler<PointCloud> > Ptr; 00701 typedef boost::shared_ptr<const PointCloudColorHandler<PointCloud> > ConstPtr; 00702 00704 PointCloudColorHandler (const PointCloudConstPtr &cloud) : 00705 cloud_ (cloud), capable_ (false) 00706 {} 00707 00709 inline bool 00710 isCapable () const { return (capable_); } 00711 00713 virtual std::string 00714 getName () const = 0; 00715 00717 virtual std::string 00718 getFieldName () const = 0; 00719 00723 virtual void 00724 getColor (vtkSmartPointer<vtkDataArray> &scalars) const = 0; 00725 00726 protected: 00728 PointCloudConstPtr cloud_; 00729 00733 bool capable_; 00734 00736 int field_idx_; 00737 }; 00738 00740 00743 template <> 00744 class PCL_EXPORTS PointCloudColorHandlerRandom<sensor_msgs::PointCloud2> : public PointCloudColorHandler<sensor_msgs::PointCloud2> 00745 { 00746 typedef PointCloudColorHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00747 typedef PointCloud::Ptr PointCloudPtr; 00748 typedef PointCloud::ConstPtr PointCloudConstPtr; 00749 00750 public: 00751 typedef boost::shared_ptr<PointCloudColorHandlerRandom<PointCloud> > Ptr; 00752 typedef boost::shared_ptr<const PointCloudColorHandlerRandom<PointCloud> > ConstPtr; 00753 00755 PointCloudColorHandlerRandom (const PointCloudConstPtr &cloud) : 00756 PointCloudColorHandler<sensor_msgs::PointCloud2> (cloud) 00757 { 00758 capable_ = true; 00759 } 00760 00762 virtual inline std::string 00763 getName () const { return ("PointCloudColorHandlerRandom"); } 00764 00766 virtual std::string 00767 getFieldName () const { return ("[random]"); } 00768 00772 virtual void 00773 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00774 }; 00775 00777 00781 template <> 00782 class PCL_EXPORTS PointCloudColorHandlerCustom<sensor_msgs::PointCloud2> : public PointCloudColorHandler<sensor_msgs::PointCloud2> 00783 { 00784 typedef PointCloudColorHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00785 typedef PointCloud::Ptr PointCloudPtr; 00786 typedef PointCloud::ConstPtr PointCloudConstPtr; 00787 00788 public: 00790 PointCloudColorHandlerCustom (const PointCloudConstPtr &cloud, 00791 double r, double g, double b) : 00792 PointCloudColorHandler<sensor_msgs::PointCloud2> (cloud) 00793 { 00794 capable_ = true; 00795 r_ = r; 00796 g_ = g; 00797 b_ = b; 00798 } 00799 00801 virtual inline std::string 00802 getName () const { return ("PointCloudColorHandlerCustom"); } 00803 00805 virtual std::string 00806 getFieldName () const { return (""); } 00807 00811 virtual void 00812 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00813 00814 protected: 00816 double r_, g_, b_; 00817 }; 00818 00820 00824 template <> 00825 class PCL_EXPORTS PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2> : public PointCloudColorHandler<sensor_msgs::PointCloud2> 00826 { 00827 typedef PointCloudColorHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00828 typedef PointCloud::Ptr PointCloudPtr; 00829 typedef PointCloud::ConstPtr PointCloudConstPtr; 00830 00831 public: 00832 typedef boost::shared_ptr<PointCloudColorHandlerRGBField<PointCloud> > Ptr; 00833 typedef boost::shared_ptr<const PointCloudColorHandlerRGBField<PointCloud> > ConstPtr; 00834 00836 PointCloudColorHandlerRGBField (const PointCloudConstPtr &cloud); 00837 00841 virtual void 00842 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00843 00844 protected: 00846 virtual inline std::string 00847 getName () const { return ("PointCloudColorHandlerRGBField"); } 00848 00850 virtual std::string 00851 getFieldName () const { return ("rgb"); } 00852 }; 00853 00855 00859 template <> 00860 class PCL_EXPORTS PointCloudColorHandlerHSVField<sensor_msgs::PointCloud2> : public PointCloudColorHandler<sensor_msgs::PointCloud2> 00861 { 00862 typedef PointCloudColorHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00863 typedef PointCloud::Ptr PointCloudPtr; 00864 typedef PointCloud::ConstPtr PointCloudConstPtr; 00865 00866 public: 00867 typedef boost::shared_ptr<PointCloudColorHandlerHSVField<PointCloud> > Ptr; 00868 typedef boost::shared_ptr<const PointCloudColorHandlerHSVField<PointCloud> > ConstPtr; 00869 00871 PointCloudColorHandlerHSVField (const PointCloudConstPtr &cloud); 00872 00876 virtual void 00877 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00878 00879 protected: 00881 virtual inline std::string 00882 getName () const { return ("PointCloudColorHandlerHSVField"); } 00883 00885 virtual std::string 00886 getFieldName () const { return ("hsv"); } 00887 00889 int s_field_idx_; 00890 00892 int v_field_idx_; 00893 }; 00894 00896 00900 template <> 00901 class PCL_EXPORTS PointCloudColorHandlerGenericField<sensor_msgs::PointCloud2> : public PointCloudColorHandler<sensor_msgs::PointCloud2> 00902 { 00903 typedef PointCloudColorHandler<sensor_msgs::PointCloud2>::PointCloud PointCloud; 00904 typedef PointCloud::Ptr PointCloudPtr; 00905 typedef PointCloud::ConstPtr PointCloudConstPtr; 00906 00907 public: 00908 typedef boost::shared_ptr<PointCloudColorHandlerGenericField<PointCloud> > Ptr; 00909 typedef boost::shared_ptr<const PointCloudColorHandlerGenericField<PointCloud> > ConstPtr; 00910 00912 PointCloudColorHandlerGenericField (const PointCloudConstPtr &cloud, 00913 const std::string &field_name); 00914 00918 virtual void 00919 getColor (vtkSmartPointer<vtkDataArray> &scalars) const; 00920 00921 protected: 00923 virtual inline std::string 00924 getName () const { return ("PointCloudColorHandlerGenericField"); } 00925 00927 virtual std::string 00928 getFieldName () const { return (field_name_); } 00929 00930 private: 00932 std::string field_name_; 00933 }; 00934 00935 } 00936 } 00937 00938 #include "pcl/visualization/impl/point_cloud_handlers.hpp" 00939 00940 #endif
1.8.0