mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 16:57:53 -06:00
Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer
This commit is contained in:
commit
85ea0396a4
5 changed files with 16 additions and 12 deletions
|
@ -90,7 +90,7 @@ struct stl_neighbors {
|
||||||
|
|
||||||
struct stl_stats {
|
struct stl_stats {
|
||||||
stl_stats() { memset(&header, 0, 81); }
|
stl_stats() { memset(&header, 0, 81); }
|
||||||
char header[81] = "";
|
char header[81];
|
||||||
stl_type type = (stl_type)0;
|
stl_type type = (stl_type)0;
|
||||||
uint32_t number_of_facets = 0;
|
uint32_t number_of_facets = 0;
|
||||||
stl_vertex max = stl_vertex::Zero();
|
stl_vertex max = stl_vertex::Zero();
|
||||||
|
|
|
@ -100,7 +100,7 @@ add_library(libslic3r STATIC
|
||||||
Geometry.cpp
|
Geometry.cpp
|
||||||
Geometry.hpp
|
Geometry.hpp
|
||||||
Int128.hpp
|
Int128.hpp
|
||||||
KdTreeIndirect.hpp
|
KDTreeIndirect.hpp
|
||||||
Layer.cpp
|
Layer.cpp
|
||||||
Layer.hpp
|
Layer.hpp
|
||||||
LayerRegion.cpp
|
LayerRegion.cpp
|
||||||
|
|
|
@ -19,7 +19,10 @@ public:
|
||||||
static constexpr size_t NumDimensions = ANumDimensions;
|
static constexpr size_t NumDimensions = ANumDimensions;
|
||||||
using CoordinateFn = ACoordinateFn;
|
using CoordinateFn = ACoordinateFn;
|
||||||
using CoordType = ACoordType;
|
using CoordType = ACoordType;
|
||||||
static constexpr size_t npos = size_t(-1);
|
// Following could be static constexpr size_t, but that would not link in C++11
|
||||||
|
enum : size_t {
|
||||||
|
npos = size_t(-1)
|
||||||
|
};
|
||||||
|
|
||||||
KDTreeIndirect(CoordinateFn coordinate) : coordinate(coordinate) {}
|
KDTreeIndirect(CoordinateFn coordinate) : coordinate(coordinate) {}
|
||||||
KDTreeIndirect(CoordinateFn coordinate, std::vector<size_t> indices) : coordinate(coordinate) { this->build(std::move(indices)); }
|
KDTreeIndirect(CoordinateFn coordinate, std::vector<size_t> indices) : coordinate(coordinate) { this->build(std::move(indices)); }
|
||||||
|
@ -71,7 +74,7 @@ public:
|
||||||
template<typename Visitor>
|
template<typename Visitor>
|
||||||
void visit(Visitor &visitor) const
|
void visit(Visitor &visitor) const
|
||||||
{
|
{
|
||||||
return m_nodes.empty() ? npos : visit_recursive(0, 0, visitor);
|
visit_recursive(0, 0, visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
CoordinateFn coordinate;
|
CoordinateFn coordinate;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#undef assert
|
#undef assert
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "clipper.hpp"
|
||||||
#include "ShortestPath.hpp"
|
#include "ShortestPath.hpp"
|
||||||
#include "KDTreeIndirect.hpp"
|
#include "KDTreeIndirect.hpp"
|
||||||
#include "MutablePriorityQueue.hpp"
|
#include "MutablePriorityQueue.hpp"
|
||||||
|
@ -72,7 +73,7 @@ std::vector<std::pair<size_t, bool>> chain_segments_greedy_constrained_reversals
|
||||||
{
|
{
|
||||||
// Just sort the end points so that the first point visited is closest to start_near.
|
// Just sort the end points so that the first point visited is closest to start_near.
|
||||||
out.emplace_back(0, start_near != nullptr &&
|
out.emplace_back(0, start_near != nullptr &&
|
||||||
(end_point_func(0, true) - *start_near).cast<double>().squaredNorm() < (end_point_func(0, false) - *start_near).cast<double>().squaredNorm());
|
(end_point_func(0, true) - *start_near).template cast<double>().squaredNorm() < (end_point_func(0, false) - *start_near).template cast<double>().squaredNorm());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -93,8 +94,8 @@ std::vector<std::pair<size_t, bool>> chain_segments_greedy_constrained_reversals
|
||||||
std::vector<EndPoint> end_points;
|
std::vector<EndPoint> end_points;
|
||||||
end_points.reserve(num_segments * 2);
|
end_points.reserve(num_segments * 2);
|
||||||
for (size_t i = 0; i < num_segments; ++ i) {
|
for (size_t i = 0; i < num_segments; ++ i) {
|
||||||
end_points.emplace_back(end_point_func(i, true ).cast<double>());
|
end_points.emplace_back(end_point_func(i, true ).template cast<double>());
|
||||||
end_points.emplace_back(end_point_func(i, false).cast<double>());
|
end_points.emplace_back(end_point_func(i, false).template cast<double>());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct the closest point KD tree over end points of segments.
|
// Construct the closest point KD tree over end points of segments.
|
||||||
|
@ -163,7 +164,7 @@ std::vector<std::pair<size_t, bool>> chain_segments_greedy_constrained_reversals
|
||||||
EndPoint *first_point = nullptr;
|
EndPoint *first_point = nullptr;
|
||||||
size_t first_point_idx = std::numeric_limits<size_t>::max();
|
size_t first_point_idx = std::numeric_limits<size_t>::max();
|
||||||
if (start_near != nullptr) {
|
if (start_near != nullptr) {
|
||||||
size_t idx = find_closest_point(kdtree, start_near->cast<double>());
|
size_t idx = find_closest_point(kdtree, start_near->template cast<double>());
|
||||||
assert(idx < end_points.size());
|
assert(idx < end_points.size());
|
||||||
first_point = &end_points[idx];
|
first_point = &end_points[idx];
|
||||||
first_point->distance_out = 0.;
|
first_point->distance_out = 0.;
|
||||||
|
@ -405,7 +406,7 @@ std::vector<std::pair<size_t, bool>> chain_extrusion_entities(std::vector<Extrus
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reorder_extrusion_entities(std::vector<ExtrusionEntity*> &entities, std::vector<std::pair<size_t, bool>> &chain)
|
void reorder_extrusion_entities(std::vector<ExtrusionEntity*> &entities, const std::vector<std::pair<size_t, bool>> &chain)
|
||||||
{
|
{
|
||||||
assert(entities.size() == chain.size());
|
assert(entities.size() == chain.size());
|
||||||
std::vector<ExtrusionEntity*> out;
|
std::vector<ExtrusionEntity*> out;
|
||||||
|
@ -459,7 +460,7 @@ std::vector<size_t> chain_points(const Points &points, Point *start_near)
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
Polylines chain_polylines(Polylines &polylines, const Point *start_near)
|
Polylines chain_polylines(Polylines &&polylines, const Point *start_near)
|
||||||
{
|
{
|
||||||
auto segment_end_point = [&polylines](size_t idx, bool first_point) -> const Point& { return first_point ? polylines[idx].first_point() : polylines[idx].last_point(); };
|
auto segment_end_point = [&polylines](size_t idx, bool first_point) -> const Point& { return first_point ? polylines[idx].first_point() : polylines[idx].last_point(); };
|
||||||
std::vector<std::pair<size_t, bool>> ordered = chain_segments_greedy<Point, decltype(segment_end_point)>(segment_end_point, polylines.size(), start_near);
|
std::vector<std::pair<size_t, bool>> ordered = chain_segments_greedy<Point, decltype(segment_end_point)>(segment_end_point, polylines.size(), start_near);
|
||||||
|
|
|
@ -15,14 +15,14 @@ namespace Slic3r {
|
||||||
std::vector<size_t> chain_points(const Points &points, Point *start_near = nullptr);
|
std::vector<size_t> chain_points(const Points &points, Point *start_near = nullptr);
|
||||||
|
|
||||||
std::vector<std::pair<size_t, bool>> chain_extrusion_entities(std::vector<ExtrusionEntity*> &entities, const Point *start_near = nullptr);
|
std::vector<std::pair<size_t, bool>> chain_extrusion_entities(std::vector<ExtrusionEntity*> &entities, const Point *start_near = nullptr);
|
||||||
void reorder_extrusion_entities(std::vector<ExtrusionEntity*> &entities, std::vector<std::pair<size_t, bool>> &chain);
|
void reorder_extrusion_entities(std::vector<ExtrusionEntity*> &entities, const std::vector<std::pair<size_t, bool>> &chain);
|
||||||
void chain_and_reorder_extrusion_entities(std::vector<ExtrusionEntity*> &entities, const Point *start_near = nullptr);
|
void chain_and_reorder_extrusion_entities(std::vector<ExtrusionEntity*> &entities, const Point *start_near = nullptr);
|
||||||
|
|
||||||
std::vector<std::pair<size_t, bool>> chain_extrusion_paths(std::vector<ExtrusionPath> &extrusion_paths, const Point *start_near = nullptr);
|
std::vector<std::pair<size_t, bool>> chain_extrusion_paths(std::vector<ExtrusionPath> &extrusion_paths, const Point *start_near = nullptr);
|
||||||
void reorder_extrusion_paths(std::vector<ExtrusionPath> &extrusion_paths, std::vector<std::pair<size_t, bool>> &chain);
|
void reorder_extrusion_paths(std::vector<ExtrusionPath> &extrusion_paths, std::vector<std::pair<size_t, bool>> &chain);
|
||||||
void chain_and_reorder_extrusion_paths(std::vector<ExtrusionPath> &extrusion_paths, const Point *start_near = nullptr);
|
void chain_and_reorder_extrusion_paths(std::vector<ExtrusionPath> &extrusion_paths, const Point *start_near = nullptr);
|
||||||
|
|
||||||
Polylines chain_polylines(Polylines &src, const Point *start_near = nullptr);
|
Polylines chain_polylines(Polylines &&src, const Point *start_near = nullptr);
|
||||||
|
|
||||||
std::vector<ClipperLib::PolyNode*> chain_clipper_polynodes(const Points &points, const std::vector<ClipperLib::PolyNode*> &items);
|
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