(一)资源准备
(1)CloudCompare2.11.0源码
源码下载地址:https://github.com/CloudCompare/CloudCompare/releases
(2)PDAL或者laslib
使得CC支持读写LAS格式的点云文件,如果没有PDAL也可以选择编译Laslib,后者支持Las1.3和Las1.4格式。
(3)PCL-1.9.1
使得CC支持读写pcd格式的点云文件,也方便在后续二次开发过程中调用PCL库。
(二)CMake配置
(1)设置路径
CC源码资源路径:E:/ccProject/CloudCompare-2.11.0-master
CC项目生成路径:E:/ccProject/CC-Build
(2)点击左下角Configure按钮,配置编译环境
开发环境:VS2017
开发平台:x64
点击Finish按钮,如果没问题的话,CMake控制台最后显示“Configuring done”。
(3)设置相关项目的Value值
1)Qt5路径设置
Ungrouped Entries >>> QT5_ROOT_PATH >>> C:/OSGeo4W64/apps/Qt5
2)安装PDAL和PCL插件
(勾选)PLUGIN >>> PLUGIN_IO_PDAL 将PDAL以插件的形式安装。
(勾选)PLUGIN >>> PLUGIN_STANDARD_QPCL将PCL库以插件的形式安装。
如果你不用PDAL而选择laslib库来读写点云,则勾选 PLUGIN >>> PLUGIN_IO_QLAS_FWF
3)多线程OpenMP
OPTION >>> OPTION_OPENMP_BUILD(勾选)支持多线程构建。
此时,点击“Configure”按钮再次进行配置,系统会自动搜索到与PCL库关联的文件路径(Boost、FLANN、OPENNI2、PCL、QHULL),但仍然会提示缺少PDAL库。
4)PDAL路径设置
Ungrouped Entries >>> PDAL_DIR>>> C:/OSGeo4W64/lib/pdal/cmake
此时,再次点击“Configure”按钮进行配置,不出意外控制台显示“Configuring done”,表示配置成功。
5)CMake配置构建类型
CMake >>> CMAKE_CONFIGURATION_TYPES >>> Release
把“Debug”和“RelWithDebInfo ”这两个类型删除,保留Release,这样做的目的在于可以极大缩短CC编译时间!
最终各项配置图如下:
(4)点击“Generator”按钮,生成解决方案(*.sln)
(三)VS2017编译CC源码
(1)解决方案配置设为“Release模式”——> 右击“ALL_BUILD”——>重新生成
(2)编译错误
编译QPDAL_IO_PLUGIN的时候发生错误,在LasFilter.cpp的canSave函数中(第152行)提示:“error C2666: operator == 12个重载有相似的转换”。
解决方法:考虑到“CC_CLASS_ENUM”的类型是“int64_t”,而“CC_TYPES::POINT_CLOUD”是普通枚举类型,所以需要对后者进行数据类型转换,使两者类型一致即可。因为枚举类型本质上也是整型!!!
(3)设置相关动态链接库
将以下3个dll文件复制到CloudCompare.exe同级目录(项目生成目录\qCC\Release\)
CC项目生成目录\CC\Release\CC_CORE_LIB.dll
CC项目生成目录\libs\qCC_io\Release\QCC_IO_LIB.dll
CC项目生成目录\libs\qCC_db\Release\QCC_DB_LIB.dll
将以下3个文件夹复制到CloudCompare.exe同级目录
Qt5安装目录\plugins\imageformats
Qt5安装目录\plugins\platforms
Qt5安装目录\plugins\sqldrivers
在CloudCompare.exe同级目录下新建一个名为“plugins”的文件夹(必须这样命名),并将以下3个dll文件复制到plugins文件夹内
CC项目生成目录\plugins\core\Standard\qPCL\Release\QPCL_PLUGIN.dll
CC项目生成目录\plugins\core\Standard\qPCL\PclIO\Release\QPCL_IO_PLUGIN.dll
CC项目生成目录\plugins\core\IO\qPDALIO\Release\QPDAL_IO_PLUGIN.dll
将“CloudCompare”设为启动项,F5运行。
下图是CC中的插件管理模块窗口,不难发现,CC会从多个指定路径下寻找插件,如果插件被识别到,会在左边列表中显示。
(4)遇到的问题
即使编译了PDAL库,还是不能加载las数据。
在控制台日志中发现CC无法识别PDAL插件,提示“QPDAL_IO_PLUGIN.dll does not seem to be a valid plugin”
解决方法:将pdal_util.dll和pdalcpp.dll所在的文件夹路径添加到计算机的系统变量Path中去,然后重启计算机即可。
运行后终于可以加载LAS和pcd格式的点云了!
后续本人在编译CC-2.11.3版本时发现按照上述流程编译出来的CC仍然无法识别LAS格式的点云。经过一番研究之后才发现在CMake的时候必须勾选GDAL选项,然后把GDAL的动态链接库gdal203.dll(一定要是203版本的!!!)复制到CloudCompare.exe的同级目录下,其他步骤均同上不变。