diff --git a/src/slic3r.cpp b/src/slic3r.cpp index 1f46288360..0b2dbf0ae9 100644 --- a/src/slic3r.cpp +++ b/src/slic3r.cpp @@ -70,6 +70,13 @@ main(const int argc, const char **argv) TriangleMesh mesh = model->mesh(); Slic3r::IO::OBJ::write(mesh, outfile); printf("File exported to %s\n", outfile.c_str()); + } else if (cli_config.export_pov) { + std::string outfile = cli_config.output.value; + if (outfile.empty()) outfile = model->objects.front()->input_file + ".pov"; + + TriangleMesh mesh = model->mesh(); + Slic3r::IO::POV::write(mesh, outfile); + printf("File exported to %s\n", outfile.c_str()); } else if (cli_config.export_svg) { std::string outfile = cli_config.output.value; if (outfile.empty()) outfile = model->objects.front()->input_file + ".svg"; diff --git a/xs/src/libslic3r/IO.cpp b/xs/src/libslic3r/IO.cpp index 7bd42cea5e..dddff3e22c 100644 --- a/xs/src/libslic3r/IO.cpp +++ b/xs/src/libslic3r/IO.cpp @@ -1,5 +1,7 @@ #include "IO.hpp" #include +#include +#include namespace Slic3r { namespace IO { @@ -44,4 +46,22 @@ OBJ::write(TriangleMesh& mesh, std::string output_file) return true; } +bool +POV::write(TriangleMesh& mesh, std::string output_file) +{ + using namespace std; + ofstream pov; + pov.open(output_file.c_str(), ios::out | ios::trunc); + for (int i = 0; i < mesh.stl.stats.number_of_facets; ++i) { + const stl_facet &f = mesh.stl.facet_start[i]; + pov << "triangle { "; + pov << "<" << f.vertex[0].x << "," << f.vertex[0].y << "," << f.vertex[0].z << ">,"; + pov << "<" << f.vertex[1].x << "," << f.vertex[1].y << "," << f.vertex[1].z << ">,"; + pov << "<" << f.vertex[2].x << "," << f.vertex[2].y << "," << f.vertex[2].z << ">"; + pov << " }" << endl; + } + pov.close(); + return true; +} + } } diff --git a/xs/src/libslic3r/IO.hpp b/xs/src/libslic3r/IO.hpp index 0c3cd991f8..0fe76a0681 100644 --- a/xs/src/libslic3r/IO.hpp +++ b/xs/src/libslic3r/IO.hpp @@ -21,6 +21,12 @@ class OBJ static bool write(TriangleMesh& mesh, std::string output_file); }; +class POV +{ + public: + static bool write(TriangleMesh& mesh, std::string output_file); +}; + } } #endif diff --git a/xs/src/libslic3r/PrintConfig.cpp b/xs/src/libslic3r/PrintConfig.cpp index 1438bb2967..3abc210e1c 100644 --- a/xs/src/libslic3r/PrintConfig.cpp +++ b/xs/src/libslic3r/PrintConfig.cpp @@ -1359,10 +1359,16 @@ CLIConfigDef::CLIConfigDef() def = this->add("export_obj", coBool); def->label = "Export SVG"; - def->tooltip = "Export the model to OBJ."; + def->tooltip = "Export the model as OBJ."; def->cli = "export-obj"; def->default_value = new ConfigOptionBool(false); + def = this->add("export_pov", coBool); + def->label = "Export POV"; + def->tooltip = "Export the model as POV-Ray definition."; + def->cli = "export-pov"; + def->default_value = new ConfigOptionBool(false); + def = this->add("export_svg", coBool); def->label = "Export SVG"; def->tooltip = "Slice the model and export slices as SVG."; diff --git a/xs/src/libslic3r/PrintConfig.hpp b/xs/src/libslic3r/PrintConfig.hpp index 345406a6d5..14bbc75220 100644 --- a/xs/src/libslic3r/PrintConfig.hpp +++ b/xs/src/libslic3r/PrintConfig.hpp @@ -502,6 +502,7 @@ class CLIConfig { public: ConfigOptionBool export_obj; + ConfigOptionBool export_pov; ConfigOptionBool export_svg; ConfigOptionBool info; ConfigOptionString output; @@ -515,6 +516,7 @@ class CLIConfig virtual ConfigOption* optptr(const t_config_option_key &opt_key, bool create = false) { OPT_PTR(export_obj); + OPT_PTR(export_pov); OPT_PTR(export_svg); OPT_PTR(info); OPT_PTR(output);