mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 03:25:53 +08:00
Unify GCodeGenerator travel to first layer position.
* Fixes SPE-2116. The reason for this bug was forgotten change in WipeTowerIntegration after change in gcode.cpp. * Prevents future similar bugs by unifing the functionality to a method.
This commit is contained in:
parent
8cbea4982a
commit
812c40e887
@ -2947,17 +2947,9 @@ void GCodeGenerator::GCodeOutputStream::write_format(const char* format, ...)
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
std::string GCodeGenerator::_extrude(
|
||||
const ExtrusionAttributes &path_attr,
|
||||
const Geometry::ArcWelder::Path &path,
|
||||
const std::string_view description,
|
||||
double speed)
|
||||
{
|
||||
std::string GCodeGenerator::travel_to_first_position(const Vec3crd& point) {
|
||||
std::string gcode;
|
||||
const std::string_view description_bridge = path_attr.role.is_bridge() ? " (bridge)"sv : ""sv;
|
||||
|
||||
if (!m_current_layer_first_position) {
|
||||
const Vec3crd point = to_3d(path.front().point, scaled(this->m_last_layer_z + this->m_config.z_offset.value));
|
||||
const Vec3d gcode_point = to_3d(this->point_to_gcode(point.head<2>()), unscaled(point.z()));
|
||||
|
||||
if (!this->last_position) {
|
||||
@ -2973,12 +2965,29 @@ std::string GCodeGenerator::_extrude(
|
||||
gcode += this->writer().get_travel_to_z_gcode(gcode_point.z() + lift, "lift");
|
||||
}
|
||||
|
||||
this->last_position = path.front().point;
|
||||
this->last_position = point.head<2>();
|
||||
this->writer().update_position(gcode_point);
|
||||
|
||||
gcode += this->writer().get_travel_to_xy_gcode(gcode_point.head<2>(), "move to first layer point");
|
||||
gcode += this->writer().get_travel_to_z_gcode(gcode_point.z(), "move to first layer point");
|
||||
std::string comment{"move to first layer point"};
|
||||
gcode += this->writer().get_travel_to_xy_gcode(gcode_point.head<2>(), comment);
|
||||
gcode += this->writer().get_travel_to_z_gcode(gcode_point.z(), comment);
|
||||
|
||||
m_current_layer_first_position = gcode_point;
|
||||
return gcode;
|
||||
}
|
||||
|
||||
std::string GCodeGenerator::_extrude(
|
||||
const ExtrusionAttributes &path_attr,
|
||||
const Geometry::ArcWelder::Path &path,
|
||||
const std::string_view description,
|
||||
double speed)
|
||||
{
|
||||
std::string gcode;
|
||||
const std::string_view description_bridge = path_attr.role.is_bridge() ? " (bridge)"sv : ""sv;
|
||||
|
||||
if (!m_current_layer_first_position) {
|
||||
const Vec3crd point = to_3d(path.front().point, scaled(this->m_last_layer_z + this->m_config.z_offset.value));
|
||||
gcode += this->travel_to_first_position(point);
|
||||
} else {
|
||||
// go to first point of extrusion path
|
||||
if (!this->last_position) {
|
||||
|
@ -351,6 +351,9 @@ private:
|
||||
ExtrusionRole role,
|
||||
const std::string &comment
|
||||
);
|
||||
|
||||
std::string travel_to_first_position(const Vec3crd& point);
|
||||
|
||||
bool needs_retraction(const Polyline &travel, ExtrusionRole role = ExtrusionRole::None);
|
||||
|
||||
std::string retract_and_wipe(bool toolchange = false);
|
||||
|
@ -72,14 +72,7 @@ std::string WipeTowerIntegration::append_tcr(GCodeGenerator &gcodegen, const Wip
|
||||
}
|
||||
} else {
|
||||
const Vec3crd point = to_3d(xy_point, scaled(z));
|
||||
const Vec3d gcode_point = gcodegen.point_to_gcode(point);
|
||||
gcodegen.last_position = point.head<2>();
|
||||
gcodegen.writer().update_position(gcode_point);
|
||||
gcode += gcodegen.writer()
|
||||
.get_travel_to_xy_gcode(gcode_point.head<2>(), comment);
|
||||
gcode += gcodegen.writer()
|
||||
.get_travel_to_z_gcode(gcode_point.z(), comment);
|
||||
gcodegen.m_current_layer_first_position = gcode_point;
|
||||
gcode += gcodegen.travel_to_first_position(point);
|
||||
}
|
||||
gcode += gcodegen.unretract();
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user