50 lines
1.7 KiB
C++
50 lines
1.7 KiB
C++
//Copyright (c) 2022 Ultimaker B.V.
|
|
//CuraEngine is released under the terms of the AGPLv3 or higher.
|
|
|
|
#ifndef LIMITED_BEADING_STRATEGY_H
|
|
#define LIMITED_BEADING_STRATEGY_H
|
|
|
|
#include "BeadingStrategy.hpp"
|
|
|
|
namespace Slic3r::Arachne
|
|
{
|
|
|
|
/*!
|
|
* This is a meta-strategy that can be applied on top of any other beading
|
|
* strategy, which limits the thickness of the walls to the thickness that the
|
|
* lines can reasonably print.
|
|
*
|
|
* The width of the wall is limited to the maximum number of contours times the
|
|
* maximum width of each of these contours.
|
|
*
|
|
* If the width of the wall gets limited, this strategy outputs one additional
|
|
* bead with 0 width. This bead is used to denote the limits of the walled area.
|
|
* Other structures can then use this border to align their structures to, such
|
|
* as to create correctly overlapping infill or skin, or to align the infill
|
|
* pattern to any extra infill walls.
|
|
*/
|
|
class LimitedBeadingStrategy : public BeadingStrategy
|
|
{
|
|
public:
|
|
LimitedBeadingStrategy(coord_t max_bead_count, BeadingStrategyPtr parent);
|
|
|
|
~LimitedBeadingStrategy() override = default;
|
|
|
|
Beading compute(coord_t thickness, coord_t bead_count) const override;
|
|
coord_t getOptimalThickness(coord_t bead_count) const override;
|
|
coord_t getTransitionThickness(coord_t lower_bead_count) const override;
|
|
coord_t getOptimalBeadCount(coord_t thickness) const override;
|
|
std::string toString() const override;
|
|
|
|
coord_t getTransitioningLength(coord_t lower_bead_count) const override;
|
|
|
|
float getTransitionAnchorPos(coord_t lower_bead_count) const override;
|
|
|
|
protected:
|
|
const coord_t max_bead_count;
|
|
const BeadingStrategyPtr parent;
|
|
};
|
|
|
|
} // namespace Slic3r::Arachne
|
|
#endif // LIMITED_DISTRIBUTED_BEADING_STRATEGY_H
|