mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-29 20:01:26 +00:00
FIX add prime_tower_skip_points parameter
jira: none Change-Id: I696d6ca5d9bccf16b48110157cd6ec44839a05e8 (cherry picked from commit 9b5bbebf311c2d8d68ec89aeda3ddae2b267692e)
This commit is contained in:
@@ -99,7 +99,6 @@ static const std::string lift_gcode_after_printing_object = "{if toolchange_coun
|
|||||||
Vec2d travel_point_1;
|
Vec2d travel_point_1;
|
||||||
Vec2d travel_point_2;
|
Vec2d travel_point_2;
|
||||||
Vec2d travel_point_3;
|
Vec2d travel_point_3;
|
||||||
static bool is_used_travel_avoid_perimeter = true;
|
|
||||||
static std::vector<Vec2d> get_path_of_change_filament(const Print& print)
|
static std::vector<Vec2d> get_path_of_change_filament(const Print& print)
|
||||||
{
|
{
|
||||||
// give safe value in case there is no start_end_points in config
|
// give safe value in case there is no start_end_points in config
|
||||||
@@ -730,6 +729,8 @@ static std::vector<Vec2d> get_path_of_change_filament(const Print& print)
|
|||||||
// Otherwise, leave control to the user completely.
|
// Otherwise, leave control to the user completely.
|
||||||
std::string change_filament_gcode = gcodegen.config().change_filament_gcode.value;
|
std::string change_filament_gcode = gcodegen.config().change_filament_gcode.value;
|
||||||
|
|
||||||
|
bool is_used_travel_avoid_perimeter = gcodegen.m_config.prime_tower_skip_points.value;
|
||||||
|
|
||||||
// add nozzle change gcode into change filament gcode
|
// add nozzle change gcode into change filament gcode
|
||||||
std::string prefix_gcode = lift_gcode_after_printing_object;
|
std::string prefix_gcode = lift_gcode_after_printing_object;
|
||||||
std::string nozzle_change_gcode_trans;
|
std::string nozzle_change_gcode_trans;
|
||||||
@@ -6876,7 +6877,7 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo
|
|||||||
dyn_config.set_key_value("travel_point_2_y", new ConfigOptionFloat(float(travel_point_2.y())));
|
dyn_config.set_key_value("travel_point_2_y", new ConfigOptionFloat(float(travel_point_2.y())));
|
||||||
dyn_config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x())));
|
dyn_config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x())));
|
||||||
dyn_config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y())));
|
dyn_config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y())));
|
||||||
dyn_config.set_key_value("wipe_avoid_perimeter", new ConfigOptionBool(is_used_travel_avoid_perimeter));
|
dyn_config.set_key_value("wipe_avoid_perimeter", new ConfigOptionBool(false));
|
||||||
dyn_config.set_key_value("wipe_avoid_pos_x", new ConfigOptionFloat(wipe_avoid_pos_x));
|
dyn_config.set_key_value("wipe_avoid_pos_x", new ConfigOptionFloat(wipe_avoid_pos_x));
|
||||||
|
|
||||||
dyn_config.set_key_value("flush_length", new ConfigOptionFloat(wipe_length));
|
dyn_config.set_key_value("flush_length", new ConfigOptionFloat(wipe_length));
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ namespace Slic3r
|
|||||||
{
|
{
|
||||||
static const double wipe_tower_wall_infill_overlap = 0.0;
|
static const double wipe_tower_wall_infill_overlap = 0.0;
|
||||||
static const double wipe_tower_wall_infill_overlap_new = -0.2;
|
static const double wipe_tower_wall_infill_overlap_new = -0.2;
|
||||||
static bool is_used_gap_wall = true;
|
|
||||||
inline float align_round(float value, float base)
|
inline float align_round(float value, float base)
|
||||||
{
|
{
|
||||||
return std::round(value / base) * base;
|
return std::round(value / base) * base;
|
||||||
@@ -679,7 +678,8 @@ WipeTower::WipeTower(const PrintConfig& config, int plate_idx, Vec3d plate_origi
|
|||||||
m_enable_timelapse_print(config.timelapse_type.value == TimelapseType::tlSmooth),
|
m_enable_timelapse_print(config.timelapse_type.value == TimelapseType::tlSmooth),
|
||||||
m_nozzle_change_length(config.extruder_change_length.get_at(0)),
|
m_nozzle_change_length(config.extruder_change_length.get_at(0)),
|
||||||
m_is_multi_extruder(config.nozzle_diameter.size() > 1),
|
m_is_multi_extruder(config.nozzle_diameter.size() > 1),
|
||||||
m_is_print_outer_first(config.prime_tower_outer_first.value)
|
m_is_print_outer_first(config.prime_tower_outer_first.value),
|
||||||
|
m_use_gap_wall(config.prime_tower_skip_points.value)
|
||||||
{
|
{
|
||||||
// Read absolute value of first layer speed, if given as percentage,
|
// Read absolute value of first layer speed, if given as percentage,
|
||||||
// it is taken over following default. Speeds from config are not
|
// it is taken over following default. Speeds from config are not
|
||||||
@@ -807,7 +807,7 @@ Vec2f WipeTower::get_next_pos(const WipeTower::box_coordinates &cleaning_box, fl
|
|||||||
|
|
||||||
Vec2f res;
|
Vec2f res;
|
||||||
int index = m_cur_layer_id % 4;
|
int index = m_cur_layer_id % 4;
|
||||||
Vec2f offset = is_used_gap_wall ? Vec2f(5 * m_perimeter_width, 0) : Vec2f{0, 0};
|
Vec2f offset = m_use_gap_wall ? Vec2f(5 * m_perimeter_width, 0) : Vec2f{0, 0};
|
||||||
switch (index % 4) {
|
switch (index % 4) {
|
||||||
case 0:
|
case 0:
|
||||||
res = offset +cleaning_box.ld + pos_offset;
|
res = offset +cleaning_box.ld + pos_offset;
|
||||||
@@ -2242,7 +2242,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer_new(bool extrude_perimeter,
|
|||||||
box_coordinates wt_box(Vec2f(0.f, 0.f), m_wipe_tower_width, wipe_tower_depth);
|
box_coordinates wt_box(Vec2f(0.f, 0.f), m_wipe_tower_width, wipe_tower_depth);
|
||||||
wt_box = align_perimeter(wt_box);
|
wt_box = align_perimeter(wt_box);
|
||||||
if (extrude_perimeter) {
|
if (extrude_perimeter) {
|
||||||
if (is_used_gap_wall)
|
if (m_use_gap_wall)
|
||||||
generate_support_wall(writer, wt_box, feedrate, first_layer);
|
generate_support_wall(writer, wt_box, feedrate, first_layer);
|
||||||
else
|
else
|
||||||
writer.rectangle(wt_box, feedrate);
|
writer.rectangle(wt_box, feedrate);
|
||||||
@@ -2518,7 +2518,7 @@ void WipeTower::toolchange_wipe_new(WipeTowerWriter &writer, const box_coordinat
|
|||||||
}
|
}
|
||||||
|
|
||||||
float ironing_length = 3.;
|
float ironing_length = 3.;
|
||||||
if (i == 0 && is_used_gap_wall) { // BBS: add ironing after extruding start
|
if (i == 0 && m_use_gap_wall) { // BBS: add ironing after extruding start
|
||||||
if (m_left_to_right) {
|
if (m_left_to_right) {
|
||||||
float dx = xr + wipe_tower_wall_infill_overlap_new * m_perimeter_width - writer.pos().x();
|
float dx = xr + wipe_tower_wall_infill_overlap_new * m_perimeter_width - writer.pos().x();
|
||||||
if (abs(dx) < ironing_length) ironing_length = abs(dx);
|
if (abs(dx) < ironing_length) ironing_length = abs(dx);
|
||||||
@@ -3207,7 +3207,7 @@ WipeTower::ToolChangeResult WipeTower::only_generate_out_wall(bool is_new_mode)
|
|||||||
wipe_tower_depth = m_wipe_tower_width;
|
wipe_tower_depth = m_wipe_tower_width;
|
||||||
box_coordinates wt_box(Vec2f(0.f, (m_current_shape == SHAPE_REVERSED ? m_layer_info->toolchanges_depth() : 0.f)), m_wipe_tower_width, wipe_tower_depth);
|
box_coordinates wt_box(Vec2f(0.f, (m_current_shape == SHAPE_REVERSED ? m_layer_info->toolchanges_depth() : 0.f)), m_wipe_tower_width, wipe_tower_depth);
|
||||||
wt_box = align_perimeter(wt_box);
|
wt_box = align_perimeter(wt_box);
|
||||||
if (is_used_gap_wall)
|
if (m_use_gap_wall)
|
||||||
generate_support_wall(writer, wt_box, feedrate, first_layer);
|
generate_support_wall(writer, wt_box, feedrate, first_layer);
|
||||||
else
|
else
|
||||||
writer.rectangle(wt_box, feedrate);
|
writer.rectangle(wt_box, feedrate);
|
||||||
|
|||||||
@@ -393,6 +393,7 @@ private:
|
|||||||
bool m_has_tpu_filament{false};
|
bool m_has_tpu_filament{false};
|
||||||
bool m_is_multi_extruder{false};
|
bool m_is_multi_extruder{false};
|
||||||
bool m_is_print_outer_first{false};
|
bool m_is_print_outer_first{false};
|
||||||
|
bool m_use_gap_wall{false};
|
||||||
|
|
||||||
// G-code generator parameters.
|
// G-code generator parameters.
|
||||||
float m_cooling_tube_retraction = 0.f;
|
float m_cooling_tube_retraction = 0.f;
|
||||||
|
|||||||
@@ -815,7 +815,7 @@ static std::vector<std::string> s_Preset_print_options {
|
|||||||
"skin_infill_line_width","skeleton_infill_line_width",
|
"skin_infill_line_width","skeleton_infill_line_width",
|
||||||
"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",
|
"elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower",
|
||||||
"prime_tower_width", "prime_tower_brim_width", "prime_tower_outer_first", "prime_volume",
|
"prime_tower_width", "prime_tower_brim_width", "prime_tower_outer_first", "prime_tower_skip_points", "prime_volume",
|
||||||
"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",
|
||||||
"tree_support_branch_angle", "tree_support_angle_slow", "tree_support_wall_count", "tree_support_top_rate", "tree_support_branch_distance", "tree_support_tip_diameter",
|
"tree_support_branch_angle", "tree_support_angle_slow", "tree_support_wall_count", "tree_support_top_rate", "tree_support_branch_distance", "tree_support_tip_diameter",
|
||||||
|
|||||||
@@ -298,6 +298,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|
|||||||
|| opt_key == "prime_tower_width"
|
|| opt_key == "prime_tower_width"
|
||||||
|| opt_key == "prime_tower_brim_width"
|
|| opt_key == "prime_tower_brim_width"
|
||||||
|| opt_key == "prime_tower_outer_first"
|
|| opt_key == "prime_tower_outer_first"
|
||||||
|
|| opt_key == "prime_tower_skip_points"
|
||||||
|| 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"
|
||||||
|
|||||||
@@ -6024,6 +6024,12 @@ 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_skip_points", coBool);
|
||||||
|
def->label = L("Skip points");
|
||||||
|
def->tooltip = L("The wall of prime tower will skip the start points of wipe path");
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionBool(true));
|
||||||
|
|
||||||
def = this->add("flush_into_infill", coBool);
|
def = this->add("flush_into_infill", coBool);
|
||||||
def->category = L("Flush options");
|
def->category = L("Flush options");
|
||||||
def->label = L("Flush into objects' infill");
|
def->label = L("Flush into objects' infill");
|
||||||
|
|||||||
@@ -1444,6 +1444,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE(
|
|||||||
((ConfigOptionFloat, wipe_tower_rotation_angle))
|
((ConfigOptionFloat, wipe_tower_rotation_angle))
|
||||||
((ConfigOptionFloat, prime_tower_brim_width))
|
((ConfigOptionFloat, prime_tower_brim_width))
|
||||||
((ConfigOptionBool, prime_tower_outer_first))
|
((ConfigOptionBool, prime_tower_outer_first))
|
||||||
|
((ConfigOptionBool, prime_tower_skip_points))
|
||||||
((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))
|
||||||
|
|||||||
@@ -758,7 +758,7 @@ 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_outer_first"})
|
for (auto el : {"prime_tower_width", "prime_tower_brim_width", "prime_tower_outer_first", "prime_tower_skip_points"})
|
||||||
toggle_line(el, have_prime_tower);
|
toggle_line(el, have_prime_tower);
|
||||||
|
|
||||||
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"})
|
||||||
|
|||||||
@@ -3631,7 +3631,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
|||||||
"extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod",
|
"extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod",
|
||||||
"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_outer_first", "prime_volume",
|
"enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_outer_first", "prime_tower_skip_points", "prime_volume",
|
||||||
"extruder_colour", "filament_colour", "material_colour", "printable_height", "extruder_printable_height", "printer_model", "printer_technology",
|
"extruder_colour", "filament_colour", "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",
|
||||||
|
|||||||
@@ -2442,6 +2442,7 @@ void TabPrint::build()
|
|||||||
optgroup = page->new_optgroup(L("Prime tower"), L"param_tower");
|
optgroup = page->new_optgroup(L("Prime tower"), L"param_tower");
|
||||||
optgroup->append_single_option_line("enable_prime_tower", "multimaterial_settings_prime_tower");
|
optgroup->append_single_option_line("enable_prime_tower", "multimaterial_settings_prime_tower");
|
||||||
optgroup->append_single_option_line("prime_tower_outer_first", "parameter/prime-tower");
|
optgroup->append_single_option_line("prime_tower_outer_first", "parameter/prime-tower");
|
||||||
|
optgroup->append_single_option_line("prime_tower_skip_points", "parameter/prime-tower");
|
||||||
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_volume", "multimaterial_settings_prime_tower");
|
optgroup->append_single_option_line("prime_volume", "multimaterial_settings_prime_tower");
|
||||||
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");
|
||||||
|
|||||||
Reference in New Issue
Block a user