///|/ 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 #include #include #include #include "libslic3r/ExPolygon.hpp" #include "libslic3r/Line.hpp" #include "libslic3r/Point.hpp" #include "libslic3r/libslic3r.h" namespace Slic3r { class ExPolygon; class ModelVolume; class PrintObject; class FacetsAnnotation; using ExPolygons = std::vector; struct ColoredLine { Line line; int color; int poly_idx = -1; int local_line_idx = -1; }; using ColoredLines = std::vector; 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; }; BoundingBox get_extents(const std::vector &colored_polygons); // Returns segmentation based on painting in segmentation gizmos. std::vector> segmentation_by_painting(const PrintObject &print_object, const std::function &extract_facets_info, size_t num_facets_states, float segmentation_max_width, float segmentation_interlocking_depth, IncludeTopAndBottomLayers include_top_and_bottom_layers, const std::function &throw_on_cancel_callback); // Returns multi-material segmentation based on painting in multi-material segmentation gizmo std::vector> multi_material_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback); // Returns fuzzy skin segmentation based on painting in fuzzy skin segmentation gizmo std::vector> fuzzy_skin_segmentation_by_painting(const PrintObject &print_object, const std::function &throw_on_cancel_callback); } // namespace Slic3r namespace boost::polygon { template<> struct geometry_concept { typedef segment_concept type; }; template<> struct segment_traits { 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_