GUI integration of rotation angle setting
This commit is contained in:
parent
3813402aa3
commit
2921302fe9
9 changed files with 26 additions and 10 deletions
|
@ -52,7 +52,7 @@ sub new {
|
||||||
bed_shape complete_objects extruder_clearance_radius skirts skirt_distance brim_width variable_layer_height
|
bed_shape complete_objects extruder_clearance_radius skirts skirt_distance brim_width variable_layer_height
|
||||||
serial_port serial_speed octoprint_host octoprint_apikey
|
serial_port serial_speed octoprint_host octoprint_apikey
|
||||||
nozzle_diameter single_extruder_multi_material
|
nozzle_diameter single_extruder_multi_material
|
||||||
wipe_tower wipe_tower_x wipe_tower_y wipe_tower_width wipe_tower_per_color_wipe extruder_colour filament_colour
|
wipe_tower wipe_tower_x wipe_tower_y wipe_tower_width wipe_tower_per_color_wipe wipe_tower_rotation_angle extruder_colour filament_colour
|
||||||
)]);
|
)]);
|
||||||
# C++ Slic3r::Model with Perl extensions in Slic3r/Model.pm
|
# C++ Slic3r::Model with Perl extensions in Slic3r/Model.pm
|
||||||
$self->{model} = Slic3r::Model->new;
|
$self->{model} = Slic3r::Model->new;
|
||||||
|
|
|
@ -725,6 +725,7 @@ sub build {
|
||||||
$optgroup->append_single_option_line('wipe_tower_y');
|
$optgroup->append_single_option_line('wipe_tower_y');
|
||||||
$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');
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
my $optgroup = $page->new_optgroup('Advanced');
|
my $optgroup = $page->new_optgroup('Advanced');
|
||||||
|
@ -1032,7 +1033,7 @@ sub _update {
|
||||||
|
|
||||||
my $have_wipe_tower = $config->wipe_tower;
|
my $have_wipe_tower = $config->wipe_tower;
|
||||||
$self->get_field($_)->toggle($have_wipe_tower)
|
$self->get_field($_)->toggle($have_wipe_tower)
|
||||||
for qw(wipe_tower_x wipe_tower_y wipe_tower_width wipe_tower_per_color_wipe);
|
for qw(wipe_tower_x wipe_tower_y wipe_tower_width wipe_tower_per_color_wipe wipe_tower_rotation_angle);
|
||||||
|
|
||||||
$self->Thaw;
|
$self->Thaw;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ public:
|
||||||
out.y=(x-origin.x) * sin(angle) + (y-origin.y) * cos(angle);
|
out.y=(x-origin.x) * sin(angle) + (y-origin.y) * cos(angle);
|
||||||
return out+origin;
|
return out+origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#define strcasecmp _stricmp
|
#define strcasecmp _stricmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ROTATION_ANGLE 30
|
|
||||||
|
|
||||||
|
|
||||||
namespace Slic3r
|
namespace Slic3r
|
||||||
|
@ -548,7 +547,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::tool_change(unsigned int tool, boo
|
||||||
.set_z(m_z_pos)
|
.set_z(m_z_pos)
|
||||||
.set_layer_height(m_layer_height)
|
.set_layer_height(m_layer_height)
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
.set_rotation(this->m_wipe_tower_pos,ROTATION_ANGLE)
|
.set_rotation(this->m_wipe_tower_pos,m_wipe_tower_rotation_angle)
|
||||||
.append(";--------------------\n"
|
.append(";--------------------\n"
|
||||||
"; CP TOOLCHANGE START\n")
|
"; CP TOOLCHANGE START\n")
|
||||||
.comment_with_value(" toolchange #", m_num_tool_changes)
|
.comment_with_value(" toolchange #", m_num_tool_changes)
|
||||||
|
@ -646,7 +645,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::toolchange_Brim(Purpose purpose, b
|
||||||
.set_z(m_z_pos)
|
.set_z(m_z_pos)
|
||||||
.set_layer_height(m_layer_height)
|
.set_layer_height(m_layer_height)
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
.set_rotation(this->m_wipe_tower_pos,ROTATION_ANGLE)
|
.set_rotation(this->m_wipe_tower_pos,m_wipe_tower_rotation_angle)
|
||||||
.append(
|
.append(
|
||||||
";-------------------------------------\n"
|
";-------------------------------------\n"
|
||||||
"; CP WIPE TOWER FIRST LAYER BRIM START\n");
|
"; CP WIPE TOWER FIRST LAYER BRIM START\n");
|
||||||
|
@ -935,7 +934,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::finish_layer(Purpose purpose)
|
||||||
.set_z(m_z_pos)
|
.set_z(m_z_pos)
|
||||||
.set_layer_height(m_layer_height)
|
.set_layer_height(m_layer_height)
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
.set_rotation(this->m_wipe_tower_pos,ROTATION_ANGLE)
|
.set_rotation(this->m_wipe_tower_pos,m_wipe_tower_rotation_angle)
|
||||||
.append(";--------------------\n"
|
.append(";--------------------\n"
|
||||||
"; CP EMPTY GRID START\n")
|
"; CP EMPTY GRID START\n")
|
||||||
// m_num_layer_changes is incremented by set_z, so it is 1 based.
|
// m_num_layer_changes is incremented by set_z, so it is 1 based.
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include "WipeTower.hpp"
|
#include "WipeTower.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace Slic3r
|
namespace Slic3r
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -39,10 +41,11 @@ public:
|
||||||
// y -- y coordinates of wipe tower in mm ( left bottom corner )
|
// y -- y coordinates of wipe tower in mm ( left bottom corner )
|
||||||
// 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, unsigned int initial_tool) :
|
WipeTowerPrusaMM(float x, float y, float width, float wipe_area, float rotation_angle, 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),
|
||||||
m_wipe_area(wipe_area),
|
m_wipe_area(wipe_area),
|
||||||
|
m_wipe_tower_rotation_angle(rotation_angle),
|
||||||
m_z_pos(0.f),
|
m_z_pos(0.f),
|
||||||
m_current_tool(initial_tool)
|
m_current_tool(initial_tool)
|
||||||
{
|
{
|
||||||
|
@ -96,6 +99,7 @@ public:
|
||||||
// Extrusion rate for an extrusion aka perimeter width 0.35mm.
|
// Extrusion rate for an extrusion aka perimeter width 0.35mm.
|
||||||
// Clamp the extrusion height to a 0.2mm layer height, independent of the nozzle diameter.
|
// Clamp the extrusion height to a 0.2mm layer height, independent of the nozzle diameter.
|
||||||
// m_extrusion_flow = std::min(0.2f, layer_height) * 0.145f;
|
// m_extrusion_flow = std::min(0.2f, layer_height) * 0.145f;
|
||||||
|
|
||||||
// Use a strictly
|
// Use a strictly
|
||||||
m_extrusion_flow = layer_height * 0.145f;
|
m_extrusion_flow = layer_height * 0.145f;
|
||||||
}
|
}
|
||||||
|
@ -149,6 +153,8 @@ private:
|
||||||
float m_wipe_tower_width;
|
float m_wipe_tower_width;
|
||||||
// Per color Y span.
|
// Per color Y span.
|
||||||
float m_wipe_area;
|
float m_wipe_area;
|
||||||
|
// Wipe tower rotation angle in degrees (with respect to x axis
|
||||||
|
float m_wipe_tower_rotation_angle;
|
||||||
// Current Z position.
|
// Current Z position.
|
||||||
float m_z_pos = 0.f;
|
float m_z_pos = 0.f;
|
||||||
// Current layer height.
|
// Current layer height.
|
||||||
|
|
|
@ -191,6 +191,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
||||||
|| opt_key == "wipe_tower_y"
|
|| opt_key == "wipe_tower_y"
|
||||||
|| 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 == "z_offset") {
|
|| opt_key == "z_offset") {
|
||||||
steps.emplace_back(psWipeTower);
|
steps.emplace_back(psWipeTower);
|
||||||
} else if (
|
} else if (
|
||||||
|
@ -983,7 +984,7 @@ void Print::_make_wipe_tower()
|
||||||
WipeTowerPrusaMM wipe_tower(
|
WipeTowerPrusaMM wipe_tower(
|
||||||
float(this->config.wipe_tower_x.value), float(this->config.wipe_tower_y.value),
|
float(this->config.wipe_tower_x.value), float(this->config.wipe_tower_y.value),
|
||||||
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),
|
||||||
initial_extruder_id);
|
float(this->config.wipe_tower_rotation_angle.value), initial_extruder_id);
|
||||||
|
|
||||||
//wipe_tower.set_retract();
|
//wipe_tower.set_retract();
|
||||||
//wipe_tower.set_zhop();
|
//wipe_tower.set_zhop();
|
||||||
|
|
|
@ -1708,6 +1708,13 @@ PrintConfigDef::PrintConfigDef()
|
||||||
def->cli = "wipe-tower-per-color-wipe=f";
|
def->cli = "wipe-tower-per-color-wipe=f";
|
||||||
def->default_value = new ConfigOptionFloat(15.);
|
def->default_value = new ConfigOptionFloat(15.);
|
||||||
|
|
||||||
|
def = this->add("wipe_tower_rotation_angle", coFloat);
|
||||||
|
def->label = "Wipe tower rotation angle";
|
||||||
|
def->tooltip = "Wipe tower rotation angle with respect to x-asis ";
|
||||||
|
def->sidetext = "degrees";
|
||||||
|
def->cli = "wipe-tower-rotation-angle=f";
|
||||||
|
def->default_value = new ConfigOptionFloat(0.);
|
||||||
|
|
||||||
def = this->add("xy_size_compensation", coFloat);
|
def = this->add("xy_size_compensation", coFloat);
|
||||||
def->label = "XY Size Compensation";
|
def->label = "XY Size Compensation";
|
||||||
def->category = "Advanced";
|
def->category = "Advanced";
|
||||||
|
|
|
@ -607,6 +607,7 @@ public:
|
||||||
ConfigOptionFloat wipe_tower_y;
|
ConfigOptionFloat wipe_tower_y;
|
||||||
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 z_offset;
|
ConfigOptionFloat z_offset;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -671,6 +672,7 @@ protected:
|
||||||
OPT_PTR(wipe_tower_y);
|
OPT_PTR(wipe_tower_y);
|
||||||
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(z_offset);
|
OPT_PTR(z_offset);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -178,7 +178,7 @@ 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", "wipe_tower_x", "wipe_tower_y",
|
"elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "wipe_tower", "wipe_tower_x", "wipe_tower_y",
|
||||||
"wipe_tower_width", "wipe_tower_per_color_wipe",
|
"wipe_tower_width", "wipe_tower_per_color_wipe", "wipe_tower_rotation_angle",
|
||||||
"compatible_printers"
|
"compatible_printers"
|
||||||
};
|
};
|
||||||
return s_opts;
|
return s_opts;
|
||||||
|
|
Loading…
Reference in a new issue