draft version

This commit is contained in:
SoftFever 2022-12-23 11:12:44 +08:00
parent 1df89650e9
commit a3bae2f9a5
7 changed files with 47 additions and 34 deletions

View File

@ -1633,7 +1633,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
this->m_objSupportsWithBrim.insert(iter->first);
}
if (this->m_objsWithBrim.empty() && this->m_objSupportsWithBrim.empty()) m_brim_done = true;
if (print.is_calib_mode()) {
if (print.is_calib_mode() == Calib_PA_DDE || print.is_calib_mode() == Calib_PA_Bowden) {
std::string gcode;
auto s = m_config.inner_wall_speed.value;
gcode += m_writer.set_acceleration((unsigned int)floor(m_config.outer_wall_acceleration.value + 0.5));
@ -1645,9 +1645,13 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
m_config.outer_wall_speed = print.default_region_config().outer_wall_speed;
m_config.inner_wall_speed = print.default_region_config().inner_wall_speed;
calib_pressure_advance pa_test(this);
gcode = pa_test.generate_test();
if(print.is_calib_mode() == Calib_PA_DDE)
gcode = pa_test.generate_test();
else
gcode = pa_test.generate_test(0.0,0.02);
file.write(gcode);
print.is_calib_mode() = false;
print.is_calib_mode() = Calib_None;
}
else {
//BBS: open spaghetti detector

View File

@ -88,6 +88,12 @@ enum PrintObjectStep {
posInfill, posIroning, posSupportMaterial, posSimplifyPath, posSimplifySupportPath, posCount,
};
enum CalibMode {
Calib_None = 0,
Calib_PA_DDE,
Calib_PA_Bowden
};
// A PrintRegion object represents a group of volumes to print
// sharing the same config (including the same assigned extruder(s))
class PrintRegion
@ -735,8 +741,8 @@ public:
//SoftFever
bool &is_BBL_printer() { return m_isBBLPrinter; }
const bool is_BBL_printer() const { return m_isBBLPrinter; }
bool &is_calib_mode() { return m_calib_mode; }
const bool is_calib_mode() const { return m_calib_mode; }
CalibMode& is_calib_mode() { return m_calib_mode; }
const CalibMode is_calib_mode() const { return m_calib_mode; }
protected:
// Invalidates the step, and its depending steps in Print.
bool invalidate_step(PrintStep step);
@ -790,7 +796,7 @@ private:
int m_modified_count {0};
//SoftFever: calibration mode, change to enum later
bool m_calib_mode;
CalibMode m_calib_mode;
// To allow GCode to set the Print's GCodeExport step status.
friend class GCode;

View File

@ -7,14 +7,16 @@
namespace Slic3r {
calib_pressure_advance::calib_pressure_advance(GCode* gcodegen) :mp_gcodegen(gcodegen), m_length_short(20.0), m_length_long(40.0) {}
calib_pressure_advance::calib_pressure_advance(GCode* gcodegen) :mp_gcodegen(gcodegen), m_length_short(20.0), m_length_long(40.0), m_space_y(3.5){}
std::string calib_pressure_advance::generate_test(double start_pa/*= 0*/, double step_pa /*= 0.005*/, int count/*= 10*/) {
auto bed_sizes = mp_gcodegen->config().printable_area.values;
auto w = bed_sizes[2].x() - bed_sizes[0].x();
auto h = bed_sizes[2].y() - bed_sizes[0].y();
count = std::min(count,int((h - 10) / m_space_y));
auto startx = (w - 100) / 2;
auto starty = (h - count * 5) / 2;
auto starty = (h - count * m_space_y) / 2;
return print_pa_lines(startx, starty, start_pa, step_pa, count);
}
@ -30,7 +32,6 @@ namespace Slic3r {
auto& writer = mp_gcodegen->writer();
const double e = 0.04; // filament_mm/extrusion_mm
const double y_offset = 5;
const double fast = mp_gcodegen->config().get_abs_value("outer_wall_speed") * 60.0;
const double slow = std::max(1200.0, fast * 0.1);
@ -41,27 +42,27 @@ namespace Slic3r {
for (int i = 0; i < num; ++i) {
gcode << writer.set_pressure_advance(start_pa + i * step_pa);
gcode << move_to(Vec2d(start_x, y_pos + i * y_offset));
gcode << move_to(Vec2d(start_x, y_pos + i * m_space_y));
gcode << writer.set_speed(slow);
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + i * y_offset), e * m_length_short);
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + i * m_space_y), e * m_length_short);
gcode << writer.set_speed(fast);
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + i * y_offset), e * m_length_long);
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + i * m_space_y), e * 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 * y_offset), e * 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 * m_length_short);
}
gcode << writer.set_pressure_advance(0.0);
// draw indicator lines
gcode << writer.set_speed(fast);
gcode << move_to(Vec2d(start_x + m_length_short, y_pos + (num - 1) * y_offset + 2));
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + (num - 1) * y_offset + 7), e * 7);
gcode << move_to(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * y_offset + 7));
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * y_offset + 2), e * 7);
gcode << move_to(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 2));
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short, y_pos + (num - 1) * m_space_y + 7), e * 7);
gcode << move_to(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 7));
gcode << writer.extrude_to_xy(Vec2d(start_x + m_length_short + m_length_long, y_pos + (num - 1) * m_space_y + 2), e * 7);
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 * y_offset + y_offset / 2, start_pa + i * step_pa);
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);
}
return gcode.str();

View File

@ -11,7 +11,7 @@ public:
calib_pressure_advance(GCode* gcodegen);
~calib_pressure_advance() {}
std::string generate_test(double start_pa = 0, double step_pa = 0.005, int count = 20);
std::string generate_test(double start_pa = 0, double step_pa = 0.002, int count = 50);
private:
std::string move_to(Vec2d pt);
@ -21,5 +21,6 @@ private:
private:
GCode* mp_gcodegen;
double m_length_short, m_length_long;
double m_space_y;
};
} // namespace Slic3r

View File

@ -2459,8 +2459,13 @@ void MainFrame::init_menubar_as_editor()
//m_topbar->AddDropDownMenuItem(language_item);
//m_topbar->AddDropDownMenuItem(config_item);
m_topbar->AddDropDownSubMenu(helpMenu, _L("Help"));
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Pressure advance"), _L("Calibrate PA"),
[this](wxCommandEvent&) { if (m_plater) m_plater->calib_pa(); }, "", nullptr,
// SoftFever calibrations
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("PA - DDE"), _L("Calibrate PA - DDE"),
[this](wxCommandEvent&) { if (m_plater) m_plater->calib_pa(false); }, "", nullptr,
[this]() {return m_plater->is_view3D_shown();; }, this);
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("PA - Bowden"), _L("Calibrate PA - Bowden"),
[this](wxCommandEvent&) { if (m_plater) m_plater->calib_pa(true); }, "", nullptr,
[this]() {return m_plater->is_view3D_shown();; }, this);
#else
m_menubar->Append(fileMenu, wxString::Format("&%s", _L("File")));

View File

@ -7865,24 +7865,20 @@ void Plater::add_model(bool imperial_units/* = false*/, std::string fname/* = "
}
}
void Plater::calib_pa() {
const auto calib_pa_name = "PressureAdvanceTest-SF";
if (get_project_name() != calib_pa_name) {
new_project(false, false, calib_pa_name);
add_model(false, Slic3r::resources_dir() + "/calib/sf_placeholder.stl");
wxGetApp().mainframe->select_tab(size_t(MainFrame::tp3DEditor));
void Plater::calib_pa(bool bowden) {
const auto calib_pa_name = "PressureAdvanceTest";
new_project(false, false, calib_pa_name);
add_model(false, Slic3r::resources_dir() + "/calib/sf_placeholder.stl");
wxGetApp().mainframe->select_tab(size_t(MainFrame::tp3DEditor));
//select_view_3D("3D");
}
p->background_process.fff_print()->is_calib_mode() = true;
p->background_process.fff_print()->is_calib_mode() = bowden ? Calib_PA_Bowden : Calib_PA_DDE;
//BBS update extruder params and speed table before slicing
Plater::setExtruderParams(Slic3r::Model::extruderParamsMap);
Plater::setPrintSpeedTable(Slic3r::Model::printSpeedMap);
p->m_slice_all = false;
reslice();
wxGetApp().mainframe->select_tab(size_t(MainFrame::tp3DEditor));
select_view_3D("Preview");
wxGetApp().mainframe->select_tab(size_t(MainFrame::tpPreview));
//select_view_3D("Preview");
}
void Plater::import_sl1_archive()

View File

@ -226,7 +226,7 @@ public:
void refresh_print();
// SoftFever
void calib_pa();
void calib_pa(bool bowden = false);
//BBS: add only gcode mode
bool only_gcode_mode() { return m_only_gcode; }