PrusaSlicer/src/libslic3r/MultiMaterialSegmentation.hpp
Lukáš Hejl 4f7c8ae83d SPE-2202: Reimplementation of the projection algorithm of painted mesh on slices inside multi-material segmentation.
This new implementation should resolve several types of artifacts with multi-material segmentation.
It should also increase the precision of projection, so sliced models should be much closer to how they were painted.

Also, the slicing of painted models should be faster than before.
2024-11-08 10:13:34 +01:00

61 lines
1.6 KiB
C++

///|/ Copyright (c) Prusa Research 2021 Lukáš Hejl @hejllukas, Vojtěch Bubník @bubnikv
///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#ifndef slic3r_MultiMaterialSegmentation_hpp_
#define slic3r_MultiMaterialSegmentation_hpp_
#include <boost/polygon/polygon.hpp>
#include <utility>
#include <vector>
#include <functional>
#include "libslic3r/ExPolygon.hpp"
#include "libslic3r/Line.hpp"
#include "libslic3r/Point.hpp"
#include "libslic3r/libslic3r.h"
namespace Slic3r {
class PrintObject;
class ExPolygon;
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>;
// 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);
BoundingBox get_extents(const std::vector<ColoredLines> &colored_polygons);
} // namespace Slic3r
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
#endif // slic3r_MultiMaterialSegmentation_hpp_