mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-16 21:42:43 +00:00
Merge branch 'main' into belt/baseChanges
This commit is contained in:
@@ -3928,9 +3928,10 @@ void GCodeProcessor::process_G1(const std::array<std::optional<double>, 4>& axes
|
||||
return;
|
||||
|
||||
EMoveType type = move_type(delta_pos);
|
||||
const float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z]));
|
||||
m_travel_dist = delta_xyz;
|
||||
|
||||
if (type == EMoveType::Extrude) {
|
||||
const float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z]));
|
||||
m_travel_dist = delta_xyz;
|
||||
float volume_extruded_filament = area_filament_cross_section * delta_pos[E];
|
||||
float area_toolpath_cross_section = volume_extruded_filament / delta_xyz;
|
||||
|
||||
@@ -5552,6 +5553,11 @@ void GCodeProcessor::process_filament_change(int id)
|
||||
int next_extruder_id = m_filament_maps[id];
|
||||
int next_filament_id = id;
|
||||
float extra_time = 0;
|
||||
unsigned int filament_changes_delta = 0;
|
||||
unsigned int extruder_changes_delta = 0;
|
||||
float filament_load_time_delta = 0.0f;
|
||||
float filament_unload_time_delta = 0.0f;
|
||||
float tool_change_time_delta = 0.0f;
|
||||
|
||||
if (prev_filament_id == next_filament_id)
|
||||
return;
|
||||
@@ -5564,12 +5570,14 @@ void GCodeProcessor::process_filament_change(int id)
|
||||
assert(prev_extruder_id != -1);
|
||||
process_filaments(CustomGCode::ToolChange);
|
||||
m_filament_id[next_extruder_id] = next_filament_id;
|
||||
m_result.lock();
|
||||
m_result.print_statistics.total_filament_changes += 1;
|
||||
m_result.unlock();
|
||||
extra_time += get_filament_unload_time(static_cast<size_t>(prev_filament_id));
|
||||
filament_changes_delta += 1;
|
||||
const float filament_unload_time = get_filament_unload_time(static_cast<size_t>(prev_filament_id));
|
||||
extra_time += filament_unload_time;
|
||||
filament_unload_time_delta += filament_unload_time;
|
||||
m_time_processor.extruder_unloaded = false;
|
||||
extra_time += get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
const float filament_load_time = get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
extra_time += filament_load_time;
|
||||
filament_load_time_delta += filament_load_time;
|
||||
}
|
||||
else {
|
||||
if (prev_extruder_id == -1) {
|
||||
@@ -5577,7 +5585,9 @@ void GCodeProcessor::process_filament_change(int id)
|
||||
m_extruder_id = next_extruder_id;
|
||||
m_filament_id[next_extruder_id] = next_filament_id;
|
||||
m_time_processor.extruder_unloaded = false;
|
||||
extra_time += get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
const float filament_load_time = get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
extra_time += filament_load_time;
|
||||
filament_load_time_delta += filament_load_time;
|
||||
}
|
||||
else {
|
||||
//first process cache generated by last extruder
|
||||
@@ -5588,24 +5598,39 @@ void GCodeProcessor::process_filament_change(int id)
|
||||
//no filament in current extruder
|
||||
m_filament_id[next_extruder_id] = next_filament_id;
|
||||
m_time_processor.extruder_unloaded = false;
|
||||
extra_time += get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
const float filament_load_time = get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
extra_time += filament_load_time;
|
||||
filament_load_time_delta += filament_load_time;
|
||||
}
|
||||
else if (m_last_filament_id[next_extruder_id] != next_filament_id) {
|
||||
//need to change filament
|
||||
m_filament_id[next_extruder_id] = next_filament_id;
|
||||
m_result.lock();
|
||||
m_result.print_statistics.total_filament_changes += 1;
|
||||
m_result.unlock();
|
||||
extra_time += get_filament_unload_time(static_cast<size_t>(prev_filament_id));
|
||||
filament_changes_delta += 1;
|
||||
const float filament_unload_time = get_filament_unload_time(static_cast<size_t>(prev_filament_id));
|
||||
extra_time += filament_unload_time;
|
||||
filament_unload_time_delta += filament_unload_time;
|
||||
m_time_processor.extruder_unloaded = false;
|
||||
extra_time += get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
const float filament_load_time = get_filament_load_time(static_cast<size_t>(next_filament_id));
|
||||
extra_time += filament_load_time;
|
||||
filament_load_time_delta += filament_load_time;
|
||||
}
|
||||
m_result.lock();
|
||||
m_result.print_statistics.total_extruder_changes++;
|
||||
m_result.unlock();
|
||||
extra_time += get_extruder_change_time(next_extruder_id);
|
||||
extruder_changes_delta += 1;
|
||||
const float tool_change_time = get_extruder_change_time(next_extruder_id);
|
||||
extra_time += tool_change_time;
|
||||
tool_change_time_delta += tool_change_time;
|
||||
}
|
||||
}
|
||||
|
||||
if (filament_changes_delta > 0 || extruder_changes_delta > 0 || filament_load_time_delta > 0.0f || filament_unload_time_delta > 0.0f || tool_change_time_delta > 0.0f) {
|
||||
m_result.lock();
|
||||
m_result.print_statistics.total_filament_changes += filament_changes_delta;
|
||||
m_result.print_statistics.total_extruder_changes += extruder_changes_delta;
|
||||
m_result.print_statistics.total_filament_load_time += filament_load_time_delta;
|
||||
m_result.print_statistics.total_filament_unload_time += filament_unload_time_delta;
|
||||
m_result.print_statistics.total_tool_change_time += tool_change_time_delta;
|
||||
m_result.unlock();
|
||||
}
|
||||
|
||||
m_cp_color.current = m_extruder_colors[next_filament_id];
|
||||
simulate_st_synchronize(extra_time);
|
||||
// store tool change move
|
||||
@@ -5650,6 +5675,11 @@ void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type,
|
||||
m_line_id + 1 :
|
||||
((type == EMoveType::Seam) ? m_last_line_id : m_line_id);
|
||||
|
||||
if (type == EMoveType::Travel) {
|
||||
m_result.print_statistics.total_travel_moves++;
|
||||
m_result.print_statistics.total_travel_distance += m_travel_dist;
|
||||
}
|
||||
|
||||
m_result.moves.push_back({
|
||||
m_last_line_id,
|
||||
type,
|
||||
|
||||
Reference in New Issue
Block a user