mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-14 10:17:55 -06:00
Extrusions in custom start g-code forced to be at first layer height level
This commit is contained in:
parent
82d577645e
commit
52583bbe30
4 changed files with 40 additions and 3 deletions
|
@ -857,6 +857,12 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
|
||||||
|
|
||||||
m_time_processor.export_remaining_time_enabled = config.remaining_times.value;
|
m_time_processor.export_remaining_time_enabled = config.remaining_times.value;
|
||||||
m_use_volumetric_e = config.use_volumetric_e;
|
m_use_volumetric_e = config.use_volumetric_e;
|
||||||
|
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
|
const ConfigOptionFloatOrPercent* first_layer_height = config.option<ConfigOptionFloatOrPercent>("first_layer_height");
|
||||||
|
if (first_layer_height != nullptr)
|
||||||
|
m_first_layer_height = std::abs(first_layer_height->value);
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
|
void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
|
||||||
|
@ -1035,6 +1041,12 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
|
||||||
const ConfigOptionBool* use_volumetric_e = config.option<ConfigOptionBool>("use_volumetric_e");
|
const ConfigOptionBool* use_volumetric_e = config.option<ConfigOptionBool>("use_volumetric_e");
|
||||||
if (use_volumetric_e != nullptr)
|
if (use_volumetric_e != nullptr)
|
||||||
m_use_volumetric_e = use_volumetric_e->value;
|
m_use_volumetric_e = use_volumetric_e->value;
|
||||||
|
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
|
const ConfigOptionFloatOrPercent* first_layer_height = config.option<ConfigOptionFloatOrPercent>("first_layer_height");
|
||||||
|
if (first_layer_height != nullptr)
|
||||||
|
m_first_layer_height = std::abs(first_layer_height->value);
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeProcessor::enable_stealth_time_estimator(bool enabled)
|
void GCodeProcessor::enable_stealth_time_estimator(bool enabled)
|
||||||
|
@ -1082,6 +1094,10 @@ void GCodeProcessor::reset()
|
||||||
|
|
||||||
m_filament_diameters = std::vector<float>(Min_Extruder_Count, 1.75f);
|
m_filament_diameters = std::vector<float>(Min_Extruder_Count, 1.75f);
|
||||||
m_extruded_last_z = 0.0f;
|
m_extruded_last_z = 0.0f;
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
|
m_first_layer_height = 0.0f;
|
||||||
|
m_processing_start_custom_gcode = false;
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
m_g1_line_id = 0;
|
m_g1_line_id = 0;
|
||||||
m_layer_id = 0;
|
m_layer_id = 0;
|
||||||
m_cp_color.reset();
|
m_cp_color.reset();
|
||||||
|
@ -1443,6 +1459,9 @@ void GCodeProcessor::process_tags(const std::string_view comment)
|
||||||
// extrusion role tag
|
// extrusion role tag
|
||||||
if (boost::starts_with(comment, reserved_tag(ETags::Role))) {
|
if (boost::starts_with(comment, reserved_tag(ETags::Role))) {
|
||||||
m_extrusion_role = ExtrusionEntity::string_to_role(comment.substr(reserved_tag(ETags::Role).length()));
|
m_extrusion_role = ExtrusionEntity::string_to_role(comment.substr(reserved_tag(ETags::Role).length()));
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
|
m_processing_start_custom_gcode = (m_extrusion_role == erCustom && m_g1_line_id == 0);
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2187,7 +2206,11 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
||||||
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
if (type == EMoveType::Extrude && (m_width == 0.0f || m_height == 0.0f))
|
if (type == EMoveType::Extrude && (m_width == 0.0f || m_height == 0.0f))
|
||||||
|
#else
|
||||||
|
if (type == EMoveType::Extrude && (m_extrusion_role == erCustom || m_width == 0.0f || m_height == 0.0f))
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
type = EMoveType::Travel;
|
type = EMoveType::Travel;
|
||||||
|
|
||||||
// time estimate section
|
// time estimate section
|
||||||
|
@ -2303,13 +2326,13 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
||||||
// Calculate the jerk depending on whether the axis is coasting in the same direction or reversing a direction.
|
// Calculate the jerk depending on whether the axis is coasting in the same direction or reversing a direction.
|
||||||
float jerk =
|
float jerk =
|
||||||
(v_exit > v_entry) ?
|
(v_exit > v_entry) ?
|
||||||
(((v_entry > 0.0f) || (v_exit < 0.0f)) ?
|
((v_entry > 0.0f || v_exit < 0.0f) ?
|
||||||
// coasting
|
// coasting
|
||||||
(v_exit - v_entry) :
|
(v_exit - v_entry) :
|
||||||
// axis reversal
|
// axis reversal
|
||||||
std::max(v_exit, -v_entry)) :
|
std::max(v_exit, -v_entry)) :
|
||||||
// v_exit <= v_entry
|
// v_exit <= v_entry
|
||||||
(((v_entry < 0.0f) || (v_exit > 0.0f)) ?
|
((v_entry < 0.0f || v_exit > 0.0f) ?
|
||||||
// coasting
|
// coasting
|
||||||
(v_entry - v_exit) :
|
(v_entry - v_exit) :
|
||||||
// axis reversal
|
// axis reversal
|
||||||
|
@ -2330,7 +2353,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
||||||
float vmax_junction_threshold = vmax_junction * 0.99f;
|
float vmax_junction_threshold = vmax_junction * 0.99f;
|
||||||
|
|
||||||
// Not coasting. The machine will stop and start the movements anyway, better to start the segment from start.
|
// Not coasting. The machine will stop and start the movements anyway, better to start the segment from start.
|
||||||
if ((prev.safe_feedrate > vmax_junction_threshold) && (curr.safe_feedrate > vmax_junction_threshold))
|
if (prev.safe_feedrate > vmax_junction_threshold && curr.safe_feedrate > vmax_junction_threshold)
|
||||||
vmax_junction = curr.safe_feedrate;
|
vmax_junction = curr.safe_feedrate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2815,7 +2838,11 @@ void GCodeProcessor::store_move_vertex(EMoveType type)
|
||||||
m_extrusion_role,
|
m_extrusion_role,
|
||||||
m_extruder_id,
|
m_extruder_id,
|
||||||
m_cp_color.current,
|
m_cp_color.current,
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
|
Vec3f(m_end_position[X], m_end_position[Y], m_processing_start_custom_gcode ? m_first_layer_height : m_end_position[Z]) + m_extruder_offsets[m_extruder_id],
|
||||||
|
#else
|
||||||
Vec3f(m_end_position[X], m_end_position[Y], m_end_position[Z]) + m_extruder_offsets[m_extruder_id],
|
Vec3f(m_end_position[X], m_end_position[Y], m_end_position[Z]) + m_extruder_offsets[m_extruder_id],
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
m_end_position[E] - m_start_position[E],
|
m_end_position[E] - m_start_position[E],
|
||||||
m_feedrate,
|
m_feedrate,
|
||||||
m_width,
|
m_width,
|
||||||
|
|
|
@ -490,6 +490,10 @@ namespace Slic3r {
|
||||||
ExtruderTemps m_extruder_temps;
|
ExtruderTemps m_extruder_temps;
|
||||||
std::vector<float> m_filament_diameters;
|
std::vector<float> m_filament_diameters;
|
||||||
float m_extruded_last_z;
|
float m_extruded_last_z;
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
|
float m_first_layer_height; // mm
|
||||||
|
bool m_processing_start_custom_gcode;
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
unsigned int m_g1_line_id;
|
unsigned int m_g1_line_id;
|
||||||
unsigned int m_layer_id;
|
unsigned int m_layer_id;
|
||||||
CpColor m_cp_color;
|
CpColor m_cp_color;
|
||||||
|
|
|
@ -59,6 +59,8 @@
|
||||||
#define ENABLE_EXTENDED_M73_LINES (1 && ENABLE_VALIDATE_CUSTOM_GCODE)
|
#define ENABLE_EXTENDED_M73_LINES (1 && ENABLE_VALIDATE_CUSTOM_GCODE)
|
||||||
// Enable a modified version of automatic downscale on load of objects too big
|
// Enable a modified version of automatic downscale on load of objects too big
|
||||||
#define ENABLE_MODIFIED_DOWNSCALE_ON_LOAD_OBJECTS_TOO_BIG (1 && ENABLE_2_4_0_ALPHA0)
|
#define ENABLE_MODIFIED_DOWNSCALE_ON_LOAD_OBJECTS_TOO_BIG (1 && ENABLE_2_4_0_ALPHA0)
|
||||||
|
// Enable visualization of start gcode as regular toolpaths
|
||||||
|
#define ENABLE_START_GCODE_VISUALIZATION (1 && ENABLE_2_4_0_ALPHA0)
|
||||||
|
|
||||||
|
|
||||||
#endif // _prusaslicer_technologies_h_
|
#endif // _prusaslicer_technologies_h_
|
||||||
|
|
|
@ -1714,7 +1714,11 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
|
||||||
// for the gcode viewer we need to take in account all moves to correctly size the printbed
|
// for the gcode viewer we need to take in account all moves to correctly size the printbed
|
||||||
m_paths_bounding_box.merge(move.position.cast<double>());
|
m_paths_bounding_box.merge(move.position.cast<double>());
|
||||||
else {
|
else {
|
||||||
|
#if ENABLE_START_GCODE_VISUALIZATION
|
||||||
if (move.type == EMoveType::Extrude && move.extrusion_role != erCustom && move.width != 0.0f && move.height != 0.0f)
|
if (move.type == EMoveType::Extrude && move.extrusion_role != erCustom && move.width != 0.0f && move.height != 0.0f)
|
||||||
|
#else
|
||||||
|
if (move.type == EMoveType::Extrude && move.width != 0.0f && move.height != 0.0f)
|
||||||
|
#endif // ENABLE_START_GCODE_VISUALIZATION
|
||||||
m_paths_bounding_box.merge(move.position.cast<double>());
|
m_paths_bounding_box.merge(move.position.cast<double>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue