mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-01 04:22:04 +08:00
Added const Print backpointer into GCodeGenerator
This commit is contained in:
parent
e4030321f7
commit
642535eecb
@ -545,6 +545,29 @@ namespace DoExport {
|
|||||||
}
|
}
|
||||||
} // namespace DoExport
|
} // namespace DoExport
|
||||||
|
|
||||||
|
GCodeGenerator::GCodeGenerator(const Print* print) :
|
||||||
|
m_origin(Vec2d::Zero()),
|
||||||
|
m_enable_loop_clipping(true),
|
||||||
|
m_enable_cooling_markers(false),
|
||||||
|
m_enable_extrusion_role_markers(false),
|
||||||
|
m_last_processor_extrusion_role(GCodeExtrusionRole::None),
|
||||||
|
m_layer_count(0),
|
||||||
|
m_layer_index(-1),
|
||||||
|
m_layer(nullptr),
|
||||||
|
m_object_layer_over_raft(false),
|
||||||
|
m_volumetric_speed(0),
|
||||||
|
m_last_extrusion_role(GCodeExtrusionRole::None),
|
||||||
|
m_last_width(0.0f),
|
||||||
|
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||||
|
m_last_mm3_per_mm(0.0),
|
||||||
|
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||||
|
m_brim_done(false),
|
||||||
|
m_second_layer_things_done(false),
|
||||||
|
m_silent_time_estimator_enabled(false),
|
||||||
|
m_current_instance({nullptr, -1}),
|
||||||
|
m_print(print)
|
||||||
|
{}
|
||||||
|
|
||||||
void GCodeGenerator::do_export(Print* print, const char* path, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb)
|
void GCodeGenerator::do_export(Print* print, const char* path, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb)
|
||||||
{
|
{
|
||||||
CNumericLocalesSetter locales_setter;
|
CNumericLocalesSetter locales_setter;
|
||||||
@ -896,7 +919,7 @@ void GCodeGenerator::_do_export(Print& print, GCodeOutputStream &file, Thumbnail
|
|||||||
binary_data.file_metadata.raw_data.emplace_back("Producer", std::string(SLIC3R_APP_NAME) + " " + std::string(SLIC3R_VERSION));
|
binary_data.file_metadata.raw_data.emplace_back("Producer", std::string(SLIC3R_APP_NAME) + " " + std::string(SLIC3R_VERSION));
|
||||||
|
|
||||||
// config data
|
// config data
|
||||||
encode_full_config(print, binary_data.slicer_metadata.raw_data);
|
encode_full_config(*m_print, binary_data.slicer_metadata.raw_data);
|
||||||
|
|
||||||
// printer data - this section contains duplicates from the slicer metadata
|
// printer data - this section contains duplicates from the slicer metadata
|
||||||
// that we just created. Find and copy the entries that we want to duplicate.
|
// that we just created. Find and copy the entries that we want to duplicate.
|
||||||
@ -1384,7 +1407,7 @@ void GCodeGenerator::_do_export(Print& print, GCodeOutputStream &file, Thumbnail
|
|||||||
{
|
{
|
||||||
file.write("\n; prusaslicer_config = begin\n");
|
file.write("\n; prusaslicer_config = begin\n");
|
||||||
std::string full_config;
|
std::string full_config;
|
||||||
append_full_config(print, full_config);
|
append_full_config(*m_print, full_config);
|
||||||
if (!full_config.empty())
|
if (!full_config.empty())
|
||||||
file.write(full_config);
|
file.write(full_config);
|
||||||
file.write("; prusaslicer_config = end\n");
|
file.write("; prusaslicer_config = end\n");
|
||||||
@ -1740,7 +1763,7 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc
|
|||||||
|
|
||||||
// Print the machine envelope G-code for the Marlin firmware based on the "machine_max_xxx" parameters.
|
// Print the machine envelope G-code for the Marlin firmware based on the "machine_max_xxx" parameters.
|
||||||
// Do not process this piece of G-code by the time estimator, it already knows the values through another sources.
|
// Do not process this piece of G-code by the time estimator, it already knows the values through another sources.
|
||||||
void GCodeGenerator::print_machine_envelope(GCodeOutputStream &file, Print &print)
|
void GCodeGenerator::print_machine_envelope(GCodeOutputStream &file, const Print &print)
|
||||||
{
|
{
|
||||||
const GCodeFlavor flavor = print.config().gcode_flavor.value;
|
const GCodeFlavor flavor = print.config().gcode_flavor.value;
|
||||||
if ( (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware || flavor == gcfRepRapFirmware)
|
if ( (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware || flavor == gcfRepRapFirmware)
|
||||||
@ -1801,7 +1824,7 @@ void GCodeGenerator::print_machine_envelope(GCodeOutputStream &file, Print &prin
|
|||||||
// Only do that if the start G-code does not already contain any M-code controlling an extruder temperature.
|
// Only do that if the start G-code does not already contain any M-code controlling an extruder temperature.
|
||||||
// M140 - Set Extruder Temperature
|
// M140 - Set Extruder Temperature
|
||||||
// M190 - Set Extruder Temperature and Wait
|
// M190 - Set Extruder Temperature and Wait
|
||||||
void GCodeGenerator::_print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
|
void GCodeGenerator::_print_first_layer_bed_temperature(GCodeOutputStream &file, const Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
|
||||||
{
|
{
|
||||||
bool autoemit = print.config().autoemit_temperature_commands;
|
bool autoemit = print.config().autoemit_temperature_commands;
|
||||||
// Initial bed temperature based on the first extruder.
|
// Initial bed temperature based on the first extruder.
|
||||||
@ -1823,7 +1846,7 @@ void GCodeGenerator::_print_first_layer_bed_temperature(GCodeOutputStream &file,
|
|||||||
// M104 - Set Extruder Temperature
|
// M104 - Set Extruder Temperature
|
||||||
// M109 - Set Extruder Temperature and Wait
|
// M109 - Set Extruder Temperature and Wait
|
||||||
// RepRapFirmware: G10 Sxx
|
// RepRapFirmware: G10 Sxx
|
||||||
void GCodeGenerator::_print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
|
void GCodeGenerator::_print_first_layer_extruder_temperatures(GCodeOutputStream &file, const Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
|
||||||
{
|
{
|
||||||
bool autoemit = print.config().autoemit_temperature_commands;
|
bool autoemit = print.config().autoemit_temperature_commands;
|
||||||
// Is the bed temperature set by the provided custom G-code?
|
// Is the bed temperature set by the provided custom G-code?
|
||||||
@ -2630,7 +2653,7 @@ void GCodeGenerator::apply_print_config(const PrintConfig &print_config)
|
|||||||
m_scaled_resolution = scaled<double>(print_config.gcode_resolution.value);
|
m_scaled_resolution = scaled<double>(print_config.gcode_resolution.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeGenerator::append_full_config(const Print &print, std::string &str)
|
void GCodeGenerator::append_full_config(const Print& print, std::string &str)
|
||||||
{
|
{
|
||||||
std::vector<std::pair<std::string, std::string>> config;
|
std::vector<std::pair<std::string, std::string>> config;
|
||||||
encode_full_config(print, config);
|
encode_full_config(print, config);
|
||||||
|
@ -116,28 +116,8 @@ struct PrintObjectInstance
|
|||||||
|
|
||||||
class GCodeGenerator {
|
class GCodeGenerator {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GCodeGenerator() :
|
GCodeGenerator(const Print* print = nullptr); // The default value is only used in unit tests.
|
||||||
m_origin(Vec2d::Zero()),
|
|
||||||
m_enable_loop_clipping(true),
|
|
||||||
m_enable_cooling_markers(false),
|
|
||||||
m_enable_extrusion_role_markers(false),
|
|
||||||
m_last_processor_extrusion_role(GCodeExtrusionRole::None),
|
|
||||||
m_layer_count(0),
|
|
||||||
m_layer_index(-1),
|
|
||||||
m_layer(nullptr),
|
|
||||||
m_object_layer_over_raft(false),
|
|
||||||
m_volumetric_speed(0),
|
|
||||||
m_last_extrusion_role(GCodeExtrusionRole::None),
|
|
||||||
m_last_width(0.0f),
|
|
||||||
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
|
|
||||||
m_last_mm3_per_mm(0.0),
|
|
||||||
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
|
||||||
m_brim_done(false),
|
|
||||||
m_second_layer_things_done(false),
|
|
||||||
m_silent_time_estimator_enabled(false),
|
|
||||||
m_current_instance({nullptr, -1})
|
|
||||||
{}
|
|
||||||
~GCodeGenerator() = default;
|
~GCodeGenerator() = default;
|
||||||
|
|
||||||
// throws std::runtime_exception on error,
|
// throws std::runtime_exception on error,
|
||||||
@ -468,11 +448,14 @@ private:
|
|||||||
// Processor
|
// Processor
|
||||||
GCodeProcessor m_processor;
|
GCodeProcessor m_processor;
|
||||||
|
|
||||||
|
// Back-pointer to Print (const).
|
||||||
|
const Print* m_print;
|
||||||
|
|
||||||
std::string _extrude(
|
std::string _extrude(
|
||||||
const ExtrusionAttributes &attribs, const Geometry::ArcWelder::Path &path, const std::string_view description, double speed = -1);
|
const ExtrusionAttributes &attribs, const Geometry::ArcWelder::Path &path, const std::string_view description, double speed = -1);
|
||||||
void print_machine_envelope(GCodeOutputStream &file, Print &print);
|
void print_machine_envelope(GCodeOutputStream &file, const Print &print);
|
||||||
void _print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait);
|
void _print_first_layer_bed_temperature(GCodeOutputStream &file, const Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait);
|
||||||
void _print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait);
|
void _print_first_layer_extruder_temperatures(GCodeOutputStream &file, const Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait);
|
||||||
// On the first printing layer. This flag triggers first layer speeds.
|
// On the first printing layer. This flag triggers first layer speeds.
|
||||||
bool on_first_layer() const { return m_layer != nullptr && m_layer->id() == 0; }
|
bool on_first_layer() const { return m_layer != nullptr && m_layer->id() == 0; }
|
||||||
// To control print speed of 1st object layer over raft interface.
|
// To control print speed of 1st object layer over raft interface.
|
||||||
|
@ -1055,7 +1055,7 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor
|
|||||||
this->set_status(90, message);
|
this->set_status(90, message);
|
||||||
|
|
||||||
// Create GCode on heap, it has quite a lot of data.
|
// Create GCode on heap, it has quite a lot of data.
|
||||||
std::unique_ptr<GCodeGenerator> gcode(new GCodeGenerator);
|
std::unique_ptr<GCodeGenerator> gcode(new GCodeGenerator(const_cast<const Print*>(this)));
|
||||||
gcode->do_export(this, path.c_str(), result, thumbnail_cb);
|
gcode->do_export(this, path.c_str(), result, thumbnail_cb);
|
||||||
|
|
||||||
if (m_conflict_result.has_value())
|
if (m_conflict_result.has_value())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user