added binary stl file size check after ascii check
This commit is contained in:
@@ -478,9 +478,39 @@ check_stl_type(const std::string& _filename) const
|
|||||||
{
|
{
|
||||||
return STLA;
|
return STLA;
|
||||||
}
|
}
|
||||||
|
ifs.close();
|
||||||
|
|
||||||
//if the file does not start with solid it is STLB
|
//if the file does not start with solid it is probably STLB
|
||||||
return STLB;
|
//check the file size to verify it.
|
||||||
|
|
||||||
|
//open the file
|
||||||
|
FILE* in = fopen(_filename.c_str(), "rb");
|
||||||
|
if (!in) return NONE;
|
||||||
|
|
||||||
|
// determine endian mode
|
||||||
|
union { unsigned int i; unsigned char c[4]; } endian_test;
|
||||||
|
endian_test.i = 1;
|
||||||
|
bool swapFlag = (endian_test.c[3] == 1);
|
||||||
|
|
||||||
|
|
||||||
|
// read number of triangles
|
||||||
|
char dummy[100];
|
||||||
|
fread(dummy, 1, 80, in);
|
||||||
|
size_t nT = read_int(in, swapFlag);
|
||||||
|
|
||||||
|
|
||||||
|
// compute file size from nT
|
||||||
|
size_t binary_size = 84 + nT*50;
|
||||||
|
|
||||||
|
// get actual file size
|
||||||
|
size_t file_size(0);
|
||||||
|
rewind(in);
|
||||||
|
while (!feof(in))
|
||||||
|
file_size += fread(dummy, 1, 100, in);
|
||||||
|
fclose(in);
|
||||||
|
|
||||||
|
// if sizes match -> it's STLB
|
||||||
|
return (binary_size == file_size ? STLB : NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user