Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/libslic3r/Format/STL.cpp')
-rw-r--r--src/libslic3r/Format/STL.cpp58
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