mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-06 15:21:09 +00:00
* Remove Unused Project Includes and Forward-Declare Where a Type Is Only Referenced Generated with include-what-you-use and applied conservatively. Only OrcaSlicer's own headers, the ones under src/ and tests/, are removed or forward-declared; standard-library and third-party includes are left alone. An include is removed only when both the Release and the Debug configuration leave it unused, never from inside a conditional block, and never from a file with platform-specific blocks, which only gain includes. Files whose only use of a header sits behind a feature or debug macro (libvgcode's OpenGL ES and marker code, the ARACHNE/TESTS_EXPORT_SVGS debug output) keep their includes. clonable_ptr.hpp gains #pragma once; it had no include guard and was only safe while Config.hpp was its sole includer. * Remove Unused Project Includes From Files With Platform-Specific Code A Linux include-what-you-use run cannot see the code inside _WIN32, __APPLE__ or __linux__ blocks, so its verdict is only taken where nothing the removed header declares, directly or through what it includes, is named inside those blocks. Removals also have to hold in both the Release and Debug configuration and never touch a line inside a conditional block. * Restore the libslic3r Precompiled Header and Direct Includes Lost in the Platform Pass The platform-file pass treated pchheader.hpp as an ordinary header and emptied it, and left GUI_Preview.hpp and 14 other files relying on headers they no longer reached directly. * Restore MainFrame.hpp in ParamsDialog.cpp for the Windows-Only Reparent Call * Include Headers That Files Reached Through Ones the Cleanup Removed * Drop Includes Duplicated by the Cleanup or by Main's Own Additions * Leave PreciseSeam.cpp as Main Has It After the Precise Seam Rework
71 lines
3.0 KiB
C++
71 lines
3.0 KiB
C++
#ifndef slic3r_CoolingBuffer_hpp_
|
|
#define slic3r_CoolingBuffer_hpp_
|
|
|
|
#include "../Point.hpp"
|
|
#include <cstddef>
|
|
#include <map>
|
|
#include <string>
|
|
#include <cfloat>
|
|
#include <vector>
|
|
|
|
namespace Slic3r {
|
|
|
|
class GCode;
|
|
class Layer;
|
|
class PrintConfig;
|
|
struct PerExtruderAdjustments;
|
|
|
|
// A standalone G-code filter, to control cooling of the print.
|
|
// The G-code is processed per layer. Once a layer is collected, fan start / stop commands are edited
|
|
// and the print is modified to stretch over a minimum layer time.
|
|
//
|
|
// The simple it sounds, the actual implementation is significantly more complex.
|
|
// Namely, for a multi-extruder print, each material may require a different cooling logic.
|
|
// For example, some materials may not like to print too slowly, while with some materials
|
|
// we may slow down significantly.
|
|
//
|
|
class CoolingBuffer {
|
|
public:
|
|
CoolingBuffer(GCode &gcodegen);
|
|
void reset(const Vec3d &position);
|
|
void set_current_extruder(unsigned int extruder_id, unsigned int nozzle_id) { m_current_extruder = extruder_id; m_current_nozzle = nozzle_id; }
|
|
std::string process_layer(std::string &&gcode, size_t layer_id, bool flush);
|
|
|
|
private:
|
|
CoolingBuffer& operator=(const CoolingBuffer&) = delete;
|
|
std::vector<PerExtruderAdjustments> parse_layer_gcode(const std::string &gcode, std::vector<float> ¤t_pos) const;
|
|
float calculate_layer_slowdown(std::vector<PerExtruderAdjustments> &per_extruder_adjustments);
|
|
// Apply slow down over G-code lines stored in per_extruder_adjustments, enable fan if needed.
|
|
// Returns the adjusted G-code.
|
|
std::string apply_layer_cooldown(const std::string &gcode, size_t layer_id, float layer_time, std::vector<PerExtruderAdjustments> &per_extruder_adjustments);
|
|
|
|
// G-code snippet cached for the support layers preceding an object layer.
|
|
std::string m_gcode;
|
|
// Internal data.
|
|
// BBS: X,Y,Z,E,F,I,J
|
|
std::vector<char> m_axis;
|
|
std::vector<float> m_current_pos;
|
|
// Current known fan speed or -1 if not known yet.
|
|
int m_fan_speed;
|
|
int m_additional_fan_speed;
|
|
// Cached from GCodeWriter.
|
|
// Printing extruder IDs, zero based.
|
|
std::vector<unsigned int> m_extruder_ids;
|
|
// Highest of m_extruder_ids plus 1.
|
|
unsigned int m_num_extruders { 0 };
|
|
const std::string m_toolchange_prefix;
|
|
// Referencs GCode::m_config, which is FullPrintConfig. While the PrintObjectConfig slice of FullPrintConfig is being modified,
|
|
// the PrintConfig slice of FullPrintConfig is constant, thus no thread synchronization is required.
|
|
const PrintConfig &m_config;
|
|
// Resolves the filament config index of the per-variant options.
|
|
const GCode &m_gcodegen;
|
|
unsigned int m_current_extruder;
|
|
unsigned int m_current_nozzle;
|
|
//BBS: current fan speed
|
|
int m_current_fan_speed;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|