This commit is contained in:
Enrico Turri 2019-04-04 14:00:48 +02:00
commit 24128e01ed
8 changed files with 29 additions and 44 deletions

View file

@ -10,7 +10,7 @@
#include "GCode/WipeTowerPrusaMM.hpp" #include "GCode/WipeTowerPrusaMM.hpp"
#include "Utils.hpp" #include "Utils.hpp"
#include "PrintExport.hpp" //#include "PrintExport.hpp"
#include <algorithm> #include <algorithm>
#include <limits> #include <limits>

View file

@ -7,6 +7,7 @@
#include <vector> #include <vector>
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
#include <boost/filesystem/path.hpp>
#include "Rasterizer/Rasterizer.hpp" #include "Rasterizer/Rasterizer.hpp"
//#include <tbb/parallel_for.h> //#include <tbb/parallel_for.h>
@ -72,7 +73,8 @@ public:
void finish_layer(); void finish_layer();
// Save all the layers into the file (or dir) specified in the path argument // Save all the layers into the file (or dir) specified in the path argument
void save(const std::string& path); // An optional project name can be added to be used for the layer file names
void save(const std::string& path, const std::string& projectname = "");
// Save only the selected layer to the file specified in path argument. // Save only the selected layer to the file specified in path argument.
void save_layer(unsigned lyr, const std::string& path); void save_layer(unsigned lyr, const std::string& path);
@ -86,7 +88,8 @@ template<class T = void> struct VeryFalse { static const bool value = false; };
template<class Fmt> class LayerWriter { template<class Fmt> class LayerWriter {
public: public:
LayerWriter(const std::string& /*zipfile_path*/) { LayerWriter(const std::string& /*zipfile_path*/)
{
static_assert(VeryFalse<Fmt>::value, static_assert(VeryFalse<Fmt>::value,
"No layer writer implementation provided!"); "No layer writer implementation provided!");
} }
@ -99,10 +102,6 @@ public:
void binary_entry(const std::string& /*fname*/, void binary_entry(const std::string& /*fname*/,
const std::uint8_t* buf, size_t len); const std::uint8_t* buf, size_t len);
// Get the name of the archive but only the name part without the path or
// the extension.
std::string get_name() { return ""; }
// Test whether the object can still be used for writing. // Test whether the object can still be used for writing.
bool is_ok() { return false; } bool is_ok() { return false; }
@ -253,12 +252,14 @@ public:
} }
template<class LyrFmt> template<class LyrFmt>
inline void save(const std::string& path) { inline void save(const std::string& fpath, const std::string& prjname = "")
{
try { try {
LayerWriter<LyrFmt> writer(path); LayerWriter<LyrFmt> writer(fpath);
if(!writer.is_ok()) return; if(!writer.is_ok()) return;
std::string project = writer.get_name(); std::string project = prjname.empty()?
boost::filesystem::path(fpath).stem().string() : prjname;
writer.next_entry("config.ini"); writer.next_entry("config.ini");
if(!writer.is_ok()) return; if(!writer.is_ok()) return;

View file

@ -320,10 +320,8 @@ struct SLAPrintStatistics
} }
}; };
struct SLAminzZipper {};
// The implementation of creating zipped archives with wxWidgets // The implementation of creating zipped archives with wxWidgets
template<> class LayerWriter<SLAminzZipper> { template<> class LayerWriter<Zipper> {
Zipper m_zip; Zipper m_zip;
public: public:
@ -332,16 +330,12 @@ public:
void next_entry(const std::string& fname) { m_zip.add_entry(fname); } void next_entry(const std::string& fname) { m_zip.add_entry(fname); }
void binary_entry(const std::string& fname, void binary_entry(const std::string& fname,
const std::uint8_t* buf, const std::uint8_t* buf,
size_t l) size_t l)
{ {
m_zip.add_entry(fname, buf, l); m_zip.add_entry(fname, buf, l);
} }
std::string get_name() const {
return m_zip.get_name();
}
template<class T> inline LayerWriter& operator<<(T&& arg) { template<class T> inline LayerWriter& operator<<(T&& arg) {
m_zip << std::forward<T>(arg); return *this; m_zip << std::forward<T>(arg); return *this;
} }
@ -389,9 +383,11 @@ public:
// Returns true if the last step was finished with success. // Returns true if the last step was finished with success.
bool finished() const override { return this->is_step_done(slaposSliceSupports) && this->Inherited::is_step_done(slapsRasterize); } bool finished() const override { return this->is_step_done(slaposSliceSupports) && this->Inherited::is_step_done(slapsRasterize); }
template<class Fmt = SLAminzZipper> template<class Fmt = Zipper>
void export_raster(const std::string& fname) { inline void export_raster(const std::string& fpath,
if(m_printer) m_printer->save<Fmt>(fname); const std::string& projectname = "")
{
if(m_printer) m_printer->save<Fmt>(fpath, projectname);
} }
const PrintObjects& objects() const { return m_objects; } const PrintObjects& objects() const { return m_objects; }

View file

@ -4,7 +4,6 @@
#include "Zipper.hpp" #include "Zipper.hpp"
#include "miniz/miniz_zip.h" #include "miniz/miniz_zip.h"
#include <boost/filesystem/path.hpp>
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
#include "I18N.hpp" #include "I18N.hpp"
@ -213,10 +212,6 @@ void Zipper::finish_entry()
m_entry.clear(); m_entry.clear();
} }
std::string Zipper::get_name() const {
return boost::filesystem::path(m_impl->m_zipname).stem().string();
}
void Zipper::finalize() void Zipper::finalize()
{ {
finish_entry(); finish_entry();

View file

@ -81,9 +81,6 @@ public:
/// file is up to minz after the erroneous write. /// file is up to minz after the erroneous write.
void finish_entry(); void finish_entry();
/// Gets the name of the archive without the path or extension.
std::string get_name() const;
void finalize(); void finalize();
}; };

View file

@ -397,8 +397,9 @@ int CLI::run(int argc, char **argv)
outfile_final = fff_print.print_statistics().finalize_output_path(outfile); outfile_final = fff_print.print_statistics().finalize_output_path(outfile);
} else { } else {
outfile = sla_print.output_filepath(outfile); outfile = sla_print.output_filepath(outfile);
sla_print.export_raster(outfile); // We need to finalize the filename beforehand because the export function sets the filename inside the zip metadata
outfile_final = sla_print.print_statistics().finalize_output_path(outfile); outfile_final = sla_print.print_statistics().finalize_output_path(outfile);
sla_print.export_raster(outfile_final);
} }
if (outfile != outfile_final && Slic3r::rename_file(outfile, outfile_final) != 0) { if (outfile != outfile_final && Slic3r::rename_file(outfile, outfile_final) != 0) {
boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl; boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl;

View file

@ -98,8 +98,9 @@ void BackgroundSlicingProcess::process_sla()
m_print->process(); m_print->process();
if (this->set_step_started(bspsGCodeFinalize)) { if (this->set_step_started(bspsGCodeFinalize)) {
if (! m_export_path.empty()) { if (! m_export_path.empty()) {
m_sla_print->export_raster(m_export_path); const std::string export_path = m_sla_print->print_statistics().finalize_output_path(m_export_path);
m_print->set_status(100, "Masked SLA file exported to " + m_export_path); m_sla_print->export_raster(export_path);
m_print->set_status(100, "Masked SLA file exported to " + export_path);
} else if (! m_upload_job.empty()) { } else if (! m_upload_job.empty()) {
prepare_upload(); prepare_upload();
} else { } else {
@ -389,7 +390,7 @@ void BackgroundSlicingProcess::prepare_upload()
// Generate a unique temp path to which the gcode/zip file is copied/exported // Generate a unique temp path to which the gcode/zip file is copied/exported
boost::filesystem::path source_path = boost::filesystem::temp_directory_path() boost::filesystem::path source_path = boost::filesystem::temp_directory_path()
/ boost::filesystem::unique_path(".printhost.%%%%-%%%%-%%%%-%%%%.gcode"); / boost::filesystem::unique_path(".Slic3rPE.upload.%%%%-%%%%-%%%%-%%%%");
if (m_print == m_fff_print) { if (m_print == m_fff_print) {
m_print->set_status(95, "Running post-processing scripts"); m_print->set_status(95, "Running post-processing scripts");
@ -399,8 +400,8 @@ void BackgroundSlicingProcess::prepare_upload()
run_post_process_scripts(source_path.string(), m_fff_print->config()); run_post_process_scripts(source_path.string(), m_fff_print->config());
m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
} else { } else {
m_sla_print->export_raster(source_path.string()); m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
// TODO: Also finalize upload path like with FFF when there are statistics for SLA print m_sla_print->export_raster(source_path.string(), m_upload_job.upload_data.upload_path.string());
} }
m_print->set_status(100, (boost::format("Scheduling upload to `%1%`. See Window -> Print Host Upload Queue") % m_upload_job.printhost->get_host()).str()); m_print->set_status(100, (boost::format("Scheduling upload to `%1%`. See Window -> Print Host Upload Queue") % m_upload_job.printhost->get_host()).str());

View file

@ -15,12 +15,6 @@ namespace Slic3r {
namespace GUI { namespace GUI {
// GLGizmoCut
class GLGizmoCutPanel : public wxPanel class GLGizmoCutPanel : public wxPanel
{ {
public: public:
@ -192,7 +186,7 @@ void GLGizmoCut::on_render_input_window(float x, float y, float bottom_limit, co
m_imgui->set_next_window_bg_alpha(0.5f); m_imgui->set_next_window_bg_alpha(0.5f);
m_imgui->begin(_(L("Cut")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); m_imgui->begin(_(L("Cut")), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
ImGui::PushItemWidth(100.0f); ImGui::PushItemWidth(m_imgui->scaled(5.0f));
bool _value_changed = ImGui::InputDouble("Z", &m_cut_z, 0.0f, 0.0f, "%.2f"); bool _value_changed = ImGui::InputDouble("Z", &m_cut_z, 0.0f, 0.0f, "%.2f");
m_imgui->checkbox(_(L("Keep upper part")), m_keep_upper); m_imgui->checkbox(_(L("Keep upper part")), m_keep_upper);