diff options
Diffstat (limited to 'src/libslic3r/Format/STL.cpp')
-rw-r--r-- | src/libslic3r/Format/STL.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/libslic3r/Format/STL.cpp b/src/libslic3r/Format/STL.cpp new file mode 100644 index 000000000..99e2ff193 --- /dev/null +++ b/src/libslic3r/Format/STL.cpp @@ -0,0 +1,58 @@ +#include "../libslic3r.h" +#include "../Model.hpp" +#include "../TriangleMesh.hpp" + +#include "STL.hpp" + +#include <string> + +#ifdef _WIN32 +#define DIR_SEPARATOR '\\' +#else +#define DIR_SEPARATOR '/' +#endif + +namespace Slic3r { + +bool load_stl(const char *path, Model *model, const char *object_name_in) +{ + TriangleMesh mesh; + mesh.ReadSTLFile(path); + if (mesh.stl.error) { +// die "Failed to open $file\n" if !-e $path; + return false; + } + mesh.repair(); + if (mesh.facets_count() == 0) { + // die "This STL file couldn't be read because it's empty.\n" + return false; + } + + std::string object_name; + if (object_name_in == nullptr) { + const char *last_slash = strrchr(path, DIR_SEPARATOR); + object_name.assign((last_slash == nullptr) ? path : last_slash + 1); + } else + object_name.assign(object_name_in); + + model->add_object(object_name.c_str(), path, std::move(mesh)); + return true; +} + +bool store_stl(const char *path, TriangleMesh *mesh, bool binary) +{ + if (binary) + mesh->write_binary(path); + else + mesh->write_ascii(path); + //FIXME returning false even if write failed. + return true; +} + +bool store_stl(const char *path, ModelObject *model_object, bool binary) +{ + TriangleMesh mesh = model_object->mesh(); + return store_stl(path, &mesh, binary); +} + +}; // namespace Slic3r |