diff --git a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp index acdcef8f2..90317673e 100644 --- a/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp +++ b/xs/src/libslic3r/GCode/WipeTowerPrusaMM.hpp @@ -69,19 +69,19 @@ public: m_cooling_tube_retraction(cooling_tube_retraction), m_cooling_tube_length(cooling_tube_length), m_parking_pos_retraction(parking_pos_retraction), - m_current_tool(initial_tool), - m_bridging(bridging) + m_bridging(bridging), + m_current_tool(initial_tool) { const unsigned int number_of_extruders = int(sqrt(wiping_matrix.size())+WT_EPSILON); for (unsigned int i = 0; i(wiping_matrix.begin()+i*number_of_extruders,wiping_matrix.begin()+(i+1)*number_of_extruders)); - for (size_t i = 0; i < 4; ++ i) { + /*for (size_t i = 0; i < number_of_extruders; ++ i) { // Extruder specific parameters. - m_filpar[i].material = PLA; + m_filpar[i].material = PLA; m_filpar[i].temperature = 0; m_filpar[i].first_layer_temperature = 0; - } + }*/ } virtual ~WipeTowerPrusaMM() {} @@ -97,6 +97,8 @@ public: void set_extruder(size_t idx, material_type material, int temp, int first_layer_temp, float loading_speed, float unloading_speed, float delay, int cooling_time, std::string ramming_parameters) { + while (m_filpar.size() < idx+1) // makes sure the required element is in the vector + m_filpar.push_back(FilamentParameters()); m_filpar[idx].material = material; m_filpar[idx].temperature = temp; m_filpar[idx].first_layer_temperature = first_layer_temp; @@ -226,20 +228,20 @@ private: struct FilamentParameters { - material_type material; - int temperature; - int first_layer_temperature; - float loading_speed; - float unloading_speed; - float delay; - int cooling_time; - float ramming_line_width_multiplicator; - float ramming_step_multiplicator; + material_type material = PLA; + int temperature = 0; + int first_layer_temperature = 0; + float loading_speed = 0.f; + float unloading_speed = 0.f; + float delay = 0.f ; + int cooling_time = 0; + float ramming_line_width_multiplicator = 0.f; + float ramming_step_multiplicator = 0.f; std::vector ramming_speed; }; // Extruder specific parameters. - FilamentParameters m_filpar[4]; + std::vector m_filpar; // State of the wiper tower generator. diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index acff4492a..cd227ed1c 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -1037,21 +1037,22 @@ void Print::_make_wipe_tower() } } + // Get wiping matrix to get number of extruders and convert vector to vector: + std::vector wiping_volumes((this->config.wiping_volumes_matrix.values).begin(),(this->config.wiping_volumes_matrix.values).end()); + // Initialize the 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), 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.wipe_tower_bridging), - std::vector((this->config.wiping_volumes_matrix.values).begin(),(this->config.wiping_volumes_matrix.values).end()), - m_tool_ordering.first_extruder()); - + float(this->config.wipe_tower_bridging), wiping_volumes, m_tool_ordering.first_extruder()); + //wipe_tower.set_retract(); //wipe_tower.set_zhop(); // Set the extruder & material properties at the wipe tower object. - for (size_t i = 0; i < 4; ++ i) + for (size_t i = 0; i < (int)(sqrt(wiping_volumes.size())+EPSILON); ++ i) wipe_tower.set_extruder( i, WipeTowerPrusaMM::parse_material(this->config.filament_type.get_at(i).c_str()),