Rename wipe tower ribs related options

This commit is contained in:
Noisyfox
2025-10-02 22:56:54 +08:00
parent 4943c31bd0
commit a932821168
12 changed files with 78 additions and 79 deletions
+3 -3
View File
@@ -3523,8 +3523,8 @@ int CLI::run(int argc, char **argv)
BOOST_LOG_TRIVIAL(info) << boost::format("%1%, process old params for support and wipe tower")%__LINE__; BOOST_LOG_TRIVIAL(info) << boost::format("%1%, process old params for support and wipe tower")%__LINE__;
//wipe tower params process //wipe tower params process
ConfigOptionBool *prime_tower_rib_wall_option = m_print_config.option<ConfigOptionBool>("prime_tower_rib_wall", true); ConfigOptionEnum<WipeTowerWallType> *prime_tower_rib_wall_option = m_print_config.option<ConfigOptionEnum<WipeTowerWallType>>("wipe_tower_wall_type", true);
prime_tower_rib_wall_option->value = false; prime_tower_rib_wall_option->value = WipeTowerWallType::wtwRectangle;
ConfigOptionPercent *prime_tower_infill_gap_option = m_print_config.option<ConfigOptionPercent>("prime_tower_infill_gap", true); ConfigOptionPercent *prime_tower_infill_gap_option = m_print_config.option<ConfigOptionPercent>("prime_tower_infill_gap", true);
prime_tower_infill_gap_option->value = 100; prime_tower_infill_gap_option->value = 100;
@@ -4406,7 +4406,7 @@ int CLI::run(int argc, char **argv)
ConfigOptionFloat* width_option = m_print_config.option<ConfigOptionFloat>("prime_tower_width", true); ConfigOptionFloat* width_option = m_print_config.option<ConfigOptionFloat>("prime_tower_width", true);
ConfigOptionFloat* rotation_angle_option = m_print_config.option<ConfigOptionFloat>("wipe_tower_rotation_angle", true); ConfigOptionFloat* rotation_angle_option = m_print_config.option<ConfigOptionFloat>("wipe_tower_rotation_angle", true);
ConfigOptionFloats *volume_option = m_print_config.option<ConfigOptionFloats>("filament_prime_volume", true); ConfigOptionFloats *volume_option = m_print_config.option<ConfigOptionFloats>("filament_prime_volume", true);
ConfigOptionBool *prime_tower_rib_wall_option = m_print_config.option<ConfigOptionBool>("prime_tower_rib_wall", true); ConfigOptionEnum<WipeTowerWallType> *prime_tower_rib_wall_option = m_print_config.option<ConfigOptionEnum<WipeTowerWallType>>("wipe_tower_wall_type", true);
std::vector<double> wipe_volume = volume_option->values; std::vector<double> wipe_volume = volume_option->values;
BOOST_LOG_TRIVIAL(info) << boost::format("prime_tower_width %1% wipe_tower_rotation_angle %2% prime_volume %3%, rib_wall %4%") % width_option->value % rotation_angle_option->value % get_max_element(wipe_volume) %prime_tower_rib_wall_option->value; BOOST_LOG_TRIVIAL(info) << boost::format("prime_tower_width %1% wipe_tower_rotation_angle %2% prime_volume %3%, rib_wall %4%") % width_option->value % rotation_angle_option->value % get_max_element(wipe_volume) %prime_tower_rib_wall_option->value;
+4 -4
View File
@@ -1506,10 +1506,10 @@ WipeTower::WipeTower(const PrintConfig& config, int plate_idx, Vec3d plate_origi
m_filaments_change_length(config.filament_change_length.values), m_filaments_change_length(config.filament_change_length.values),
m_is_multi_extruder(config.nozzle_diameter.size() > 1), m_is_multi_extruder(config.nozzle_diameter.size() > 1),
m_use_gap_wall(config.prime_tower_skip_points.value), m_use_gap_wall(config.prime_tower_skip_points.value),
m_use_rib_wall(config.prime_tower_rib_wall.value), m_use_rib_wall(config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib),
m_extra_rib_length((float)config.prime_tower_extra_rib_length.value), m_extra_rib_length((float)config.wipe_tower_extra_rib_length.value),
m_rib_width((float)config.prime_tower_rib_width.value), m_rib_width((float)config.wipe_tower_rib_width.value),
m_used_fillet(config.prime_tower_fillet_wall.value), m_used_fillet(config.wipe_tower_fillet_wall.value),
m_extra_spacing((float)config.prime_tower_infill_gap.value/100.f), m_extra_spacing((float)config.prime_tower_infill_gap.value/100.f),
m_tower_framework(config.prime_tower_enable_framework.value), m_tower_framework(config.prime_tower_enable_framework.value),
m_flat_ironing(config.prime_tower_flat_ironing.value) m_flat_ironing(config.prime_tower_flat_ironing.value)
+1 -1
View File
@@ -914,7 +914,7 @@ static std::vector<std::string> s_Preset_print_options {
"top_surface_line_width", "support_line_width", "infill_wall_overlap","top_bottom_infill_wall_overlap", "bridge_flow", "internal_bridge_flow", "top_surface_line_width", "support_line_width", "infill_wall_overlap","top_bottom_infill_wall_overlap", "bridge_flow", "internal_bridge_flow",
"elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", "prime_tower_enable_framework", "elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", "prime_tower_enable_framework",
"prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points",
"prime_tower_rib_wall","prime_tower_extra_rib_length","prime_tower_rib_width","prime_tower_fillet_wall","prime_tower_infill_gap", "prime_tower_infill_gap",
"prime_tower_flat_ironing", "prime_tower_flat_ironing",
"wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits",
"flush_into_infill", "flush_into_objects", "flush_into_support", "flush_into_infill", "flush_into_objects", "flush_into_support",
+7 -11
View File
@@ -307,10 +307,6 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|| opt_key == "prime_tower_brim_width" || opt_key == "prime_tower_brim_width"
|| opt_key == "prime_tower_skip_points" || opt_key == "prime_tower_skip_points"
|| opt_key == "prime_tower_flat_ironing" || opt_key == "prime_tower_flat_ironing"
|| opt_key == "prime_tower_rib_wall"
|| opt_key == "prime_tower_extra_rib_length"
|| opt_key == "prime_tower_rib_width"
|| opt_key == "prime_tower_fillet_wall"
|| opt_key == "first_layer_print_sequence" || opt_key == "first_layer_print_sequence"
|| opt_key == "other_layers_print_sequence" || opt_key == "other_layers_print_sequence"
|| opt_key == "other_layers_print_sequence_nums" || opt_key == "other_layers_print_sequence_nums"
@@ -972,7 +968,7 @@ static StringObjectException layered_print_cleareance_valid(const Print &print,
float depth = print.wipe_tower_data(filaments_count).depth; float depth = print.wipe_tower_data(filaments_count).depth;
//float brim_width = print.wipe_tower_data(filaments_count).brim_width; //float brim_width = print.wipe_tower_data(filaments_count).brim_width;
if (config.prime_tower_rib_wall.value) if (config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib)
width = depth; width = depth;
Polygons convex_hulls_temp; Polygons convex_hulls_temp;
@@ -2984,9 +2980,9 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const
layer_height = m_objects.front()->config().layer_height.value; layer_height = m_objects.front()->config().layer_height.value;
auto timelapse_type = config().option<ConfigOptionEnum<TimelapseType>>("timelapse_type"); auto timelapse_type = config().option<ConfigOptionEnum<TimelapseType>>("timelapse_type");
bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | m_config.prime_tower_rib_wall.value; bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib);
double extra_spacing = config().option("prime_tower_infill_gap")->getFloat() / 100.; double extra_spacing = config().option("prime_tower_infill_gap")->getFloat() / 100.;
double rib_width = config().option("prime_tower_rib_width")->getFloat(); double rib_width = config().option("wipe_tower_rib_width")->getFloat();
double filament_change_volume = 0.; double filament_change_volume = 0.;
{ {
@@ -3011,12 +3007,12 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const
double volume = wipe_volume * filament_depth_count; double volume = wipe_volume * filament_depth_count;
if (m_config.nozzle_diameter.values.size() == 2) volume += filament_change_volume * (int) (filaments_cnt / 2); if (m_config.nozzle_diameter.values.size() == 2) volume += filament_change_volume * (int) (filaments_cnt / 2);
if (m_config.prime_tower_rib_wall.value) { if (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib) {
double depth = std::sqrt(volume / layer_height * extra_spacing); double depth = std::sqrt(volume / layer_height * extra_spacing);
if (need_wipe_tower || filaments_cnt > 1) { if (need_wipe_tower || filaments_cnt > 1) {
float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height);
depth = std::max((double) min_wipe_tower_depth, depth); depth = std::max((double) min_wipe_tower_depth, depth);
depth += rib_width / std::sqrt(2) + config().prime_tower_extra_rib_length.value; depth += rib_width / std::sqrt(2) + config().wipe_tower_extra_rib_length.value;
const_cast<Print *>(this)->m_wipe_tower_data.depth = depth; const_cast<Print *>(this)->m_wipe_tower_data.depth = depth;
const_cast<Print *>(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; const_cast<Print *>(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width;
} }
@@ -3231,8 +3227,8 @@ void Print::_make_wipe_tower()
m_wipe_tower_data.used_filament = wipe_tower.get_used_filament(); m_wipe_tower_data.used_filament = wipe_tower.get_used_filament();
m_wipe_tower_data.number_of_toolchanges = wipe_tower.get_number_of_toolchanges(); m_wipe_tower_data.number_of_toolchanges = wipe_tower.get_number_of_toolchanges();
m_wipe_tower_data.construct_mesh(wipe_tower.width(), wipe_tower.get_depth(), wipe_tower.get_height(), wipe_tower.get_brim_width(), config().prime_tower_rib_wall.value, m_wipe_tower_data.construct_mesh(wipe_tower.width(), wipe_tower.get_depth(), wipe_tower.get_height(), wipe_tower.get_brim_width(), config().wipe_tower_wall_type.value == WipeTowerWallType::wtwRib,
wipe_tower.get_rib_width(), wipe_tower.get_rib_length(), config().prime_tower_fillet_wall.value); wipe_tower.get_rib_width(), wipe_tower.get_rib_length(), config().wipe_tower_fillet_wall.value);
const Vec3d origin = this->get_plate_origin(); const Vec3d origin = this->get_plate_origin();
m_fake_wipe_tower.rib_offset = wipe_tower.get_rib_offset(); m_fake_wipe_tower.rib_offset = wipe_tower.get_rib_offset();
m_fake_wipe_tower.set_fake_extrusion_data(wipe_tower.position() + m_fake_wipe_tower.rib_offset, wipe_tower.width(), wipe_tower.get_height(), wipe_tower.get_layer_height(), m_fake_wipe_tower.set_fake_extrusion_data(wipe_tower.position() + m_fake_wipe_tower.rib_offset, wipe_tower.width(), wipe_tower.get_height(), wipe_tower.get_layer_height(),
+15 -30
View File
@@ -6173,23 +6173,6 @@ void PrintConfigDef::init_fff_params()
"volumes below."); "volumes below.");
def->set_default_value(new ConfigOptionFloats { 70., 70., 70., 70., 70., 70., 70., 70., 70., 70. }); def->set_default_value(new ConfigOptionFloats { 70., 70., 70., 70., 70., 70., 70., 70., 70., 70. });
def = this->add("prime_tower_extra_rib_length", coFloat);
def->label = L("Extra rib length");
def->tooltip = L("Positive values can increase the size of the rib wall, while negative values can reduce the size."
"However, the size of the rib wall can not be smaller than that determined by the cleaning volume.");
def->sidetext = L("mm");
def->max = 300;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def = this->add("prime_tower_rib_width", coFloat);
def->label = L("Rib width");
def->tooltip = L("Rib width");
def->sidetext = L("mm");
def->mode = comAdvanced;
def->min = 0;
def->set_default_value(new ConfigOptionFloat(8));
def = this->add("prime_tower_skip_points", coBool); def = this->add("prime_tower_skip_points", coBool);
def->label = L("Skip points"); def->label = L("Skip points");
def->tooltip = L("The wall of prime tower will skip the start points of wipe path"); def->tooltip = L("The wall of prime tower will skip the start points of wipe path");
@@ -6200,19 +6183,6 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool(false)); def->set_default_value(new ConfigOptionBool(false));
def = this->add("prime_tower_rib_wall", coBool);
def->label = L("Rib wall");
def->tooltip = L("The wall of prime tower will add four ribs and make its "
"cross-section as close to a square as possible, so the width will be fixed.");
def->mode = comSimple;
def->set_default_value(new ConfigOptionBool(true));
def = this->add("prime_tower_fillet_wall", coBool);
def->label = L("Fillet wall");
def->tooltip = L("The wall of prime tower will fillet");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool(true));
def = this->add("prime_tower_infill_gap", coPercent); def = this->add("prime_tower_infill_gap", coPercent);
def->label = L("Infill gap"); def->label = L("Infill gap");
def->tooltip = L("Infill gap"); def->tooltip = L("Infill gap");
@@ -7389,6 +7359,21 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
} }
} }
} }
// Orca: Rename wipe tower ribs related options
else if (opt_key == "prime_tower_rib_wall") {
if (value == "1") {
opt_key = "wipe_tower_wall_type";
value = "rib";
} else {
opt_key = "";
}
} else if (opt_key == "prime_tower_extra_rib_length") {
opt_key = "wipe_tower_extra_rib_length";
} else if (opt_key == "prime_tower_rib_width") {
opt_key = "wipe_tower_rib_width";
} else if (opt_key == "prime_tower_fillet_wall") {
opt_key = "wipe_tower_fillet_wall";
}
// Ignore the following obsolete configuration keys: // Ignore the following obsolete configuration keys:
static std::set<std::string> ignore = { static std::set<std::string> ignore = {
-4
View File
@@ -1465,13 +1465,9 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE(
((ConfigOptionFloat, wipe_tower_per_color_wipe)) ((ConfigOptionFloat, wipe_tower_per_color_wipe))
((ConfigOptionFloat, wipe_tower_rotation_angle)) ((ConfigOptionFloat, wipe_tower_rotation_angle))
((ConfigOptionFloat, prime_tower_brim_width)) ((ConfigOptionFloat, prime_tower_brim_width))
((ConfigOptionFloat, prime_tower_extra_rib_length))
((ConfigOptionFloat, prime_tower_rib_width))
((ConfigOptionPercent, prime_tower_infill_gap)) ((ConfigOptionPercent, prime_tower_infill_gap))
((ConfigOptionBool, prime_tower_skip_points)) ((ConfigOptionBool, prime_tower_skip_points))
((ConfigOptionBool, prime_tower_flat_ironing)) ((ConfigOptionBool, prime_tower_flat_ironing))
((ConfigOptionBool, prime_tower_rib_wall))
((ConfigOptionBool, prime_tower_fillet_wall))
((ConfigOptionFloat, wipe_tower_bridging)) ((ConfigOptionFloat, wipe_tower_bridging))
((ConfigOptionPercent, wipe_tower_extra_flow)) ((ConfigOptionPercent, wipe_tower_extra_flow))
((ConfigOptionFloats, flush_volumes_matrix)) ((ConfigOptionFloats, flush_volumes_matrix))
+16 -12
View File
@@ -421,6 +421,16 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
} }
#endif #endif
// BBL printers do not support cone wipe tower
if (config->opt_bool("enable_prime_tower") && is_BBL_Printer) {
auto wipe_tower_wall_type = config->opt_enum<WipeTowerWallType>("wipe_tower_wall_type");
if (wipe_tower_wall_type == WipeTowerWallType::wtwCone) {
DynamicPrintConfig new_conf = *config;
new_conf.set_key_value("wipe_tower_wall_type", new ConfigOptionEnum<WipeTowerWallType>(WipeTowerWallType::wtwRectangle));
apply(config, &new_conf);
}
}
// Check "enable_support" and "overhangs" relations only on global settings level // Check "enable_support" and "overhangs" relations only on global settings level
if (is_global_config && config->opt_bool("enable_support")) { if (is_global_config && config->opt_bool("enable_support")) {
// Ask only once. // Ask only once.
@@ -766,14 +776,9 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
toggle_line("preheat_steps", have_ooze_prevention && (preheat_steps > 0)); toggle_line("preheat_steps", have_ooze_prevention && (preheat_steps > 0));
bool have_prime_tower = config->opt_bool("enable_prime_tower"); bool have_prime_tower = config->opt_bool("enable_prime_tower");
for (auto el : {"prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_rib_wall", "prime_tower_infill_gap","prime_tower_enable_framework"}) for (auto el : {"prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "wipe_tower_wall_type", "prime_tower_infill_gap","prime_tower_enable_framework"})
toggle_line(el, have_prime_tower); toggle_line(el, have_prime_tower);
bool have_rib_wall = config->opt_bool("prime_tower_rib_wall")&&have_prime_tower;
for (auto el : {"prime_tower_extra_rib_length", "prime_tower_rib_width", "prime_tower_fillet_wall"})
toggle_line(el, have_rib_wall);
toggle_field("prime_tower_width", !have_rib_wall);
for (auto el : {"wall_filament", "sparse_infill_filament", "solid_infill_filament", "wipe_tower_filament"}) for (auto el : {"wall_filament", "sparse_infill_filament", "solid_infill_filament", "wipe_tower_filament"})
toggle_line(el, !bSEMM); toggle_line(el, !bSEMM);
@@ -781,18 +786,17 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle",
"wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed",
"wipe_tower_wall_type",
"wipe_tower_extra_rib_length","wipe_tower_rib_width","wipe_tower_fillet_wall",
"wipe_tower_bridging", "wipe_tower_extra_flow", "wipe_tower_bridging", "wipe_tower_extra_flow",
"wipe_tower_no_sparse_layers"}) "wipe_tower_no_sparse_layers"})
toggle_line(el, have_prime_tower && !is_BBL_Printer); toggle_line(el, have_prime_tower && !is_BBL_Printer);
WipeTowerWallType wipe_tower_wall_type = config->opt_enum<WipeTowerWallType>("wipe_tower_wall_type"); WipeTowerWallType wipe_tower_wall_type = config->opt_enum<WipeTowerWallType>("wipe_tower_wall_type");
bool have_rib_wall = (wipe_tower_wall_type == WipeTowerWallType::wtwRib)&&have_prime_tower;
toggle_line("wipe_tower_cone_angle", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwCone); toggle_line("wipe_tower_cone_angle", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwCone);
toggle_line("wipe_tower_extra_rib_length", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwRib); toggle_line("wipe_tower_extra_rib_length", have_rib_wall);
toggle_line("wipe_tower_rib_width", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwRib); toggle_line("wipe_tower_rib_width", have_rib_wall);
toggle_line("wipe_tower_fillet_wall", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwRib); toggle_line("wipe_tower_fillet_wall", have_rib_wall);
toggle_field("prime_tower_width", have_prime_tower && !(is_BBL_Printer && have_rib_wall));
toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && !is_BBL_Printer); toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && !is_BBL_Printer);
+1
View File
@@ -80,6 +80,7 @@ public:
void check_filament_max_volumetric_speed(DynamicPrintConfig *config); void check_filament_max_volumetric_speed(DynamicPrintConfig *config);
void check_chamber_temperature(DynamicPrintConfig* config); void check_chamber_temperature(DynamicPrintConfig* config);
void set_is_BBL_Printer(bool is_bbl_printer) { is_BBL_Printer = is_bbl_printer; }; void set_is_BBL_Printer(bool is_bbl_printer) { is_BBL_Printer = is_bbl_printer; };
bool get_is_BBL_Printer() { return is_BBL_Printer; };
// SLA print // SLA print
void update_print_sla_config(DynamicPrintConfig* config, const bool is_global_config = false); void update_print_sla_config(DynamicPrintConfig* config, const bool is_global_config = false);
void toggle_print_sla_options(DynamicPrintConfig* config); void toggle_print_sla_options(DynamicPrintConfig* config);
+2 -2
View File
@@ -1562,7 +1562,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
m_opt_id == "internal_solid_infill_pattern" || m_opt_id == "sparse_infill_pattern" || m_opt_id == "internal_solid_infill_pattern" || m_opt_id == "sparse_infill_pattern" ||
m_opt_id == "support_base_pattern" || m_opt_id == "support_interface_pattern" || m_opt_id == "support_base_pattern" || m_opt_id == "support_interface_pattern" ||
m_opt_id == "ironing_pattern" || m_opt_id == "support_ironing_pattern" || m_opt_id == "ironing_pattern" || m_opt_id == "support_ironing_pattern" ||
m_opt_id == "support_style" || m_opt_id == "curr_bed_type") m_opt_id == "support_style" || m_opt_id == "curr_bed_type" || m_opt_id == "wipe_tower_wall_type")
{ {
std::string key; std::string key;
const t_config_enum_values& map_names = *m_opt.enum_keys_map; const t_config_enum_values& map_names = *m_opt.enum_keys_map;
@@ -1653,7 +1653,7 @@ boost::any& Choice::get_value()
m_opt_id == "internal_solid_infill_pattern" || m_opt_id == "sparse_infill_pattern" || m_opt_id == "internal_solid_infill_pattern" || m_opt_id == "sparse_infill_pattern" ||
m_opt_id == "support_base_pattern" || m_opt_id == "support_interface_pattern" || m_opt_id == "support_base_pattern" || m_opt_id == "support_interface_pattern" ||
m_opt_id == "ironing_pattern" || m_opt_id == "support_ironing_pattern" || m_opt_id == "ironing_pattern" || m_opt_id == "support_ironing_pattern" ||
m_opt_id == "support_style" || m_opt_id == "curr_bed_type") m_opt_id == "support_style" || m_opt_id == "curr_bed_type" || m_opt_id == "wipe_tower_wall_type")
{ {
const std::string &key = m_opt.enum_values[field->GetSelection()]; const std::string &key = m_opt.enum_values[field->GetSelection()];
m_value = int(m_opt.enum_keys_map->at(key)); m_value = int(m_opt.enum_keys_map->at(key));
+4 -4
View File
@@ -1972,9 +1972,9 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con
auto timelapse_type = config.option<ConfigOptionEnum<TimelapseType>>("timelapse_type"); auto timelapse_type = config.option<ConfigOptionEnum<TimelapseType>>("timelapse_type");
bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | enable_wrapping_detection; bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | enable_wrapping_detection;
double extra_spacing = config.option("prime_tower_infill_gap")->getFloat() / 100.; double extra_spacing = config.option("prime_tower_infill_gap")->getFloat() / 100.;
const ConfigOptionBool* use_rib_wall_opt = config.option<ConfigOptionBool>("prime_tower_rib_wall"); const ConfigOptionEnum<WipeTowerWallType>* use_rib_wall_opt = config.option<ConfigOptionEnum<WipeTowerWallType>>("wipe_tower_wall_type");
bool use_rib_wall = use_rib_wall_opt ? use_rib_wall_opt->value: true; bool use_rib_wall = use_rib_wall_opt ? use_rib_wall_opt->value == WipeTowerWallType::wtwRib: false;
double rib_width = config.option("prime_tower_rib_width")->getFloat(); double rib_width = config.option("wipe_tower_rib_width")->getFloat();
double depth; double depth;
double filament_change_volume=0.; double filament_change_volume=0.;
{ {
@@ -1996,7 +1996,7 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con
if (need_wipe_tower || plate_extruder_size > 1) { if (need_wipe_tower || plate_extruder_size > 1) {
float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height);
depth = std::max((double) min_wipe_tower_depth, depth); depth = std::max((double) min_wipe_tower_depth, depth);
depth += rib_width / std::sqrt(2) + m_print->config().prime_tower_extra_rib_length.value; depth += rib_width / std::sqrt(2) + m_print->config().wipe_tower_extra_rib_length.value;
wipe_tower_size(0) = wipe_tower_size(1) = depth; wipe_tower_size(0) = wipe_tower_size(1) = depth;
} }
} }
+4 -4
View File
@@ -4348,7 +4348,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
"nozzle_height", "skirt_type", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "skirt_start_angle", "nozzle_height", "skirt_type", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "skirt_start_angle",
"brim_width", "brim_object_gap", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "preferred_orientation", "brim_width", "brim_object_gap", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "preferred_orientation",
"enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_enable_framework", "enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_enable_framework",
"prime_tower_rib_wall","prime_tower_extra_rib_length", "prime_tower_rib_width","prime_tower_fillet_wall", "prime_tower_infill_gap","filament_prime_volume", "prime_tower_infill_gap","filament_prime_volume",
"extruder_colour", "filament_colour", "filament_type", "material_colour", "printable_height", "extruder_printable_height", "printer_model", "printer_technology", "extruder_colour", "filament_colour", "filament_type", "material_colour", "printable_height", "extruder_printable_height", "printer_model", "printer_technology",
// These values are necessary to construct SlicingParameters by the Canvas3D variable layer height editor. // These values are necessary to construct SlicingParameters by the Canvas3D variable layer height editor.
"layer_height", "initial_layer_print_height", "min_layer_height", "max_layer_height", "layer_height", "initial_layer_print_height", "min_layer_height", "max_layer_height",
@@ -5655,8 +5655,8 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
} }
} }
} }
ConfigOptionBool *prime_tower_rib_wall_option = config.option<ConfigOptionBool>("prime_tower_rib_wall", true); ConfigOptionEnum<WipeTowerWallType> *prime_tower_rib_wall_option = config.option<ConfigOptionEnum<WipeTowerWallType>>("wipe_tower_wall_type", true);
prime_tower_rib_wall_option->value = false; prime_tower_rib_wall_option->value = WipeTowerWallType::wtwRectangle;
ConfigOptionPercent *prime_tower_infill_gap_option = config.option<ConfigOptionPercent>("prime_tower_infill_gap", true); ConfigOptionPercent *prime_tower_infill_gap_option = config.option<ConfigOptionPercent>("prime_tower_infill_gap", true);
prime_tower_infill_gap_option->value = 100; prime_tower_infill_gap_option->value = 100;
@@ -5684,7 +5684,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
std::vector<std::string> diff_process_keys; std::vector<std::string> diff_process_keys;
std::string diff_process_settings = diff_settings[0]; std::string diff_process_settings = diff_settings[0];
Slic3r::unescape_strings_cstyle(diff_process_settings, diff_process_keys); Slic3r::unescape_strings_cstyle(diff_process_settings, diff_process_keys);
diff_process_keys.emplace_back("prime_tower_rib_wall"); diff_process_keys.emplace_back("wipe_tower_wall_type");
diff_process_keys.emplace_back("prime_tower_infill_gap"); diff_process_keys.emplace_back("prime_tower_infill_gap");
diff_process_settings = Slic3r::escape_strings_cstyle(diff_process_keys); diff_process_settings = Slic3r::escape_strings_cstyle(diff_process_keys);
diff_settings[0] = diff_process_settings; diff_settings[0] = diff_process_settings;
+21 -4
View File
@@ -2581,10 +2581,6 @@ void TabPrint::build()
optgroup->append_single_option_line("prime_tower_width", "multimaterial_settings_prime_tower#width"); optgroup->append_single_option_line("prime_tower_width", "multimaterial_settings_prime_tower#width");
optgroup->append_single_option_line("prime_tower_brim_width", "multimaterial_settings_prime_tower#brim-width"); optgroup->append_single_option_line("prime_tower_brim_width", "multimaterial_settings_prime_tower#brim-width");
optgroup->append_single_option_line("prime_tower_infill_gap","parameter/prime-tower"); optgroup->append_single_option_line("prime_tower_infill_gap","parameter/prime-tower");
optgroup->append_single_option_line("prime_tower_rib_wall", "parameter/prime-tower");
optgroup->append_single_option_line("prime_tower_extra_rib_length","parameter/prime-tower");
optgroup->append_single_option_line("prime_tower_rib_width","parameter/prime-tower");
optgroup->append_single_option_line("prime_tower_fillet_wall","parameter/prime-tower");
optgroup->append_single_option_line("wipe_tower_rotation_angle", "multimaterial_settings_prime_tower#wipe-tower-rotation-angle"); optgroup->append_single_option_line("wipe_tower_rotation_angle", "multimaterial_settings_prime_tower#wipe-tower-rotation-angle");
optgroup->append_single_option_line("wipe_tower_bridging", "multimaterial_settings_prime_tower#maximal-bridging-distance"); optgroup->append_single_option_line("wipe_tower_bridging", "multimaterial_settings_prime_tower#maximal-bridging-distance");
optgroup->append_single_option_line("wipe_tower_extra_spacing", "multimaterial_settings_prime_tower#wipe-tower-purge-lines-spacing"); optgroup->append_single_option_line("wipe_tower_extra_spacing", "multimaterial_settings_prime_tower#wipe-tower-purge-lines-spacing");
@@ -2765,6 +2761,27 @@ void TabPrint::toggle_options()
} }
cb->SetValue(n); cb->SetValue(n);
} }
// BBL printers do not support cone wipe tower
field = m_active_page->get_field("wipe_tower_wall_type");
if (auto choice = dynamic_cast<Choice*>(field)) {
auto def = print_config_def.get("wipe_tower_wall_type");
std::vector<int> enum_set_bbl = {wtwRectangle, wtwRib};
std::vector<int> enum_set_none_bbl = {wtwRectangle, wtwCone, wtwRib};
auto& set = m_config_manipulation.get_is_BBL_Printer() ? enum_set_bbl : enum_set_none_bbl;
auto& opt = const_cast<ConfigOptionDef&>(field->m_opt);
auto cb = dynamic_cast<ComboBox*>(choice->window);
auto n = cb->GetValue();
opt.enum_values.clear();
opt.enum_labels.clear();
cb->Clear();
for (auto i : set) {
opt.enum_values.push_back(def->enum_values[i]);
opt.enum_labels.push_back(def->enum_labels[i]);
cb->Append(_(def->enum_labels[i]));
}
cb->SetValue(n);
}
} }
void TabPrint::update() void TabPrint::update()