1. 程式人生 > >建立文件結構

建立文件結構

參考文獻 endif IT 濾波 temp color hit 包含 oval

博客轉載自:http://www.pclcn.org/study/shownews.php?lang=cn&id=246

有兩種不同的方法來建立結構:1)分別編寫代碼,作為獨立的PCL類,在PCL代碼樹之外;2)直接把文件建立在PCL代碼目錄樹裏面,我們來闡述後者的操作方式,因為後者是最終結果有利於PCL庫發展壯大,也是因為它有一點復雜(也就是,它包含幾個附加的步驟)。對於前者,你可以同樣操作,只是不需要你在PCL代碼目錄樹中建立對應的文件組織形式,也不需要了解cmake的使用。

假設我們想要新的算法成為PCL濾波庫的一部分,我們開始先在代碼樹目錄filters下新建三個不同的文件:

·include/pcl/filters/bilateral.h——包含所有的定義和聲明;

·include/pcl/filters/impl/bilateral.hpp——包含模板類的具體實現;

·src/bilateral.cpp——包含具體的不同點類型的模板類實例化。

我們需要給新的類命名,把它叫做BilateralFilter,PCL濾波器接口規定每個算法必須有兩個聲明和實現必須可供使用:一個操作PointCloud<T>,一個操作PointCloud2。本小節只講前者操作PointCloud<T>的實現。

bilateral.h

前面提到過,bilateral.h頭文件包含所有和BilateralFilter類相關的聲明,下面是最小的框架:

#ifndef PCL_FILTERS_BILATERAL_H_
#define PCL_FILTERS_BILATERAL_H_ #include <pcl/filters/filter.h> namespace pcl { template<typename PointT> class BilateralFilter:public Filter<PointT> { }; } #endif // PCL_FILTERS_BILATERAL_H_

bilateral.hpp

新建bilateral.hpp和bilateral.cpp兩個文件,首先是bilateral.hpp:

#ifndef PCL_FILTERS_BILATERAL_IMPL_H_
#define PCL_FILTERS_BILATERAL_IMPL_H_ #include <pcl/filters/bilateral.h> #endif // PCL_FILTERS_BILATERAL_H_

這個應該是明確的,還沒有給BilateralFilter聲明任何方法,因此它沒有任何具體實現。

bilateral.cpp

再編寫bilateral.cpp文件:

#include <pcl/filters/bilateral.h>
#include <pcl/filters/impl/bilateral.hpp>

因為在PCL(1.X)中編寫模板代碼,這裏模板參數是點的類型,我們要顯式地在bilateral.cpp中說明所有點類型對應模板類的定義,因此用戶在使用我們定義的BilateralFilter編譯代碼的時候不必花費額外的編譯時間。為此,我們需要添加include模板類實例化頭文件(bilateral.hpp)。

CMakeLists.txt

把所有新建的文件增加到PCL濾波器的CMakeLists.txt(在\PCL源碼根目錄\filters\下)文件中,就可以開始編譯鏈接過程,對於CMakeLists.txt的更改就完成了,剩下就是下面對類相關文件內容的填充了。

# Find "set (srcs", and add a new entry there, e.g.,
set (srcs
src/conditional_removal.cpp
      # ...
src/bilateral.cpp                                   //為該類而添加的語句
      )
 # Find "set (incs", and add a new entry there, e.g.,
set (incs
include pcl/${SUBSYS_NAME}/conditional_removal.h
      # ...
include pcl/${SUBSYS_NAME}/bilateral.h               //為該類而添加的語句
      )
 # Find "set (impl_incs", and add a new entry there, e.g.,
set (impl_incs
      include/pcl/${SUBSYS_NAME}/impl/conditional_removal.hpp
      # ...
      include/pcl/${SUBSYS_NAME}/impl/bilateral.hpp  //為該類而添加的語句

敬請關註PCL(Point Cloud Learning)中國更多的點雲庫PCL(Point Cloud Library)相關官方教程。

參考文獻:

1.朱德海、郭浩、蘇偉.點雲庫PCL學習教程(ISBN 978-7-5124-0954-5)北京航空航天出版社2012-10

建立文件結構