* import updates from curling avoidance branch
* fix compilation issues
* Refactoring FDM support spots generator to use the new Z-graph built during slicing
* fix local issues bugs
* fix bugs, add new filter for too short extrusions
* fix bugs with nonexistent weakest area
* Use links of Z graph after fix, format the code
* remove unnecesary includes
New step - estimation of curling on both the model and the support extrusions.
Improvements in curled filament estimation algortihm
Implementation of Jump Point Search algorithm
Use of JPS algorithm to avoid curled extrusions during travel moves in Gcode export
Implementation of extra perimeters on steep overhangs/flat unsupported parts
Also contains:
Principal components computation over polygon area
New fast bridge direction estimation which minimizes amount of unanchored bridge endpoints
into a graph with links to the layer above / below.
In addition:
Members of LayerRegion were made private, public interface const only.
this->m_xxx replaced with just m_xxx
SurfacesPtr was made a vector of const pointers.
https://github.com/tcbrindle/span
Replacing a homebrew const pointer wrapper const correctness helper
with the C++20 like span library.
One day when we switch to C++20 we will just use the C++20 spans instead.
1) Reworked the merging code to use an AABB tree for better locality.
The old code sorted lexicographically, the new code splits bounding
boxes by the longest axis.
2) Refactored to a functional style with better const correctness.
3) Reduced memory allocation pressure by replacing std::set with
vectors, in place merging etc.
Implemented long unsupported segments detection, which considers also curvature
Implemented detection of curved segments at the edge of the previous layer - danger of warping/curling
Now Lightning infill will ignore this setting and treat it as off. Because Lightning infill and "Only infill where needed" do a similar thing, and their combination doesn't make much sense.
That allows computed better values in cases when the extrusion width of the first layer or for the infill differs from the extrusion width for perimeters.
Parameters min_feature_size and wall_transition_length now can be set in percentages, and then they will be calculated based on nozzle size. Old profiles with default values are forced to replace old default values with new default values in percentages.