Configuration layer changes (cooling_time, bridging, adhesion moved from dedicated dialog to filament/print settings)
This commit is contained in:
parent
b5fd4ddb8c
commit
27ab8ff4e1
@ -734,7 +734,7 @@ void WipeTowerPrusaMM::toolchange_Unload(
|
|||||||
writer.travel(xl, cleaning_box.ld.y + m_depth_traversed + y_step/2.f ); // move to starting position
|
writer.travel(xl, cleaning_box.ld.y + m_depth_traversed + y_step/2.f ); // move to starting position
|
||||||
|
|
||||||
// if the ending point of the ram would end up in mid air, align it with the end of the wipe tower:
|
// if the ending point of the ram would end up in mid air, align it with the end of the wipe tower:
|
||||||
if (m_layer_info > m_plan.begin() && m_layer_info < m_plan.end() && (m_layer_info-1!=m_plan.begin() || !m_par.adhesion )) {
|
if (m_layer_info > m_plan.begin() && m_layer_info < m_plan.end() && (m_layer_info-1!=m_plan.begin() || !m_adhesion )) {
|
||||||
|
|
||||||
// this is y of the center of previous sparse infill border
|
// this is y of the center of previous sparse infill border
|
||||||
float sparse_beginning_y = m_wipe_tower_pos.y;
|
float sparse_beginning_y = m_wipe_tower_pos.y;
|
||||||
@ -821,8 +821,8 @@ void WipeTowerPrusaMM::toolchange_Unload(
|
|||||||
const float start_x = writer.x();
|
const float start_x = writer.x();
|
||||||
turning_point = ( xr-start_x > start_x-xl ? xr : xl );
|
turning_point = ( xr-start_x > start_x-xl ? xr : xl );
|
||||||
const float max_x_dist = 2*std::abs(start_x-turning_point);
|
const float max_x_dist = 2*std::abs(start_x-turning_point);
|
||||||
const unsigned int N = 4 + std::max(0,(m_par.cooling_time[m_current_tool]-14)/3);
|
const unsigned int N = 4 + std::max(0,(m_filpar[m_current_tool].cooling_time-14)/3);
|
||||||
float time = m_par.cooling_time[m_current_tool] / float(N);
|
float time = m_filpar[m_current_tool].cooling_time / float(N);
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i<N) {
|
while (i<N) {
|
||||||
@ -832,7 +832,7 @@ void WipeTowerPrusaMM::toolchange_Unload(
|
|||||||
// this move is the last one at this speed or someone set tube_length to zero
|
// this move is the last one at this speed or someone set tube_length to zero
|
||||||
if (speed * time < 2*m_cooling_tube_length || m_cooling_tube_length<WT_EPSILON) {
|
if (speed * time < 2*m_cooling_tube_length || m_cooling_tube_length<WT_EPSILON) {
|
||||||
++i;
|
++i;
|
||||||
time = m_par.cooling_time[m_current_tool] / float(N);
|
time = m_filpar[m_current_tool].cooling_time / float(N);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
time -= e_dist / speed; // subtract time this part will really take
|
time -= e_dist / speed; // subtract time this part will really take
|
||||||
@ -1020,7 +1020,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::finish_layer()
|
|||||||
if (writer.x() > fill_box.ld.x+EPSILON) writer.travel(fill_box.ld.x,writer.y());
|
if (writer.x() > fill_box.ld.x+EPSILON) writer.travel(fill_box.ld.x,writer.y());
|
||||||
if (writer.y() > fill_box.ld.y+EPSILON) writer.travel(writer.x(),fill_box.ld.y);
|
if (writer.y() > fill_box.ld.y+EPSILON) writer.travel(writer.x(),fill_box.ld.y);
|
||||||
|
|
||||||
if (m_is_first_layer && m_par.adhesion) {
|
if (m_is_first_layer && m_adhesion) {
|
||||||
// Extrude a dense infill at the 1st layer to improve 1st layer adhesion of the wipe tower.
|
// Extrude a dense infill at the 1st layer to improve 1st layer adhesion of the wipe tower.
|
||||||
box.expand(-m_perimeter_width/2.f);
|
box.expand(-m_perimeter_width/2.f);
|
||||||
unsigned nsteps = int(floor((box.lu.y - box.ld.y) / (2*m_perimeter_width)));
|
unsigned nsteps = int(floor((box.lu.y - box.ld.y) / (2*m_perimeter_width)));
|
||||||
@ -1045,7 +1045,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::finish_layer()
|
|||||||
writer.travel(fill_box.ld + xy(m_perimeter_width * 2, 0.f))
|
writer.travel(fill_box.ld + xy(m_perimeter_width * 2, 0.f))
|
||||||
.extrude(fill_box.lu + xy(m_perimeter_width * 2, 0.f), 2900 * speed_factor);
|
.extrude(fill_box.lu + xy(m_perimeter_width * 2, 0.f), 2900 * speed_factor);
|
||||||
|
|
||||||
const int n = 1+(right-left)/(m_par.bridging);
|
const int n = 1+(right-left)/(m_bridging);
|
||||||
const float dx = (right-left)/n;
|
const float dx = (right-left)/n;
|
||||||
for (int i=1;i<=n;++i) {
|
for (int i=1;i<=n;++i) {
|
||||||
float x=left+dx*i;
|
float x=left+dx*i;
|
||||||
|
@ -68,13 +68,12 @@ struct WipeTowerParameters {
|
|||||||
WipeTowerParameters() { } // create new empty object
|
WipeTowerParameters() { } // create new empty object
|
||||||
WipeTowerParameters(const std::string& init_data) { // create object and initialize from std::string
|
WipeTowerParameters(const std::string& init_data) { // create object and initialize from std::string
|
||||||
std::istringstream in(init_data); // validation of input is left to the caller
|
std::istringstream in(init_data); // validation of input is left to the caller
|
||||||
in >> bridging >> adhesion >> sampling;
|
in >> sampling;
|
||||||
for (std::vector<float> vect{} ; in >> vect ;) { // until we get to fail state ("**")...
|
for (std::vector<float> vect{} ; in >> vect ;) { // until we get to fail state ("**")...
|
||||||
if (vect.size()>=3) {
|
if (vect.size()>=2) {
|
||||||
cooling_time.push_back(vect[0]);
|
ramming_line_width_multiplicator.push_back(vect[0]);
|
||||||
ramming_line_width_multiplicator.push_back(vect[1]);
|
ramming_step_multiplicator.push_back(vect[1]);
|
||||||
ramming_step_multiplicator.push_back(vect[2]);
|
vect.erase(vect.begin(),vect.begin()+2);
|
||||||
vect.erase(vect.begin(),vect.begin()+3);
|
|
||||||
}
|
}
|
||||||
else vect.clear(); // something's not right, we will restore defaults anyway
|
else vect.clear(); // something's not right, we will restore defaults anyway
|
||||||
ramming_speed.push_back(vect);
|
ramming_speed.push_back(vect);
|
||||||
@ -109,9 +108,9 @@ struct WipeTowerParameters {
|
|||||||
|
|
||||||
std::string to_string() {
|
std::string to_string() {
|
||||||
std::ostringstream out;
|
std::ostringstream out;
|
||||||
out << bridging << " " << int(adhesion) << " " << sampling << "\n";
|
out << sampling << "\n";
|
||||||
for (unsigned extruder=0;extruder<cooling_time.size();++extruder) {
|
for (unsigned extruder=0;extruder<ramming_step_multiplicator.size();++extruder) {
|
||||||
out << "\n" << cooling_time[extruder] << " " << ramming_line_width_multiplicator[extruder] << " "
|
out << "\n" << ramming_line_width_multiplicator[extruder] << " "
|
||||||
<< ramming_step_multiplicator[extruder] << " " << ramming_speed[extruder] << "*"
|
<< ramming_step_multiplicator[extruder] << " " << ramming_speed[extruder] << "*"
|
||||||
<< ramming_buttons[extruder] << "*";
|
<< ramming_buttons[extruder] << "*";
|
||||||
}
|
}
|
||||||
@ -124,7 +123,7 @@ struct WipeTowerParameters {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool validate() const { // basic check for validity to distinguish most dramatic failures
|
bool validate() const { // basic check for validity to distinguish most dramatic failures
|
||||||
const unsigned int num = cooling_time.size();
|
const unsigned int num = ramming_step_multiplicator.size();
|
||||||
if ( num < 1 || ramming_line_width_multiplicator.size()!=num || ramming_step_multiplicator.size()!=num ||
|
if ( num < 1 || ramming_line_width_multiplicator.size()!=num || ramming_step_multiplicator.size()!=num ||
|
||||||
ramming_buttons.size()!=num || wipe_volumes.size()!=num ||
|
ramming_buttons.size()!=num || wipe_volumes.size()!=num ||
|
||||||
filament_wipe_volumes.size()!=num)
|
filament_wipe_volumes.size()!=num)
|
||||||
@ -135,10 +134,7 @@ struct WipeTowerParameters {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void set_defaults() {
|
void set_defaults() {
|
||||||
bridging = 10;
|
|
||||||
adhesion = true;
|
|
||||||
sampling = 0.25f;
|
sampling = 0.25f;
|
||||||
cooling_time = {15,15,15,15};
|
|
||||||
ramming_line_width_multiplicator = {1.5f, 1.5f, 1.5f, 1.5f};
|
ramming_line_width_multiplicator = {1.5f, 1.5f, 1.5f, 1.5f};
|
||||||
ramming_step_multiplicator = {1.1f, 1.1f, 1.1f, 1.1f};
|
ramming_step_multiplicator = {1.1f, 1.1f, 1.1f, 1.1f};
|
||||||
ramming_speed.clear();
|
ramming_speed.clear();
|
||||||
@ -154,10 +150,7 @@ struct WipeTowerParameters {
|
|||||||
filament_wipe_volumes = {{30.f,30.f},{30.f,30.f},{30.f,30.f},{30.f,30.f}};
|
filament_wipe_volumes = {{30.f,30.f},{30.f,30.f},{30.f,30.f},{30.f,30.f}};
|
||||||
}
|
}
|
||||||
|
|
||||||
int bridging = 0.f;
|
|
||||||
bool adhesion = false;
|
|
||||||
float sampling = 0.25f; // this does not quite work yet, keep it fixed to 0.25f
|
float sampling = 0.25f; // this does not quite work yet, keep it fixed to 0.25f
|
||||||
std::vector<int> cooling_time;
|
|
||||||
std::vector<float> ramming_line_width_multiplicator;
|
std::vector<float> ramming_line_width_multiplicator;
|
||||||
std::vector<float> ramming_step_multiplicator;
|
std::vector<float> ramming_step_multiplicator;
|
||||||
std::vector<std::vector<float>> ramming_speed;
|
std::vector<std::vector<float>> ramming_speed;
|
||||||
@ -192,7 +185,7 @@ public:
|
|||||||
// width -- width of wipe tower in mm ( default 60 mm - leave as it is )
|
// width -- width of wipe tower in mm ( default 60 mm - leave as it is )
|
||||||
// wipe_area -- space available for one toolchange in mm
|
// wipe_area -- space available for one toolchange in mm
|
||||||
WipeTowerPrusaMM(float x, float y, float width, float wipe_area, float rotation_angle, float cooling_tube_retraction,
|
WipeTowerPrusaMM(float x, float y, float width, float wipe_area, float rotation_angle, float cooling_tube_retraction,
|
||||||
float cooling_tube_length, float parking_pos_retraction, std::string& parameters,
|
float cooling_tube_length, float parking_pos_retraction, float bridging, bool adhesion, std::string& parameters,
|
||||||
unsigned int initial_tool) :
|
unsigned int initial_tool) :
|
||||||
m_wipe_tower_pos(x, y),
|
m_wipe_tower_pos(x, y),
|
||||||
m_wipe_tower_width(width),
|
m_wipe_tower_width(width),
|
||||||
@ -207,6 +200,9 @@ public:
|
|||||||
m_current_tool(initial_tool),
|
m_current_tool(initial_tool),
|
||||||
m_par(parameters)
|
m_par(parameters)
|
||||||
{
|
{
|
||||||
|
m_bridging = bridging;
|
||||||
|
m_adhesion = adhesion;
|
||||||
|
|
||||||
for (size_t i = 0; i < 4; ++ i) {
|
for (size_t i = 0; i < 4; ++ i) {
|
||||||
// Extruder specific parameters.
|
// Extruder specific parameters.
|
||||||
m_filpar[i].material = PLA;
|
m_filpar[i].material = PLA;
|
||||||
@ -226,7 +222,7 @@ public:
|
|||||||
|
|
||||||
// Set the extruder properties.
|
// Set the extruder properties.
|
||||||
void set_extruder(size_t idx, material_type material, int temp, int first_layer_temp, float loading_speed,
|
void set_extruder(size_t idx, material_type material, int temp, int first_layer_temp, float loading_speed,
|
||||||
float unloading_speed, float delay)
|
float unloading_speed, float delay, int cooling_time)
|
||||||
{
|
{
|
||||||
m_filpar[idx].material = material;
|
m_filpar[idx].material = material;
|
||||||
m_filpar[idx].temperature = temp;
|
m_filpar[idx].temperature = temp;
|
||||||
@ -234,6 +230,7 @@ public:
|
|||||||
m_filpar[idx].loading_speed = loading_speed;
|
m_filpar[idx].loading_speed = loading_speed;
|
||||||
m_filpar[idx].unloading_speed = unloading_speed;
|
m_filpar[idx].unloading_speed = unloading_speed;
|
||||||
m_filpar[idx].delay = delay;
|
m_filpar[idx].delay = delay;
|
||||||
|
m_filpar[idx].cooling_time = cooling_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -340,6 +337,8 @@ private:
|
|||||||
float m_cooling_tube_retraction = 0.f;
|
float m_cooling_tube_retraction = 0.f;
|
||||||
float m_cooling_tube_length = 0.f;
|
float m_cooling_tube_length = 0.f;
|
||||||
float m_parking_pos_retraction = 0.f;
|
float m_parking_pos_retraction = 0.f;
|
||||||
|
float m_bridging = 0.f;
|
||||||
|
bool m_adhesion = true;
|
||||||
|
|
||||||
float m_line_width = Nozzle_Diameter * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill.
|
float m_line_width = Nozzle_Diameter * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill.
|
||||||
float m_extrusion_flow = 0.038; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter.
|
float m_extrusion_flow = 0.038; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter.
|
||||||
@ -352,6 +351,7 @@ private:
|
|||||||
float loading_speed;
|
float loading_speed;
|
||||||
float unloading_speed;
|
float unloading_speed;
|
||||||
float delay;
|
float delay;
|
||||||
|
int cooling_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Extruder specific parameters.
|
// Extruder specific parameters.
|
||||||
|
@ -188,6 +188,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
|||||||
|| opt_key == "filament_loading_speed"
|
|| opt_key == "filament_loading_speed"
|
||||||
|| opt_key == "filament_unloading_speed"
|
|| opt_key == "filament_unloading_speed"
|
||||||
|| opt_key == "filament_toolchange_delay"
|
|| opt_key == "filament_toolchange_delay"
|
||||||
|
|| opt_key == "filament_cooling_time"
|
||||||
|| opt_key == "gcode_flavor"
|
|| opt_key == "gcode_flavor"
|
||||||
|| opt_key == "single_extruder_multi_material"
|
|| opt_key == "single_extruder_multi_material"
|
||||||
|| opt_key == "spiral_vase"
|
|| opt_key == "spiral_vase"
|
||||||
@ -199,6 +200,8 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
|||||||
|| opt_key == "wipe_tower_width"
|
|| opt_key == "wipe_tower_width"
|
||||||
|| opt_key == "wipe_tower_per_color_wipe"
|
|| opt_key == "wipe_tower_per_color_wipe"
|
||||||
|| opt_key == "wipe_tower_rotation_angle"
|
|| opt_key == "wipe_tower_rotation_angle"
|
||||||
|
|| opt_key == "wipe_tower_bridging"
|
||||||
|
|| opt_key == "wipe_tower_adhesion"
|
||||||
|| opt_key == "z_offset") {
|
|| opt_key == "z_offset") {
|
||||||
steps.emplace_back(psWipeTower);
|
steps.emplace_back(psWipeTower);
|
||||||
} else if (
|
} else if (
|
||||||
@ -1030,6 +1033,7 @@ void Print::_make_wipe_tower()
|
|||||||
float(this->config.wipe_tower_width.value), float(this->config.wipe_tower_per_color_wipe.value),
|
float(this->config.wipe_tower_width.value), float(this->config.wipe_tower_per_color_wipe.value),
|
||||||
float(this->config.wipe_tower_rotation_angle.value), float(this->config.cooling_tube_retraction.value),
|
float(this->config.wipe_tower_rotation_angle.value), float(this->config.cooling_tube_retraction.value),
|
||||||
float(this->config.cooling_tube_length.value), float(this->config.parking_pos_retraction.value),
|
float(this->config.cooling_tube_length.value), float(this->config.parking_pos_retraction.value),
|
||||||
|
float(this->config.wipe_tower_bridging), bool(this->config.wipe_tower_adhesion),
|
||||||
this->config.wipe_tower_advanced.value,m_tool_ordering.first_extruder());
|
this->config.wipe_tower_advanced.value,m_tool_ordering.first_extruder());
|
||||||
|
|
||||||
//wipe_tower.set_retract();
|
//wipe_tower.set_retract();
|
||||||
@ -1044,6 +1048,7 @@ void Print::_make_wipe_tower()
|
|||||||
this->config.first_layer_temperature.get_at(i),
|
this->config.first_layer_temperature.get_at(i),
|
||||||
this->config.filament_loading_speed.get_at(i),
|
this->config.filament_loading_speed.get_at(i),
|
||||||
this->config.filament_unloading_speed.get_at(i),
|
this->config.filament_unloading_speed.get_at(i),
|
||||||
|
this->config.filament_toolchange_delay.get_at(i),
|
||||||
this->config.filament_toolchange_delay.get_at(i));
|
this->config.filament_toolchange_delay.get_at(i));
|
||||||
|
|
||||||
// When printing the first layer's wipe tower, the first extruder is expected to be active and primed.
|
// When printing the first layer's wipe tower, the first extruder is expected to be active and primed.
|
||||||
|
@ -470,6 +470,15 @@ PrintConfigDef::PrintConfigDef()
|
|||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->default_value = new ConfigOptionFloats { 0. };
|
def->default_value = new ConfigOptionFloats { 0. };
|
||||||
|
|
||||||
|
def = this->add("filament_cooling_time", coInts);
|
||||||
|
def->label = L("Cooling time");
|
||||||
|
def->tooltip = L("The filament is slowly moved back and forth after retraction into the cooling tube "
|
||||||
|
"for this amount of time.");
|
||||||
|
def->cli = "filament_cooling_time=i@";
|
||||||
|
def->sidetext = L("s");
|
||||||
|
def->min = 0;
|
||||||
|
def->default_value = new ConfigOptionInts { 14 };
|
||||||
|
|
||||||
def = this->add("filament_diameter", coFloats);
|
def = this->add("filament_diameter", coFloats);
|
||||||
def->label = L("Diameter");
|
def->label = L("Diameter");
|
||||||
def->tooltip = L("Enter your filament diameter here. Good precision is required, so use a caliper "
|
def->tooltip = L("Enter your filament diameter here. Good precision is required, so use a caliper "
|
||||||
@ -1801,6 +1810,20 @@ PrintConfigDef::PrintConfigDef()
|
|||||||
def->cli = "wipe-tower-rotation-angle=f";
|
def->cli = "wipe-tower-rotation-angle=f";
|
||||||
def->default_value = new ConfigOptionFloat(0.);
|
def->default_value = new ConfigOptionFloat(0.);
|
||||||
|
|
||||||
|
def = this->add("wipe_tower_bridging", coFloat);
|
||||||
|
def->label = L("Maximal bridging distance");
|
||||||
|
def->tooltip = L("Maximal distance between supports on sparse infill sections. ");
|
||||||
|
def->sidetext = L("mm");
|
||||||
|
def->cli = "wipe-tower-bridging=f";
|
||||||
|
def->default_value = new ConfigOptionFloat(10.);
|
||||||
|
|
||||||
|
def = this->add("wipe_tower_adhesion", coBool);
|
||||||
|
def->label = L("Increase first layer adhesion");
|
||||||
|
def->tooltip = L("This prevents using sparse infill on the first layer, if it would be "
|
||||||
|
"normally applied. Dense infill is used instead. ");
|
||||||
|
def->cli = "wipe-tower_adhesion!";
|
||||||
|
def->default_value = new ConfigOptionBool(true);
|
||||||
|
|
||||||
def = this->add("xy_size_compensation", coFloat);
|
def = this->add("xy_size_compensation", coFloat);
|
||||||
def->label = L("XY Size Compensation");
|
def->label = L("XY Size Compensation");
|
||||||
def->category = L("Advanced");
|
def->category = L("Advanced");
|
||||||
|
@ -470,6 +470,7 @@ public:
|
|||||||
ConfigOptionFloats filament_loading_speed;
|
ConfigOptionFloats filament_loading_speed;
|
||||||
ConfigOptionFloats filament_unloading_speed;
|
ConfigOptionFloats filament_unloading_speed;
|
||||||
ConfigOptionFloats filament_toolchange_delay;
|
ConfigOptionFloats filament_toolchange_delay;
|
||||||
|
ConfigOptionInts filament_cooling_time;
|
||||||
ConfigOptionBool gcode_comments;
|
ConfigOptionBool gcode_comments;
|
||||||
ConfigOptionEnum<GCodeFlavor> gcode_flavor;
|
ConfigOptionEnum<GCodeFlavor> gcode_flavor;
|
||||||
ConfigOptionString layer_gcode;
|
ConfigOptionString layer_gcode;
|
||||||
@ -525,6 +526,7 @@ protected:
|
|||||||
OPT_PTR(filament_loading_speed);
|
OPT_PTR(filament_loading_speed);
|
||||||
OPT_PTR(filament_unloading_speed);
|
OPT_PTR(filament_unloading_speed);
|
||||||
OPT_PTR(filament_toolchange_delay);
|
OPT_PTR(filament_toolchange_delay);
|
||||||
|
OPT_PTR(filament_cooling_time);
|
||||||
OPT_PTR(gcode_comments);
|
OPT_PTR(gcode_comments);
|
||||||
OPT_PTR(gcode_flavor);
|
OPT_PTR(gcode_flavor);
|
||||||
OPT_PTR(layer_gcode);
|
OPT_PTR(layer_gcode);
|
||||||
@ -624,6 +626,8 @@ public:
|
|||||||
ConfigOptionFloat wipe_tower_width;
|
ConfigOptionFloat wipe_tower_width;
|
||||||
ConfigOptionFloat wipe_tower_per_color_wipe;
|
ConfigOptionFloat wipe_tower_per_color_wipe;
|
||||||
ConfigOptionFloat wipe_tower_rotation_angle;
|
ConfigOptionFloat wipe_tower_rotation_angle;
|
||||||
|
ConfigOptionFloat wipe_tower_bridging;
|
||||||
|
ConfigOptionBool wipe_tower_adhesion;
|
||||||
ConfigOptionFloat z_offset;
|
ConfigOptionFloat z_offset;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -690,6 +694,8 @@ protected:
|
|||||||
OPT_PTR(wipe_tower_width);
|
OPT_PTR(wipe_tower_width);
|
||||||
OPT_PTR(wipe_tower_per_color_wipe);
|
OPT_PTR(wipe_tower_per_color_wipe);
|
||||||
OPT_PTR(wipe_tower_rotation_angle);
|
OPT_PTR(wipe_tower_rotation_angle);
|
||||||
|
OPT_PTR(wipe_tower_bridging);
|
||||||
|
OPT_PTR(wipe_tower_adhesion);
|
||||||
OPT_PTR(z_offset);
|
OPT_PTR(z_offset);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -199,8 +199,8 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
"perimeter_extrusion_width", "external_perimeter_extrusion_width", "infill_extrusion_width", "solid_infill_extrusion_width",
|
"perimeter_extrusion_width", "external_perimeter_extrusion_width", "infill_extrusion_width", "solid_infill_extrusion_width",
|
||||||
"top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "bridge_flow_ratio", "clip_multipart_objects",
|
"top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "bridge_flow_ratio", "clip_multipart_objects",
|
||||||
"elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "wipe_tower_advanced", "wipe_tower", "wipe_tower_x",
|
"elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "wipe_tower_advanced", "wipe_tower", "wipe_tower_x",
|
||||||
"wipe_tower_y", "wipe_tower_width", "wipe_tower_per_color_wipe", "wipe_tower_rotation_angle", "compatible_printers",
|
"wipe_tower_y", "wipe_tower_width", "wipe_tower_per_color_wipe", "wipe_tower_rotation_angle", "wipe_tower_adhesion", "wipe_tower_bridging",
|
||||||
"compatible_printers_condition"
|
"compatible_printers", "compatible_printers_condition"
|
||||||
|
|
||||||
};
|
};
|
||||||
return s_opts;
|
return s_opts;
|
||||||
@ -211,7 +211,7 @@ const std::vector<std::string>& Preset::filament_options()
|
|||||||
static std::vector<std::string> s_opts {
|
static std::vector<std::string> s_opts {
|
||||||
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
|
"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",
|
"extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_unloading_speed", "filament_toolchange_delay",
|
||||||
"temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling",
|
"filament_cooling_time", "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_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"
|
"min_print_speed", "start_filament_gcode", "end_filament_gcode","compatible_printers", "compatible_printers_condition"
|
||||||
};
|
};
|
||||||
|
@ -458,6 +458,8 @@ void TabPrint::build()
|
|||||||
optgroup->append_single_option_line("wipe_tower_width");
|
optgroup->append_single_option_line("wipe_tower_width");
|
||||||
optgroup->append_single_option_line("wipe_tower_per_color_wipe");
|
optgroup->append_single_option_line("wipe_tower_per_color_wipe");
|
||||||
optgroup->append_single_option_line("wipe_tower_rotation_angle");
|
optgroup->append_single_option_line("wipe_tower_rotation_angle");
|
||||||
|
optgroup->append_single_option_line("wipe_tower_bridging");
|
||||||
|
optgroup->append_single_option_line("wipe_tower_adhesion");
|
||||||
line = { _(L("Advanced")), "" };
|
line = { _(L("Advanced")), "" };
|
||||||
line.widget = [this](wxWindow* parent){
|
line.widget = [this](wxWindow* parent){
|
||||||
m_wipe_tower_btn = new wxButton(parent, wxID_ANY, _(L("Advanced settings"))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
|
m_wipe_tower_btn = new wxButton(parent, wxID_ANY, _(L("Advanced settings"))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
|
||||||
@ -880,6 +882,27 @@ void TabFilament::build()
|
|||||||
optgroup->append_single_option_line("filament_loading_speed");
|
optgroup->append_single_option_line("filament_loading_speed");
|
||||||
optgroup->append_single_option_line("filament_unloading_speed");
|
optgroup->append_single_option_line("filament_unloading_speed");
|
||||||
optgroup->append_single_option_line("filament_toolchange_delay");
|
optgroup->append_single_option_line("filament_toolchange_delay");
|
||||||
|
optgroup->append_single_option_line("filament_cooling_time");
|
||||||
|
line = { _(L("Ramming")), "" };
|
||||||
|
line.widget = [this](wxWindow* parent){
|
||||||
|
auto ramming_dialog = new wxButton(parent, wxID_ANY, _(L("Advanced settings"))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
|
||||||
|
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
sizer->Add(ramming_dialog);
|
||||||
|
/*m_wipe_tower_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent& e)
|
||||||
|
{
|
||||||
|
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
|
||||||
|
|
||||||
|
if (dlg.ShowModal() == wxID_OK) {
|
||||||
|
load_key_value("wipe_tower_advanced", dlg.GetValue());
|
||||||
|
std::cout << std::endl << "dialog returned: " << dlg.GetValue() << std::endl;
|
||||||
|
}
|
||||||
|
}));*/
|
||||||
|
return sizer;
|
||||||
|
};
|
||||||
|
optgroup->append_line(line);
|
||||||
|
|
||||||
|
|
||||||
page = add_options_page(_(L("Custom G-code")), "cog.png");
|
page = add_options_page(_(L("Custom G-code")), "cog.png");
|
||||||
optgroup = page->new_optgroup(_(L("Start G-code")), 0);
|
optgroup = page->new_optgroup(_(L("Start G-code")), 0);
|
||||||
|
@ -3,13 +3,8 @@
|
|||||||
|
|
||||||
// Human-readable output of Parameters structure
|
// Human-readable output of Parameters structure
|
||||||
std::ostream& operator<<(std::ostream& str,Slic3r::WipeTowerParameters& par) {
|
std::ostream& operator<<(std::ostream& str,Slic3r::WipeTowerParameters& par) {
|
||||||
str << "bridging: " << par.bridging << "\n";
|
|
||||||
str << "adhesion: " << par.adhesion << "\n";
|
|
||||||
str << "sampling: " << par.sampling << "\n";
|
str << "sampling: " << par.sampling << "\n";
|
||||||
|
|
||||||
str << "cooling times: ";
|
|
||||||
for (const auto& a : par.cooling_time) str << a << " ";
|
|
||||||
|
|
||||||
str << "line widths: ";
|
str << "line widths: ";
|
||||||
for (const auto& a : par.ramming_line_width_multiplicator) str << a << " ";
|
for (const auto& a : par.ramming_line_width_multiplicator) str << a << " ";
|
||||||
|
|
||||||
@ -116,30 +111,6 @@ void RammingPanel::line_parameters_changed() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CoolingPanel::CoolingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p)
|
|
||||||
: wxPanel(parent,wxID_ANY,wxPoint(0,0),wxSize(0,0),wxBORDER_RAISED)
|
|
||||||
{
|
|
||||||
new wxStaticText(this,wxID_ANY,wxString("Time (in seconds) reserved for cooling after unload:"),wxPoint(220,50) ,wxSize(400,25),wxALIGN_LEFT);
|
|
||||||
for (int i=0;i<4;++i) {
|
|
||||||
new wxStaticText(this,wxID_ANY,wxString("Filament #")<<i+1<<": ",wxPoint(300,105+30*i) ,wxSize(150,25),wxALIGN_LEFT);
|
|
||||||
m_widget_edits.push_back(new wxSpinCtrl(this,wxID_ANY,wxEmptyString,wxPoint(400,100+30*i),wxSize(75,25),wxSP_ARROW_KEYS|wxALIGN_RIGHT,0,30,15));
|
|
||||||
}
|
|
||||||
for (unsigned int i=0;i<p.cooling_time.size();++i) {
|
|
||||||
if (i>=m_widget_edits.size())
|
|
||||||
break; // so we don't initialize non-existent widget
|
|
||||||
m_widget_edits[i]->SetValue(p.cooling_time[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoolingPanel::fill_parameters(Slic3r::WipeTowerParameters& p) {
|
|
||||||
p.cooling_time.clear();
|
|
||||||
for (int i=0;i<4;++i)
|
|
||||||
p.cooling_time.push_back(m_widget_edits[i]->GetValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WipingPanel::WipingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p)
|
WipingPanel::WipingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p)
|
||||||
: wxPanel(parent,wxID_ANY,wxPoint(0,0),wxSize(0,0),wxBORDER_RAISED)
|
: wxPanel(parent,wxID_ANY,wxPoint(0,0),wxSize(0,0),wxBORDER_RAISED)
|
||||||
{
|
{
|
||||||
@ -208,20 +179,6 @@ void WipingPanel::fill_in_matrix() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
GeneralPanel::GeneralPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p) : wxPanel(parent,wxID_ANY,wxPoint(0,0),wxSize(0,0),wxBORDER_RAISED) {
|
|
||||||
new wxStaticText(this,wxID_ANY,wxString("Maximum bridging over sparse infill (mm):"),wxPoint(100,105) ,wxSize(280,25),wxALIGN_LEFT);
|
|
||||||
m_widget_bridge = new wxSpinCtrl(this,wxID_ANY,wxEmptyString,wxPoint(380,100),wxSize(50,25),wxALIGN_RIGHT|wxSP_ARROW_KEYS,1,50,10);
|
|
||||||
m_widget_adhesion = new wxCheckBox(this,wxID_ANY,"Increased adhesion of first layer",wxPoint(100,150),wxSize(330,25),wxALIGN_RIGHT);
|
|
||||||
m_widget_bridge->SetValue(p.bridging);
|
|
||||||
m_widget_adhesion->SetValue(p.adhesion);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeneralPanel::fill_parameters(Slic3r::WipeTowerParameters& p) {
|
|
||||||
p.bridging = m_widget_bridge->GetValue();
|
|
||||||
p.adhesion = m_widget_adhesion->GetValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -238,13 +195,13 @@ WipeTowerDialog::WipeTowerDialog(wxWindow* parent,const std::string& init_data)
|
|||||||
|
|
||||||
wxNotebook* notebook = new wxNotebook(this,wxID_ANY,wxPoint(0,0),wxSize(800,450));
|
wxNotebook* notebook = new wxNotebook(this,wxID_ANY,wxPoint(0,0),wxSize(800,450));
|
||||||
|
|
||||||
m_panel_general = new GeneralPanel(notebook,parameters);
|
//m_panel_general = new GeneralPanel(notebook,parameters);
|
||||||
m_panel_ramming = new RammingPanel(notebook,parameters);
|
m_panel_ramming = new RammingPanel(notebook,parameters);
|
||||||
m_panel_cooling = new CoolingPanel(notebook,parameters);
|
//m_panel_cooling = new CoolingPanel(notebook,parameters);
|
||||||
m_panel_wiping = new WipingPanel(notebook,parameters);
|
m_panel_wiping = new WipingPanel(notebook,parameters);
|
||||||
notebook->AddPage(m_panel_general,"General");
|
//notebook->AddPage(m_panel_general,"General");
|
||||||
notebook->AddPage(m_panel_ramming,"Ramming");
|
notebook->AddPage(m_panel_ramming,"Ramming");
|
||||||
notebook->AddPage(m_panel_cooling,"Cooling");
|
//notebook->AddPage(m_panel_cooling,"Cooling");
|
||||||
notebook->AddPage(m_panel_wiping,"Wiping");
|
notebook->AddPage(m_panel_wiping,"Wiping");
|
||||||
this->Show();
|
this->Show();
|
||||||
|
|
||||||
|
@ -40,23 +40,6 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CoolingPanel : public wxPanel {
|
|
||||||
public:
|
|
||||||
CoolingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p);
|
|
||||||
void fill_parameters(Slic3r::WipeTowerParameters& p);
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<wxSpinCtrl*> m_widget_edits;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class WipingPanel : public wxPanel {
|
class WipingPanel : public wxPanel {
|
||||||
public:
|
public:
|
||||||
WipingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p);
|
WipingPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p);
|
||||||
@ -74,18 +57,6 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class GeneralPanel : public wxPanel {
|
|
||||||
public:
|
|
||||||
GeneralPanel(wxWindow* parent,const Slic3r::WipeTowerParameters& p);
|
|
||||||
void fill_parameters(Slic3r::WipeTowerParameters& p);
|
|
||||||
|
|
||||||
private:
|
|
||||||
wxSpinCtrl* m_widget_bridge;
|
|
||||||
wxCheckBox* m_widget_adhesion;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class WipeTowerDialog : public wxDialog {
|
class WipeTowerDialog : public wxDialog {
|
||||||
public:
|
public:
|
||||||
@ -96,17 +67,13 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_file_name="config_wipe_tower";
|
std::string m_file_name="config_wipe_tower";
|
||||||
GeneralPanel* m_panel_general = nullptr;
|
|
||||||
RammingPanel* m_panel_ramming = nullptr;
|
RammingPanel* m_panel_ramming = nullptr;
|
||||||
CoolingPanel* m_panel_cooling = nullptr;
|
|
||||||
WipingPanel* m_panel_wiping = nullptr;
|
WipingPanel* m_panel_wiping = nullptr;
|
||||||
std::string m_output_data = "";
|
std::string m_output_data = "";
|
||||||
|
|
||||||
std::string read_dialog_values() {
|
std::string read_dialog_values() {
|
||||||
Slic3r::WipeTowerParameters p;
|
Slic3r::WipeTowerParameters p;
|
||||||
m_panel_general->fill_parameters(p);
|
|
||||||
m_panel_ramming->fill_parameters(p);
|
m_panel_ramming->fill_parameters(p);
|
||||||
m_panel_cooling->fill_parameters(p);
|
|
||||||
m_panel_wiping ->fill_parameters(p);
|
m_panel_wiping ->fill_parameters(p);
|
||||||
return p.to_string();
|
return p.to_string();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user