From f06b7cb52631c9f3699f04ed46dd4945e7f241a6 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 25 Sep 2023 20:39:02 +0800 Subject: [PATCH 1/6] QoL: improve PA Line method Signed-off-by: SoftFever --- src/libslic3r/calib.cpp | 828 +++++++++++++++++----------------------- src/libslic3r/calib.hpp | 314 ++++++--------- 2 files changed, 471 insertions(+), 671 deletions(-) diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index edcc24c586..3a22bbb058 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -7,17 +7,18 @@ namespace Slic3r { // Calculate the optimal Pressure Advance speed -float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, - int filament_idx) { - const double general_suggested_min_speed = 100.0; - double filament_max_volumetric_speed = config.option("filament_max_volumetric_speed")->get_at(0); - Flow pattern_line = Flow(line_width, layer_height, config.option("nozzle_diameter")->get_at(0)); - auto pa_speed = std::min(std::max(general_suggested_min_speed,config.option("outer_wall_speed")->value), filament_max_volumetric_speed / pattern_line.mm3_per_mm()); +float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, int filament_idx) +{ + const double general_suggested_min_speed = 100.0; + double filament_max_volumetric_speed = config.option("filament_max_volumetric_speed")->get_at(0); + Flow pattern_line = Flow(line_width, layer_height, config.option("nozzle_diameter")->get_at(0)); + auto pa_speed = std::min(std::max(general_suggested_min_speed, config.option("outer_wall_speed")->value), + filament_max_volumetric_speed / pattern_line.mm3_per_mm()); return std::floor(pa_speed); } -std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter& writer, std::string comment) +std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter &writer, std::string comment) { std::stringstream gcode; @@ -27,18 +28,13 @@ std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter& writer, std::st m_last_pos = Vec3d(pt.x(), pt.y(), 0); - return gcode.str(); + return gcode.str(); } double CalibPressureAdvance::e_per_mm( - double line_width, - double layer_height, - float nozzle_diameter, - float filament_diameter, - float print_flow_ratio -) const + double line_width, double layer_height, float nozzle_diameter, float filament_diameter, float print_flow_ratio) const { - const Flow line_flow = Flow(line_width, layer_height, nozzle_diameter); + const Flow line_flow = Flow(line_width, layer_height, nozzle_diameter); const double filament_area = M_PI * std::pow(filament_diameter / 2, 2); return line_flow.mm3_per_mm() / filament_area * print_flow_ratio; @@ -54,19 +50,12 @@ std::string CalibPressureAdvance::convert_number_to_string(double num) const } std::string CalibPressureAdvance::draw_digit( - double startx, - double starty, - char c, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - GCodeWriter& writer -) + double startx, double starty, char c, CalibPressureAdvance::DrawDigitMode mode, double line_width, double e_per_mm, GCodeWriter &writer) { const double len = m_digit_segment_len; const double gap = line_width / 2.0; - const auto dE = e_per_mm * len; + const auto dE = e_per_mm * len; const auto two_dE = dE * 2; Vec2d p0, p1, p2, p3, p4, p5; @@ -79,33 +68,33 @@ std::string CalibPressureAdvance::draw_digit( // | | | // | | | // 0-------3-------4 - p0 = Vec2d(startx, starty); + p0 = Vec2d(startx, starty); p0_5 = Vec2d(startx, starty + len / 2); - p1 = Vec2d(startx, starty + len); - p2 = Vec2d(startx + len, starty + len); - p3 = Vec2d(startx + len, starty); - p4 = Vec2d(startx + len * 2, starty); + p1 = Vec2d(startx, starty + len); + p2 = Vec2d(startx + len, starty + len); + p3 = Vec2d(startx + len, starty); + p4 = Vec2d(startx + len * 2, starty); p4_5 = Vec2d(startx + len * 2, starty + len / 2); - p5 = Vec2d(startx + len * 2, starty + len); + p5 = Vec2d(startx + len * 2, starty + len); gap_p0_toward_p3 = p0 + Vec2d(gap, 0); gap_p2_toward_p3 = p2 + Vec2d(0, gap); dot_direction = Vec2d(-len / 2, 0); } else { - // 0-------1 + // 0-------1 // | | // 3-------2 // | | // 4-------5 - p0 = Vec2d(startx, starty); + p0 = Vec2d(startx, starty); p0_5 = Vec2d(startx + len / 2, starty); - p1 = Vec2d(startx + len, starty); - p2 = Vec2d(startx + len, starty - len); - p3 = Vec2d(startx, starty - len); - p4 = Vec2d(startx, starty - len * 2); + p1 = Vec2d(startx + len, starty); + p2 = Vec2d(startx + len, starty - len); + p3 = Vec2d(startx, starty - len); + p4 = Vec2d(startx, starty - len * 2); p4_5 = Vec2d(startx + len / 2, starty - len * 2); - p5 = Vec2d(startx + len, starty - len * 2); + p5 = Vec2d(startx + len, starty - len * 2); gap_p0_toward_p3 = p0 - Vec2d(0, gap); gap_p2_toward_p3 = p2 - Vec2d(gap, 0); @@ -191,25 +180,22 @@ std::string CalibPressureAdvance::draw_digit( gcode << move_to(p4_5, writer, "Glyph: ."); gcode << writer.extrude_to_xy(p4_5 + dot_direction, dE); break; - default: - break; + default: break; } return gcode.str(); } -std::string CalibPressureAdvance::draw_number( - double startx, - double starty, - double value, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - double speed, - GCodeWriter& writer -) +std::string CalibPressureAdvance::draw_number(double startx, + double starty, + double value, + CalibPressureAdvance::DrawDigitMode mode, + double line_width, + double e_per_mm, + double speed, + GCodeWriter &writer) { - auto sNumber = convert_number_to_string(value); + auto sNumber = convert_number_to_string(value); std::stringstream gcode; gcode << writer.set_speed(speed); @@ -218,27 +204,221 @@ std::string CalibPressureAdvance::draw_number( break; } switch (mode) { - case DrawDigitMode::Bottom_To_Top: - gcode << draw_digit( - startx, - starty + i * number_spacing(), - sNumber[i], - mode, - line_width, - e_per_mm, - writer - ); - break; - default: - gcode << draw_digit( - startx + i * number_spacing(), - starty, - sNumber[i], - mode, - line_width, - e_per_mm, - writer - ); + case DrawDigitMode::Bottom_To_Top: + gcode << draw_digit(startx, starty + i * number_spacing(), sNumber[i], mode, line_width, e_per_mm, writer); + break; + default: gcode << draw_digit(startx + i * number_spacing(), starty, sNumber[i], mode, line_width, e_per_mm, writer); + } + } + + return gcode.str(); +} + + +double CalibPressureAdvance::get_distance(Vec2d from, Vec2d to) const +{ + return std::hypot((to.x() - from.x()), (to.y() - from.y())); +} + +std::string CalibPressureAdvance::draw_line( + GCodeWriter &writer, Vec2d to_pt, double line_width, double layer_height, double speed, const std::string &comment) +{ + const double e_per_mm = CalibPressureAdvance::e_per_mm(line_width, layer_height, + m_config.option("nozzle_diameter")->get_at(0), + m_config.option("filament_diameter")->get_at(0), + m_config.option("filament_flow_ratio")->get_at(0)); + + const double length = get_distance(Vec2d(m_last_pos.x(), m_last_pos.y()), to_pt); + auto dE = e_per_mm * length; + + std::stringstream gcode; + + gcode << writer.set_speed(speed); + gcode << writer.extrude_to_xy(to_pt, dE, comment); + + m_last_pos = Vec3d(to_pt.x(), to_pt.y(), 0); + + return gcode.str(); +} + +std::string CalibPressureAdvance::draw_box(GCodeWriter &writer, double min_x, double min_y, double size_x, double size_y, DrawBoxOptArgs opt_args) +{ + std::stringstream gcode; + + double x = min_x; + double y = min_y; + const double max_x = min_x + size_x; + const double max_y = min_y + size_y; + + const double spacing = opt_args.line_width - opt_args.height * (1 - M_PI / 4); + + // if number of perims exceeds size of box, reduce it to max + const int max_perimeters = std::min( + // this is the equivalent of number of perims for concentric fill + std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))), + std::floor(size_y * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45)))); + + opt_args.num_perimeters = std::min(opt_args.num_perimeters, max_perimeters); + + gcode << move_to(Vec2d(min_x, min_y), writer, "Move to box start"); + + // DrawLineOptArgs line_opt_args(*this); + auto line_arg_height = opt_args.height; + auto line_arg_line_width = opt_args.line_width; + auto line_arg_speed = opt_args.speed; + std::string comment = ""; + + for (int i = 0; i < opt_args.num_perimeters; ++i) { + if (i != 0) { // after first perimeter, step inwards to start next perimeter + x += spacing; + y += spacing; + gcode << move_to(Vec2d(x, y), writer, "Step inwards to print next perimeter"); + } + + y += size_y - i * spacing * 2; + comment = "Draw perimeter (up)"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + + x += size_x - i * spacing * 2; + comment = "Draw perimeter (right)"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + + y -= size_y - i * spacing * 2; + comment = "Draw perimeter (down)"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + + x -= size_x - i * spacing * 2; + comment = "Draw perimeter (left)"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } + + if (!opt_args.is_filled) { + return gcode.str(); + } + + // create box infill + const double spacing_45 = spacing / std::sin(to_radians(45)); + + const double bound_modifier = (spacing * (opt_args.num_perimeters - 1)) + (opt_args.line_width * (1 - m_encroachment)); + const double x_min_bound = min_x + bound_modifier; + const double x_max_bound = max_x - bound_modifier; + const double y_min_bound = min_y + bound_modifier; + const double y_max_bound = max_y - bound_modifier; + const int x_count = std::floor((x_max_bound - x_min_bound) / spacing_45); + const int y_count = std::floor((y_max_bound - y_min_bound) / spacing_45); + + double x_remainder = std::fmod((x_max_bound - x_min_bound), spacing_45); + double y_remainder = std::fmod((y_max_bound - y_min_bound), spacing_45); + + x = x_min_bound; + y = y_min_bound; + + gcode << move_to(Vec2d(x, y), writer, "Move to fill start"); + + for (int i = 0; i < x_count + y_count + (x_remainder + y_remainder >= spacing_45 ? 1 : 0); + ++i) { // this isn't the most robust way, but less expensive than finding line intersections + if (i < std::min(x_count, y_count)) { + if (i % 2 == 0) { + x += spacing_45; + y = y_min_bound; + gcode << move_to(Vec2d(x, y), writer, "Fill: Step right"); + + y += x - x_min_bound; + x = x_min_bound; + comment = "Fill: Print up/left"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } else { + y += spacing_45; + x = x_min_bound; + gcode << move_to(Vec2d(x, y), writer, "Fill: Step up"); + + x += y - y_min_bound; + y = y_min_bound; + comment = "Fill: Print down/right"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } + } else if (i < std::max(x_count, y_count)) { + if (x_count > y_count) { + // box is wider than tall + if (i % 2 == 0) { + x += spacing_45; + y = y_min_bound; + gcode << move_to(Vec2d(x, y), writer, "Fill: Step right"); + + x -= y_max_bound - y_min_bound; + y = y_max_bound; + comment = "Fill: Print up/left"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } else { + if (i == y_count) { + x += spacing_45 - y_remainder; + y_remainder = 0; + } else { + x += spacing_45; + } + y = y_max_bound; + gcode << move_to(Vec2d(x, y), writer, "Fill: Step right"); + + x += y_max_bound - y_min_bound; + y = y_min_bound; + comment = "Fill: Print down/right"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } + } else { + // box is taller than wide + if (i % 2 == 0) { + x = x_max_bound; + if (i == x_count) { + y += spacing_45 - x_remainder; + x_remainder = 0; + } else { + y += spacing_45; + } + gcode << move_to(Vec2d(x, y), writer, "Fill: Step up"); + + x = x_min_bound; + y += x_max_bound - x_min_bound; + comment = "Fill: Print up/left"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } else { + x = x_min_bound; + y += spacing_45; + gcode << move_to(Vec2d(x, y), writer, "Fill: Step up"); + + x = x_max_bound; + y -= x_max_bound - x_min_bound; + comment = "Fill: Print down/right"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } + } + } else { + if (i % 2 == 0) { + x = x_max_bound; + if (i == x_count) { + y += spacing_45 - x_remainder; + } else { + y += spacing_45; + } + gcode << move_to(Vec2d(x, y), writer, "Fill: Step up"); + + x -= y_max_bound - y; + y = y_max_bound; + comment = "Fill: Print up/left"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } else { + if (i == y_count) { + x += spacing_45 - y_remainder; + } else { + x += spacing_45; + } + y = y_max_bound; + gcode << move_to(Vec2d(x, y), writer, "Fill: Step right"); + + y -= x_max_bound - x; + x = x_max_bound; + comment = "Fill: Print down/right"; + gcode << draw_line(writer, Vec2d(x, y), line_arg_line_width, line_arg_height, line_arg_speed, comment); + } } } @@ -252,10 +432,10 @@ std::string CalibPressureAdvanceLine::generate_test(double start_pa /*= 0*/, dou CalibPressureAdvanceLine::delta_scale_bed_ext(bed_ext); } - auto bed_sizes = mp_gcodegen->config().printable_area.values; - const auto &w = bed_ext.size().x(); - const auto &h = bed_ext.size().y(); - count = std::min(count, int((h - 10) / m_space_y)); + auto bed_sizes = mp_gcodegen->config().printable_area.values; + const auto &w = bed_ext.size().x(); + const auto &h = bed_ext.size().y(); + count = std::min(count, int((h - 10) / m_space_y)); m_length_long = 40 + std::min(w - 120.0, 0.0); @@ -268,52 +448,34 @@ std::string CalibPressureAdvanceLine::generate_test(double start_pa /*= 0*/, dou return print_pa_lines(startx, starty, start_pa, step_pa, count); } -bool CalibPressureAdvanceLine::is_delta() const -{ - return mp_gcodegen->config().printable_area.values.size() > 4; -} +bool CalibPressureAdvanceLine::is_delta() const { return mp_gcodegen->config().printable_area.values.size() > 4; } std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double start_y, double start_pa, double step_pa, int num) { - auto& writer = mp_gcodegen->writer(); - const auto& config = mp_gcodegen->config(); + auto &writer = mp_gcodegen->writer(); + const auto &config = mp_gcodegen->config(); const auto filament_diameter = config.filament_diameter.get_at(0); - const auto print_flow_ratio = config.print_flow_ratio; + const auto print_flow_ratio = config.print_flow_ratio; - const double e_per_mm = CalibPressureAdvance::e_per_mm( - m_line_width, - m_height_layer, - m_nozzle_diameter, - filament_diameter, - print_flow_ratio - ); - const double thin_e_per_mm = CalibPressureAdvance::e_per_mm( - m_thin_line_width, - m_height_layer, - m_nozzle_diameter, - filament_diameter, - print_flow_ratio - ); - const double number_e_per_mm = CalibPressureAdvance::e_per_mm( - m_number_line_width, - m_height_layer, - m_nozzle_diameter, - filament_diameter, - print_flow_ratio - ); + const double e_per_mm = CalibPressureAdvance::e_per_mm(m_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, + print_flow_ratio); + const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, + print_flow_ratio); + const double number_e_per_mm = CalibPressureAdvance::e_per_mm(m_number_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, + print_flow_ratio); - const double fast = CalibPressureAdvance::speed_adjust(m_fast_speed); - const double slow = CalibPressureAdvance::speed_adjust(m_slow_speed); + const double fast = CalibPressureAdvance::speed_adjust(m_fast_speed); + const double slow = CalibPressureAdvance::speed_adjust(m_slow_speed); std::stringstream gcode; gcode << mp_gcodegen->writer().travel_to_z(m_height_layer); double y_pos = start_y; // prime line - auto prime_x = start_x - 2; - gcode << move_to(Vec2d(prime_x, y_pos + (num - 4) * m_space_y), writer); + auto prime_x = start_x; + gcode << move_to(Vec2d(prime_x, y_pos + (num) * m_space_y), writer); gcode << writer.set_speed(slow); - gcode << writer.extrude_to_xy(Vec2d(prime_x, y_pos + 3 * m_space_y), e_per_mm * m_space_y * num * 1.1); + gcode << writer.extrude_to_xy(Vec2d(prime_x, y_pos), e_per_mm * m_space_y * num * 1.2); for (int i = 0; i < num; ++i) { gcode << writer.set_pressure_advance(start_pa + i * step_pa); @@ -323,60 +485,52 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star gcode << writer.set_speed(fast); gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + i * m_space_y), e_per_mm * m_length_long); gcode << writer.set_speed(slow); - gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long + m_length_short, y_pos + i * m_space_y), e_per_mm * m_length_short); + gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long + m_length_short, y_pos + i * m_space_y), + e_per_mm * m_length_short); } gcode << writer.set_pressure_advance(0.0); if (m_draw_numbers) { - // draw indicator lines - gcode << writer.set_speed(fast); - gcode << move_to(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 2), writer); - gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 7), thin_e_per_mm * 7); - gcode << move_to(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 7), writer); - gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 2), thin_e_per_mm * 7); + // Orca: skip drawing indicator lines + // gcode << writer.set_speed(fast); + // gcode << move_to(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 2), writer); + // gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 7), thin_e_per_mm * 7); + // gcode << move_to(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 7), writer); + // gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 2), thin_e_per_mm * 7); + + DrawBoxOptArgs default_box_opt_args(2, m_height_layer, 0.6, fast); + default_box_opt_args.is_filled = true; + gcode << draw_box(writer, start_x + m_length_short + m_length_long + m_length_short, start_y-m_space_y, number_spacing() * 8, + num * m_space_y, default_box_opt_args); + gcode << writer.travel_to_z(m_height_layer*2); for (int i = 0; i < num; i += 2) { - gcode << draw_number( - start_x + m_length_short + m_length_long + m_length_short + 3, - y_pos + i * m_space_y + m_space_y / 2, - start_pa + i * step_pa, - m_draw_digit_mode, - m_number_line_width, - number_e_per_mm, - 3600, - writer - ); + gcode << draw_number(start_x + m_length_short + m_length_long + m_length_short + 3, y_pos + i * m_space_y + m_space_y / 2, + start_pa + i * step_pa, m_draw_digit_mode, m_number_line_width, number_e_per_mm, 3600, writer); } } return gcode.str(); } -void CalibPressureAdvanceLine::delta_modify_start(double& startx, double& starty, int count) +void CalibPressureAdvanceLine::delta_modify_start(double &startx, double &starty, int count) { startx = -startx; starty = -(count * m_space_y) / 2; } CalibPressureAdvancePattern::CalibPressureAdvancePattern( - const Calib_Params& params, - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin -) : - m_params(params) + const Calib_Params ¶ms, const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin) + : m_params(params),CalibPressureAdvance(config) { this->m_draw_digit_mode = DrawDigitMode::Bottom_To_Top; refresh_setup(config, is_bbl_machine, model, origin); }; -void CalibPressureAdvancePattern::generate_custom_gcodes( - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin -) +void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfig &config, + bool is_bbl_machine, + Model &model, + const Vec3d &origin) { std::stringstream gcode; gcode << "; start pressure advance pattern for layer\n"; @@ -387,32 +541,22 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( gcode << m_writer.travel_to_z(height_first_layer(), "Move to start Z position"); gcode << m_writer.set_pressure_advance(m_params.start); - const DrawBoxOptArgs default_box_opt_args(*this); + const DrawBoxOptArgs default_box_opt_args(wall_count(), height_first_layer(), line_width_first_layer(), + speed_adjust(speed_first_layer())); // create anchoring frame - gcode << draw_box( - m_starting_point.x(), - m_starting_point.y(), - print_size_x(), - frame_size_y(), - default_box_opt_args - ); + gcode << draw_box(m_writer, m_starting_point.x(), m_starting_point.y(), print_size_x(), frame_size_y(), default_box_opt_args); // create tab for numbers DrawBoxOptArgs draw_box_opt_args = default_box_opt_args; - draw_box_opt_args.is_filled = true; + draw_box_opt_args.is_filled = true; draw_box_opt_args.num_perimeters = wall_count(); - gcode << draw_box( - m_starting_point.x(), - m_starting_point.y() + frame_size_y() + line_spacing_first_layer(), - glyph_tab_max_x() - m_starting_point.x(), - max_numbering_height() + line_spacing_first_layer() + m_glyph_padding_vertical * 2, - draw_box_opt_args - ); + gcode << draw_box(m_writer, m_starting_point.x(), m_starting_point.y() + frame_size_y() + line_spacing_first_layer(), + glyph_tab_max_x() - m_starting_point.x(), + max_numbering_height() + line_spacing_first_layer() + m_glyph_padding_vertical * 2, draw_box_opt_args); std::vector gcode_items; - const DrawLineOptArgs default_line_opt_args(*this); - const int num_patterns = get_num_patterns(); // "cache" for use in loops + const int num_patterns = get_num_patterns(); // "cache" for use in loops // draw pressure advance pattern for (int i = 0; i < m_num_layers; ++i) { @@ -420,13 +564,13 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( gcode << "; end pressure advance pattern for layer\n"; CustomGCode::Item item; item.print_z = height_first_layer() + (i - 1) * height_layer(); - item.type = CustomGCode::Type::Custom; - item.extra = gcode.str(); + item.type = CustomGCode::Type::Custom; + item.extra = gcode.str(); gcode_items.push_back(item); gcode = std::stringstream(); // reset for next layer contents gcode << "; start pressure advance pattern for layer\n"; - + const double layer_height = height_first_layer() + (i * height_layer()); gcode << m_writer.travel_to_z(layer_height, "Move to layer height"); } @@ -435,49 +579,31 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( if (i == 1) { gcode << m_writer.set_pressure_advance(m_params.start); - double number_e_per_mm = e_per_mm( - line_width(), - height_layer(), - m_config.option("nozzle_diameter")->get_at(0), - m_config.option("filament_diameter")->get_at(0), - m_config.option("filament_flow_ratio")->get_at(0) - ); + double number_e_per_mm = e_per_mm(line_width(), height_layer(), + m_config.option("nozzle_diameter")->get_at(0), + m_config.option("filament_diameter")->get_at(0), + m_config.option("filament_flow_ratio")->get_at(0)); // glyph on every other line for (int j = 0; j < num_patterns; j += 2) { - gcode << draw_number( - glyph_start_x(j), - m_starting_point.y() + frame_size_y() + m_glyph_padding_vertical + line_width(), - m_params.start + (j * m_params.step), - m_draw_digit_mode, - line_width(), - number_e_per_mm, - speed_first_layer(), - m_writer - ); + gcode << draw_number(glyph_start_x(j), m_starting_point.y() + frame_size_y() + m_glyph_padding_vertical + line_width(), + m_params.start + (j * m_params.step), m_draw_digit_mode, line_width(), number_e_per_mm, + speed_first_layer(), m_writer); } } - DrawLineOptArgs draw_line_opt_args = default_line_opt_args; - double to_x = m_starting_point.x() + pattern_shift(); - double to_y = m_starting_point.y(); + double to_x = m_starting_point.x() + pattern_shift(); + double to_y = m_starting_point.y(); double side_length = m_wall_side_length; // shrink first layer to fit inside frame if (i == 0) { - double shrink = - ( - line_spacing_first_layer() * (wall_count() - 1) + - (line_width_first_layer() * (1 - m_encroachment)) - ) / std::sin(to_radians(m_corner_angle) / 2) - ; + double shrink = (line_spacing_first_layer() * (wall_count() - 1) + (line_width_first_layer() * (1 - m_encroachment))) / + std::sin(to_radians(m_corner_angle) / 2); side_length = m_wall_side_length - shrink; to_x += shrink * std::sin(to_radians(90) - to_radians(m_corner_angle) / 2); - to_y += - line_spacing_first_layer() * (wall_count() - 1) + - (line_width_first_layer() * (1 - m_encroachment)) - ; + to_y += line_spacing_first_layer() * (wall_count() - 1) + (line_width_first_layer() * (1 - m_encroachment)); } double initial_x = to_x; @@ -492,18 +618,17 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( for (int k = 0; k < wall_count(); ++k) { to_x += std::cos(to_radians(m_corner_angle) / 2) * side_length; to_y += std::sin(to_radians(m_corner_angle) / 2) * side_length; - - draw_line_opt_args = default_line_opt_args; - draw_line_opt_args.height = i == 0 ? height_first_layer() : height_layer(); - draw_line_opt_args.line_width = line_width(); // don't use line_width_first_layer so results are consistent across all layers - draw_line_opt_args.speed = i == 0 ? speed_adjust(speed_first_layer()) : speed_adjust(speed_perimeter()); - draw_line_opt_args.comment = "Print pattern wall"; - gcode << draw_line(Vec2d(to_x, to_y), draw_line_opt_args); + + auto draw_line_arg_height = i == 0 ? height_first_layer() : height_layer(); + auto draw_line_arg_line_width = line_width(); // don't use line_width_first_layer so results are consistent across all layers + auto draw_line_arg_speed = i == 0 ? speed_adjust(speed_first_layer()) : speed_adjust(speed_perimeter()); + auto draw_line_arg_comment = "Print pattern wall"; + gcode << draw_line(m_writer, Vec2d(to_x, to_y), draw_line_arg_line_width, draw_line_arg_height, draw_line_arg_speed, draw_line_arg_comment); to_x -= std::cos(to_radians(m_corner_angle) / 2) * side_length; to_y += std::sin(to_radians(m_corner_angle) / 2) * side_length; - gcode << draw_line(Vec2d(to_x, to_y), draw_line_opt_args); + gcode << draw_line(m_writer, Vec2d(to_x, to_y), draw_line_arg_line_width, draw_line_arg_height, draw_line_arg_speed, draw_line_arg_comment); to_y = initial_y; if (k != wall_count() - 1) { @@ -530,23 +655,21 @@ void CalibPressureAdvancePattern::generate_custom_gcodes( CustomGCode::Item item; item.print_z = max_layer_z(); - item.type = CustomGCode::Type::Custom; - item.extra = gcode.str(); + item.type = CustomGCode::Type::Custom; + item.extra = gcode.str(); gcode_items.push_back(item); CustomGCode::Info info; - info.mode = CustomGCode::Mode::SingleExtruder; + info.mode = CustomGCode::Mode::SingleExtruder; info.gcodes = gcode_items; model.plates_custom_gcodes[model.curr_plate_index] = info; } -void CalibPressureAdvancePattern::refresh_setup( - const DynamicPrintConfig& config, - bool is_bbl_machine, - const Model& model, - const Vec3d& origin -) +void CalibPressureAdvancePattern::refresh_setup(const DynamicPrintConfig &config, + bool is_bbl_machine, + const Model &model, + const Vec3d &origin) { m_config = config; m_config.apply(model.objects.front()->config.get(), true); @@ -558,15 +681,10 @@ void CalibPressureAdvancePattern::refresh_setup( _refresh_writer(is_bbl_machine, model, origin); } -void CalibPressureAdvancePattern::_refresh_starting_point(const Model& model) +void CalibPressureAdvancePattern::_refresh_starting_point(const Model &model) { - ModelObject* obj = model.objects.front(); - BoundingBoxf3 bbox = - obj->instance_bounding_box( - *obj->instances.front(), - false - ) - ; + ModelObject *obj = model.objects.front(); + BoundingBoxf3 bbox = obj->instance_bounding_box(*obj->instances.front(), false); m_starting_point = Vec3d(bbox.min.x(), bbox.max.y(), 0); m_starting_point.y() += m_handle_spacing; @@ -577,11 +695,7 @@ void CalibPressureAdvancePattern::_refresh_starting_point(const Model& model) } } -void CalibPressureAdvancePattern::_refresh_writer( - bool is_bbl_machine, - const Model& model, - const Vec3d& origin -) +void CalibPressureAdvancePattern::_refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin) { PrintConfig print_config; print_config.apply(m_config, true); @@ -589,252 +703,23 @@ void CalibPressureAdvancePattern::_refresh_writer( m_writer.apply_print_config(print_config); m_writer.set_xy_offset(origin(0), origin(1)); m_writer.set_is_bbl_machine(is_bbl_machine); - + const unsigned int extruder_id = model.objects.front()->volumes.front()->extruder_id(); - m_writer.set_extruders({ extruder_id }); + m_writer.set_extruders({extruder_id}); m_writer.set_extruder(extruder_id); } -std::string CalibPressureAdvancePattern::draw_line( - Vec2d to_pt, - DrawLineOptArgs opt_args -) -{ - const double e_per_mm = CalibPressureAdvance::e_per_mm( - opt_args.line_width, - opt_args.height, - m_config.option("nozzle_diameter")->get_at(0), - m_config.option("filament_diameter")->get_at(0), - m_config.option("filament_flow_ratio")->get_at(0) - ); - - const double length = get_distance(Vec2d(m_last_pos.x(), m_last_pos.y()), to_pt); - auto dE = e_per_mm * length; - - std::stringstream gcode; - - gcode << m_writer.set_speed(opt_args.speed); - gcode << m_writer.extrude_to_xy(to_pt, dE, opt_args.comment); - - m_last_pos = Vec3d(to_pt.x(), to_pt.y(), 0); - - return gcode.str(); -} - -std::string CalibPressureAdvancePattern::draw_box( - double min_x, - double min_y, - double size_x, - double size_y, - DrawBoxOptArgs opt_args -) -{ - std::stringstream gcode; - - double x = min_x; - double y = min_y; - const double max_x = min_x + size_x; - const double max_y = min_y + size_y; - - const double spacing = opt_args.line_width - opt_args.height * (1 - M_PI / 4); - - // if number of perims exceeds size of box, reduce it to max - const int max_perimeters = - std::min( - // this is the equivalent of number of perims for concentric fill - std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))), - std::floor(size_y * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))) - ) - ; - - opt_args.num_perimeters = std::min(opt_args.num_perimeters, max_perimeters); - - gcode << move_to(Vec2d(min_x, min_y), m_writer, "Move to box start"); - - DrawLineOptArgs line_opt_args(*this); - line_opt_args.height = opt_args.height; - line_opt_args.line_width = opt_args.line_width; - line_opt_args.speed = opt_args.speed; - - for (int i = 0; i < opt_args.num_perimeters; ++i) { - if (i != 0) { // after first perimeter, step inwards to start next perimeter - x += spacing; - y += spacing; - gcode << move_to(Vec2d(x, y), m_writer, "Step inwards to print next perimeter"); - } - - y += size_y - i * spacing * 2; - line_opt_args.comment = "Draw perimeter (up)"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - - x += size_x - i * spacing * 2; - line_opt_args.comment = "Draw perimeter (right)"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - - y -= size_y - i * spacing * 2; - line_opt_args.comment = "Draw perimeter (down)"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - - x -= size_x - i * spacing * 2; - line_opt_args.comment = "Draw perimeter (left)"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } - - if (!opt_args.is_filled) { - return gcode.str(); - } - - // create box infill - const double spacing_45 = spacing / std::sin(to_radians(45)); - - const double bound_modifier = - (spacing * (opt_args.num_perimeters - 1)) + - (opt_args.line_width * (1 - m_encroachment)) - ; - const double x_min_bound = min_x + bound_modifier; - const double x_max_bound = max_x - bound_modifier; - const double y_min_bound = min_y + bound_modifier; - const double y_max_bound = max_y - bound_modifier; - const int x_count = std::floor((x_max_bound - x_min_bound) / spacing_45); - const int y_count = std::floor((y_max_bound - y_min_bound) / spacing_45); - - double x_remainder = std::fmod((x_max_bound - x_min_bound), spacing_45); - double y_remainder = std::fmod((y_max_bound - y_min_bound), spacing_45); - - x = x_min_bound; - y = y_min_bound; - - gcode << move_to(Vec2d(x, y), m_writer, "Move to fill start"); - - for (int i = 0; i < x_count + y_count + (x_remainder + y_remainder >= spacing_45 ? 1 : 0); ++i) { // this isn't the most robust way, but less expensive than finding line intersections - if (i < std::min(x_count, y_count)) { - if (i % 2 == 0) { - x += spacing_45; - y = y_min_bound; - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); - - y += x - x_min_bound; - x = x_min_bound; - line_opt_args.comment = "Fill: Print up/left"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } else { - y += spacing_45; - x = x_min_bound; - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); - - x += y - y_min_bound; - y = y_min_bound; - line_opt_args.comment = "Fill: Print down/right"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } - } else if (i < std::max(x_count, y_count)) { - if (x_count > y_count) { - // box is wider than tall - if (i % 2 == 0) { - x += spacing_45; - y = y_min_bound; - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); - - x -= y_max_bound - y_min_bound; - y = y_max_bound; - line_opt_args.comment = "Fill: Print up/left"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } else { - if (i == y_count) { - x += spacing_45 - y_remainder; - y_remainder = 0; - } else { - x += spacing_45; - } - y = y_max_bound; - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); - - x += y_max_bound - y_min_bound; - y = y_min_bound; - line_opt_args.comment = "Fill: Print down/right"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } - } else { - // box is taller than wide - if (i % 2 == 0) { - x = x_max_bound; - if (i == x_count) { - y += spacing_45 - x_remainder; - x_remainder = 0; - } else { - y += spacing_45; - } - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); - - x = x_min_bound; - y += x_max_bound - x_min_bound; - line_opt_args.comment = "Fill: Print up/left"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } else { - x = x_min_bound; - y += spacing_45; - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); - - x = x_max_bound; - y -= x_max_bound - x_min_bound; - line_opt_args.comment = "Fill: Print down/right"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } - } - } else { - if (i % 2 == 0) { - x = x_max_bound; - if (i == x_count) { - y += spacing_45 - x_remainder; - } else { - y += spacing_45; - } - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step up"); - - x -= y_max_bound - y; - y = y_max_bound; - line_opt_args.comment = "Fill: Print up/left"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } else { - if (i == y_count) { - x += spacing_45 - y_remainder; - } else { - x += spacing_45; - } - y = y_max_bound; - gcode << move_to(Vec2d(x, y), m_writer, "Fill: Step right"); - - y -= x_max_bound - x; - x = x_max_bound; - line_opt_args.comment = "Fill: Print down/right"; - gcode << draw_line(Vec2d(x, y), line_opt_args); - } - } - } - - return gcode.str(); -} - -double CalibPressureAdvancePattern::get_distance(Vec2d from, Vec2d to) const -{ - return std::hypot((to.x() - from.x()), (to.y() - from.y())); -} - double CalibPressureAdvancePattern::object_size_x() const { return get_num_patterns() * ((wall_count() - 1) * line_spacing_angle()) + - (get_num_patterns() - 1) * (m_pattern_spacing + line_width()) + - std::cos(to_radians(m_corner_angle) / 2) * m_wall_side_length + - line_spacing_first_layer() * wall_count() - ; + (get_num_patterns() - 1) * (m_pattern_spacing + line_width()) + std::cos(to_radians(m_corner_angle) / 2) * m_wall_side_length + + line_spacing_first_layer() * wall_count(); } double CalibPressureAdvancePattern::object_size_y() const { - return 2 * (std::sin(to_radians(m_corner_angle) / 2) * m_wall_side_length) + - max_numbering_height() + - m_glyph_padding_vertical * 2 + - line_width_first_layer(); + return 2 * (std::sin(to_radians(m_corner_angle) / 2) * m_wall_side_length) + max_numbering_height() + m_glyph_padding_vertical * 2 + + line_width_first_layer(); } double CalibPressureAdvancePattern::glyph_start_x(int pattern_i) const @@ -843,16 +728,14 @@ double CalibPressureAdvancePattern::glyph_start_x(int pattern_i) const // align glyph's start with first perimeter of specified pattern double x = // starting offset - m_starting_point.x() + - pattern_shift() + + m_starting_point.x() + pattern_shift() + // width of pattern extrusions pattern_i * (wall_count() - 1) * line_spacing_angle() + // center to center distance of extrusions - pattern_i * line_width() + // endcaps. center to end on either side = 1 line width + pattern_i * line_width() + // endcaps. center to end on either side = 1 line width // space between each pattern - pattern_i * m_pattern_spacing - ; + pattern_i * m_pattern_spacing; // align to middle of pattern walls x += wall_count() * line_spacing_angle() / 2; @@ -873,27 +756,20 @@ double CalibPressureAdvancePattern::glyph_length_x() const double CalibPressureAdvancePattern::glyph_tab_max_x() const { // only every other glyph is shown, starting with 1 - int num = get_num_patterns(); - int max_num = - (num % 2 == 0) - ? num - 1 - : num - ; + int num = get_num_patterns(); + int max_num = (num % 2 == 0) ? num - 1 : num; // padding at end should be same as padding at start double padding = glyph_start_x(0) - m_starting_point.x(); - - return - glyph_start_x(max_num - 1) + // glyph_start_x is zero-based - (glyph_length_x() - line_width() / 2) + - padding - ; + + return glyph_start_x(max_num - 1) + // glyph_start_x is zero-based + (glyph_length_x() - line_width() / 2) + padding; } double CalibPressureAdvancePattern::max_numbering_height() const { std::string::size_type most_characters = 0; - const int num_patterns = get_num_patterns(); + const int num_patterns = get_num_patterns(); // note: only every other number is printed for (std::string::size_type i = 0; i < num_patterns; i += 2) { @@ -911,10 +787,6 @@ double CalibPressureAdvancePattern::max_numbering_height() const double CalibPressureAdvancePattern::pattern_shift() const { - return - (wall_count() - 1) * line_spacing_first_layer() + - line_width_first_layer() + - m_glyph_padding_horizontal - ; + return (wall_count() - 1) * line_spacing_first_layer() + line_width_first_layer() + m_glyph_padding_horizontal; } } // namespace Slic3r diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index 5e3316343c..10c3e777ea 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -1,4 +1,5 @@ #pragma once +#include #define calib_pressure_advance_dd #include "GCode.hpp" @@ -23,24 +24,16 @@ enum class CalibMode : int { Calib_Retraction_tower }; -enum class CalibState { - Start = 0, - Preset, - Calibration, - CoarseSave, - FineCalibration, - Save, - Finish -}; +enum class CalibState { Start = 0, Preset, Calibration, CoarseSave, FineCalibration, Save, Finish }; -struct Calib_Params { - Calib_Params() : mode(CalibMode::Calib_None) { }; - double start, end, step; - bool print_numbers; +struct Calib_Params +{ + Calib_Params() : mode(CalibMode::Calib_None){}; + double start, end, step; + bool print_numbers; CalibMode mode; }; - class X1CCalibInfos { public: @@ -101,8 +94,8 @@ public: std::string filament_id; std::string setting_id; std::string name; - float k_value = 0.0; - float n_coef = 0.0; + float k_value = 0.0; + float n_coef = 0.0; int confidence = -1; // 0: success 1: uncertain 2: failed }; @@ -125,133 +118,130 @@ public: int confidence; // 0: success 1: uncertain 2: failed }; -class CalibPressureAdvance { - public: - static float find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, - int filament_idx = 0); +struct DrawBoxOptArgs +{ + DrawBoxOptArgs(int num_perimeters, double height, double line_width, double speed) + : num_perimeters{num_perimeters}, height{height}, line_width{line_width}, speed{speed} {}; + DrawBoxOptArgs() = default; - protected: - CalibPressureAdvance() =default; - ~CalibPressureAdvance() =default; + bool is_filled{false}; + int num_perimeters; + double height; + double line_width; + double speed; +}; +class CalibPressureAdvance +{ +public: + static float find_optimal_PA_speed(const DynamicPrintConfig &config, double line_width, double layer_height, int filament_idx = 0); - enum class DrawDigitMode { - Left_To_Right, - Bottom_To_Top - }; +protected: + CalibPressureAdvance() = default; + CalibPressureAdvance(const DynamicPrintConfig& config) : m_config(config){}; + CalibPressureAdvance(const FullPrintConfig &config) { m_config.apply(config); }; + ~CalibPressureAdvance() = default; - void delta_scale_bed_ext(BoundingBoxf& bed_ext) const { bed_ext.scale(1.0f / 1.41421f); } + enum class DrawDigitMode { Left_To_Right, Bottom_To_Top }; + + void delta_scale_bed_ext(BoundingBoxf &bed_ext) const { bed_ext.scale(1.0f / 1.41421f); } + + std::string move_to(Vec2d pt, GCodeWriter &writer, std::string comment = std::string()); + double e_per_mm(double line_width, double layer_height, float nozzle_diameter, float filament_diameter, float print_flow_ratio) const; + double speed_adjust(int speed) const { return speed * 60; }; - std::string move_to(Vec2d pt, GCodeWriter& writer, std::string comment = std::string()); - double e_per_mm( - double line_width, - double layer_height, - float nozzle_diameter, - float filament_diameter, - float print_flow_ratio - ) const; - double speed_adjust(int speed) const { return speed * 60; }; - std::string convert_number_to_string(double num) const; double number_spacing() const { return m_digit_segment_len + m_digit_gap_len; }; - std::string draw_digit( - double startx, - double starty, - char c, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - GCodeWriter& writer - ); - std::string draw_number( - double startx, - double starty, - double value, - CalibPressureAdvance::DrawDigitMode mode, - double line_width, - double e_per_mm, - double speed, - GCodeWriter& writer - ); - - Vec3d m_last_pos; + std::string draw_digit(double startx, + double starty, + char c, + CalibPressureAdvance::DrawDigitMode mode, + double line_width, + double e_per_mm, + GCodeWriter &writer); + std::string draw_number(double startx, + double starty, + double value, + CalibPressureAdvance::DrawDigitMode mode, + double line_width, + double e_per_mm, + double speed, + GCodeWriter &writer); - DrawDigitMode m_draw_digit_mode {DrawDigitMode::Left_To_Right}; - const double m_digit_segment_len {2}; - const double m_digit_gap_len {1}; - const std::string::size_type m_max_number_len {5}; + std::string draw_line( + GCodeWriter &writer, Vec2d to_pt, double line_width, double layer_height, double speed, const std::string &comment = std::string()); + std::string draw_box(GCodeWriter &writer, double min_x, double min_y, double size_x, double size_y, DrawBoxOptArgs opt_args); + + double to_radians(double degrees) const { return degrees * M_PI / 180; }; + double get_distance(Vec2d from, Vec2d to) const; + + Vec3d m_last_pos; + DynamicPrintConfig m_config; + + const double m_encroachment{1. / 3.}; + DrawDigitMode m_draw_digit_mode{DrawDigitMode::Left_To_Right}; + const double m_digit_segment_len{2}; + const double m_digit_gap_len{1}; + const std::string::size_type m_max_number_len{5}; }; -class CalibPressureAdvanceLine : public CalibPressureAdvance { +class CalibPressureAdvanceLine : public CalibPressureAdvance +{ public: - CalibPressureAdvanceLine(GCode* gcodegen) : - mp_gcodegen(gcodegen), - m_nozzle_diameter(gcodegen->config().nozzle_diameter.get_at(0)) - { }; - ~CalibPressureAdvanceLine() { }; + CalibPressureAdvanceLine(GCode *gcodegen) : CalibPressureAdvance(gcodegen->config()), mp_gcodegen(gcodegen),m_nozzle_diameter(gcodegen->config().nozzle_diameter.get_at(0)){}; + ~CalibPressureAdvanceLine(){}; std::string generate_test(double start_pa = 0, double step_pa = 0.002, int count = 50); - void set_speed(double fast = 100.0, double slow = 20.0) { + void set_speed(double fast = 100.0, double slow = 20.0) + { m_slow_speed = slow; m_fast_speed = fast; } - - const double& line_width() { return m_line_width; }; - bool is_delta() const; - bool& draw_numbers() { return m_draw_numbers; } + + const double &line_width() { return m_line_width; }; + bool is_delta() const; + bool &draw_numbers() { return m_draw_numbers; } private: std::string print_pa_lines(double start_x, double start_y, double start_pa, double step_pa, int num); - - void delta_modify_start(double& startx, double& starty, int count); - GCode* mp_gcodegen; + void delta_modify_start(double &startx, double &starty, int count); + + GCode *mp_gcodegen; double m_nozzle_diameter; double m_slow_speed, m_fast_speed; - - const double m_height_layer {0.2}; - const double m_line_width {0.6}; - const double m_thin_line_width {0.44}; - const double m_number_line_width {0.48}; - const double m_space_y {3.5}; - double m_length_short {20.0}, m_length_long {40.0}; - bool m_draw_numbers {true}; + const double m_height_layer{0.2}; + const double m_line_width{0.6}; + const double m_thin_line_width{0.44}; + const double m_number_line_width{0.48}; + const double m_space_y{3.5}; + + double m_length_short{20.0}, m_length_long{40.0}; + bool m_draw_numbers{true}; }; -struct SuggestedConfigCalibPAPattern { - const std::vector> float_pairs { - {"initial_layer_print_height", 0.25}, - {"layer_height", 0.2}, - {"initial_layer_speed", 30} - }; +struct SuggestedConfigCalibPAPattern +{ + const std::vector> float_pairs{{"initial_layer_print_height", 0.25}, + {"layer_height", 0.2}, + {"initial_layer_speed", 30}}; - const std::vector> nozzle_ratio_pairs { - {"line_width", 112.5}, - {"initial_layer_line_width", 140} - }; + const std::vector> nozzle_ratio_pairs{{"line_width", 112.5}, {"initial_layer_line_width", 140}}; - const std::vector> int_pairs { - {"skirt_loops", 0}, - {"wall_loops", 3} - }; + const std::vector> int_pairs{{"skirt_loops", 0}, {"wall_loops", 3}}; - const std::pair brim_pair {"brim_type", BrimType::btNoBrim}; + const std::pair brim_pair{"brim_type", BrimType::btNoBrim}; }; -class CalibPressureAdvancePattern : public CalibPressureAdvance { -friend struct DrawLineOptArgs; -friend struct DrawBoxOptArgs; +class CalibPressureAdvancePattern : public CalibPressureAdvance +{ + friend struct DrawBoxOptArgs; public: CalibPressureAdvancePattern( - const Calib_Params& params, - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin - ); + const Calib_Params ¶ms, const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin); double handle_xy_size() const { return m_handle_xy_size; }; double handle_spacing() const { return m_handle_spacing; }; @@ -259,85 +249,25 @@ public: double print_size_y() const { return object_size_y(); }; double max_layer_z() const { return height_first_layer() + ((m_num_layers - 1) * height_layer()); }; - void generate_custom_gcodes( - const DynamicPrintConfig& config, - bool is_bbl_machine, - Model& model, - const Vec3d& origin - ); + void generate_custom_gcodes(const DynamicPrintConfig &config, bool is_bbl_machine, Model &model, const Vec3d &origin); protected: double speed_first_layer() const { return m_config.option("initial_layer_speed")->value; }; double speed_perimeter() const { return m_config.option("outer_wall_speed")->value; }; double line_width_first_layer() const { return m_config.get_abs_value("initial_layer_line_width"); }; double line_width() const { return m_config.get_abs_value("line_width"); }; - int wall_count() const { return m_config.option("wall_loops")->value; }; + int wall_count() const { return m_config.option("wall_loops")->value; }; private: - struct DrawLineOptArgs { - DrawLineOptArgs(const CalibPressureAdvancePattern& p) : - height {p.height_layer()}, - line_width {p.line_width()}, - speed {p.speed_adjust(p.speed_perimeter())} - { }; + void refresh_setup(const DynamicPrintConfig &config, bool is_bbl_machine, const Model &model, const Vec3d &origin); + void _refresh_starting_point(const Model &model); + void _refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin); - double height; - double line_width; - double speed; - std::string comment {"Print line"}; - }; + double height_first_layer() const { return m_config.option("initial_layer_print_height")->value; }; + double height_layer() const { return m_config.option("layer_height")->value; }; + const int get_num_patterns() const { return std::ceil((m_params.end - m_params.start) / m_params.step + 1); } - struct DrawBoxOptArgs { - DrawBoxOptArgs(const CalibPressureAdvancePattern& p) : - num_perimeters {p.wall_count()}, - height {p.height_first_layer()}, - line_width {p.line_width_first_layer()}, - speed {p.speed_adjust(p.speed_first_layer())} - { }; - - bool is_filled {false}; - int num_perimeters; - double height; - double line_width; - double speed; - }; - - void refresh_setup( - const DynamicPrintConfig& config, - bool is_bbl_machine, - const Model& model, - const Vec3d& origin - ); - void _refresh_starting_point(const Model& model); - void _refresh_writer( - bool is_bbl_machine, - const Model& model, - const Vec3d& origin - ); - - double height_first_layer() const { return m_config.option("initial_layer_print_height")->value; }; - double height_layer() const { return m_config.option("layer_height")->value; }; - const int get_num_patterns() const - { - return std::ceil((m_params.end - m_params.start) / m_params.step + 1); - } - - std::string draw_line( - Vec2d to_pt, - DrawLineOptArgs opt_args - ); - std::string draw_box( - double min_x, - double min_y, - double size_x, - double size_y, - DrawBoxOptArgs opt_args - ); - - double to_radians(double degrees) const { return degrees * M_PI / 180; }; - double get_distance(Vec2d from, Vec2d to) const; - - /* + /* from slic3r documentation: spacing = extrusion_width - layer_height * (1 - PI/4) "spacing" = center-to-center distance of adjacent extrusions, which partially overlap https://manual.slic3r.org/advanced/flow-math @@ -358,23 +288,21 @@ private: double pattern_shift() const; - const Calib_Params& m_params; + const Calib_Params &m_params; - DynamicPrintConfig m_config; - GCodeWriter m_writer; - bool m_is_delta; - Vec3d m_starting_point; + GCodeWriter m_writer; + bool m_is_delta; + Vec3d m_starting_point; - const double m_handle_xy_size {5}; - const double m_handle_spacing {2}; - const int m_num_layers {4}; - - const double m_wall_side_length {30.0}; - const int m_corner_angle {90}; - const int m_pattern_spacing {2}; - const double m_encroachment {1. / 3.}; + const double m_handle_xy_size{5}; + const double m_handle_spacing{2}; + const int m_num_layers{4}; - const double m_glyph_padding_horizontal {1}; - const double m_glyph_padding_vertical {1}; + const double m_wall_side_length{30.0}; + const int m_corner_angle{90}; + const int m_pattern_spacing{2}; + + const double m_glyph_padding_horizontal{1}; + const double m_glyph_padding_vertical{1}; }; } // namespace Slic3r From 33f91c026a5dd8cae9e256059d62e48146d678fe Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 25 Sep 2023 23:17:56 +0800 Subject: [PATCH 2/6] Hide purge tower preview in case of no tool changes --- src/libslic3r/Print.cpp | 16 +++++++++++----- src/slic3r/GUI/PartPlate.cpp | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5afa63f208..96cf920f64 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2256,10 +2256,7 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const if (!is_step_done(psWipeTower) && filaments_cnt != 0) { double width = m_config.prime_tower_width; double layer_height = 0.2; // hard code layer height - double wipe_volume = m_config.prime_volume; - if (m_config.purge_in_prime_tower || (filaments_cnt == 1 && enable_timelapse_print())) { - const_cast(this)->m_wipe_tower_data.depth = wipe_volume / (layer_height * width); - } else { + if (m_config.purge_in_prime_tower) { // Calculating depth should take into account currently set wiping volumes. // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. @@ -2269,8 +2266,17 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const max_wipe_volumes.emplace_back(*std::max_element(v.begin(), v.end())); float maximum = std::accumulate(max_wipe_volumes.begin(), max_wipe_volumes.end(), 0.f); maximum = maximum * filaments_cnt / max_wipe_volumes.size(); - + + // Orca: it's overshooting a bit, so let's reduce it a bit + maximum *= 0.6; const_cast(this)->m_wipe_tower_data.depth = maximum / (layer_height * width); + } else { + double wipe_volume = m_config.prime_volume; + if (filaments_cnt == 1 && enable_timelapse_print()) { + const_cast(this)->m_wipe_tower_data.depth = wipe_volume / (layer_height * width); + } else { + const_cast(this)->m_wipe_tower_data.depth = wipe_volume * (filaments_cnt - 1) / (layer_height * width); + } } const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; } diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index cb056161a9..5684c24822 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1579,7 +1579,7 @@ Vec3d PartPlate::estimate_wipe_tower_size(const double w, const double d) const auto timelapse_type = dconfig.option>("timelapse_type"); bool timelapse_enabled = timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false; - double depth = d; + double depth = plate_extruders.size() == 1 ? 0 : d; if (timelapse_enabled || depth > EPSILON) { float min_wipe_tower_depth = 0.f; auto iter = WipeTower::min_depth_per_height.begin(); From ff992aa650428007cc7c4d016980ef809e6f57af Mon Sep 17 00:00:00 2001 From: Trist0ne <41755299+Trist0ne@users.noreply.github.com> Date: Mon, 25 Sep 2023 11:31:04 -0400 Subject: [PATCH 3/6] Comgrow T500 (#2222) * Initial commit to add the upcoming Comgrow T500 * UPDATE DANG IT * Added Comgrow machine file * Updated profiles to be more inline with their Cura profiles * Corrected Errors in comgrow_common and uploaded a new cover.png * fixes --------- Co-authored-by: SoftFever --- resources/profiles/Comgrow.json | 127 + .../profiles/Comgrow/Comgrow T500_cover.png | Bin 0 -> 9172 bytes .../Comgrow/comgrow_t500_buildplate_model.stl | 2774 +++++++++++++++++ .../comgrow_t500_buildplate_texture.png | Bin 0 -> 13 bytes .../Comgrow/filament/Comgrow Generic ABS.json | 17 + .../filament/Comgrow Generic PETG.json | 27 + .../Comgrow/filament/Comgrow Generic PLA.json | 18 + .../Comgrow/filament/fdm_filament_abs.json | 88 + .../Comgrow/filament/fdm_filament_common.json | 144 + .../Comgrow/filament/fdm_filament_pet.json | 82 + .../Comgrow/filament/fdm_filament_pla.json | 94 + .../machine/Comgrow T500 0.4 nozzle.json | 19 + .../machine/Comgrow T500 0.6 nozzle.json | 26 + .../machine/Comgrow T500 0.8 nozzle.json | 26 + .../Comgrow/machine/Comgrow T500.json | 12 + .../Comgrow/machine/fdm_comgrow_common.json | 141 + .../Comgrow/machine/fdm_machine_common.json | 117 + .../0.16mm Opitmal @Comgrow T500 0.6.json | 23 + .../0.16mm Optimal @Comgrow T500 0.4.json | 51 + .../0.20mm Standard @Comgrow T500 0.4.json | 12 + .../0.20mm Standard @Comgrow T500 0.6.json | 20 + .../0.24mm Draft @Comgrow T500 0.4.json | 21 + .../0.24mm Draft @Comgrow T500 0.6.json | 21 + .../0.24mm Optimal @Comgrow T500 0.8.json | 22 + .../0.28mm SuperDraft @Comgrow T500 0.4.json | 17 + .../0.28mm SuperDraft @Comgrow T500 0.6.json | 21 + .../0.32mm Standard @Comgrow T500 0.8.json | 22 + .../0.40mm Draft @Comgrow T500 0.8.json | 22 + .../0.48mm Draft @Comgrow T500 0.8.json | 22 + .../0.56mm SuperDraft @Comgrow T500 0.8.json | 22 + .../process/fdm_process_comgrow_common.json | 104 + .../Comgrow/process/fdm_process_common.json | 70 + 32 files changed, 4182 insertions(+) create mode 100644 resources/profiles/Comgrow.json create mode 100644 resources/profiles/Comgrow/Comgrow T500_cover.png create mode 100644 resources/profiles/Comgrow/comgrow_t500_buildplate_model.stl create mode 100644 resources/profiles/Comgrow/comgrow_t500_buildplate_texture.png create mode 100644 resources/profiles/Comgrow/filament/Comgrow Generic ABS.json create mode 100644 resources/profiles/Comgrow/filament/Comgrow Generic PETG.json create mode 100644 resources/profiles/Comgrow/filament/Comgrow Generic PLA.json create mode 100644 resources/profiles/Comgrow/filament/fdm_filament_abs.json create mode 100644 resources/profiles/Comgrow/filament/fdm_filament_common.json create mode 100644 resources/profiles/Comgrow/filament/fdm_filament_pet.json create mode 100644 resources/profiles/Comgrow/filament/fdm_filament_pla.json create mode 100644 resources/profiles/Comgrow/machine/Comgrow T500 0.4 nozzle.json create mode 100644 resources/profiles/Comgrow/machine/Comgrow T500 0.6 nozzle.json create mode 100644 resources/profiles/Comgrow/machine/Comgrow T500 0.8 nozzle.json create mode 100644 resources/profiles/Comgrow/machine/Comgrow T500.json create mode 100644 resources/profiles/Comgrow/machine/fdm_comgrow_common.json create mode 100644 resources/profiles/Comgrow/machine/fdm_machine_common.json create mode 100644 resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json create mode 100644 resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json create mode 100644 resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json create mode 100644 resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json create mode 100644 resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json create mode 100644 resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json create mode 100644 resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json create mode 100644 resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json create mode 100644 resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json create mode 100644 resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json create mode 100644 resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json create mode 100644 resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json create mode 100644 resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json create mode 100644 resources/profiles/Comgrow/process/fdm_process_comgrow_common.json create mode 100644 resources/profiles/Comgrow/process/fdm_process_common.json diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json new file mode 100644 index 0000000000..d412cfd668 --- /dev/null +++ b/resources/profiles/Comgrow.json @@ -0,0 +1,127 @@ +{ + "name": "Comgrow", + "version": "01.07.00.00", + "force_update": "0", + "description": "Comgrow configurations", + "machine_model_list": [ + { + "name": "Comgrow T500", + "sub_path": "machine/Comgrow T500.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_comgrow_common", + "sub_path": "process/fdm_process_comgrow_common.json" + }, + { + "name": "0.16mm Optimal @Comgrow T500", + "sub_path": "process/0.16mm Opitmal @Comgrow T500 0.6.json" + }, + { + "name": "0.16mm Optimal @Comgrow T500", + "sub_path": "process/0.16mm Optimal @Comgrow T500 0.4.json" + }, + { + "name": "0.20mm Standard @Comgrow T500", + "sub_path": "process/0.20mm Standard @Comgrow T500 0.4.json" + }, + { + "name": "0.20mm Standard @Comgrow T500", + "sub_path": "process/0.20mm Standard @Comgrow T500 0.6.json" + }, + { + "name": "0.24mm Draft @Comgrow T500", + "sub_path": "process/0.24mm Draft @Comgrow T500 0.4.json" + }, + { + "name": "0.24mm Draft @Comgrow T500", + "sub_path": "process/0.24mm Draft @Comgrow T500 0.6.json" + }, + { + "name": "0.24mm Optimal @Comgrow T500", + "sub_path": "process/0.24mm Optimal @Comgrow T500 0.8.json" + }, + { + "name": "0.28mm SuperDraft @Comgrow T500", + "sub_path": "process/0.28mm SuperDraft @Comgrow T500 0.4.json" + }, + { + "name": "0.28mm SuperDraft @Comgrow T500", + "sub_path": "process/0.28mm SuperDraft @Comgrow T500 0.6.json" + }, + { + "name": "0.32mm Standard @Comgrow T500", + "sub_path": "process/0.32mm Standard @Comgrow T500 0.8.json" + }, + { + "name": "0.40mm Draft @Comgrow T500", + "sub_path": "process/0.40mm Draft @Comgrow T500 0.8.json" + }, + { + "name": "0.48mm Draft @Comgrow T500", + "sub_path": "process/0.48mm Draft @Comgrow T500 0.8.json" + }, + { + "name": "0.56mm SuperDraft @Comgrow T500", + "sub_path": "process/0.56mm SuperDraft @Comgrow T500 0.8.json" + } + + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "Comgrow Generic PLA", + "sub_path": "filament/Comgrow Generic PLA.json" + }, + { + "name": "Comgrow Generic PETG", + "sub_path": "filament/Comgrow Generic PETG.json" + }, + { + "name": "Comgrow Generic ABS", + "sub_path": "filament/Comgrow Generic ABS.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_comgrow_common", + "sub_path": "machine/fdm_comgrow_common.json" + }, + { + "name": "Comgrow T500 0.4 nozzle", + "sub_path": "machine/Comgrow T500 0.4 nozzle.json" + }, + { + "name": "Comgrow T500 0.6 nozzle", + "sub_path": "machine/Comgrow T500 0.6 nozzle.json" + }, + { + "name": "Comgrow T500 0.8 nozzle", + "sub_path": "machine/Comgrow T500 0.8 nozzle.json" + } + ] +} diff --git a/resources/profiles/Comgrow/Comgrow T500_cover.png b/resources/profiles/Comgrow/Comgrow T500_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..9d8fbef8aa398c5d4fb364fc8a61b83ec6b54512 GIT binary patch literal 9172 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json b/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json new file mode 100644 index 0000000000..057071de2a --- /dev/null +++ b/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "Comgrow Generic ABS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": ["0.926"], + "filament_max_volumetric_speed": ["12"], + "compatible_printers": [ + "Comgrow T500 0.4 nozzle", + "Comgrow T500 0.6 nozzle", + "Comgrow T500 0.8 nozzle" + + ] +} diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json b/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json new file mode 100644 index 0000000000..07e247ef7c --- /dev/null +++ b/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "Comgrow Generic PETG", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": ["1"], + "slow_down_for_layer_cooling": ["1"], + "fan_cooling_layer_time": ["30"], + "overhang_fan_speed": ["90"], + "overhang_fan_threshold": ["25%"], + "fan_max_speed": ["90"], + "fan_min_speed": ["40"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["8"], + "filament_flow_ratio": ["0.95"], + "filament_max_volumetric_speed": ["10"], + "filament_start_gcode": ["; filament start gcode\n"], + "compatible_printers": [ + "Comgrow T500 0.4 nozzle", + "Comgrow T500 0.6 nozzle", + "Comgrow T500 0.8 nozzle" + + ] +} diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json b/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json new file mode 100644 index 0000000000..8f221cb4d3 --- /dev/null +++ b/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Comgrow Generic PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": ["0.98"], + "filament_max_volumetric_speed": ["12"], + "slow_down_layer_time": ["8"], + "compatible_printers": [ + "Comgrow T500 0.4 nozzle", + "Comgrow T500 0.6 nozzle", + "Comgrow T500 0.8 nozzle" + + ] +} diff --git a/resources/profiles/Comgrow/filament/fdm_filament_abs.json b/resources/profiles/Comgrow/filament/fdm_filament_abs.json new file mode 100644 index 0000000000..b9d4eeda31 --- /dev/null +++ b/resources/profiles/Comgrow/filament/fdm_filament_abs.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_abs", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "textured_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "textured_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ABS" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/Comgrow/filament/fdm_filament_common.json b/resources/profiles/Comgrow/filament/fdm_filament_common.json new file mode 100644 index 0000000000..9f77975119 --- /dev/null +++ b/resources/profiles/Comgrow/filament/fdm_filament_common.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "60" + ], + "hot_plate_temp_initial_layer" : [ + "60" + ], + "textured_plate_temp_initial_layer" : [ + "60" + ], + "overhang_fan_threshold": [ + "95%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "bed_type": [ + "Cool Plate" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/Comgrow/filament/fdm_filament_pet.json b/resources/profiles/Comgrow/filament/fdm_filament_pet.json new file mode 100644 index 0000000000..bb2323e9c1 --- /dev/null +++ b/resources/profiles/Comgrow/filament/fdm_filament_pet.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "80" + ], + "textured_plate_temp" : [ + "80" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "80" + ], + "textured_plate_temp_initial_layer" : [ + "80" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_type": [ + "PETG" + ], + "filament_density": [ + "1.27" + ], + "filament_cost": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "255" + ], + "temperature_vitrification": [ + "80" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Comgrow/filament/fdm_filament_pla.json b/resources/profiles/Comgrow/filament/fdm_filament_pla.json new file mode 100644 index 0000000000..82c6772f35 --- /dev/null +++ b/resources/profiles/Comgrow/filament/fdm_filament_pla.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "60" + ], + "hot_plate_temp_initial_layer" : [ + "60" + ], + "textured_plate_temp_initial_layer" : [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Comgrow/machine/Comgrow T500 0.4 nozzle.json b/resources/profiles/Comgrow/machine/Comgrow T500 0.4 nozzle.json new file mode 100644 index 0000000000..15deb514a4 --- /dev/null +++ b/resources/profiles/Comgrow/machine/Comgrow T500 0.4 nozzle.json @@ -0,0 +1,19 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Comgrow T500 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_comgrow_common", + "printer_model": "Comgrow T500", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "printable_height": "500" +} diff --git a/resources/profiles/Comgrow/machine/Comgrow T500 0.6 nozzle.json b/resources/profiles/Comgrow/machine/Comgrow T500 0.6 nozzle.json new file mode 100644 index 0000000000..ec2c1758e8 --- /dev/null +++ b/resources/profiles/Comgrow/machine/Comgrow T500 0.6 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "Comgrow T500 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_comgrow_common", + "printer_model": "Comgrow T500", + "printer_variant": "0.6", + "retraction_length": [ + "1.0" + ], + "z_hop": [ + "0.3" + ], + "nozzle_diameter": [ + "0.6" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "printable_height": "500" +} diff --git a/resources/profiles/Comgrow/machine/Comgrow T500 0.8 nozzle.json b/resources/profiles/Comgrow/machine/Comgrow T500 0.8 nozzle.json new file mode 100644 index 0000000000..7d3b87d6a5 --- /dev/null +++ b/resources/profiles/Comgrow/machine/Comgrow T500 0.8 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Comgrow T500 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_comgrow_common", + "printer_model": "Comgrow T500", + "printer_variant": "0.8", + "retraction_length": [ + "1.0" + ], + "z_hop": [ + "0.3" + ], + "nozzle_diameter": [ + "0.8" + ], + "printable_area": [ + "0x0", + "500x0", + "500x500", + "0x500" + ], + "printable_height": "500" +} diff --git a/resources/profiles/Comgrow/machine/Comgrow T500.json b/resources/profiles/Comgrow/machine/Comgrow T500.json new file mode 100644 index 0000000000..890ffa4aaa --- /dev/null +++ b/resources/profiles/Comgrow/machine/Comgrow T500.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Comgrow T500", + "model_id": "Comgrow_T500", + "nozzle_diameter": "0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Comgrow", + "bed_model": "comgrow_t500_buildplate_model.stl", + "bed_texture": "comgrow_t500_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Comgrow Generic PLA;Comgrow Generic PETG;Comgrow Generic ABS" +} diff --git a/resources/profiles/Comgrow/machine/fdm_comgrow_common.json b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json new file mode 100644 index 0000000000..2ead8989a8 --- /dev/null +++ b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json @@ -0,0 +1,141 @@ +{ + "type": "machine", + "name": "fdm_comgrow_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_machine_common", + "gcode_flavor": "klipper", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "8000", + "8000" + ], + "machine_max_acceleration_y": [ + "8000", + "8000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_speed_e": [ + "25", + "25" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "max_layer_height": [ + "0.56" + ], + "min_layer_height": [ + "0.08" + ], + "printable_height": "250", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "printer_settings_id": "", + "printer_technology": "FFF", + "printer_variant": "0.4", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "2" + ], + "z_hop": [ + "0.2" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "z_hop_types": "Normal Lift", + "silent_mode": "0", + "single_extruder_multi_material": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "wipe": [ + "1" + ], + "default_filament_profile": [ + "Comgrow Generic PETG" + ], + "default_print_profile": "0.20mm Standard @Comgrow T500", + "bed_exclude_area": [ + "0x0" + ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n; You can use following code instead if your PRINT_START macro support Chamber and print area bedmesh\n; PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single] Chamber=[chamber_temperature] PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]}", + "machine_end_gcode": "PRINT_END", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "scan_first_layer": "0", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/Comgrow/machine/fdm_machine_common.json b/resources/profiles/Comgrow/machine/fdm_machine_common.json new file mode 100644 index 0000000000..8d4fb897f1 --- /dev/null +++ b/resources/profiles/Comgrow/machine/fdm_machine_common.json @@ -0,0 +1,117 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "deretraction_speed": [ + "40" + ], + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "gcode_flavor": "marlin", + "silent_mode": "0", + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "10000" + ], + "machine_max_acceleration_retracting": [ + "1000" + ], + "machine_max_acceleration_x": [ + "10000" + ], + "machine_max_acceleration_y": [ + "10000" + ], + "machine_max_acceleration_z": [ + "100" + ], + "machine_max_speed_e": [ + "60" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_z": [ + "10" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "8" + ], + "machine_max_jerk_y": [ + "8" + ], + "machine_max_jerk_z": [ + "0.4" + ], + "machine_min_extruding_rate": [ + "0" + ], + "machine_min_travel_rate": [ + "0" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printable_height": "250", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "nozzle_diameter": [ + "0.4" + ], + "printer_settings_id": "", + "printer_variant": "0.4", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "1" + ], + "z_hop": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "60" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": [ + "1" + ], + "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", + "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end" +} diff --git a/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json new file mode 100644 index 0000000000..f6927b2b0a --- /dev/null +++ b/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Opitmal @Comgrow T500 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "bottom_shell_layers": "5", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "layer_height": "0.16", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_shell_layers": "7", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Comgrow T500 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json new file mode 100644 index 0000000000..72ae6ae691 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json @@ -0,0 +1,51 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Comgrow T500 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "adaptive_layer_height": "1", + "brim_object_gap": "0", + "brim_width": "0", + "default_acceleration": "0", + "detect_thin_wall": "1", + "elefant_foot_compensation": "0.1", + "filename_format": "[input_filename_base].gcode", + "infill_wall_overlap": "25%", + "initial_layer_acceleration": "0", + "initial_layer_infill_speed": "35%", + "initial_layer_line_width": "0.42", + "initial_layer_speed": "35%", + "inner_wall_acceleration": "0", + "internal_solid_infill_line_width": "0", + "internal_solid_infill_speed": "50", + "ironing_type": "no ironing", + "layer_height": "0.16", + "line_width": "0.45", + "minimum_sparse_infill_area": "10", + "outer_wall_line_width": "0.45", + "outer_wall_speed": "40", + "prime_tower_width": "60", + "skirt_height": "2", + "skirt_loops": "2", + "sparse_infill_speed": "60", + "support_base_pattern_spacing": "0.2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_interface_top_layers": "3", + "support_line_width": "0.38", + "support_object_xy_distance": "60%", + "support_speed": "40", + "support_style": "grid", + "support_threshold_angle": "45", + "support_top_z_distance": "0.15", + "top_surface_acceleration": "0", + "travel_acceleration": "0", + "tree_support_branch_angle": "40", + "wall_loops": "2", + "compatible_printers": [ + "Comgrow T500 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json new file mode 100644 index 0000000000..014b127165 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Comgrow T500 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "top_shell_layers": "4", + "compatible_printers": [ + "Comgrow T500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json new file mode 100644 index 0000000000..522c876ae3 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Comgrow T500 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.63", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.66", + "internal_solid_infill_line_width": "0.66", + "line_width": "0.66", + "outer_wall_line_width": "0.66", + "sparse_infill_line_width": "0.66", + "support_line_width": "0.54", + "top_surface_line_width": "0.66", + "compatible_printers": [ + "Comgrow T500 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json new file mode 100644 index 0000000000..83e47e60af --- /dev/null +++ b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Comgrow T500 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.4", + "internal_solid_infill_line_width": "0.5", + "layer_height": "0.24", + "line_width": "0.5", + "outer_wall_line_width": "0.5", + "sparse_infill_line_width": "0.4", + "support_line_width": "0.5", + "top_shell_layers": "4", + "top_surface_line_width": "0.5", + "compatible_printers": [ + "Comgrow T500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json new file mode 100644 index 0000000000..cdd3a8c86d --- /dev/null +++ b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Comgrow T500 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.6", + "initial_layer_print_height": "0.3", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "layer_heigth": "0.24", + "line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_surface_line_width": "0.6", + "compatible_printers": [ + "Comgrow T500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json new file mode 100644 index 0000000000..801e900d34 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Comgrow T500 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.24", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json new file mode 100644 index 0000000000..9628ddde70 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.28mm SuperDraft @Comgrow T500 0.4", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.4", + "initial_layer_print_height": "0.28", + "inner_wall_line_width": "0.4", + "layer_height": "0.28", + "sparse_infill_line_width": "0.4", + "top_shell_layers": "4", + "compatible_printers": [ + "Comgrow T500 0.4 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json new file mode 100644 index 0000000000..569be4081a --- /dev/null +++ b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.28mm SuperDraft @Comgrow T500 0.6", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.6", + "inner_wall_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "line_width": "0.6", + "layer_height": "0.28", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "support_line_width": "0.6", + "top_surface_line_width": "0.6", + "top_shell_layers": "4", + "compatible_printers": [ + "Comgrow T500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json new file mode 100644 index 0000000000..cfac44510b --- /dev/null +++ b/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Standard @Comgrow T500 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.32", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.32", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Comgrow T500 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json new file mode 100644 index 0000000000..ab4051c141 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Draft @Comgrow T500 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.4", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json new file mode 100644 index 0000000000..a6f37e2f63 --- /dev/null +++ b/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.48mm Draft @Comgrow T500 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.48", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.48", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json new file mode 100644 index 0000000000..ec445562ce --- /dev/null +++ b/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.56mm SuperChunky @Comgrow T500 0.8", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_comgrow_common", + "initial_layer_line_width": "0.8", + "initial_layer_print_height": "0.4", + "inner_wall_line_width": "0.8", + "internal_solid_infill_line_width": "0.8", + "layer_height": "0.56", + "line_width": "0.8", + "outer_wall_line_width": "0.8", + "sparse_infill_line_width": "0.8", + "support_line_width": "0.8", + "top_shell_layers": "4", + "top_surface_line_width": "0.8", + "compatible_printers": [ + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json new file mode 100644 index 0000000000..c0372ae510 --- /dev/null +++ b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json @@ -0,0 +1,104 @@ +{ + "type": "process", + "name": "fdm_process_comgrow_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "500", + "top_surface_acceleration": "500", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_acceleration": "500", + "travel_acceleration": "700", + "inner_wall_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "23%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "layer_height": "0.2", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "1", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.4", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "initial_layer_speed": "15", + "initial_layer_infill_speed": "20", + "outer_wall_speed": "25", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "50", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0" +} diff --git a/resources/profiles/Comgrow/process/fdm_process_common.json b/resources/profiles/Comgrow/process/fdm_process_common.json new file mode 100644 index 0000000000..7398bcd481 --- /dev/null +++ b/resources/profiles/Comgrow/process/fdm_process_common.json @@ -0,0 +1,70 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "5", + "compatible_printers": [], + "print_sequence": "by layer", + "default_acceleration": "10000", + "bridge_no_support": "0", + "elefant_foot_compensation": "0.1", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "120", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "20", + "gap_infill_speed": "30", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "sparse_infill_speed": "50", + "interface_shells": "0", + "detect_overhang_wall": "0", + "reduce_infill_retraction": "0", + "filename_format": "{input_filename_base}.gcode", + "wall_loops": "3", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "40", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "nearest", + "skirt_distance": "2", + "skirt_height": "2", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.45", + "internal_solid_infill_speed": "40", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0", + "support_interface_speed": "80", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2", + "support_speed": "40", + "support_threshold_angle": "40", + "support_object_xy_distance": "0.5", + "detect_thin_wall": "0", + "top_surface_line_width": "0.4", + "top_surface_speed": "30", + "travel_speed": "400", + "enable_prime_tower": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0" +} From ca534b5b966f1ac914eff085de36c6df2c12bd0b Mon Sep 17 00:00:00 2001 From: mia <652892+mia-0@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:35:30 +0200 Subject: [PATCH 4/6] Fix compatibility with STL builds of wxWidgets (#2218) This removes the dependency on legacy wxWidgets configurations, and makes OrcaSlicer compile on STL builds. Also, the wxStringList class has been obsolete for at least 20 years, and disappeared from the documentation. Replace with wxArrayString. --- src/slic3r/GUI/ImageGrid.cpp | 12 ++++++---- src/slic3r/GUI/ImageGrid.h | 3 ++- src/slic3r/GUI/Plater.cpp | 40 +++++++++++++++++----------------- src/slic3r/GUI/Preferences.cpp | 40 +++++++++++++++++----------------- src/slic3r/Utils/OctoPrint.cpp | 4 ++-- 5 files changed, 52 insertions(+), 47 deletions(-) diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index ed34579d99..50f16d186a 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -623,11 +623,15 @@ void Slic3r::GUI::ImageGrid::renderContent1(wxDC &dc, wxPoint const &pt, int ind } // Draw buttons on hovered item wxRect rect{pt.x, pt.y + m_content_rect.GetBottom() - m_buttons_background.GetHeight(), m_content_rect.GetWidth(), m_buttons_background.GetHeight()}; + wxArrayString texts; if (hit) { - renderButtons(dc, {_L("Delete"), (wxChar const *) secondAction, thirdAction.IsEmpty() ? nullptr : (wxChar const *) thirdAction, nullptr}, rect, - m_hit_type == HIT_ACTION ? m_hit_item & 3 : -1, states); + texts.Add(_L("Delete")); + texts.Add(secondAction); + texts.Add(thirdAction); + renderButtons(dc, texts, rect, m_hit_type == HIT_ACTION ? m_hit_item & 3 : -1, states); } else if (!nonHoverText.IsEmpty()) { - renderButtons(dc, {(wxChar const *) nonHoverText, nullptr}, rect, -1, states); + texts.Add(nonHoverText); + renderButtons(dc, texts, rect, -1, states); } } else { dc.SetTextForeground(*wxWHITE); // time text color @@ -673,7 +677,7 @@ void Slic3r::GUI::ImageGrid::renderContent2(wxDC &dc, wxPoint const &pt, int ind renderIconText(dc, m_model_weight_icon, file.Metadata("Weight", "0g"), rect); } -void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect2, size_t hit, int states) +void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxArrayString const &texts, wxRect const &rect2, size_t hit, int states) { // Draw background { diff --git a/src/slic3r/GUI/ImageGrid.h b/src/slic3r/GUI/ImageGrid.h index 42cf8a06e5..78f970e2ef 100644 --- a/src/slic3r/GUI/ImageGrid.h +++ b/src/slic3r/GUI/ImageGrid.h @@ -9,6 +9,7 @@ #define ImageGrid_h #include +#include #include #include "Widgets/StateColor.hpp" @@ -84,7 +85,7 @@ protected: void renderContent2(wxDC &dc, wxPoint const &pt, int index, bool hit); - void renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect, size_t hit, int states); + void renderButtons(wxDC &dc, wxArrayString const &texts, wxRect const &rect, size_t hit, int states); void renderText(wxDC &dc, wxString const &text, wxRect const &rect, int states); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 9077ae78b8..11e25e4624 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9240,49 +9240,49 @@ wxBoxSizer *ProjectDropDialog::create_item_checkbox(wxString title, wxWindow *pa void ProjectDropDialog::select_radio(int index) { m_action = index; - RadioSelectorList::Node *node = m_radio_group.GetFirst(); + RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); auto groupid = 0; - while (node) { - RadioSelector *rs = node->GetData(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_select_id == index) groupid = rs->m_groupid; - node = node->GetNext(); + it = it->GetNext(); } - node = m_radio_group.GetFirst(); - while (node) { - RadioSelector *rs = node->GetData(); + it = m_radio_group.GetFirst(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_groupid == groupid && rs->m_select_id == index) rs->m_radiobox->SetValue(true); if (rs->m_groupid == groupid && rs->m_select_id != index) rs->m_radiobox->SetValue(false); - node = node->GetNext(); + it = it->GetNext(); } } int ProjectDropDialog::get_select_radio(int groupid) { - RadioSelectorList::Node *node = m_radio_group.GetFirst(); - while (node) { - RadioSelector *rs = node->GetData(); + RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_groupid == groupid && rs->m_radiobox->GetValue()) { return rs->m_select_id; } - node = node->GetNext(); + it = it->GetNext(); } return 0; } void ProjectDropDialog::on_select_radio(wxMouseEvent &event) { - RadioSelectorList::Node *node = m_radio_group.GetFirst(); + RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); auto groupid = 0; - while (node) { - RadioSelector *rs = node->GetData(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_radiobox->GetId() == event.GetId()) groupid = rs->m_groupid; - node = node->GetNext(); + it = it->GetNext(); } - node = m_radio_group.GetFirst(); - while (node) { - RadioSelector *rs = node->GetData(); + it = m_radio_group.GetFirst(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_groupid == groupid && rs->m_radiobox->GetId() == event.GetId()) { set_action(rs->m_select_id); rs->m_radiobox->SetValue(true); @@ -9290,7 +9290,7 @@ void ProjectDropDialog::on_select_radio(wxMouseEvent &event) if (rs->m_groupid == groupid && rs->m_radiobox->GetId() != event.GetId()) rs->m_radiobox->SetValue(false); - node = node->GetNext(); + it = it->GetNext(); } } diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 2ad70763e0..6ba807c824 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -1307,31 +1307,31 @@ wxWindow* PreferencesDialog::create_debug_page() void PreferencesDialog::on_select_radio(std::string param) { - RadioSelectorList::Node *node = m_radio_group.GetFirst(); + RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); auto groupid = 0; - while (node) { - RadioSelector *rs = node->GetData(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_param_name == param) groupid = rs->m_groupid; - node = node->GetNext(); + it = it->GetNext(); } - node = m_radio_group.GetFirst(); - while (node) { - RadioSelector *rs = node->GetData(); + it = m_radio_group.GetFirst(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_groupid == groupid && rs->m_param_name == param) rs->m_radiobox->SetValue(true); if (rs->m_groupid == groupid && rs->m_param_name != param) rs->m_radiobox->SetValue(false); - node = node->GetNext(); + it = it->GetNext(); } } wxString PreferencesDialog::get_select_radio(int groupid) { - RadioSelectorList::Node *node = m_radio_group.GetFirst(); - while (node) { - RadioSelector *rs = node->GetData(); + RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_groupid == groupid && rs->m_radiobox->GetValue()) { return rs->m_param_name; } - node = node->GetNext(); + it = it->GetNext(); } return wxEmptyString; @@ -1339,21 +1339,21 @@ wxString PreferencesDialog::get_select_radio(int groupid) void PreferencesDialog::OnSelectRadio(wxMouseEvent &event) { - RadioSelectorList::Node *node = m_radio_group.GetFirst(); + RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); auto groupid = 0; - while (node) { - RadioSelector *rs = node->GetData(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_radiobox->GetId() == event.GetId()) groupid = rs->m_groupid; - node = node->GetNext(); + it = it->GetNext(); } - node = m_radio_group.GetFirst(); - while (node) { - RadioSelector *rs = node->GetData(); + it = m_radio_group.GetFirst(); + while (it) { + RadioSelector *rs = it->GetData(); if (rs->m_groupid == groupid && rs->m_radiobox->GetId() == event.GetId()) rs->m_radiobox->SetValue(true); if (rs->m_groupid == groupid && rs->m_radiobox->GetId() != event.GetId()) rs->m_radiobox->SetValue(false); - node = node->GetNext(); + it = it->GetNext(); } } diff --git a/src/slic3r/Utils/OctoPrint.cpp b/src/slic3r/Utils/OctoPrint.cpp index 1814a17a9f..edf903e55d 100644 --- a/src/slic3r/Utils/OctoPrint.cpp +++ b/src/slic3r/Utils/OctoPrint.cpp @@ -745,8 +745,8 @@ bool PrusaLink::get_storage(wxArrayString& storage_path, wxArrayString& storage_ const auto available = section.second.get_optional("available"); if (path && (!available || *available)) { StorageInfo si; - si.path = boost::nowide::widen(*path); - si.name = name ? boost::nowide::widen(*name) : wxString(); + si.path = wxString(*path); + si.name = name ? wxString(*name) : wxString(); // If read_only is missing, assume it is NOT read only. // si.read_only = read_only ? *read_only : false; // version without "ro" si.read_only = (read_only ? *read_only : (ro ? *ro : false)); From 3b864e562a6b803becf0e439aa81f3eaaba79223 Mon Sep 17 00:00:00 2001 From: mia <652892+mia-0@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:37:25 +0200 Subject: [PATCH 5/6] GUI: Fix calls to PrintingTaskPanel::show_profile_info (#2219) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These will not compile on STL builds of wxWidgets. I assume that on the non-STL variants, the first argument is cast to a boolean, which might be a bug… --- src/slic3r/GUI/CalibrationWizardCaliPage.cpp | 4 ++-- src/slic3r/GUI/StatusPanel.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp index 23edc25e1d..bd62a66218 100644 --- a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp @@ -349,7 +349,7 @@ void CalibrationCaliPage::update_subtask(MachineObject* obj) m_printing_panel->update_subtask_name(wxString::Format("%s", GUI::from_u8(obj->subtask_name))); if (obj->get_modeltask() && obj->get_modeltask()->design_id > 0) { - m_printing_panel->show_profile_info(wxString::FromUTF8(obj->get_modeltask()->profile_name)); + m_printing_panel->show_profile_info(true, wxString::FromUTF8(obj->get_modeltask()->profile_name)); } else { m_printing_panel->show_profile_info(false); @@ -453,4 +453,4 @@ float CalibrationCaliPage::get_selected_calibration_nozzle_dia(MachineObject* ob return 0.4; } -}} \ No newline at end of file +}} diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 683e651e04..aa6e3ad0a3 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2626,7 +2626,7 @@ void StatusPanel::update_subtask(MachineObject *obj) m_project_task_panel->update_subtask_name(wxString::Format("%s", GUI::from_u8(obj->subtask_name))); if (obj->get_modeltask() && obj->get_modeltask()->design_id > 0) { - m_project_task_panel->show_profile_info(wxString::FromUTF8(obj->get_modeltask()->profile_name)); + m_project_task_panel->show_profile_info(true, wxString::FromUTF8(obj->get_modeltask()->profile_name)); } else { m_project_task_panel->show_profile_info(false); From ec90d7f3e4a534157706a263e847ad8ca924809b Mon Sep 17 00:00:00 2001 From: mia <652892+mia-0@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:38:13 +0200 Subject: [PATCH 6/6] GUI/Field: Fix crash in color picker init (#2220) wxButton->GetBitmap() may return an invalid wxBitmap. Guard against this. --- src/slic3r/GUI/Field.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 33edcc3420..2488e4e2f3 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1539,6 +1539,8 @@ void ColourPicker::set_undef_value(wxColourPickerCtrl* field) field->SetColour(wxTransparentColour); wxButton* btn = dynamic_cast(field->GetPickerCtrl()); + if (!btn->GetBitmap().IsOk()) return; + wxImage image(btn->GetBitmap().GetSize()); image.InitAlpha(); memset(image.GetAlpha(), 0, image.GetWidth() * image.GetHeight());