GUI integration of rotation angle setting

This commit is contained in:
Lukas Matena 2017-11-30 12:08:22 +01:00
parent 3813402aa3
commit 2921302fe9
9 changed files with 26 additions and 10 deletions

View file

@ -52,7 +52,7 @@ sub new {
bed_shape complete_objects extruder_clearance_radius skirts skirt_distance brim_width variable_layer_height
serial_port serial_speed octoprint_host octoprint_apikey
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
$self->{model} = Slic3r::Model->new;

View file

@ -725,6 +725,7 @@ sub build {
$optgroup->append_single_option_line('wipe_tower_y');
$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_rotation_angle');
}
{
my $optgroup = $page->new_optgroup('Advanced');
@ -1032,7 +1033,7 @@ sub _update {
my $have_wipe_tower = $config->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;
}

View file

@ -32,7 +32,7 @@ public:
out.y=(x-origin.x) * sin(angle) + (y-origin.y) * cos(angle);
return out+origin;
}
float x;
float y;
};

View file

@ -14,7 +14,6 @@
#define strcasecmp _stricmp
#endif
#define ROTATION_ANGLE 30
namespace Slic3r
@ -548,7 +547,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::tool_change(unsigned int tool, boo
.set_z(m_z_pos)
.set_layer_height(m_layer_height)
.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"
"; CP TOOLCHANGE START\n")
.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_layer_height(m_layer_height)
.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"
"; 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_layer_height(m_layer_height)
.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"
"; CP EMPTY GRID START\n")
// m_num_layer_changes is incremented by set_z, so it is 1 based.

View file

@ -8,6 +8,8 @@
#include "WipeTower.hpp"
namespace Slic3r
{
@ -39,10 +41,11 @@ public:
// 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 )
// 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_width(width),
m_wipe_area(wipe_area),
m_wipe_tower_rotation_angle(rotation_angle),
m_z_pos(0.f),
m_current_tool(initial_tool)
{
@ -96,6 +99,7 @@ public:
// 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.
// m_extrusion_flow = std::min(0.2f, layer_height) * 0.145f;
// Use a strictly
m_extrusion_flow = layer_height * 0.145f;
}
@ -149,6 +153,8 @@ private:
float m_wipe_tower_width;
// Per color Y span.
float m_wipe_area;
// Wipe tower rotation angle in degrees (with respect to x axis
float m_wipe_tower_rotation_angle;
// Current Z position.
float m_z_pos = 0.f;
// Current layer height.

View file

@ -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_width"
|| opt_key == "wipe_tower_per_color_wipe"
|| opt_key == "wipe_tower_rotation_angle"
|| opt_key == "z_offset") {
steps.emplace_back(psWipeTower);
} else if (
@ -983,7 +984,7 @@ void Print::_make_wipe_tower()
WipeTowerPrusaMM wipe_tower(
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),
initial_extruder_id);
float(this->config.wipe_tower_rotation_angle.value), initial_extruder_id);
//wipe_tower.set_retract();
//wipe_tower.set_zhop();

View file

@ -1708,6 +1708,13 @@ PrintConfigDef::PrintConfigDef()
def->cli = "wipe-tower-per-color-wipe=f";
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->label = "XY Size Compensation";
def->category = "Advanced";

View file

@ -607,6 +607,7 @@ public:
ConfigOptionFloat wipe_tower_y;
ConfigOptionFloat wipe_tower_width;
ConfigOptionFloat wipe_tower_per_color_wipe;
ConfigOptionFloat wipe_tower_rotation_angle;
ConfigOptionFloat z_offset;
protected:
@ -671,6 +672,7 @@ protected:
OPT_PTR(wipe_tower_y);
OPT_PTR(wipe_tower_width);
OPT_PTR(wipe_tower_per_color_wipe);
OPT_PTR(wipe_tower_rotation_angle);
OPT_PTR(z_offset);
}
};

View file

@ -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",
"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",
"wipe_tower_width", "wipe_tower_per_color_wipe",
"wipe_tower_width", "wipe_tower_per_color_wipe", "wipe_tower_rotation_angle",
"compatible_printers"
};
return s_opts;