mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-27 04:42:33 +00:00
resolve current_filament_id/current_nozzle_id in layer_change_gcode - enhanced
This commit is contained in:
@@ -1274,6 +1274,12 @@ static std::vector<Vec2d> get_path_of_change_filament(const Print& print)
|
|||||||
check_add_eol(toolchange_unretract_str);
|
check_add_eol(toolchange_unretract_str);
|
||||||
|
|
||||||
gcodegen.placeholder_parser().set("current_extruder", new_filament_id);
|
gcodegen.placeholder_parser().set("current_extruder", new_filament_id);
|
||||||
|
gcodegen.placeholder_parser().set("current_filament_id", new_filament_id);
|
||||||
|
gcodegen.placeholder_parser().set("current_extruder_id", new_extruder_id);
|
||||||
|
gcodegen.placeholder_parser().set("current_nozzle_id",
|
||||||
|
nozzle_id_for_gcode_placeholder(group_result, new_filament_id, new_extruder_id, m_layer_idx));
|
||||||
|
gcodegen.placeholder_parser().set("current_hotend",
|
||||||
|
hotend_id_for_gcode_placeholder(gcodegen.m_config, group_result, new_filament_id, new_extruder_id, m_layer_idx));
|
||||||
{
|
{
|
||||||
size_t fi = gcodegen.get_filament_config_index(new_filament_id);
|
size_t fi = gcodegen.get_filament_config_index(new_filament_id);
|
||||||
gcodegen.placeholder_parser().set("retraction_distance_when_cut", gcodegen.m_config.retraction_distances_when_cut.get_at(fi));
|
gcodegen.placeholder_parser().set("retraction_distance_when_cut", gcodegen.m_config.retraction_distances_when_cut.get_at(fi));
|
||||||
@@ -3145,6 +3151,10 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||||||
this->placeholder_parser().set("current_extruder", initial_extruder_id);
|
this->placeholder_parser().set("current_extruder", initial_extruder_id);
|
||||||
this->placeholder_parser().set("current_hotend",
|
this->placeholder_parser().set("current_hotend",
|
||||||
first_hotend_id_for_gcode_placeholder(m_config, group_result, (int) initial_extruder_id, extruder_id));
|
first_hotend_id_for_gcode_placeholder(m_config, group_result, (int) initial_extruder_id, extruder_id));
|
||||||
|
this->placeholder_parser().set("current_filament_id", (int) initial_extruder_id);
|
||||||
|
this->placeholder_parser().set("current_extruder_id", extruder_id);
|
||||||
|
this->placeholder_parser().set("current_nozzle_id",
|
||||||
|
first_nozzle_id_for_gcode_placeholder(group_result, (int) initial_extruder_id, extruder_id));
|
||||||
// Initial filament/nozzle vocabulary
|
// Initial filament/nozzle vocabulary
|
||||||
this->placeholder_parser().set("initial_filament_id", (int) initial_extruder_id);
|
this->placeholder_parser().set("initial_filament_id", (int) initial_extruder_id);
|
||||||
this->placeholder_parser().set("initial_no_support_filament_id", (int) initial_non_support_extruder_id);
|
this->placeholder_parser().set("initial_no_support_filament_id", (int) initial_non_support_extruder_id);
|
||||||
@@ -5401,10 +5411,6 @@ LayerResult GCode::process_layer(
|
|||||||
config.set_key_value("most_used_physical_extruder_id", new ConfigOptionInt(m_config.physical_extruder_map.get_at(most_used_extruder)));
|
config.set_key_value("most_used_physical_extruder_id", new ConfigOptionInt(m_config.physical_extruder_map.get_at(most_used_extruder)));
|
||||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||||
// Orca: expose the current filament/nozzle ids (matching the toolchange contexts) so a
|
|
||||||
// layer_change_gcode may index per-filament / per-nozzle arrays — e.g. X2D's
|
|
||||||
// close_additional_fan_first_x_layers[current_filament_id] and
|
|
||||||
// nozzle_diameter_at_nozzle_id[current_nozzle_id]. Inert if unreferenced.
|
|
||||||
{
|
{
|
||||||
const int cur_filament_id = (int) m_writer.filament()->id();
|
const int cur_filament_id = (int) m_writer.filament()->id();
|
||||||
const auto group_result = m_print->get_layered_nozzle_group_result();
|
const auto group_result = m_print->get_layered_nozzle_group_result();
|
||||||
@@ -8639,6 +8645,11 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo
|
|||||||
// if we are running a single-extruder setup, just set the extruder and return nothing
|
// if we are running a single-extruder setup, just set the extruder and return nothing
|
||||||
if (!m_writer.multiple_extruders) {
|
if (!m_writer.multiple_extruders) {
|
||||||
this->placeholder_parser().set("current_extruder", new_filament_id);
|
this->placeholder_parser().set("current_extruder", new_filament_id);
|
||||||
|
// Orca: keep the global current-tool identity coherent even on the single-extruder path (see append_tcr).
|
||||||
|
this->placeholder_parser().set("current_filament_id", (int) new_filament_id);
|
||||||
|
this->placeholder_parser().set("current_extruder_id", new_extruder_id);
|
||||||
|
this->placeholder_parser().set("current_nozzle_id",
|
||||||
|
nozzle_id_for_gcode_placeholder(m_print->get_layered_nozzle_group_result(), (int) new_filament_id, new_extruder_id, m_layer_index));
|
||||||
{
|
{
|
||||||
size_t fi = get_filament_config_index(new_filament_id);
|
size_t fi = get_filament_config_index(new_filament_id);
|
||||||
this->placeholder_parser().set("retraction_distance_when_ec", m_config.retraction_distances_when_ec.get_at(fi));
|
this->placeholder_parser().set("retraction_distance_when_ec", m_config.retraction_distances_when_ec.get_at(fi));
|
||||||
@@ -8986,6 +8997,10 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo
|
|||||||
this->placeholder_parser().set("current_extruder", new_filament_id);
|
this->placeholder_parser().set("current_extruder", new_filament_id);
|
||||||
this->placeholder_parser().set("current_hotend",
|
this->placeholder_parser().set("current_hotend",
|
||||||
hotend_id_for_gcode_placeholder(m_config, group_result, (int) new_filament_id, new_extruder_id, m_layer_index));
|
hotend_id_for_gcode_placeholder(m_config, group_result, (int) new_filament_id, new_extruder_id, m_layer_index));
|
||||||
|
// Orca: keep the global current-tool identity coherent for later contexts (see append_tcr).
|
||||||
|
this->placeholder_parser().set("current_filament_id", (int) new_filament_id);
|
||||||
|
this->placeholder_parser().set("current_extruder_id", new_extruder_id);
|
||||||
|
this->placeholder_parser().set("current_nozzle_id", next_nozzle_id);
|
||||||
{
|
{
|
||||||
size_t fi = get_filament_config_index(new_filament_id);
|
size_t fi = get_filament_config_index(new_filament_id);
|
||||||
this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(fi));
|
this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(fi));
|
||||||
|
|||||||
Reference in New Issue
Block a user