mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-16 13:25:53 +08:00
Add kill switch parameter for "exact last layer height"
This commit is contained in:
parent
3ee37f40f4
commit
86323a6b73
@ -1046,6 +1046,13 @@ PrintConfigDef::PrintConfigDef()
|
|||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->default_value = new ConfigOptionFloat(0.3);
|
def->default_value = new ConfigOptionFloat(0.3);
|
||||||
|
|
||||||
|
def = this->add("exact_last_layer_height", coBool);
|
||||||
|
def->label = L("Exact last layer height");
|
||||||
|
def->category = L("Layers and Perimeters");
|
||||||
|
def->tooltip = L("This setting controls the height of last object layers to put the last layer at the exact highest height possible. Experimental.");
|
||||||
|
def->cli = "exact_last-layer-height=f";
|
||||||
|
def->default_value = new ConfigOptionBool(false);
|
||||||
|
|
||||||
def = this->add("remaining_times", coBool);
|
def = this->add("remaining_times", coBool);
|
||||||
def->label = L("Supports remaining times");
|
def->label = L("Supports remaining times");
|
||||||
def->tooltip = L("Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute"
|
def->tooltip = L("Emit M73 P[percent printed] R[remaining time in minutes] at 1 minute"
|
||||||
@ -2364,9 +2371,13 @@ void DynamicPrintConfig::normalize()
|
|||||||
opt->values.assign(opt->values.size(), false); // set all values to false
|
opt->values.assign(opt->values.size(), false); // set all values to false
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
this->opt<ConfigOptionInt>("perimeters", true)->value = 1;
|
this->opt<ConfigOptionInt>("perimeters", true)->value = 1;
|
||||||
this->opt<ConfigOptionInt>("top_solid_layers", true)->value = 0;
|
this->opt<ConfigOptionInt>("top_solid_layers", true)->value = 0;
|
||||||
this->opt<ConfigOptionPercent>("fill_density", true)->value = 0;
|
this->opt<ConfigOptionPercent>("fill_density", true)->value = 0;
|
||||||
|
this->opt<ConfigOptionBool>("support_material", true)->value = false;
|
||||||
|
this->opt<ConfigOptionInt>("support_material_enforce_layers")->value = 0;
|
||||||
|
this->opt<ConfigOptionBool>("exact_last_layer_height", true)->value = false;
|
||||||
|
this->opt<ConfigOptionBool>("ensure_vertical_shell_thickness", true)->value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -330,6 +330,7 @@ public:
|
|||||||
ConfigOptionBool infill_only_where_needed;
|
ConfigOptionBool infill_only_where_needed;
|
||||||
ConfigOptionBool interface_shells;
|
ConfigOptionBool interface_shells;
|
||||||
ConfigOptionFloat layer_height;
|
ConfigOptionFloat layer_height;
|
||||||
|
ConfigOptionBool exact_last_layer_height;
|
||||||
ConfigOptionInt raft_layers;
|
ConfigOptionInt raft_layers;
|
||||||
ConfigOptionEnum<SeamPosition> seam_position;
|
ConfigOptionEnum<SeamPosition> seam_position;
|
||||||
// ConfigOptionFloat seam_preferred_direction;
|
// ConfigOptionFloat seam_preferred_direction;
|
||||||
@ -368,6 +369,7 @@ protected:
|
|||||||
OPT_PTR(infill_only_where_needed);
|
OPT_PTR(infill_only_where_needed);
|
||||||
OPT_PTR(interface_shells);
|
OPT_PTR(interface_shells);
|
||||||
OPT_PTR(layer_height);
|
OPT_PTR(layer_height);
|
||||||
|
OPT_PTR(exact_last_layer_height);
|
||||||
OPT_PTR(raft_layers);
|
OPT_PTR(raft_layers);
|
||||||
OPT_PTR(seam_position);
|
OPT_PTR(seam_position);
|
||||||
// OPT_PTR(seam_preferred_direction);
|
// OPT_PTR(seam_preferred_direction);
|
||||||
|
@ -163,6 +163,7 @@ bool PrintObject::invalidate_state_by_config_options(const std::vector<t_config_
|
|||||||
} else if (
|
} else if (
|
||||||
opt_key == "layer_height"
|
opt_key == "layer_height"
|
||||||
|| opt_key == "first_layer_height"
|
|| opt_key == "first_layer_height"
|
||||||
|
|| opt_key == "exact_last_layer_height"
|
||||||
|| opt_key == "raft_layers") {
|
|| opt_key == "raft_layers") {
|
||||||
steps.emplace_back(posSlice);
|
steps.emplace_back(posSlice);
|
||||||
this->reset_layer_height_profile();
|
this->reset_layer_height_profile();
|
||||||
|
@ -71,6 +71,7 @@ SlicingParameters SlicingParameters::create_from_config(
|
|||||||
// Miniumum/maximum of the minimum layer height over all extruders.
|
// Miniumum/maximum of the minimum layer height over all extruders.
|
||||||
params.min_layer_height = MIN_LAYER_HEIGHT;
|
params.min_layer_height = MIN_LAYER_HEIGHT;
|
||||||
params.max_layer_height = std::numeric_limits<double>::max();
|
params.max_layer_height = std::numeric_limits<double>::max();
|
||||||
|
params.exact_last_layer_height = object_config.exact_last_layer_height.value;
|
||||||
if (object_config.support_material.value || params.base_raft_layers > 0) {
|
if (object_config.support_material.value || params.base_raft_layers > 0) {
|
||||||
// Has some form of support. Add the support layers to the minimum / maximum layer height limits.
|
// Has some form of support. Add the support layers to the minimum / maximum layer height limits.
|
||||||
params.min_layer_height = std::max(
|
params.min_layer_height = std::max(
|
||||||
@ -553,7 +554,7 @@ std::vector<coordf_t> generate_object_layers(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adjust the last layer to align with the top object layer exactly
|
// Adjust the last layer to align with the top object layer exactly
|
||||||
if (out.size() > 0 && slicing_params.object_print_z_height() != out[out.size()-1]){
|
if (out.size() > 0 && slicing_params.object_print_z_height() != out[out.size() - 1] && slicing_params.exact_last_layer_height) {
|
||||||
float neededPrintZ = slicing_params.object_print_z_height();
|
float neededPrintZ = slicing_params.object_print_z_height();
|
||||||
int idx_layer = out.size() / 2 - 1;
|
int idx_layer = out.size() / 2 - 1;
|
||||||
float diffZ = neededPrintZ - out[idx_layer * 2 + 1];
|
float diffZ = neededPrintZ - out[idx_layer * 2 + 1];
|
||||||
|
@ -57,6 +57,7 @@ struct SlicingParameters
|
|||||||
coordf_t min_layer_height;
|
coordf_t min_layer_height;
|
||||||
coordf_t max_layer_height;
|
coordf_t max_layer_height;
|
||||||
coordf_t max_suport_layer_height;
|
coordf_t max_suport_layer_height;
|
||||||
|
bool exact_last_layer_height;
|
||||||
|
|
||||||
// First layer height of the print, this may be used for the first layer of the raft
|
// First layer height of the print, this may be used for the first layer of the raft
|
||||||
// or for the first layer of the print.
|
// or for the first layer of the print.
|
||||||
|
@ -306,7 +306,7 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
"elefant_foot_compensation", "xy_size_compensation", "hole_size_compensation", "threads", "resolution",
|
"elefant_foot_compensation", "xy_size_compensation", "hole_size_compensation", "threads", "resolution",
|
||||||
"wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_bridging",
|
"wipe_tower", "wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_bridging",
|
||||||
"only_one_perimeter_top", "single_extruder_multi_material_priming", "compatible_printers", "compatible_printers_condition", "inherits",
|
"only_one_perimeter_top", "single_extruder_multi_material_priming", "compatible_printers", "compatible_printers_condition", "inherits",
|
||||||
"infill_dense", "no_perimeter_unsupported", "min_perimeter_unsupported", "noperi_bridge_only"
|
"infill_dense", "no_perimeter_unsupported", "min_perimeter_unsupported", "noperi_bridge_only", "exact_last_layer_height"
|
||||||
};
|
};
|
||||||
return s_opts;
|
return s_opts;
|
||||||
}
|
}
|
||||||
|
@ -786,7 +786,8 @@ void TabPrint::build()
|
|||||||
auto page = add_options_page(_(L("Layers and perimeters")), "layers.png");
|
auto page = add_options_page(_(L("Layers and perimeters")), "layers.png");
|
||||||
auto optgroup = page->new_optgroup(_(L("Layer height")));
|
auto optgroup = page->new_optgroup(_(L("Layer height")));
|
||||||
optgroup->append_single_option_line("layer_height");
|
optgroup->append_single_option_line("layer_height");
|
||||||
optgroup->append_single_option_line("first_layer_height");
|
optgroup->append_single_option_line("first_layer_height");
|
||||||
|
optgroup->append_single_option_line("exact_last_layer_height");
|
||||||
|
|
||||||
optgroup = page->new_optgroup(_(L("Vertical shells")));
|
optgroup = page->new_optgroup(_(L("Vertical shells")));
|
||||||
optgroup->append_single_option_line("perimeters");
|
optgroup->append_single_option_line("perimeters");
|
||||||
@ -1042,15 +1043,22 @@ void TabPrint::update()
|
|||||||
|
|
||||||
double fill_density = m_config->option<ConfigOptionPercent>("fill_density")->value;
|
double fill_density = m_config->option<ConfigOptionPercent>("fill_density")->value;
|
||||||
|
|
||||||
if (m_config->opt_bool("spiral_vase") &&
|
if (m_config->opt_bool("spiral_vase") && !(
|
||||||
!(m_config->opt_int("perimeters") == 1 && m_config->opt_int("top_solid_layers") == 0 &&
|
m_config->opt_int("perimeters") == 1
|
||||||
fill_density == 0)) {
|
&& m_config->opt_int("top_solid_layers") == 0
|
||||||
|
&& fill_density == 0
|
||||||
|
&& m_config->opt_bool("support_material") == false
|
||||||
|
&& m_config->opt_int("support_material_enforce_layers") == 0
|
||||||
|
&& m_config->opt_bool("exact_last_layer_height") == false
|
||||||
|
&& m_config->opt_bool("ensure_vertical_shell_thickness") == false
|
||||||
|
)) {
|
||||||
wxString msg_text = _(L("The Spiral Vase mode requires:\n"
|
wxString msg_text = _(L("The Spiral Vase mode requires:\n"
|
||||||
"- one perimeter\n"
|
"- one perimeter\n"
|
||||||
"- no top solid layers\n"
|
"- no top solid layers\n"
|
||||||
"- 0% fill density\n"
|
"- 0% fill density\n"
|
||||||
"- no support material\n"
|
"- no support material\n"
|
||||||
"- no ensure_vertical_shell_thickness\n"
|
"- no ensure_vertical_shell_thickness\n"
|
||||||
|
"- unchecked 'exact last layer height'\n"
|
||||||
"\nShall I adjust those settings in order to enable Spiral Vase?"));
|
"\nShall I adjust those settings in order to enable Spiral Vase?"));
|
||||||
auto dialog = new wxMessageDialog(parent(), msg_text, _(L("Spiral Vase")), wxICON_WARNING | wxYES | wxNO);
|
auto dialog = new wxMessageDialog(parent(), msg_text, _(L("Spiral Vase")), wxICON_WARNING | wxYES | wxNO);
|
||||||
DynamicPrintConfig new_conf = *m_config;
|
DynamicPrintConfig new_conf = *m_config;
|
||||||
@ -1059,7 +1067,8 @@ void TabPrint::update()
|
|||||||
new_conf.set_key_value("top_solid_layers", new ConfigOptionInt(0));
|
new_conf.set_key_value("top_solid_layers", new ConfigOptionInt(0));
|
||||||
new_conf.set_key_value("fill_density", new ConfigOptionPercent(0));
|
new_conf.set_key_value("fill_density", new ConfigOptionPercent(0));
|
||||||
new_conf.set_key_value("support_material", new ConfigOptionBool(false));
|
new_conf.set_key_value("support_material", new ConfigOptionBool(false));
|
||||||
new_conf.set_key_value("support_material_enforce_layers", new ConfigOptionInt(0));
|
new_conf.set_key_value("support_material_enforce_layers", new ConfigOptionInt(0));
|
||||||
|
new_conf.set_key_value("exact_last_layer_height", new ConfigOptionBool(false));
|
||||||
new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(false));
|
new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(false));
|
||||||
fill_density = 0;
|
fill_density = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user