G-code with relative extruder addressing. Also thrown an error, if G92 E0 is used with absolute extruder addressing.
This commit is contained in:
parent
de8ba0e850
commit
58d64bae77
@ -22,6 +22,7 @@
|
||||
#include <boost/filesystem/path.hpp>
|
||||
#include <boost/format.hpp>
|
||||
#include <boost/log/trivial.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
// Mark string for localization and translate.
|
||||
#define L(s) Slic3r::I18N::translate(s)
|
||||
@ -438,7 +439,8 @@ static inline bool sequential_print_vertical_clearance_valid(const Print &print)
|
||||
return it == print_instances_ordered.end() || (*it)->print_object->height() <= scale_(print.config().extruder_clearance_height.value);
|
||||
}
|
||||
|
||||
|
||||
// Matches "G92 E0" with various forms of writing the zero and with an optional comment.
|
||||
boost::regex regex_g92e0 { "^[ \\t]*[gG]92[ \\t]*[eE](0(\\.0*)?|\\.0+)[ \\t]*(;.*)?$" };
|
||||
|
||||
// Precondition: Print::validate() requires the Print::apply() to be called its invocation.
|
||||
std::string Print::validate(std::string* warning) const
|
||||
@ -652,6 +654,18 @@ std::string Print::validate(std::string* warning) const
|
||||
return err_msg;
|
||||
}
|
||||
}
|
||||
{
|
||||
bool before_layer_gcode_resets_extruder = boost::regex_search(m_config.before_layer_gcode.value, regex_g92e0);
|
||||
bool layer_gcode_resets_extruder = boost::regex_search(m_config.layer_gcode.value, regex_g92e0);
|
||||
if (m_config.use_relative_e_distances) {
|
||||
// See GH issues #6336 #5073
|
||||
if (! before_layer_gcode_resets_extruder && ! layer_gcode_resets_extruder)
|
||||
return "Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode.";
|
||||
} else if (before_layer_gcode_resets_extruder)
|
||||
return "\"G92 E0\" was found in before_layer_gcode, which is incompatible with absolute extruder addressing.";
|
||||
else if (layer_gcode_resets_extruder)
|
||||
return "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute extruder addressing.";
|
||||
}
|
||||
|
||||
return std::string();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user