mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 08:47:52 -06:00
Delete color changes for unused extruders
This commit is contained in:
parent
8ec1465ea5
commit
0fb8b2ce09
5 changed files with 58 additions and 8 deletions
|
@ -875,7 +875,7 @@ void GCode::_do_export(Print &print, FILE *file)
|
||||||
this->set_extruders(print.extruders());
|
this->set_extruders(print.extruders());
|
||||||
|
|
||||||
// #ys_FIXME_COLOR // Initialize colorprint.
|
// #ys_FIXME_COLOR // Initialize colorprint.
|
||||||
m_colorprint_heights = cast<float>(print.config().colorprint_heights.values);
|
// m_colorprint_heights = cast<float>(print.config().colorprint_heights.values);
|
||||||
// Initialize custom gcode
|
// Initialize custom gcode
|
||||||
Model* model = print.get_object(0)->model_object()->get_model();
|
Model* model = print.get_object(0)->model_object()->get_model();
|
||||||
m_custom_g_code_heights = model->custom_gcode_per_height;
|
m_custom_g_code_heights = model->custom_gcode_per_height;
|
||||||
|
@ -1020,6 +1020,49 @@ void GCode::_do_export(Print &print, FILE *file)
|
||||||
}
|
}
|
||||||
print.throw_if_canceled();
|
print.throw_if_canceled();
|
||||||
|
|
||||||
|
|
||||||
|
// #ys_FIXME_COLOR
|
||||||
|
/* To avoid change filament for non-used extruder for Multi-material,
|
||||||
|
* check model->custom_gcode_per_height using tool_ordering values
|
||||||
|
* */
|
||||||
|
if (!m_custom_g_code_heights. empty())
|
||||||
|
{
|
||||||
|
bool delete_executed = false;
|
||||||
|
auto it = m_custom_g_code_heights.end();
|
||||||
|
while (it != m_custom_g_code_heights.begin())
|
||||||
|
{
|
||||||
|
--it;
|
||||||
|
if (it->gcode != ColorChangeCode)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto it_layer_tools = std::lower_bound(tool_ordering.begin(), tool_ordering.end(), LayerTools(it->height));
|
||||||
|
|
||||||
|
bool used_extruder = false;
|
||||||
|
for (; it_layer_tools != tool_ordering.end(); it_layer_tools++)
|
||||||
|
{
|
||||||
|
const std::vector<unsigned>& extruders = it_layer_tools->extruders;
|
||||||
|
if (std::find(extruders.begin(), extruders.end(), (unsigned)(it->extruder-1)) != extruders.end())
|
||||||
|
{
|
||||||
|
used_extruder = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (used_extruder)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* If we are there, current extruder wouldn't be used,
|
||||||
|
* so this color change is a redundant move.
|
||||||
|
* Delete this item from m_custom_g_code_heights
|
||||||
|
* */
|
||||||
|
it = m_custom_g_code_heights.erase(it);
|
||||||
|
delete_executed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delete_executed)
|
||||||
|
model->custom_gcode_per_height = m_custom_g_code_heights;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
m_cooling_buffer->set_current_extruder(initial_extruder_id);
|
m_cooling_buffer->set_current_extruder(initial_extruder_id);
|
||||||
|
|
||||||
// Emit machine envelope limits for the Marlin firmware.
|
// Emit machine envelope limits for the Marlin firmware.
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <boost/log/trivial.hpp>
|
#include <boost/log/trivial.hpp>
|
||||||
#include <boost/nowide/cstdio.hpp>
|
#include <boost/nowide/cstdio.hpp>
|
||||||
#include "I18N.hpp"
|
#include "I18N.hpp"
|
||||||
|
#include "GUI.hpp"
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
|
@ -84,6 +85,14 @@ void BackgroundSlicingProcess::process_fff()
|
||||||
m_print->process();
|
m_print->process();
|
||||||
wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_slicing_completed_id));
|
wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_slicing_completed_id));
|
||||||
m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data);
|
m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data);
|
||||||
|
|
||||||
|
if (m_fff_print->model().custom_gcode_per_height != GUI::wxGetApp().model().custom_gcode_per_height) {
|
||||||
|
GUI::wxGetApp().model().custom_gcode_per_height = m_fff_print->model().custom_gcode_per_height;
|
||||||
|
// #ys_FIXME : controll text
|
||||||
|
GUI::show_info(nullptr, _(L("To except of redundant tool manipulation, \n"
|
||||||
|
"Color change(s) for unused extruder(s) was(were) deleted")), _(L("Info")));
|
||||||
|
}
|
||||||
|
|
||||||
if (this->set_step_started(bspsGCodeFinalize)) {
|
if (this->set_step_started(bspsGCodeFinalize)) {
|
||||||
if (! m_export_path.empty()) {
|
if (! m_export_path.empty()) {
|
||||||
//FIXME localize the messages
|
//FIXME localize the messages
|
||||||
|
|
|
@ -5338,11 +5338,6 @@ void GLCanvas3D::_load_gcode_extrusion_paths(const GCodePreviewData& preview_dat
|
||||||
case GCodePreviewData::Extrusion::ColorPrint:
|
case GCodePreviewData::Extrusion::ColorPrint:
|
||||||
{
|
{
|
||||||
int color_cnt = (int)tool_colors.size() / 4;
|
int color_cnt = (int)tool_colors.size() / 4;
|
||||||
|
|
||||||
// int val = int(value);
|
|
||||||
// while (val >= color_cnt)
|
|
||||||
// val -= color_cnt;
|
|
||||||
|
|
||||||
int val = value > color_cnt ? color_cnt - 1 : value;
|
int val = value > color_cnt ? color_cnt - 1 : value;
|
||||||
|
|
||||||
GCodePreviewData::Color color;
|
GCodePreviewData::Color color;
|
||||||
|
|
|
@ -592,8 +592,8 @@ void Preview::update_view_type(bool slice_completed)
|
||||||
_(L("Feature type"));
|
_(L("Feature type"));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const wxString& choice = !wxGetApp().plater()->model().custom_gcode_per_height.empty() &&
|
const wxString& choice = !wxGetApp().plater()->model().custom_gcode_per_height.empty() /*&&
|
||||||
(wxGetApp().extruders_edited_cnt()==1 || !slice_completed) ?
|
(wxGetApp().extruders_edited_cnt()==1 || !slice_completed) */?
|
||||||
_(L("Color Print")) :
|
_(L("Color Print")) :
|
||||||
config.option<ConfigOptionFloats>("wiping_volumes_matrix")->values.size() > 1 ?
|
config.option<ConfigOptionFloats>("wiping_volumes_matrix")->values.size() > 1 ?
|
||||||
_(L("Tool")) :
|
_(L("Tool")) :
|
||||||
|
|
|
@ -2560,6 +2560,9 @@ void DoubleSlider::SetTicksValues(const std::vector<t_custom_code>& heights)
|
||||||
if (!was_empty && m_ticks_.empty() && m_state != msMultiExtruder)
|
if (!was_empty && m_ticks_.empty() && m_state != msMultiExtruder)
|
||||||
// Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one
|
// Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one
|
||||||
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoubleSlider::get_lower_and_higher_position(int& lower_pos, int& higher_pos)
|
void DoubleSlider::get_lower_and_higher_position(int& lower_pos, int& higher_pos)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue