由于某种历史原因,LAStools库又开始更新了。最近一次更新时间为:2022年1月7日。LASTools版本为:220107。由于一些请求,现在开始使用git发布功能。LASTools在YYMMDD方案中使用版本控制。这对于大多数LASTools用户来说是很常见的,因此也保留这个版本号。此外,我们将遵循开源版本的git版本控制指南。它们也可能随后流入源代码。因为我们有一段很像历史的东西,我们直接从2.0.0版开始。
github链接:https://github.com/LAStools/LAStools/releases/tag/v2.0.0
使用VS2019打开lastools.dsw
正在迁移解决方案和项目
出现如下界面时,一直点确定即可。
打开LASlib的头文件mydefs.hpp
,定位到69行,只保留 #if defined(_MSC_VER)
,删除或注释该行其它代码。
右键LASlib—属性—配置属性—常规—输出目录—修改为:
$(SolutionDir)$(ProjectName)\$(Configuration)\
右键LASlib—配置属性—C/C++—常规—附加包含目录—删除“…\laszip\stl”
右键LASlib—属性—C/C++—代码生成—运行库—选择“多线程(/MD)”。(VS2019默认是多线程/MTd,此前,open3d编译时选择的是多线程(/MD),故此处也选择多线程(/MD))
右键LASlib—重新生成。出现如下界面,则debug模式的lastools编译成功。
配置release模式
右键LASlib—配置属性—C/C++—常规—附加包含目录—删除“…\laszip\stl”
右键LASlib—重新生成。出现如下界面,则release模式的lastools编译成功。
...\LAStools\LAStools\LASlib\lib
LASlib.lib
放入Release文件夹,将LASlibD.lib
放入Debug文件夹。...\LAStools\LAStools\LASlib
路径下的LASlib和lib文件夹拷贝过来放入新建文件夹中。...\LAStools\LAStools\LASzip
路径下的src文件夹拷贝过来放入新建文件夹中。库封装完毕。本人LASlib的路径为:
D:\Open3D_0.13.0\LASlib
D:\Open3D_0.13.0\LASlib\include
D:\Open3D_0.13.0\LASlib\src
Release模式
D:\Open3D_0.13.0\LASlib\lib\Release
Debug模式
D:\Open3D_0.13.0\LASlib\lib\Debug
Release模式
LASlib.lib
Debug模式
LASlibD.lib
#include // C++
#include "lasreader.hpp"// LasReader
#include "open3d/geometry/PointCloud.h"// Open3D 点云头文件
#include "open3d/visualization/utility/DrawGeometry.h" // Open3D 可视化头文件
using namespace std;
int main(int argc, char* argv[])
{
// ---------------------LASLib从las文件中读取点云---------------------------
LASreadOpener lasreadopener;
LASreader* lasReader = lasreadopener.open("R.las");
if (lasReader == 0)
{
fprintf(stderr, "ERROR: could not open lasreader\n");
}
printf("reading %I64d points from '%s'.\n", lasReader->npoints, lasreadopener.get_file_name());
// ------------------------Open3D获取点云坐标------------------------------
auto cloud = std::make_shared<open3d::geometry::PointCloud>();
int pointAmount = lasReader->npoints; // las中点的个数
cloud->points_.resize(pointAmount);
int i = 0;
while (lasReader->read_point() && i < pointAmount)
{
cloud->points_[i][0] = lasReader->point.get_X(); // 获取点云X坐标
cloud->points_[i][1] = lasReader->point.get_Y(); // 获取点云Y坐标
cloud->points_[i][2] = lasReader->point.get_Z(); // 获取点云Z坐标
++i;
}
lasReader->close();
delete lasReader;
lasReader = nullptr;
// ------------------------Open3D显示点云坐标------------------------------
open3d::visualization::DrawGeometries({ cloud }, "PointCloud", 800, 600);
return 0;
}
reading 595018 points from 'R.las'.