mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-08-04 00:32:08 +00:00
82 lines
3.4 KiB
C++
82 lines
3.4 KiB
C++
#ifndef slic3r_MultiMaterialSegmentation_hpp_
|
|
#define slic3r_MultiMaterialSegmentation_hpp_
|
|
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
namespace Slic3r {
|
|
|
|
class ExPolygon;
|
|
class ModelVolume;
|
|
class PrintObject;
|
|
class PrintConfig;
|
|
class PrintObjectConfig;
|
|
class PrintRegionConfig;
|
|
class FacetsAnnotation;
|
|
|
|
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>;
|
|
|
|
enum class IncludeTopAndBottomLayers {
|
|
Yes,
|
|
No
|
|
};
|
|
|
|
struct ModelVolumeFacetsInfo {
|
|
const FacetsAnnotation &facets_annotation;
|
|
// Indicate if model volume is painted.
|
|
const bool is_painted;
|
|
// Indicate if the default extruder (TriangleStateType::NONE) should be replaced with the volume extruder.
|
|
const bool replace_default_extruder;
|
|
};
|
|
|
|
// Returns segmentation based on painting in segmentation gizmos.
|
|
std::vector<std::vector<ExPolygons>> segmentation_by_painting(const PrintObject &print_object,
|
|
const std::function<ModelVolumeFacetsInfo(const ModelVolume &)> &extract_facets_info,
|
|
size_t num_facets_states,
|
|
float segmentation_max_width,
|
|
float segmentation_interlocking_depth,
|
|
bool segmentation_interlocking_beam,
|
|
IncludeTopAndBottomLayers include_top_and_bottom_layers,
|
|
const std::function<void()> &throw_on_cancel_callback);
|
|
|
|
// Returns multi-material segmentation based on painting in multi-material segmentation gizmo
|
|
std::vector<std::vector<ExPolygons>> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback);
|
|
|
|
// Returns fuzzy skin segmentation based on painting in fuzzy skin segmentation gizmo
|
|
std::vector<std::vector<ExPolygons>> fuzzy_skin_segmentation_by_painting(const PrintObject &print_object, const std::function<void()> &throw_on_cancel_callback);
|
|
|
|
// Effective outer-wall line width for a region, resolved against its own nozzle with PrintRegion::flow's fallback.
|
|
double resolve_outer_wall_line_width(const PrintRegionConfig ®ion_config, const PrintObjectConfig &object_config, const PrintConfig &print_config);
|
|
|
|
} // 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_
|