Ramming parameters reduced to one and connected to the wipe tower generator again

This commit is contained in:
Lukas Matena 2018-03-15 14:04:12 +01:00
parent 9f18b639a8
commit 67009d80fd
10 changed files with 139 additions and 217 deletions

View file

@ -211,7 +211,7 @@ const std::vector<std::string>& Preset::filament_options()
static std::vector<std::string> s_opts {
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
"extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_unloading_speed", "filament_toolchange_delay",
"filament_cooling_time", "filament_ramming_buttons", "filament_ramming_parameters", "temperature", "first_layer_temperature", "bed_temperature",
"filament_cooling_time", "filament_ramming_parameters", "temperature", "first_layer_temperature", "bed_temperature",
"first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed", "max_fan_speed", "bridge_fan_speed", "disable_fan_first_layers",
"fan_below_layer_time", "slowdown_below_layer_time", "min_print_speed", "start_filament_gcode", "end_filament_gcode","compatible_printers",
"compatible_printers_condition"

View file

@ -13,11 +13,11 @@ wxDECLARE_EVENT(EVT_WIPE_TOWER_CHART_CHANGED, wxCommandEvent);
class Chart : public wxWindow {
public:
Chart(wxWindow* parent, wxRect rect,const std::vector<std::pair<float,float>>& initial_buttons,std::vector<float> ramming_speed, float sampling) :
Chart(wxWindow* parent, wxRect rect,const std::vector<std::pair<float,float>>& initial_buttons,int ramming_speed_size, float sampling) :
wxWindow(parent,wxID_ANY,rect.GetTopLeft(),rect.GetSize())
{
m_rect=wxRect(wxPoint(30,0),rect.GetSize()-wxSize(30,30));
visible_area = wxRect2DDouble(0.0, 0.0, sampling*ramming_speed.size(), 20.);
visible_area = wxRect2DDouble(0.0, 0.0, sampling*ramming_speed_size, 20.);
m_buttons.clear();
if (initial_buttons.size()>0)
for (const auto& pair : initial_buttons)

View file

@ -469,7 +469,7 @@ void TabPrint::build()
{
std::string init_data = (m_config->option<ConfigOptionString>("wipe_tower_advanced"))->value;
std::cout << "dialog init: " << init_data << std::endl;
WipeTowerDialog dlg(this,init_data); // dlg lives on stack, no need to call Destroy
WipingDialog dlg(this,init_data); // dlg lives on stack, no need to call Destroy
if (dlg.ShowModal() == wxID_OK) {
load_key_value("wipe_tower_advanced", dlg.GetValue());
@ -891,10 +891,10 @@ void TabFilament::build()
ramming_dialog_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent& e)
{
//std::string init_data = (m_config->option<ConfigOptionString>("wipe_tower_advanced"))->value;
RammingDialog dlg(this,std::string());
RammingDialog dlg(this,(m_config->option<ConfigOptionStrings>("filament_ramming_parameters"))->get_at(0));
if (dlg.ShowModal() == wxID_OK) {
//load_key_value("wipe_tower_advanced", dlg.GetValue());
wxMessageBox("DIALOG OK:\n"+dlg.get_parameters());
//load_key_value("wipe_tower_advanced", dlg.get_parameters());
}
}));
return sizer;

View file

@ -1,52 +1,13 @@
#include <algorithm>
#include <sstream>
#include "WipeTowerDialog.hpp"
// Human-readable output of Parameters structure
std::ostream& operator<<(std::ostream& str,Slic3r::WipeTowerParameters& par) {
str << "sampling: " << par.sampling << "\n";
str << "line widths: ";
for (const auto& a : par.ramming_line_width_multiplicator) str << a << " ";
str << "line spacing: ";
for (const auto& a : par.ramming_step_multiplicator) str << a << " ";
str<<"\n\nramming_speeds:\n";
for (const auto& a : par.ramming_speed) {
for (const auto& b : a)
str << b << " ";
str<<"\n";
}
str<<"\n\nramming_buttons:\n";
for (const auto& a : par.ramming_buttons) {
for (const auto& b : a) {
Slic3r::operator <<(str,b); // temporary hack (this << is in the namespace Slic3r)
str << " | "; // the function will be deleted after everything is debugged, anyway
}
str<<"\n";
}
str<<"\n\nwipe volumes:\n";
for (const auto& a : par.wipe_volumes) {
for (const auto& b : a)
str << b << " ";
str<<"\n";
}
str<<"\n\nfilament wipe volumes:\n";
for (const auto& a : par.filament_wipe_volumes) {
Slic3r::operator <<(str,a);
str << " ";
}
str<<"\n";
return str;
}
RammingDialog::RammingDialog(wxWindow* parent,const std::string& init_data)
RammingDialog::RammingDialog(wxWindow* parent,const std::string& parameters)
: wxDialog(parent, -1, wxT("Ramming customization"), wxPoint(50,50), wxSize(800,550), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
this->Centre();
m_panel_ramming = new RammingPanel(this,Slic3r::WipeTowerParameters(std::string()));
m_panel_ramming = new RammingPanel(this,parameters);
m_panel_ramming->Show(true);
this->Show();
@ -60,7 +21,7 @@ RammingDialog::RammingDialog(wxWindow* parent,const std::string& init_data)
this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); });
this->Bind(wxEVT_BUTTON,[this](wxCommandEvent&) {
// m_output_data=read_dialog_values();
m_output_data = m_panel_ramming->get_parameters();
EndModal(wxID_OK);
},wxID_OK);
}
@ -69,7 +30,7 @@ RammingDialog::RammingDialog(wxWindow* parent,const std::string& init_data)
RammingPanel::RammingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p)
RammingPanel::RammingPanel(wxWindow* parent, const std::string& parameters)
: wxPanel(parent,wxID_ANY,wxPoint(50,50), wxSize(800,350),wxBORDER_RAISED)
{
new wxStaticText(this,wxID_ANY,wxString("Total ramming time (s):"), wxPoint(500,105), wxSize(200,25),wxALIGN_LEFT);
@ -81,8 +42,22 @@ RammingPanel::RammingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p
new wxStaticText(this,wxID_ANY,wxString("Ramming line spacing (%):"), wxPoint(500,235), wxSize(200,25),wxALIGN_LEFT);
m_widget_ramming_step_multiplicator = new wxSpinCtrl(this,wxID_ANY,wxEmptyString, wxPoint(700,230), wxSize(75,25),wxSP_ARROW_KEYS|wxALIGN_RIGHT,10,200,100);
std::stringstream stream{parameters};
stream >> m_ramming_line_width_multiplicator >> m_ramming_step_multiplicator;
int ramming_speed_size = 0;
float dummy = 0.f;
while (stream >> dummy)
++ramming_speed_size;
stream.clear();
stream.get();
m_chart = new Chart(this,wxRect(10,10,480,360),p.ramming_buttons[0],p.ramming_speed[0],p.sampling);
std::vector<std::pair<float,float>> buttons;
float x = 0.f;
float y = 0.f;
while (stream >> x >> y)
buttons.push_back(std::make_pair(x,y));
m_chart = new Chart(this,wxRect(10,10,480,360),buttons,ramming_speed_size,0.25f);
m_widget_time->SetValue(m_chart->get_time());
m_widget_time->SetDigits(2);
@ -100,26 +75,83 @@ RammingPanel::RammingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p
Refresh(this);
}
void RammingPanel::fill_parameters(Slic3r::WipeTowerParameters& p)
{
if (!m_chart) return;
p.ramming_buttons[0] = m_chart->get_buttons();
p.ramming_speed[0] = m_chart->get_ramming_speed(p.sampling);
p.ramming_line_width_multiplicator.push_back(m_ramming_line_width_multiplicator/100.f);
p.ramming_step_multiplicator.push_back(m_ramming_step_multiplicator/100.f);
}
void RammingPanel::line_parameters_changed() {
m_ramming_line_width_multiplicator = m_widget_ramming_line_width_multiplicator->GetValue();
m_ramming_step_multiplicator = m_widget_ramming_step_multiplicator->GetValue();
}
std::string RammingPanel::get_parameters()
{
std::vector<float> speeds = m_chart->get_ramming_speed(0.25f);
std::vector<std::pair<float,float>> buttons = m_chart->get_buttons();
std::stringstream stream;
stream << m_ramming_line_width_multiplicator << " " << m_ramming_step_multiplicator;
for (const float& speed_value : speeds)
stream << " " << speed_value;
stream << "|";
for (const auto& button : buttons)
stream << " " << button.first << " " << button.second;
return stream.str();
}
/*
void WipingPanel::fill_parameters(Slic3r::WipeTowerParameters& p) {
p.wipe_volumes.clear();
p.filament_wipe_volumes.clear();
for (int i=0;i<4;++i) {
// first go through the full matrix:
p.wipe_volumes.push_back(std::vector<float>());
for (int j=0;j<4;++j) {
double val = 0.;
edit_boxes[j][i]->GetValue().ToDouble(&val);
p.wipe_volumes[i].push_back((float)val);
}
// now the filament volumes:
p.filament_wipe_volumes.push_back(std::make_pair(m_old[i]->GetValue(),m_new[i]->GetValue()));
}
}
*/
WipingDialog::WipingDialog(wxWindow* parent,const std::string& init_data)
: wxDialog(parent, -1, wxT("Wiping customization"), wxPoint(50,50), wxSize(800,550), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
this->Centre();
Slic3r::WipeTowerParameters parameters(init_data);
/*if (!parameters.validate()) {
wxMessageDialog(this,"Wipe tower parameters not parsed correctly!\nRestoring default settings.","Error",wxICON_ERROR);
parameters.set_defaults();
}*/
m_panel_wiping = new WipingPanel(this,parameters);
this->Show();
auto main_sizer = new wxBoxSizer(wxVERTICAL);
main_sizer->Add(m_panel_wiping, 1, wxEXPAND);
main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10);
SetSizer(main_sizer);
SetMinSize(GetSize());
main_sizer->SetSizeHints(this);
this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); });
this->Bind(wxEVT_BUTTON,[this](wxCommandEvent&) {
m_output_data=read_dialog_values();
EndModal(wxID_OK);
},wxID_OK);
}
WipingPanel::WipingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p)
: wxPanel(parent,wxID_ANY,wxPoint(50,50), wxSize(800,350),wxBORDER_RAISED)
{
@ -153,23 +185,6 @@ WipingPanel::WipingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p)
Refresh(this);
}
void WipingPanel::fill_parameters(Slic3r::WipeTowerParameters& p) {
p.wipe_volumes.clear();
p.filament_wipe_volumes.clear();
for (int i=0;i<4;++i) {
// first go through the full matrix:
p.wipe_volumes.push_back(std::vector<float>());
for (int j=0;j<4;++j) {
double val = 0.;
edit_boxes[j][i]->GetValue().ToDouble(&val);
p.wipe_volumes[i].push_back((float)val);
}
// now the filament volumes:
p.filament_wipe_volumes.push_back(std::make_pair(m_old[i]->GetValue(),m_new[i]->GetValue()));
}
}
void WipingPanel::fill_in_matrix() {
wxArrayString choices;
choices.Add("sum");
@ -192,31 +207,5 @@ void WipingPanel::fill_in_matrix() {
WipeTowerDialog::WipeTowerDialog(wxWindow* parent,const std::string& init_data)
: wxDialog(parent, -1, wxT("Wiping customization"), wxPoint(50,50), wxSize(800,550), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
this->Centre();
Slic3r::WipeTowerParameters parameters(init_data);
if (!parameters.validate()) {
wxMessageDialog(this,"Wipe tower parameters not parsed correctly!\nRestoring default settings.","Error",wxICON_ERROR);
parameters.set_defaults();
}
m_panel_wiping = new WipingPanel(this,parameters);
this->Show();
auto main_sizer = new wxBoxSizer(wxVERTICAL);
main_sizer->Add(m_panel_wiping, 1, wxEXPAND);
main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10);
SetSizer(main_sizer);
SetMinSize(GetSize());
main_sizer->SetSizeHints(this);
this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); });
this->Bind(wxEVT_BUTTON,[this](wxCommandEvent&) {
m_output_data=read_dialog_values();
EndModal(wxID_OK);
},wxID_OK);
}

View file

@ -13,14 +13,13 @@
#include "RammingChart.hpp"
// Human-readable output of Parameters structure
std::ostream& operator<<(std::ostream& str,Slic3r::WipeTowerParameters& par);
class RammingPanel : public wxPanel {
public:
RammingPanel(wxWindow* parent);
RammingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p);
void fill_parameters(Slic3r::WipeTowerParameters& p);
RammingPanel(wxWindow* parent,const std::string& data);
std::string get_parameters();
private:
Chart* m_chart = nullptr;
@ -37,9 +36,11 @@ private:
class RammingDialog : public wxDialog {
public:
RammingDialog(wxWindow* parent,const std::string& init_data);
RammingDialog(wxWindow* parent,const std::string& parameters);
std::string get_parameters() { return m_output_data; }
private:
RammingPanel* m_panel_ramming = nullptr;
std::string m_output_data;
};
@ -63,9 +64,9 @@ private:
class WipeTowerDialog : public wxDialog {
class WipingDialog : public wxDialog {
public:
WipeTowerDialog(wxWindow* parent,const std::string& init_data);
WipingDialog(wxWindow* parent,const std::string& init_data);
std::string GetValue() const { return m_output_data; }
@ -78,7 +79,7 @@ private:
std::string read_dialog_values() {
Slic3r::WipeTowerParameters p;
m_panel_wiping ->fill_parameters(p);
return p.to_string();
//return p.to_string();
}
};