std::string fname = "cube.stl";
FILE *inf = std::fopen(fname.c_str(), "rb");
if (inf == NULL) {
//throw std::runtime_error(std::string("Cannot open file ") + fname);
qglColor(Qt::black);
this->renderText(10, 10, "Cannot open file ");
}
char buffer[6];
size_t bytes_read = fread(buffer, 1, 6, inf);//copy file to buffer
QString bytes_read_diaplay = QString::number(bytes_read);
qglColor(Qt::black);
this->renderText(10, 300, bytes_read_diaplay);
if (bytes_read != 6) {
qglColor(Qt::black);
this->renderText(10, 10, "Invalid STL file - could not read first 6 bytes.");
}
std::rewind(inf);
if (0 == std::memcmp(buffer, "solid ", 6)) {
//read_ascii_file(inf);
qglColor(Qt::black);
this->renderText(10, 30, "read_ascii_file");
} else {
//read_binary_file(inf);
qglColor(Qt::black);
this->renderText(10, 30, "read_binary_file");
char buffer[80];
size_t num_read = fread(buffer, 1, 80, inf);
if (num_read != 80) {
qglColor(Qt::black);
this->renderText(10, 50, "Invalid binary STL file - could not read 80 byte header.");
}
std::memcpy(header, buffer, 80);
unsigned int num_tris = 0;
num_read = std::fread(&num_tris, sizeof(unsigned int), 1, inf);
if (num_read != 1) {
qglColor(Qt::black);
this->renderText(10, 70, "Invalid binary STL file - could not read number of triangles from binary STL file.");
}
}
std::fclose(inf);
我得到的bytes_read是4,所以我得到了:
无效的STL文件 - 无法读取前6个字节。
read_binary_file
无效的二进制STL文件 - 无法读取80字节标题。
无效的二进制STL文件 - 无法读取二进制STL文件中的三角形数量。
" cube.stl"是.stl文件,但为什么会这样显示?哪里错了?如何在cube.stl中获取顶点坐标? 有我的.stl文件:http://www.mediafire.com/download/hnnw444anih201n/cube.stl
检查后检查并检查。最后,我找到了自己的方式。 D ***它,错误很简单。我更改了std :: string fname =" cube.stl&#34 ;;的路径(cube.stl到D:/.../ cube.stl)。太棒了。 RUN。
答案 0 :(得分:0)
您似乎对Ascii和Binary文件之间的区别感到困惑。
fopen
的“rb”标志将作为二进制文件打开。 cube.stl是二进制文件吗? .stl文件可以是Binary或Ascii。
此外,您如何验证文件大小?您期望6 char
in或80字节的二进制。这些数字来自哪里?
简而言之,你的问题是: