这是一个辅助 cc 通过 UDP 方式从远程扫描仪加载点云的插件,start
按钮可以用来发送自定义指令。
因为目前手中的扫描仪都是写死的 ip 地址与 port,所以这俩在插件中也是写死的,可以在代码里自己修改,之后可能会加上修改功能(其实原来有,功能被砍掉了)
这个插件用来测量一块点云的体积
具体用法:
- 从点云选取三个点
- 点击确认保存地面数据
- 点击计算体积开始计算
- 点击生成报告生成报告
因为软件本身是为施工现场的工人师傅设计的,所以各个功能的可选参数非常少,交互也比较死板,后续有需要的话可以改成比较适合开发的版本。
插件最核心的部分在 onCalPushButtonClick()
函数中
- 首先计算三个点的法向量,从而得到将法向量旋转到与 z 轴方向一致的旋转矩阵(体积计算的前提假设为地面水平)
- 之后将点云整个根据旋转矩阵进行旋转,同时确定地面高度
- 栅格化点云(这里将栅格尺度写死为 0.15mx0.15m,因为软件要测量矿场料堆的体积,都比较大),计算每个栅格中点云的平均高度
- 对没有点云的栅格进行插值补全(这里用的 CGLA 的东西,没太看明白,有三角剖分之类的东西在里面)
- 将所有高度值加起来,除以栅格面积得到点云体积
用来导入 *.xyzi
文件,文件本身是二进制保存的四个浮点数,数据结构如下
struct point {
float x,y,z,i;
};