# CloudViewer
## 版本更新
#### V 1.0.1
1. 新增 `Save as binary` 功能。将点云保存为二进制文件,载入速度更加快。
2. 优化 `Console` 窗口。`Open` 和 `Add` 点云文件时,Console 窗口会显示载入点云所花的时间。
3. 优化 `文件对话框`。 `Open` 、 `Add` 和 `Save`点云文件时,会默认从上次目录打开,而不是 `V 1.0.0`中每次都从桌面目录打开。
## CloudViewer 简介
CloudViewer (点云可视化软件)是一款面向三维点云数据处理、点云开发专业人员及爱好者的三维点云可视化软件,该软件具备以下功能:
1. **点云 IO**。常见点云格式文件(如 ply, pcd 和 obj)的读取、保存、删除清空及可视化。
2. **点云的基本操作**。设置点云颜色,合并多个点云,点云格式转换等。
3. **可视化的基本操作**。设置视图窗口背景颜色,设置点云的可视化尺寸,设置坐标系的显示,设置视图方位(Main view, Left view, Top view),网格面片显示,网格线框显示等。
4. **模型生成**。生成简单立方排布的点云以及基本三维模型,该功能主要用于测试。
5. **软件界面基本功能**。软件由: [1] 菜单栏、[2] 工具栏、[3] 资源管理树、[4] 属性管理器、[5] 输出窗口、[6] 状态栏、[7] 视图窗口以及 [8] RGB 窗口组成。其中部分都是停靠窗口,可以在菜单栏的视图选项设置是否显示,方便用户自定义软件界面。软件还提供 Windows 和 Darcula 两大主题,其中 Darcula 主题为默认主题,仿照 Visual Studio 和 Android Studio 相应暗系主题设计,极具极客风范。不过为了适应大部分用户,本手册中的示例都是在 Windows 主题下操作的。
<img src="http://nightn.com/2017/04/15/cloudviewer/img/%E7%95%8C%E9%9D%A2%E4%BB%8B%E7%BB%8D%E5%B8%A6%E6%A0%87%E5%8F%B7.png" width="750"/>
## CloudViewer 下载及声明
1. **软件下载**:[CloudViewer 下载](http://on2kkr82s.bkt.clouddn.com/CloudViewer.zip) (软件大小 30 MB,目前仅支持 Windows 系统)。
2. Github 源码:https://github.com/nightn/CloudViewer (欢迎 Star 和 Fork)
3. 使用手册:http://nightn.com/2017/04/15/cloudviewer/
4. 开发环境:CloudViewer 是用 Windows 10 (64 位) 系统下的 Mircosoft Visual Studio Professional 2013,结合使用 Qt 5.7.0 (64 位) 及 PCL 1.8.0 (64 位) 等开源库进行开发的。
5. 资源使用:软件所使用的图片资源均来源于 [www.easyicon.net](http://www.easyicon.net)。
6. 声明:本软件用作分享与学习,若转载请注明出处,勿作任何商业用途。
## CloudViewer 使用
### 1. 点云 IO
点云 IO 操作主要包括 `Open`, `Add`, `Save`, `Clear` 和 `Change` 等。
#### 1.1 打开点云
**[重要说明] 点云存放路径不能有中文字符,否则点云不能正常打开!**
点云是由很多个具有三维坐标 x, y, z 的点组成的数据格式,除了位置信息外,点云还可以包含颜色信息(点云的 RGB 值)、透明信息、法线信息等。目前常用的点云格式有 pcd, ply 以及 obj 格式。打开这三种格式的点云主要通过 Qt 库的文件对话框和 PCL 库中载入点云数据的相关 API 实现。
点云 IO 的常用操作可以在 `File` 菜单及工具栏中找到:
<img src="http://nightn.com/2017/04/15/cloudviewer/img/File%20%E8%8F%9C%E5%8D%95%E5%92%8C%E5%B7%A5%E5%85%B7%E6%A0%8F.png" width="500"/>
打开动作 `Open` 的实现效果如下图,支持多选进行批量打开。
<img src="http://nightn.com/2017/04/15/cloudviewer/img/%E6%89%93%E5%BC%80%E7%82%B9%E4%BA%91NEW.png" width="650">
#### 1.2 添加点云
点云处理中,有时需要同时对多个点云在同一视图窗口进行可视化和处理。添加点云 `Add` 每次可以添加一个或多个点云文件,而不会清空后台已经缓存的点云数据,也不会清空视图窗口已经显示的点云模型。理论上,添加点云的数量没有限制。`Add` 实现效果如下图(为了便于区分,将点云设置成了不同颜色):
<img src="http://nightn.com/2017/04/15/cloudviewer/img/打开多个点云NEW.png" width="650"/>
#### 1.3 保存点云
保存点云 `Save` 有两个特点:
- **多类型保存**。`Open` 可以实现对 pcd, ply 和 obj 等格式文件的多类型打开,`Save` 也可以将文件保存成 pcd, ply 等多种类型,这样也就实现了点云的格式转换功能:
<img src="http://nightn.com/2017/04/15/cloudviewer/img/open_save.png" width="300"/>
- **多文件保存**。CloudViewer 还能将视图窗口显示的所有点云保存为同一个文件,实现了多文件的合并保存。
#### 1.4 清空点云
清空点云 `Clear` 可将视图窗口中的所有点云模型及后台缓存数据清空。
#### 1.5 点云格式转换
格式转换 `Change` 暂时未做实现。因为通过 `Open` 和 `Save` 就可以完成点云格式转换。
### 2. 点云基本操作
点云基本操作会直接影响点云文件的内容,基本功能包括**改变点云颜色**、**点云格式转换**、**点云合并**等。
#### 2.1 改变点云颜色
点云中的点不但具有三维信息(x, y, z 坐标),还具有颜色信息(R, G, B),为了更形象地描述点云模型,抑或是为了区分不同点云模型,出于这样的目的,我们需要对点云模型的颜色进行修改。具体包括的功能为:
- 调整RGB值改变单一点云文件颜色。
<img src="http://nightn.com/2017/04/15/cloudviewer/img/改变点云颜色-演示.png" width="600"/>
- 在多个点云同时显示时,通过在资源管理树的item进行选择,实现对某一个选定的点云进行颜色变换。
- 既可以通过滑块控件设置RGB,又可以通过颜色对话框来选择具体颜色。
- 随机上色功能。
<img src="http://nightn.com/2017/04/15/cloudviewer/img/随机颜色-演示.png" width="600"/>
#### 2.2 点云格式转换
点云文件的格式种类非常多,常见的能用 PCL 库直接处理的包括 ply, pcd 等,三维扫描仪保存的 wrl 格式。我们往往需要对点云格式进行转换,但是目前存在的主流点云软件,如 Geomagic Studio,Rapidform,MeshLab 等对点云格式转换的支持并不令人满意(比如 Geomagic Studio 能够导入ply文件并对其进行操作,但却不能保存为 ply,只能保存为 wrl。然后需要利用 MeshLab 将 wrl 转换为 ply,最后还需要利用自己写的程序将 ply 转为 pcd,过程非常麻烦!)
CloudViewer 目前实现了多种点云格式的相互转换(wrl文件的转换还有待进一步开发),通过打开并另存为即可实现三种不同点云格式之间的相互转换,打开和保存的实现可以参见上述部分。如下图:
<img src="http://nightn.com/2017/04/15/cloudviewer/img/open_save.png" width="300"/>
#### 2.3 合并点云
点云合并 = “多点云打开” + “多点云保存”。上述打开和保存功能已经实现了点云合并功能,在此不再赘述。
### 3. 可视化基本操作
可视化基本操作主要包括**设置背景颜色**,**设置点云的可视化尺寸**,**设置视图方位**(Main view, Left view, Top view),**网格面片显示**以及**网格线框显示**等。
#### 3.1 设置背景颜色
视图窗口中的点云颜色可以更改,背景颜色亦然,效果如下:
<img src="http://nightn.com/2017/04/15/cloudviewer/img/设置背景颜色-演示.png" width="600" />
#### 3.2 设置点云可视化尺寸
点云由很多点构成,每个点本身具有颜色信息,但是没有尺寸大小的信息。但需要以不同大小进行显示,这是可视化的任务,不涉及对点云本身的修改。设置点云可视化尺寸功能效果如下,分别对应size = 1, 2, 3时点云的大小,为了不影响点云操作,允许的最大尺寸为10(因为点的尺�