mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-12 01:07:57 -06:00
ENH: reroder the path seq for concentric fill pattern
Signed-off-by: qing.zhang <qing.zhang@bambulab.com> Change-Id: I06bb9c5666e2205364d7031815e868eccfee6fd5
This commit is contained in:
parent
6ca5df9118
commit
99eee4a2d6
4 changed files with 20 additions and 2 deletions
|
@ -5,6 +5,7 @@
|
|||
#include "Arachne/WallToolPaths.hpp"
|
||||
|
||||
#include "FillConcentric.hpp"
|
||||
#include <libslic3r/ShortestPath.hpp>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
|
@ -133,6 +134,8 @@ void FillConcentric::_fill_surface_single(const FillParams& params,
|
|||
}
|
||||
if (j < thick_polylines_out.size())
|
||||
thick_polylines_out.erase(thick_polylines_out.begin() + int(j), thick_polylines_out.end());
|
||||
|
||||
reorder_by_shortest_traverse(thick_polylines_out);
|
||||
}
|
||||
else {
|
||||
Polylines polylines;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "Arachne/WallToolPaths.hpp"
|
||||
|
||||
#include "FillConcentricInternal.hpp"
|
||||
#include <libslic3r/ShortestPath.hpp>
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
|
@ -76,6 +77,8 @@ void FillConcentricInternal::fill_surface_extrusion(const Surface* surface, cons
|
|||
}
|
||||
if (j < thick_polylines_out.size())
|
||||
thick_polylines_out.erase(thick_polylines_out.begin() + int(j), thick_polylines_out.end());
|
||||
|
||||
reorder_by_shortest_traverse(thick_polylines_out);
|
||||
}
|
||||
|
||||
ExtrusionEntityCollection *coll_nosort = new ExtrusionEntityCollection();
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include <string>
|
||||
#include <sstream>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <Eigen/Geometry>
|
||||
|
||||
#include "LocalesUtils.hpp"
|
||||
|
|
|
@ -24,6 +24,19 @@ void chain_and_reorder_extrusion_paths(std::vect
|
|||
|
||||
Polylines chain_polylines(Polylines &&src, const Point *start_near = nullptr);
|
||||
inline Polylines chain_polylines(const Polylines& src, const Point* start_near = nullptr) { Polylines tmp(src); return chain_polylines(std::move(tmp), start_near); }
|
||||
template<typename T> inline void reorder_by_shortest_traverse(std::vector<T> &polylines_out)
|
||||
{
|
||||
Points start_point;
|
||||
start_point.reserve(polylines_out.size());
|
||||
for (const T contour : polylines_out) start_point.push_back(contour.points.front());
|
||||
|
||||
std::vector<Points::size_type> order = chain_points(start_point);
|
||||
|
||||
std::vector<T> Temp = polylines_out;
|
||||
polylines_out.erase(polylines_out.begin(), polylines_out.end());
|
||||
|
||||
for (size_t i:order) polylines_out.emplace_back(std::move(Temp[i]));
|
||||
}
|
||||
|
||||
std::vector<ClipperLib::PolyNode*> chain_clipper_polynodes(const Points &points, const std::vector<ClipperLib::PolyNode*> &items);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue