Finished (?) switching between the FDM / SLA profiles,
fixed an invalidation bug in Print::apply()
This commit is contained in:
parent
7e71aaffd5
commit
75c097010d
6 changed files with 79 additions and 24 deletions
|
@ -101,7 +101,7 @@ include_directories(${LIBDIR}/libslic3r ${LIBDIR}/clipper ${LIBDIR}/polypartitio
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking.
|
# BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking.
|
||||||
add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601 -D_CRT_SECURE_NO_WARNINGS)
|
add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
|
add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO)
|
||||||
|
|
|
@ -983,7 +983,8 @@ Print::ApplyStatus Print::apply(const Model &model, const DynamicPrintConfig &co
|
||||||
update_apply_status(this->invalidate_step(psWipeTower));
|
update_apply_status(this->invalidate_step(psWipeTower));
|
||||||
if ((*it_old)->print_object->set_copies(new_instances.copies)) {
|
if ((*it_old)->print_object->set_copies(new_instances.copies)) {
|
||||||
// Invalidated
|
// Invalidated
|
||||||
update_apply_status(this->invalidate_step(psSkirt) || this->invalidate_step(psBrim) || this->invalidate_step(psGCodeExport));
|
static PrintStep steps[] = { psSkirt, psBrim, psGCodeExport };
|
||||||
|
update_apply_status(this->invalidate_multiple_steps(steps, steps + 3));
|
||||||
}
|
}
|
||||||
print_objects_new.emplace_back((*it_old)->print_object);
|
print_objects_new.emplace_back((*it_old)->print_object);
|
||||||
const_cast<PrintObjectStatus*>(*it_old)->status = PrintObjectStatus::Reused;
|
const_cast<PrintObjectStatus*>(*it_old)->status = PrintObjectStatus::Reused;
|
||||||
|
@ -1001,8 +1002,10 @@ Print::ApplyStatus Print::apply(const Model &model, const DynamicPrintConfig &co
|
||||||
delete pos.print_object;
|
delete pos.print_object;
|
||||||
deleted_objects = true;
|
deleted_objects = true;
|
||||||
}
|
}
|
||||||
if (deleted_objects)
|
if (deleted_objects) {
|
||||||
update_apply_status(this->invalidate_step(psSkirt) || this->invalidate_step(psBrim) || this->invalidate_step(psWipeTower) || this->invalidate_step(psGCodeExport));
|
static PrintStep steps[] = { psSkirt, psBrim, psWipeTower, psGCodeExport };
|
||||||
|
update_apply_status(this->invalidate_multiple_steps(steps, steps + 4));
|
||||||
|
}
|
||||||
update_apply_status(new_objects);
|
update_apply_status(new_objects);
|
||||||
}
|
}
|
||||||
print_object_status.clear();
|
print_object_status.clear();
|
||||||
|
|
|
@ -104,6 +104,28 @@ public:
|
||||||
return invalidated;
|
return invalidated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename CancelationCallback, typename StepTypeIterator>
|
||||||
|
bool invalidate_multiple(StepTypeIterator step_begin, StepTypeIterator step_end, tbb::mutex &mtx, CancelationCallback cancel) {
|
||||||
|
bool invalidated = false;
|
||||||
|
for (StepTypeIterator it = step_begin; ! invalidated && it != step_end; ++ it)
|
||||||
|
invalidated = m_state[*it].load(std::memory_order_relaxed) != INVALID;
|
||||||
|
if (invalidated) {
|
||||||
|
#if 0
|
||||||
|
if (mtx.state != mtx.HELD) {
|
||||||
|
printf("Not held!\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// Raise the mutex, so that the following cancel() callback could cancel
|
||||||
|
// the background processing.
|
||||||
|
mtx.unlock();
|
||||||
|
cancel();
|
||||||
|
for (StepTypeIterator it = step_begin; it != step_end; ++ it)
|
||||||
|
m_state[*it] = INVALID;
|
||||||
|
mtx.lock();
|
||||||
|
}
|
||||||
|
return invalidated;
|
||||||
|
}
|
||||||
|
|
||||||
// Make all steps invalid.
|
// Make all steps invalid.
|
||||||
// The provided mutex should be locked at this point, guarding access to m_state.
|
// The provided mutex should be locked at this point, guarding access to m_state.
|
||||||
// In case any step has already been entered or finished, cancel the background
|
// In case any step has already been entered or finished, cancel the background
|
||||||
|
@ -245,7 +267,9 @@ public:
|
||||||
// methods for handling state
|
// methods for handling state
|
||||||
bool invalidate_state_by_config_options(const std::vector<t_config_option_key> &opt_keys);
|
bool invalidate_state_by_config_options(const std::vector<t_config_option_key> &opt_keys);
|
||||||
bool invalidate_step(PrintObjectStep step);
|
bool invalidate_step(PrintObjectStep step);
|
||||||
bool invalidate_all_steps();
|
template<typename StepTypeIterator>
|
||||||
|
bool invalidate_multiple_steps(StepTypeIterator step_begin, StepTypeIterator step_end) { return m_state.invalidate_multiple(step_begin, step_end, m_mutex, m_cancel_callback); }
|
||||||
|
bool invalidate_all_steps();
|
||||||
bool is_step_done(PrintObjectStep step) const { return m_state.is_done(step); }
|
bool is_step_done(PrintObjectStep step) const { return m_state.is_done(step); }
|
||||||
|
|
||||||
// To be used over the layer_height_profile of both the PrintObject and ModelObject
|
// To be used over the layer_height_profile of both the PrintObject and ModelObject
|
||||||
|
@ -509,6 +533,8 @@ protected:
|
||||||
void set_started(PrintStep step) { m_state.set_started(step, m_mutex); throw_if_canceled(); }
|
void set_started(PrintStep step) { m_state.set_started(step, m_mutex); throw_if_canceled(); }
|
||||||
void set_done(PrintStep step) { m_state.set_done(step, m_mutex); throw_if_canceled(); }
|
void set_done(PrintStep step) { m_state.set_done(step, m_mutex); throw_if_canceled(); }
|
||||||
bool invalidate_step(PrintStep step);
|
bool invalidate_step(PrintStep step);
|
||||||
|
template<typename StepTypeIterator>
|
||||||
|
bool invalidate_multiple_steps(StepTypeIterator step_begin, StepTypeIterator step_end) { return m_state.invalidate_multiple(step_begin, step_end, m_mutex, m_cancel_callback); }
|
||||||
bool invalidate_all_steps() { return m_state.invalidate_all(m_mutex, m_cancel_callback); }
|
bool invalidate_all_steps() { return m_state.invalidate_all(m_mutex, m_cancel_callback); }
|
||||||
|
|
||||||
// methods for handling regions
|
// methods for handling regions
|
||||||
|
|
|
@ -642,8 +642,11 @@ void GUI_App::load_current_presets()
|
||||||
{
|
{
|
||||||
PrinterTechnology printer_technology = preset_bundle->printers.get_edited_preset().printer_technology();
|
PrinterTechnology printer_technology = preset_bundle->printers.get_edited_preset().printer_technology();
|
||||||
for (Tab *tab : tabs_list)
|
for (Tab *tab : tabs_list)
|
||||||
if (tab->supports_printer_technology(printer_technology))
|
if (tab->supports_printer_technology(printer_technology)) {
|
||||||
tab->load_current_preset();
|
if (tab->name() == "printer")
|
||||||
|
static_cast<TabPrinter*>(tab)->update_pages();
|
||||||
|
tab->load_current_preset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Sidebar& GUI_App::sidebar()
|
Sidebar& GUI_App::sidebar()
|
||||||
|
|
|
@ -314,10 +314,17 @@ void PresetBundle::load_selections(const AppConfig &config)
|
||||||
// If the printer profile enumerated by the config are not visible, select an alternate preset.
|
// If the printer profile enumerated by the config are not visible, select an alternate preset.
|
||||||
// Do not select alternate profiles for the print / filament profiles as those presets
|
// Do not select alternate profiles for the print / filament profiles as those presets
|
||||||
// will be selected by the following call of this->update_compatible_with_printer(true).
|
// will be selected by the following call of this->update_compatible_with_printer(true).
|
||||||
prints.select_preset_by_name_strict(initial_print_profile_name);
|
|
||||||
filaments.select_preset_by_name_strict(initial_filament_profile_name);
|
|
||||||
sla_materials.select_preset_by_name_strict(initial_sla_material_profile_name);
|
|
||||||
printers.select_preset_by_name(initial_printer_profile_name, true);
|
printers.select_preset_by_name(initial_printer_profile_name, true);
|
||||||
|
PrinterTechnology printer_technology = printers.get_selected_preset().printer_technology();
|
||||||
|
if (printer_technology == ptFFF) {
|
||||||
|
prints.select_preset_by_name_strict(initial_print_profile_name);
|
||||||
|
filaments.select_preset_by_name_strict(initial_filament_profile_name);
|
||||||
|
sla_materials.select_preset_by_name(initial_sla_material_profile_name, true);
|
||||||
|
} else {
|
||||||
|
prints.select_preset_by_name(initial_print_profile_name, true);
|
||||||
|
filaments.select_preset_by_name(initial_filament_profile_name, true);
|
||||||
|
sla_materials.select_preset_by_name_strict(initial_sla_material_profile_name);
|
||||||
|
}
|
||||||
|
|
||||||
if (printers.get_selected_preset().printer_technology() == ptFFF) {
|
if (printers.get_selected_preset().printer_technology() == ptFFF) {
|
||||||
// Load the names of the other filament profiles selected for a multi-material printer.
|
// Load the names of the other filament profiles selected for a multi-material printer.
|
||||||
|
@ -1208,6 +1215,7 @@ void PresetBundle::update_compatible_with_printer(bool select_other_if_incompati
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case ptSLA:
|
case ptSLA:
|
||||||
{
|
{
|
||||||
|
@ -1216,7 +1224,8 @@ void PresetBundle::update_compatible_with_printer(bool select_other_if_incompati
|
||||||
this->sla_materials.update_compatible_with_printer(printer_preset, select_other_if_incompatible) :
|
this->sla_materials.update_compatible_with_printer(printer_preset, select_other_if_incompatible) :
|
||||||
this->sla_materials.update_compatible_with_printer(printer_preset, select_other_if_incompatible,
|
this->sla_materials.update_compatible_with_printer(printer_preset, select_other_if_incompatible,
|
||||||
[&prefered_sla_material_profile](const std::string& profile_name){ return profile_name == prefered_sla_material_profile; });
|
[&prefered_sla_material_profile](const std::string& profile_name){ return profile_name == prefered_sla_material_profile; });
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -788,22 +788,36 @@ void Tab::update_preset_description_line()
|
||||||
description_line += "\t" + _(L("vendor")) + ": " + (name()=="printer" ? "\n\t\t" : "") + parent->vendor->name +
|
description_line += "\t" + _(L("vendor")) + ": " + (name()=="printer" ? "\n\t\t" : "") + parent->vendor->name +
|
||||||
", ver: " + parent->vendor->config_version.to_string();
|
", ver: " + parent->vendor->config_version.to_string();
|
||||||
if (name() == "printer") {
|
if (name() == "printer") {
|
||||||
const std::string &printer_model = preset.config.opt_string("printer_model");
|
const std::string &printer_model = preset.config.opt_string("printer_model");
|
||||||
//FIXME add prefered_sla_material_profile for SLA
|
if (! printer_model.empty())
|
||||||
const std::string &default_print_profile = preset.config.opt_string("default_print_profile");
|
|
||||||
const std::vector<std::string> &default_filament_profiles = preset.config.option<ConfigOptionStrings>("default_filament_profile")->values;
|
|
||||||
if (!printer_model.empty())
|
|
||||||
description_line += "\n\n\t" + _(L("printer model")) + ": \n\t\t" + printer_model;
|
description_line += "\n\n\t" + _(L("printer model")) + ": \n\t\t" + printer_model;
|
||||||
if (!default_print_profile.empty())
|
switch (preset.printer_technology()) {
|
||||||
description_line += "\n\n\t" + _(L("default print profile")) + ": \n\t\t" + default_print_profile;
|
case ptFFF:
|
||||||
if (!default_filament_profiles.empty())
|
|
||||||
{
|
{
|
||||||
description_line += "\n\n\t" + _(L("default filament profile")) + ": \n\t\t";
|
//FIXME add prefered_sla_material_profile for SLA
|
||||||
for (auto& profile : default_filament_profiles) {
|
const std::string &default_print_profile = preset.config.opt_string("default_print_profile");
|
||||||
if (&profile != &*default_filament_profiles.begin())
|
const std::vector<std::string> &default_filament_profiles = preset.config.option<ConfigOptionStrings>("default_filament_profile")->values;
|
||||||
description_line += ", ";
|
if (!default_print_profile.empty())
|
||||||
description_line += profile;
|
description_line += "\n\n\t" + _(L("default print profile")) + ": \n\t\t" + default_print_profile;
|
||||||
|
if (!default_filament_profiles.empty())
|
||||||
|
{
|
||||||
|
description_line += "\n\n\t" + _(L("default filament profile")) + ": \n\t\t";
|
||||||
|
for (auto& profile : default_filament_profiles) {
|
||||||
|
if (&profile != &*default_filament_profiles.begin())
|
||||||
|
description_line += ", ";
|
||||||
|
description_line += profile;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ptSLA:
|
||||||
|
{
|
||||||
|
//FIXME add prefered_sla_material_profile for SLA
|
||||||
|
const std::string &default_sla_material_profile = preset.config.opt_string("default_sla_material_profile");
|
||||||
|
if (!default_sla_material_profile.empty())
|
||||||
|
description_line += "\n\n\t" + _(L("default SLA material profile")) + ": \n\t\t" + default_sla_material_profile;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue