Loader::Loader(QObject* parent, const QString& filename)
: QThread(parent), filename(filename)
{
+ // Nothing to do here
}
void Loader::run()
emit error_ascii_stl();
return;
}
+
+ // Skip the rest of the buffer
+ file.read(75);
+
+ // Assume we're on a little-endian system for simplicity
+ uint32_t tri_count;
+ file.read(reinterpret_cast<char*>(&tri_count), sizeof(tri_count));
+
+ if (file.size() != 84 + tri_count*50)
+ {
+ emit error_bad_stl();
+ return;
+ }
}
emit got_mesh(Mesh::load_stl(filename));
"Please convert to binary <code>.stl</code> and retry");
}
+void Window::on_bad_stl()
+{
+ QMessageBox::critical(this, "Error",
+ "<b>Error:</b><br>"
+ "This <code>.stl</code> file is invalid or corrupted.<br>"
+ "Please export it from the original source, verify, and retry.");
+}
+
void Window::enable_open()
{
open_action->setEnabled(true);
canvas, &Canvas::load_mesh);
connect(loader, &Loader::error_ascii_stl,
this, &Window::on_ascii_stl);
+ connect(loader, &Loader::error_bad_stl,
+ this, &Window::on_bad_stl);
connect(loader, &Loader::finished,
loader, &Loader::deleteLater);