-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathplyloader.cpp
More file actions
58 lines (54 loc) · 2.18 KB
/
plyloader.cpp
File metadata and controls
58 lines (54 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "plyloader.h"
#include <string.h>
PlyLoader::PlyLoader(QObject *parent) :
QObject(parent)
{
}
bool PlyLoader::LoadModel(QString filename)
{
if (filename != NULL)
{
/*
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return -1;
*/
string name = filename.toStdString();
FILE *file = NULL;
file = fopen(name.data(),"r");
fseek(file, 0, SEEK_END);//获取文件全部数据
mp_vertexXYZ = (float*)malloc(10000000);//long int ftell (FILE *stream); Returns the current value of the position indicator of the stream.
fseek(file, 0, SEEK_SET);//操作符指向文件流开头
if (file)
{
int i = 0;
char buffer[3000];
fgets(buffer, 300, file);//char *fgets (char *str, int num, FILE *stream); Get string from stream
// READ HEADER
// Find number of vertexes
while (strncmp("element vertex", buffer,strlen("element vertex")) != 0 )//int strncmp (const char *str1, const char *str2, size_t num); Compare characters of two strings
{
fgets(buffer, 300, file); //如果一直没有找到element vertex字符串,就一直从文件流中取出300个元素,直到找到为止
}
strcpy(buffer, buffer + strlen("element vertex"));//char *strcpy ( char *destination, const char *source ); Copy string
sscanf(buffer, "%i", &this->m_totalConnectedPoints);//int sscanf ( const char * s, const char * format, ...); Read formatted data from string
// go to end_header
while (strncmp( "end_header", buffer,strlen("end_header")) != 0 )
{
fgets(buffer, 600, file);
}
// read vertices
i =0;
for (int iterator = 0; iterator < this->m_totalConnectedPoints; iterator++)
{
fgets(buffer, 600, file);
sscanf(buffer,"%f %f %f", &mp_vertexXYZ[i], &mp_vertexXYZ[i+1], &mp_vertexXYZ[i+2]);
i += 3;
}
fclose(file);
}
return true;
}
else
return false;
}