2022-07-15 15:37:19 +00:00
|
|
|
#ifndef slic3r_MultiMaterialSegmentation_hpp_
|
|
|
|
#define slic3r_MultiMaterialSegmentation_hpp_
|
|
|
|
|
|
|
|
#include <utility>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
namespace Slic3r {
|
|
|
|
|
|
|
|
class PrintObject;
|
|
|
|
class ExPolygon;
|
ENH: modify the multi-material segmentation and voronoi
This patch is cherry pick from Prusa, thanks to Prusa
Rework multi-material segmentation to work directly on the Voronoi diagram without creating a copy of it.
Previous algorithms assume that they can get an invalid Voronoi diagram. Because of that, during the multi-material segmentation, a copy of the Voronoi diagram was created, and there were several attempts to fix missing vertices and edges. But as it shows, this wasn't a good enough approach and sometimes led to several issues like bleeding layers.
After generalization, our approach for detection and repairs of invalid Voronoi diagrams from Arachne, we could assume that multi-material segmentation gets non-invalid Voronoi diagrams.
With this assumption, we reimplement multi-materials segmentation to work directly on the Voronoi diagram. That should make multi-material segmentation more stable.
So, this should fix several issues like bleeding layers. Also, memory consumption should decrease by a lot. Also, there should be some speedup of multi-materials segmentation.
Jira: none
Change-Id: I72aa6e1f9634d9ee8759aa469a0b39a36ace62f5
2024-03-27 12:48:03 +00:00
|
|
|
using ExPolygons = std::vector<ExPolygon>;
|
|
|
|
|
|
|
|
struct ColoredLine
|
|
|
|
{
|
|
|
|
Line line;
|
|
|
|
int color;
|
|
|
|
int poly_idx = -1;
|
|
|
|
int local_line_idx = -1;
|
|
|
|
};
|
|
|
|
|
|
|
|
using ColoredLines = std::vector<ColoredLine>;
|
2022-07-15 15:37:19 +00:00
|
|
|
|
|
|
|
// Returns MMU segmentation based on painting in MMU segmentation gizmo
|
|
|
|
std::vector<std::vector<ExPolygons>> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback);
|
|
|
|
|
|
|
|
} // namespace Slic3r
|
|
|
|
|
ENH: modify the multi-material segmentation and voronoi
This patch is cherry pick from Prusa, thanks to Prusa
Rework multi-material segmentation to work directly on the Voronoi diagram without creating a copy of it.
Previous algorithms assume that they can get an invalid Voronoi diagram. Because of that, during the multi-material segmentation, a copy of the Voronoi diagram was created, and there were several attempts to fix missing vertices and edges. But as it shows, this wasn't a good enough approach and sometimes led to several issues like bleeding layers.
After generalization, our approach for detection and repairs of invalid Voronoi diagrams from Arachne, we could assume that multi-material segmentation gets non-invalid Voronoi diagrams.
With this assumption, we reimplement multi-materials segmentation to work directly on the Voronoi diagram. That should make multi-material segmentation more stable.
So, this should fix several issues like bleeding layers. Also, memory consumption should decrease by a lot. Also, there should be some speedup of multi-materials segmentation.
Jira: none
Change-Id: I72aa6e1f9634d9ee8759aa469a0b39a36ace62f5
2024-03-27 12:48:03 +00:00
|
|
|
namespace boost::polygon {
|
|
|
|
template<> struct geometry_concept<Slic3r::ColoredLine>
|
|
|
|
{
|
|
|
|
typedef segment_concept type;
|
|
|
|
};
|
|
|
|
|
|
|
|
template<> struct segment_traits<Slic3r::ColoredLine>
|
|
|
|
{
|
|
|
|
typedef coord_t coordinate_type;
|
|
|
|
typedef Slic3r::Point point_type;
|
|
|
|
|
|
|
|
static inline point_type get(const Slic3r::ColoredLine &line, const direction_1d &dir)
|
|
|
|
{
|
|
|
|
return dir.to_int() ? line.line.b : line.line.a;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
} // namespace boost::polygon
|
|
|
|
|
2022-07-15 15:37:19 +00:00
|
|
|
#endif // slic3r_MultiMaterialSegmentation_hpp_
|