说明:加速读取这一块 就是一个结构体 还有一个无色点云文件的读取 还有为了读取彩色点云我重载了这个方法
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
fastRead("Top-part.txt",cloud);
这样就读进来了
struct VertexPositionColor
{
int PtID;
float x = 0.0;
float y = 0.0;
float z = 0.0;
int R = -1;
int G = -1;
int B = -1;
float A = 0;//反射强度为0
};
//加速读取点云文件(读取无色的点云)
int fastRead(char *path, PointCloud<PointXYZ>::Ptr cloud)
{
vector<VertexPositionColor> PointVec;
HANDLE hSrcFile = CreateFileA(path, GENERIC_READ, 0, NULL, OPEN_ALWAYS, 0, NULL);
if (hSrcFile == INVALID_HANDLE_VALUE)
{
cout<< "未能加载文件" << endl;
return 0;
}
LARGE_INTEGER tInt2;
GetFileSizeEx(hSrcFile,&tInt2);
__int64 dwRemainSize =tInt2.QuadPart;
__int64 dwFileSize = dwRemainSize;
DWORD dwLow = dwRemainSize>> 32;
DWORD dwHight = dwRemainSize &0xFFFFFFFF;
HANDLE hSrcFileMapping = CreateFileMapping(hSrcFile, NULL, PAGE_READONLY, tInt2.HighPart, tInt2.LowPart, NULL);
if (hSrcFileMapping == INVALID_HANDLE_VALUE)
{
return 0;
}
SYSTEM_INFO SysInfo;
GetSystemInfo(&SysInfo);
DWORD dwGran =SysInfo.dwAllocationGranularity;
const int BUFFERBLOCKSIZE = dwGran * 1024;
const int XYZI_FC = 4;
const int XYZRGB_FC = 6;
const int XYZIRGB_FC = 7;
bool AlreadySetFiledCount = false;//是否已经设置了数据宽度
int totalRows = 0;//文件总行数:
int FieldIndex = 0;//每一个小数字的填充位置
int FieldCount = 0;//
每一行中整数字位置,用来判定数据列数究竟是XYZARGB。
const