OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
MultiMaterialSegmentation.cpp File Reference
#include "MultiMaterialSegmentation.hpp"
#include "BoundingBox.hpp"
#include "ClipperUtils.hpp"
#include "Config.hpp"
#include "EdgeGrid.hpp"
#include "Geometry/VoronoiOffset.hpp"
#include "Geometry/Voronoi.hpp"
#include "Flow.hpp"
#include "ExPolygon.hpp"
#include "Layer.hpp"
#include "Point.hpp"
#include "Polygon.hpp"
#include "Line.hpp"
#include "Model.hpp"
#include "Print.hpp"
#include "Geometry/VoronoiVisualUtils.hpp"
#include "Geometry/VoronoiUtils.hpp"
#include "MutablePolygon.hpp"
#include "Utils.hpp"
#include "PrintConfig.hpp"
#include "TriangleMeshSlicer.hpp"
#include "Surface.hpp"
#include "libslic3r.h"
#include <numeric>
#include <cmath>
#include <cstddef>
#include <list>
#include <cstdint>
#include <cassert>
#include <algorithm>
#include <cstdlib>
#include <boost/container_hash/hash.hpp>
#include <math.h>
#include <functional>
#include <array>
#include <limits>
#include <utility>
#include <unordered_set>
#include <boost/log/trivial.hpp>
#include <tbb/parallel_for.h>
#include <mutex>
#include <boost/thread/lock_guard.hpp>
#include <vector>
#include <queue>
#include "SurfaceCollection.hpp"
Include dependency graph for MultiMaterialSegmentation.cpp:

Go to the source code of this file.

Classes

struct  Slic3r::MMU_Graph
struct  Slic3r::MMU_Graph::Arc
struct  Slic3r::MMU_Graph::Node
struct  Slic3r::PaintedLine
struct  Slic3r::PaintedLineVisitor
class  Slic3r::anonymous_namespace{MultiMaterialSegmentation.cpp}::IslandLocator

Namespaces

namespace  Slic3r
 |/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966 |/ |/ PrusaSlicer is released under the terms of the AGPLv3 or higher |/
namespace  Slic3r::anonymous_namespace{MultiMaterialSegmentation.cpp}

Typedefs

using Slic3r::VD = Geometry::VoronoiDiagram

Enumerations

enum  Slic3r::VD_ANNOTATION : Voronoi::VD::cell_type::color_type { Slic3r::VERTEX_ON_CONTOUR = 1 , Slic3r::DELETED = 2 }

Functions

static Point Slic3r::mk_point (const Voronoi::VD::vertex_type *point)
static Point Slic3r::mk_point (const Voronoi::Internal::point_type &point)
static Point Slic3r::mk_point (const voronoi_diagram< double >::vertex_type &point)
static Point Slic3r::mk_point (const Vec2d &point)
static Vec2d Slic3r::mk_vec2 (const voronoi_diagram< double >::vertex_type *point)
static bool Slic3r::vertex_equal_to_point (const Voronoi::VD::vertex_type &vertex, const Vec2d &ipt)
static bool Slic3r::vertex_equal_to_point (const Voronoi::VD::vertex_type *vertex, const Vec2d &ipt)
static Polygon Slic3r::colored_points_to_polygon (const std::vector< ColoredLine > &lines)
static Polygons Slic3r::colored_points_to_polygon (const std::vector< std::vector< ColoredLine > > &lines)
static std::vector< std::vector< const MMU_Graph::Arc * > > Slic3r::get_all_next_arcs (const MMU_Graph &graph, std::vector< bool > &used_arcs, const Linef &process_line, const MMU_Graph::Arc &original_arc, const int color)
static std::vector< const MMU_Graph::Arc * > Slic3r::get_next_arc (const MMU_Graph &graph, std::vector< bool > &used_arcs, const Linef &process_line, const MMU_Graph::Arc &original_arc, const int color)
static bool Slic3r::is_profile_self_interaction (Polygon poly)
static Polygon Slic3r::to_polygon (const std::vector< std::pair< size_t, Linef > > &id_to_lines)
static std::vector< ExPolygons > Slic3r::extract_colored_segments (const MMU_Graph &graph, const size_t num_facets_states)
bool Slic3r::is_equal (float left, float right, float eps=1e-3)
bool Slic3r::is_less (float left, float right, float eps=1e-3)
static bool Slic3r::project_line_on_line (const Line &projection_l, const Line &projected_l, Line *new_projected)
BoundingBox Slic3r::get_extents (const std::vector< ColoredLines > &colored_polygons)
static ColoredLines Slic3r::to_lines (const std::vector< ColoredLines > &c_lines)
static std::vector< std::pair< size_t, size_t > > Slic3r::get_segments (const ColoredLines &polygon)
static std::vector< PaintedLine > Slic3r::filter_painted_lines (const Line &line_to_process, const size_t start_idx, const size_t end_idx, const std::vector< PaintedLine > &painted_lines)
static std::vector< std::vector< PaintedLine > > Slic3r::post_process_painted_lines (const std::vector< EdgeGrid::Contour > &contours, std::vector< PaintedLine > &&painted_lines)
static bool Slic3r::are_lines_connected (const ColoredLines &colored_lines)
static ColoredLines Slic3r::colorize_line (const Line &line_to_process, const size_t start_idx, const size_t end_idx, const std::vector< PaintedLine > &painted_contour)
static ColoredLines Slic3r::filter_colorized_polygon (ColoredLines &&new_lines)
static ColoredLines Slic3r::colorize_contour (const EdgeGrid::Contour &contour, const std::vector< PaintedLine > &painted_contour)
static std::vector< ColoredLines > Slic3r::colorize_contours (const std::vector< EdgeGrid::Contour > &contours, const std::vector< std::vector< PaintedLine > > &painted_contours)
static bool Slic3r::points_inside (const Line &contour_first, const Line &contour_second, const Point &new_point)
static size_t Slic3r::non_deleted_edge_count (const VD::vertex_type &vertex)
static bool Slic3r::can_vertex_be_deleted (const VD::vertex_type &vertex)
static void Slic3r::delete_vertex_deep (const VD::vertex_type &vertex)
static Vec2d Slic3r::mk_point_vec2d (const VD::vertex_type *point)
static Vec2d Slic3r::mk_vector_vec2d (const VD::edge_type *edge)
static Vec2d Slic3r::mk_flipped_vector_vec2d (const VD::edge_type *edge)
static double Slic3r::edge_length (const VD::edge_type &edge)
static double Slic3r::calc_total_edge_length (const VD::edge_type &starting_edge)
static void Slic3r::remove_multiple_edges_in_vertex (const VD::vertex_type &vertex)
static void Slic3r::cut_segmented_layers (const std::vector< ExPolygons > &input_expolygons, std::vector< std::vector< ExPolygons > > &segmented_regions, const float cut_width, const float interlocking_depth, const std::function< void()> &throw_on_cancel_callback)
static bool Slic3r::is_volume_sinking (const indexed_triangle_set &its, const Transform3d &trafo)
double Slic3r::resolve_outer_wall_line_width (const PrintRegionConfig &region_config, const PrintObjectConfig &object_config, const PrintConfig &print_config)
static int Slic3r::color_penetration_layers (const ConfigOptionInt &penetration_layers, const ConfigOptionInt &shell_layers)
static std::vector< std::vector< ExPolygons > > Slic3r::segmentation_top_and_bottom_layers (const PrintObject &print_object, const std::vector< ExPolygons > &input_expolygons, const std::function< ModelVolumeFacetsInfo(const ModelVolume &)> &extract_facets_info, const size_t num_facets_states, const std::function< void()> &throw_on_cancel_callback)
static void Slic3r::init_polygon_indices (const MMU_Graph &graph, const std::vector< std::vector< ColoredLine > > &color_poly, std::vector< ColoredLine > &lines_colored_out)
static bool Slic3r::line_intersection_with_epsilon (const Line &line_to_extend, const Line &other, Point *intersection)
static void Slic3r::mark_processed (const voronoi_diagram< double >::const_edge_iterator &edge_iterator)
static bool Slic3r::is_point_closer_to_beginning_of_line (const Line &line, const Point &p)
static Line Slic3r::clip_finite_voronoi_edge (const Voronoi::VD::edge_type &edge, const BoundingBoxf &bbox)
static bool Slic3r::has_same_color (const ColoredLine &cl1, const ColoredLine &cl2)
static MMU_Graph Slic3r::build_graph (size_t layer_idx, const std::vector< std::vector< ColoredLine > > &color_poly)
static std::vector< std::vector< std::pair< size_t, size_t > > > Slic3r::get_all_segments (const std::vector< std::vector< ColoredLine > > &color_poly)
static double Slic3r::compute_edge_length (const MMU_Graph &graph, const size_t start_idx, const size_t &start_arc_idx)
static void Slic3r::remove_multiple_edges_in_vertices (MMU_Graph &graph, const std::vector< std::vector< ColoredLine > > &color_poly)
static std::vector< std::vector< ExPolygons > > Slic3r::merge_segmented_layers (const std::vector< ExPolygons > &input_expolygons, const std::vector< std::vector< ExPolygons > > &segmented_regions, std::vector< std::vector< ExPolygons > > &&top_and_bottom_layers, const size_t num_facets_states, const std::function< void()> &throw_on_cancel_callback)
static bool Slic3r::has_layer_only_one_color (const std::vector< ColoredLines > &colored_polygons)
std::vector< std::vector< ExPolygons > > Slic3r::segmentation_by_painting (const PrintObject &print_object, const std::function< ModelVolumeFacetsInfo(const ModelVolume &)> &extract_facets_info, const size_t num_facets_states, const float segmentation_max_width, const float segmentation_interlocking_depth, const bool segmentation_interlocking_beam, const IncludeTopAndBottomLayers include_top_and_bottom_layers, const std::function< void()> &throw_on_cancel_callback)
std::vector< std::vector< ExPolygons > > Slic3r::multi_material_segmentation_by_painting (const PrintObject &print_object, const std::function< void()> &throw_on_cancel_callback)
std::vector< std::vector< ExPolygons > > Slic3r::fuzzy_skin_segmentation_by_painting (const PrintObject &print_object, const std::function< void()> &throw_on_cancel_callback)

Class Documentation

◆ Slic3r::PaintedLine

struct Slic3r::PaintedLine
Collaboration diagram for Slic3r::PaintedLine:
Class Members
int color
size_t contour_idx
size_t line_idx
Line projected_line