mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue