基于MicroStation CE的点云软件二次开发

基于MS进行点云的二次开发已经有一段时日,对已经实现的功能作一个回顾:

基于MicroStation CE的点云软件二次开发_第1张图片

 1.首先是点云的导入功能,MS CE目前只支持pod格式点云文件,加载速度很快,因为其并没有全部读入点云数据,目前的理解是仅仅读入了点云的头文件,有很好的显示效果,但无法获取实际点云坐标;

解决办法是使用pdal库读入las文件,las再转成pod,当需要处理点云时,根据点云元素ID后台读取las,仅仅测图时则不使用las以保证流畅的点云显示效果:

基于MicroStation CE的点云软件二次开发_第2张图片

2.点云导入后需要对其进行管理,因此搭建了一个点云管理列表,记录每个点云的名称、数量、ID、最大最小值。

同时实现选中高亮显示、删除功能,在删除选中某行时,对应的点云也删除。

3.实现基本的测图功能:

基于MicroStation CE的点云软件二次开发_第3张图片

基于MicroStation CE的点云软件二次开发_第4张图片

包括上述简单绘图功能,鼠标选点,构建线串,动态显示,是否闭合等;

更新视图是对视图内所有的点云元素进行遍历,并显示到点云管理列表中。

4.真正的点云处理功能:

基于MicroStation CE的点云软件二次开发_第5张图片

此处也很艰难,PCL和MS SDK无法兼容,我选择了调用外部exe的方法,将待处理点云以及一些参数传到由PCL写好的exe中进行处理。

目前实现的功能都很简单,基础的PCL都能轻松解决,主要是移植到MS中有很多问题。

其中裁剪盒的构建花费了较长时间,最后通过构建线串的方法实现了动态的裁剪盒拉伸,效果如下:

基于MicroStation CE的点云软件二次开发_第6张图片

 

基于MicroStation CE的点云软件二次开发_第7张图片

任重道远,C++基础太差了,每一步都很难,坚持不下去就听听野草。

我顺着剥落的高墙走路
风吹来四面是灰土 四方有雾
我感到绝望 我感到枯竭
我这一路上再也没有遇到青年…

5.五月十四更新

昨晚困扰了很久的bug,早上一来就想通了,扫描的SCANBUF应当放在元素类型的判断下,否则会在后续的删除过程中导致ID和实际元素无法完全对应;

今天上午改进了裁剪框的搭建,不再垂直XY轴,而是任意矩形,然后改进裁剪方法,这里又出现了很多问题,还好一一解决了,裁剪框内部点的判断方法为射线法,看有几个交点,奇数则在内部,偶数在外部。但是构成多边形的点的顺序一定要设定好,很重要!!!

下午又是出现了一个让人吐血的bug,在构建多个裁剪框后,发现第二次导入的裁剪后点云始终没有变化,但是把第一次导入的裁剪点云删除就可以正常显示;

原因竟然是第一次导入las转pod,pod在软件中已经运行,导致第二次裁剪导入的时候无法覆盖上一个pod,使得las数据正确,但是导入的pod一直是上一个pod,吐血,看了一下午才反应过来。主要还是代码写的不好,调用exe输出的裁剪后点云都是同名文件,每次处理都会覆盖上一个las文件,但是当MS中打开了pod文件的时候再进行二次裁剪,无法导入新的pod,导致这个问题。真的头疼。后续还要好好修改,如何给每一次裁剪得到的点云不同的文件名。

 

6.五月二十二更新

昨日又出现了一个很大的bug,las转pcl格式经过处理再转出时,点云竟然不一样了,数量一致,但是变成了一条条线,翻来覆去不知何故,最终发现double格式的点云数据转成pcl格式float,丢失了小数点精度,导致点云出现了误差;下面是对比图。

解决思路一是自己定义一个double类型,但是在后续使用PCL算法时报错,思路二时将点云数据同时减去xyz最大值,使得double转float时不会丢失数据精度,此方法成功。

第二个小问题:当多选点云元素进行处理时,不知道何时清空记录选中点云行数的vector,暂时在取消选择这一子菜单中写了清空,但还是很不方便,需要后续解决。

基于MicroStation CE的点云软件二次开发_第8张图片

基于MicroStation CE的点云软件二次开发_第9张图片

基于MicroStation CE的点云软件二次开发_第10张图片

 

 

 

你可能感兴趣的:(点云,PCL)