zip file output dialog and status indication for sla in the statusbar.
This commit is contained in:
parent
90c38daeae
commit
95419370e1
@ -154,6 +154,7 @@ void SLAPrint::process()
|
|||||||
};
|
};
|
||||||
|
|
||||||
using slaposFn = std::function<void(const SLAPrintObject&)>;
|
using slaposFn = std::function<void(const SLAPrintObject&)>;
|
||||||
|
using slapsFn = std::function<void(void)>;
|
||||||
|
|
||||||
std::array<SLAPrintObjectStep, slaposCount> objectsteps = {
|
std::array<SLAPrintObjectStep, slaposCount> objectsteps = {
|
||||||
slaposObjectSlice,
|
slaposObjectSlice,
|
||||||
@ -164,7 +165,7 @@ void SLAPrint::process()
|
|||||||
slaposSliceSupports
|
slaposSliceSupports
|
||||||
};
|
};
|
||||||
|
|
||||||
std::array<slaposFn, slaposCount> fullprogram =
|
std::array<slaposFn, slaposCount> pobj_program =
|
||||||
{
|
{
|
||||||
slice_model,
|
slice_model,
|
||||||
[](const SLAPrintObject&){}, // slaposSupportIslands now empty
|
[](const SLAPrintObject&){}, // slaposSupportIslands now empty
|
||||||
@ -174,8 +175,14 @@ void SLAPrint::process()
|
|||||||
slice_supports
|
slice_supports
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::array<slapsFn, slapsCount> print_program =
|
||||||
|
{
|
||||||
|
rasterize,
|
||||||
|
[](){} // validate
|
||||||
|
};
|
||||||
|
|
||||||
for(SLAPrintObject * po : m_objects) {
|
for(SLAPrintObject * po : m_objects) {
|
||||||
for(size_t s = 0; s < fullprogram.size(); ++s) {
|
for(size_t s = 0; s < pobj_program.size(); ++s) {
|
||||||
auto currentstep = objectsteps[s];
|
auto currentstep = objectsteps[s];
|
||||||
|
|
||||||
// Cancellation checking. Each step will check for cancellation
|
// Cancellation checking. Each step will check for cancellation
|
||||||
@ -188,11 +195,33 @@ void SLAPrint::process()
|
|||||||
OBJ_STEP_LABELS[currentstep]);
|
OBJ_STEP_LABELS[currentstep]);
|
||||||
|
|
||||||
po->set_started(currentstep);
|
po->set_started(currentstep);
|
||||||
fullprogram[s](*po);
|
pobj_program[s](*po);
|
||||||
po->set_done(currentstep);
|
po->set_done(currentstep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::array<SLAPrintStep, slapsCount> printsteps = {
|
||||||
|
slapsRasterize, slapsValidate
|
||||||
|
};
|
||||||
|
|
||||||
|
for(size_t s = 0; s < print_program.size(); ++s) {
|
||||||
|
auto currentstep = printsteps[s];
|
||||||
|
|
||||||
|
throw_if_canceled();
|
||||||
|
|
||||||
|
if(m_stepmask[s]) {
|
||||||
|
set_status(PRINT_STEP_LEVELS[currentstep],
|
||||||
|
PRINT_STEP_LABELS[currentstep]);
|
||||||
|
|
||||||
|
set_started(currentstep);
|
||||||
|
print_program[s]();
|
||||||
|
set_done(currentstep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If everything vent well
|
||||||
|
set_status(100, L("Slicing done"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SLAPrint::render_supports(SLASupportRenderer &renderer)
|
void SLAPrint::render_supports(SLASupportRenderer &renderer)
|
||||||
@ -200,6 +229,11 @@ void SLAPrint::render_supports(SLASupportRenderer &renderer)
|
|||||||
std::cout << "Would show the SLA supports" << std::endl;
|
std::cout << "Would show the SLA supports" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SLAPrint::export_raster(const std::string &fname)
|
||||||
|
{
|
||||||
|
std::cout << "Would export the SLA raster" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object):
|
SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object):
|
||||||
Inherited(print),
|
Inherited(print),
|
||||||
m_model_object(model_object),
|
m_model_object(model_object),
|
||||||
|
@ -131,7 +131,7 @@ private: // Prevents erroneous use by other classes.
|
|||||||
typedef PrintBaseWithState<SLAPrintStep, slapsCount> Inherited;
|
typedef PrintBaseWithState<SLAPrintStep, slapsCount> Inherited;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SLAPrint() {}
|
SLAPrint(): m_stepmask(slapsCount, true) {}
|
||||||
virtual ~SLAPrint() { this->clear(); }
|
virtual ~SLAPrint() { this->clear(); }
|
||||||
|
|
||||||
PrinterTechnology technology() const noexcept { return ptSLA; }
|
PrinterTechnology technology() const noexcept { return ptSLA; }
|
||||||
@ -143,11 +143,14 @@ public:
|
|||||||
|
|
||||||
void render_supports(SLASupportRenderer& renderer);
|
void render_supports(SLASupportRenderer& renderer);
|
||||||
|
|
||||||
|
void export_raster(const std::string& fname);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Model m_model;
|
Model m_model;
|
||||||
SLAPrinterConfig m_printer_config;
|
SLAPrinterConfig m_printer_config;
|
||||||
SLAMaterialConfig m_material_config;
|
SLAMaterialConfig m_material_config;
|
||||||
PrintObjects m_objects;
|
PrintObjects m_objects;
|
||||||
|
std::vector<bool> m_stepmask;
|
||||||
|
|
||||||
friend SLAPrintObject;
|
friend SLAPrintObject;
|
||||||
};
|
};
|
||||||
|
@ -75,6 +75,19 @@ void BackgroundSlicingProcess::process_fff()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BackgroundSlicingProcess::process_sla() {
|
||||||
|
assert(m_print == m_sla_print);
|
||||||
|
m_print->process();
|
||||||
|
if(!m_print->canceled() && ! this->is_step_done(bspsGCodeFinalize)) {
|
||||||
|
this->set_step_started(bspsGCodeFinalize);
|
||||||
|
if (! m_export_path.empty()) {
|
||||||
|
m_sla_print->export_raster(m_export_path);
|
||||||
|
m_print->set_status(100, "Zip file exported to " + m_export_path);
|
||||||
|
}
|
||||||
|
this->set_step_done(bspsGCodeFinalize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void BackgroundSlicingProcess::thread_proc()
|
void BackgroundSlicingProcess::thread_proc()
|
||||||
{
|
{
|
||||||
assert(m_print != nullptr);
|
assert(m_print != nullptr);
|
||||||
@ -100,6 +113,7 @@ void BackgroundSlicingProcess::thread_proc()
|
|||||||
assert(m_print != nullptr);
|
assert(m_print != nullptr);
|
||||||
switch(m_print->technology()) {
|
switch(m_print->technology()) {
|
||||||
case ptFFF: this->process_fff(); break;
|
case ptFFF: this->process_fff(); break;
|
||||||
|
case ptSLA: this->process_sla(); break;
|
||||||
default: m_print->process(); break;
|
default: m_print->process(); break;
|
||||||
}
|
}
|
||||||
} catch (CanceledException & /* ex */) {
|
} catch (CanceledException & /* ex */) {
|
||||||
|
@ -96,6 +96,9 @@ private:
|
|||||||
// Helper to wrap the FFF slicing & G-code generation.
|
// Helper to wrap the FFF slicing & G-code generation.
|
||||||
void process_fff();
|
void process_fff();
|
||||||
|
|
||||||
|
// Temporary: for mimicking the fff file export behavior with the raster output
|
||||||
|
void process_sla();
|
||||||
|
|
||||||
// Currently active print. It is one of m_fff_print and m_sla_print.
|
// Currently active print. It is one of m_fff_print and m_sla_print.
|
||||||
PrintBase *m_print = nullptr;
|
PrintBase *m_print = nullptr;
|
||||||
// Non-owned pointers to Print instances.
|
// Non-owned pointers to Print instances.
|
||||||
|
@ -1683,7 +1683,7 @@ void GLGizmoSlaSupports::clicked_on_object(const Vec2d& mouse_position)
|
|||||||
m_model_object->sla_support_points.push_back(new_pos);
|
m_model_object->sla_support_points.push_back(new_pos);
|
||||||
|
|
||||||
// This should trigger the support generation
|
// This should trigger the support generation
|
||||||
wxGetApp().plater()->reslice();
|
// wxGetApp().plater()->reslice();
|
||||||
}
|
}
|
||||||
catch (...) {}
|
catch (...) {}
|
||||||
}
|
}
|
||||||
@ -1695,7 +1695,7 @@ void GLGizmoSlaSupports::delete_current_grabber(bool delete_all)
|
|||||||
m_model_object->sla_support_points.clear();
|
m_model_object->sla_support_points.clear();
|
||||||
|
|
||||||
// This should trigger the support generation
|
// This should trigger the support generation
|
||||||
wxGetApp().plater()->reslice();
|
// wxGetApp().plater()->reslice();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (m_hover_id != -1) {
|
if (m_hover_id != -1) {
|
||||||
@ -1704,7 +1704,7 @@ void GLGizmoSlaSupports::delete_current_grabber(bool delete_all)
|
|||||||
m_hover_id = -1;
|
m_hover_id = -1;
|
||||||
|
|
||||||
// This should trigger the support generation
|
// This should trigger the support generation
|
||||||
wxGetApp().plater()->reslice();
|
// wxGetApp().plater()->reslice();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,12 +991,15 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) :
|
|||||||
// Default printer technology for default config.
|
// Default printer technology for default config.
|
||||||
background_process.select_technology(q->printer_technology());
|
background_process.select_technology(q->printer_technology());
|
||||||
// Register progress callback from the Print class to the Platter.
|
// Register progress callback from the Print class to the Platter.
|
||||||
print.set_status_callback([this](int percent, const std::string &message) {
|
|
||||||
|
auto statuscb = [this](int percent, const std::string &message) {
|
||||||
wxCommandEvent event(EVT_PROGRESS_BAR);
|
wxCommandEvent event(EVT_PROGRESS_BAR);
|
||||||
event.SetInt(percent);
|
event.SetInt(percent);
|
||||||
event.SetString(message);
|
event.SetString(message);
|
||||||
wxQueueEvent(this->q, event.Clone());
|
wxQueueEvent(this->q, event.Clone());
|
||||||
});
|
};
|
||||||
|
print.set_status_callback(statuscb);
|
||||||
|
sla_print.set_status_callback(statuscb);
|
||||||
this->q->Bind(EVT_PROGRESS_BAR, &priv::on_progress_event, this);
|
this->q->Bind(EVT_PROGRESS_BAR, &priv::on_progress_event, this);
|
||||||
|
|
||||||
_3DScene::add_canvas(canvas3D);
|
_3DScene::add_canvas(canvas3D);
|
||||||
@ -2171,6 +2174,9 @@ void Plater::export_gcode(fs::path output_path)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string final_path;
|
||||||
|
if(printer_technology() == ptFFF) { // TODO: custom button for SLA export
|
||||||
|
|
||||||
// Copy the names of active presets into the placeholder parser.
|
// Copy the names of active presets into the placeholder parser.
|
||||||
wxGetApp().preset_bundle->export_selections(p->print.placeholder_parser());
|
wxGetApp().preset_bundle->export_selections(p->print.placeholder_parser());
|
||||||
|
|
||||||
@ -2186,13 +2192,10 @@ void Plater::export_gcode(fs::path output_path)
|
|||||||
));
|
));
|
||||||
auto start_dir = wxGetApp().app_config->get_last_output_dir(default_output_file.parent_path().string());
|
auto start_dir = wxGetApp().app_config->get_last_output_dir(default_output_file.parent_path().string());
|
||||||
|
|
||||||
auto fileType = printer_technology() == ptFFF ? FT_GCODE : FT_PNGZIP;
|
wxFileDialog dlg(this, _(L("Save G-code file as:")),
|
||||||
std::string dtitle = printer_technology() == ptFFF ? L("Save G-code file as:")
|
|
||||||
: L("Save Zip file as:");
|
|
||||||
wxFileDialog dlg(this, _(dtitle),
|
|
||||||
start_dir,
|
start_dir,
|
||||||
default_output_file.filename().string(),
|
default_output_file.filename().string(),
|
||||||
GUI::file_wildcards[fileType],
|
GUI::file_wildcards[FT_GCODE],
|
||||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT
|
wxFD_SAVE | wxFD_OVERWRITE_PROMPT
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -2203,8 +2206,26 @@ void Plater::export_gcode(fs::path output_path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final_path = p->print.output_filepath(output_path.string());
|
||||||
|
} else {
|
||||||
|
wxFileDialog dlg(this, _(L("Save Zip file as:")),
|
||||||
|
wxGetApp().app_config->get_last_output_dir(""),
|
||||||
|
"out.zip",
|
||||||
|
GUI::file_wildcards[FT_PNGZIP],
|
||||||
|
wxFD_SAVE | wxFD_OVERWRITE_PROMPT
|
||||||
|
);
|
||||||
|
|
||||||
|
if (dlg.ShowModal() == wxID_OK) {
|
||||||
|
fs::path path(dlg.GetPath());
|
||||||
|
wxGetApp().app_config->update_last_output_dir(path.parent_path().string());
|
||||||
|
output_path = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
final_path = output_path.string();
|
||||||
|
}
|
||||||
|
|
||||||
if (! output_path.empty()) {
|
if (! output_path.empty()) {
|
||||||
this->p->background_process.schedule_export(p->print.output_filepath(output_path.string()));
|
this->p->background_process.schedule_export(final_path);
|
||||||
this->p->background_process.start();
|
this->p->background_process.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user