mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-03-09 21:07:04 -06:00
* Adaptive Pressure advance options setup * Dynamic PA - PCHIP interpolator code and tests * Integrate dynamic PA with slicing code - emit new PA values per speed change * Link adaptive PA to role change instead of speed change * Adaptive PA - Alpha 2 Reduce the frequency of requested PA changes by introducing a "state" variable. Implement user toggle for adapting PA for external walls for overhangs * Hide adaptive PA for overhangs * Convert Adaptive PA to use volumetric flow model and start preparing for converting to Gcode post processor * Converted Dynamic PA to a post processing filter. Reverted changes in GCode cpp and created tagging mechanism to allow filter to apply PA changes. * Removed adaptive PA for overhangs * Foundations for two dimensional adaptive PA based on acceleration and volumetric flow speed * Minor code cleanup and updating of tooltips * Renaming files for better clarity and generate classes documentation * Update src/libslic3r/PrintConfig.cpp Co-authored-by: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> * Update src/libslic3r/PrintConfig.cpp Co-authored-by: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> * Update src/libslic3r/PrintConfig.cpp Co-authored-by: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com> * Introduce average mm3_mm over the length of a multipath for adaptive PA * Updates for multipath handling part 2 * Introduce average mm3_mm over the length of a multipath for adaptive PA * Trigger PA evaluation more frequently to catch edge cases where speed changes across islands of the same feature type. * Updates for multipath handling part 2 * Adaptive PA: Implement average flow estimation on loops * Code formatting * Fix adaptive PA not adapting for small disconnected external wall line segments. * Updated to take max print speed of upcoming feature to calculate new PA value. This is to resolve issue of incorrect PA value used when starting a new feature at an overhang. * Code clean up * Performance tuning * Further performance tuning by reducing use of regex commands in the nested loops and fix bug preventing gcode line output * Further performance tuning and tweaks to stop searching for max speed after the first travel move. * Reduce debug information * Updated debug info * Fix an issue on seams on specific models when wipe before external perimeter was enabled. Also cleanup documentation and add new to-do's * Prepare for adaptive PA for overhangs, fix wipe bug & clean up code and comments * Initial commit for adapting PA when extruding fully overhanging perimeters * Ignore wipe command when identifying current print speed * Option to evaluate adaptive PA on overhang regions in preparation for Klipper experimental option testing * Update to issue PA changes for varying flow conditions within the same feature * Fix bug where adaptive PA was enabled erroneously for role changes and ignoring user's preference. * Refactored some code * More refactoring * Some bug fixes and enabled comments only when verbose g-code is enabled * Introduced dedicated PA option for bridges * Code refactoring to optimise initialisation of PA processor (making it faster). Fix a bug where PA was not always set after a toolchange. Improve general error handling and robustness. * Updates to adaptive PA tooltips * Bridging PA check with Epsilon instead of 0. * Adaptive PA: addressing comments --------- Co-authored-by: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github.com>
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
// AdaptivePAInterpolator.hpp
|
|
// OrcaSlicer
|
|
//
|
|
// Header file for the AdaptivePAInterpolator class, responsible for interpolating pressure advance (PA) values based on flow rate and acceleration using PCHIP interpolation.
|
|
|
|
#ifndef ADAPTIVEPAINTERPOLATOR_HPP
|
|
#define ADAPTIVEPAINTERPOLATOR_HPP
|
|
|
|
#include <vector>
|
|
#include <string>
|
|
#include <map>
|
|
#include "PchipInterpolatorHelper.hpp"
|
|
|
|
/**
|
|
* @class AdaptivePAInterpolator
|
|
* @brief A class to interpolate pressure advance (PA) values based on flow rate and acceleration using Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) interpolation.
|
|
*/
|
|
class AdaptivePAInterpolator {
|
|
public:
|
|
/**
|
|
* @brief Default constructor.
|
|
*/
|
|
AdaptivePAInterpolator() : m_isInitialised(false) {}
|
|
|
|
/**
|
|
* @brief Parses the input data and sets up the interpolators.
|
|
* @param data A string containing the data in CSV format (PA, flow rate, acceleration).
|
|
* @return 0 on success, -1 on error.
|
|
*/
|
|
int parseAndSetData(const std::string& data);
|
|
|
|
/**
|
|
* @brief Interpolates the PA value for the given flow rate and acceleration.
|
|
* @param flow_rate The flow rate at which to interpolate.
|
|
* @param acceleration The acceleration at which to interpolate.
|
|
* @return The interpolated PA value, or -1 if interpolation fails.
|
|
*/
|
|
double operator()(double flow_rate, double acceleration);
|
|
|
|
/**
|
|
* @brief Returns the initialization status.
|
|
* @return The value of m_isInitialised.
|
|
*/
|
|
bool isInitialised() const {
|
|
return m_isInitialised;
|
|
}
|
|
|
|
private:
|
|
std::map<double, PchipInterpolatorHelper> flow_interpolators_; ///< Map each acceleration to a flow-rate-to-PA interpolator.
|
|
std::vector<double> accelerations_; ///< Store unique accelerations.
|
|
bool m_isInitialised;
|
|
};
|
|
|
|
#endif // ADAPTIVEPAINTERPOLATOR_HPP
|