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
|
||||
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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
out.y=(x-origin.x) * sin(angle) + (y-origin.y) * cos(angle);
|
||||
return out+origin;
|
||||
}
|
||||
|
||||
|
||||
float x;
|
||||
float y;
|
||||
};
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue