mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-22 16:21:24 -06:00
Ramming parameters reduced to one and connected to the wipe tower generator again
This commit is contained in:
parent
9f18b639a8
commit
67009d80fd
10 changed files with 139 additions and 217 deletions
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue