Classes | |
| class | UnionFind |
| struct | EdgeUse |
| struct | SoupTopology |
| struct | BorderLoop |
| struct | CdtFaceInfo |
| struct | UnitResult |
Typedefs | |
| using | Kernel = CGAL::Exact_predicates_inexact_constructions_kernel |
| using | Point = Kernel::Point_3 |
| using | Vector = Kernel::Vector_3 |
| using | Mesh = CGAL::Surface_mesh<Point> |
| using | Vertex = Mesh::Vertex_index |
| using | Halfedge = Mesh::Halfedge_index |
| using | Face = Mesh::Face_index |
| using | Triangle = std::array<std::size_t, 3> |
| using | Tree = CGAL::AABB_tree<CGAL::AABB_traits_3<Kernel, CGAL::AABB_face_graph_triangle_primitive<Mesh>>> |
| using | Box = CGAL::Box_intersection_d::Box_with_info_d<double, 3, std::size_t> |
| using | CdtVb = CGAL::Triangulation_vertex_base_with_info_2<Vertex, Kernel> |
| using | CdtFb = CGAL::Constrained_triangulation_face_base_2<Kernel, CGAL::Triangulation_face_base_with_info_2<CdtFaceInfo, Kernel>> |
| using | Cdt = CGAL::Constrained_Delaunay_triangulation_2<Kernel, CGAL::Triangulation_data_structure_2<CdtVb, CdtFb>, CGAL::No_constraint_intersection_tag> |
Functions | |
| template<class Container, class Mask> | |
| void | erase_marked (Container &items, const Mask &marked) |
| template<class Fn> | |
| void | parallel_for_each (std::size_t n, Fn &&fn) |
| UnionFind | connect_vertices (std::size_t num_points, const std::vector< Triangle > &triangles) |
| bool | bbox_contains (const CGAL::Bbox_3 &outer, const CGAL::Bbox_3 &inner, double tolerance=0.) |
| std::vector< std::pair< std::size_t, std::size_t > > | overlapping_boxes (std::vector< Box > &boxes) |
| double | bbox_diagonal (const std::vector< Point > &points) |
| std::vector< EdgeUse > | sorted_edge_uses (const std::vector< Triangle > &triangles) |
| template<class Fn> | |
| void | for_each_edge (const std::vector< EdgeUse > &uses, Fn &&fn) |
| bool | same_direction (const std::vector< Triangle > &triangles, const EdgeUse &e1, const EdgeUse &e2) |
| SoupTopology | analyze_topology (std::size_t num_points, const std::vector< Triangle > &triangles) |
| void | orient_with_cgal (std::vector< Point > &points, std::vector< Triangle > &triangles) |
| void | extract_group (const std::vector< Point > &points, const std::vector< Triangle > &triangles, const std::vector< std::size_t > &group, std::vector< Point > &group_points, std::vector< Triangle > &group_triangles) |
| std::vector< Mesh > | soup_to_meshes (const std::vector< Point > &points, const std::vector< Triangle > &triangles, const std::vector< std::vector< std::size_t > > &groups, bool known_valid) |
| std::vector< Mesh > | split_shells (Mesh &mesh) |
| std::vector< Mesh > | take_closed_shells (const std::vector< Point > &points, std::vector< Triangle > &triangles) |
| void | remove_duplicate_triangles (std::size_t num_points, std::vector< Triangle > &triangles) |
| void | clean_soup (std::vector< Point > &points, std::vector< Triangle > &triangles) |
| std::size_t | weld_border_vertices (const std::vector< Point > &points, std::vector< Triangle > &triangles, const std::vector< std::size_t > &border, double tolerance) |
| bool | orient_soup (std::vector< Point > &points, std::vector< Triangle > &triangles, std::size_t &reversed_parts) |
| std::size_t | keep_input_orientation (Mesh &mesh, const std::vector< Point > &points_before, const std::vector< Triangle > &triangles_before, const std::vector< Point > &points, const std::vector< Triangle > &triangles) |
| void | close_cracks (Mesh &mesh, double tolerance) |
| void | mark_nesting (Cdt &cdt) |
| bool | fill_planar_region (Mesh &mesh, const std::vector< const BorderLoop * > &loops) |
| void | fill_with_fan (Mesh &mesh, const BorderLoop &loop) |
| std::size_t | fill_holes (Mesh &mesh, double tolerance) |
| double | signed_volume (const Mesh &mesh) |
| std::size_t | remove_local_self_intersections (Mesh &shell) |
| bool | surfaces_intersect (const Mesh &mesh, const Tree &other) |
| Point | inner_sample (const Mesh &shell) |
| void | resolve_shells (std::vector< Mesh > &shells, MeshRepairStats &stats, const std::function< void(int)> &progress) |
| std::vector< std::vector< std::size_t > > | soup_units (const std::vector< Point > &points, const std::vector< Triangle > &triangles, const SoupTopology &topology, double tolerance) |
| UnitResult | repair_unit (const std::vector< Point > &points, const std::vector< Triangle > &triangles, const std::vector< std::size_t > &faces, const SoupTopology &topology, double tolerance) |
| bool | repair_soup (std::vector< Point > &points, std::vector< Triangle > &triangles, std::vector< Mesh > &shells, MeshRepairStats &stats, const std::function< void(int)> &progress) |
| bool | repair_its (const indexed_triangle_set &its, indexed_triangle_set &result, MeshRepairStats &stats, const std::function< void(int)> &progress) |
Variables | |
| constexpr std::size_t | NONE = std::size_t(-1) |
| struct Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology |
| struct Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop |
| struct Slic3r::anonymous_namespace{MeshRepair.cpp}::UnitResult |
| Class Members | ||
|---|---|---|
| bool | closed = true | |
| size_t | filled = 0 | |
| size_t | reversed = 0 | |
| vector< Mesh > | shells | |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Box = CGAL::Box_intersection_d::Box_with_info_d<double, 3, std::size_t> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Cdt = CGAL::Constrained_Delaunay_triangulation_2<Kernel, CGAL::Triangulation_data_structure_2<CdtVb, CdtFb>, CGAL::No_constraint_intersection_tag> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::CdtFb = CGAL::Constrained_triangulation_face_base_2<Kernel, CGAL::Triangulation_face_base_with_info_2<CdtFaceInfo, Kernel>> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::CdtVb = CGAL::Triangulation_vertex_base_with_info_2<Vertex, Kernel> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Face = Mesh::Face_index |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Halfedge = Mesh::Halfedge_index |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Kernel = CGAL::Exact_predicates_inexact_constructions_kernel |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Mesh = CGAL::Surface_mesh<Point> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Point = Kernel::Point_3 |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Tree = CGAL::AABB_tree<CGAL::AABB_traits_3<Kernel, CGAL::AABB_face_graph_triangle_primitive<Mesh>>> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Triangle = std::array<std::size_t, 3> |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Vector = Kernel::Vector_3 |
| using Slic3r::anonymous_namespace{MeshRepair.cpp}::Vertex = Mesh::Vertex_index |
| SoupTopology Slic3r::anonymous_namespace{MeshRepair.cpp}::analyze_topology | ( | std::size_t | num_points, |
| const std::vector< Triangle > & | triangles ) |
References Slic3r::anonymous_namespace{MeshRepair.cpp}::EdgeUse::a, analyze_topology(), Slic3r::anonymous_namespace{MeshRepair.cpp}::EdgeUse::b, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::bad_face, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::border, Slic3r::anonymous_namespace{MeshRepair.cpp}::EdgeUse::corner, Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), for_each_edge(), NONE, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::open_face, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::open_fraction, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::pinched, same_direction(), sorted_edge_uses(), and Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::unite().
Referenced by analyze_topology(), repair_soup(), and take_closed_shells().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::bbox_contains | ( | const CGAL::Bbox_3 & | outer, |
| const CGAL::Bbox_3 & | inner, | ||
| double | tolerance = 0. ) |
References bbox_contains().
Referenced by bbox_contains(), fill_holes(), and resolve_shells().
| double Slic3r::anonymous_namespace{MeshRepair.cpp}::bbox_diagonal | ( | const std::vector< Point > & | points | ) |
References bbox_diagonal().
Referenced by bbox_diagonal(), and repair_soup().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::clean_soup | ( | std::vector< Point > & | points, |
| std::vector< Triangle > & | triangles ) |
References clean_soup(), erase_marked(), Slic3r::f(), NONE, and remove_duplicate_triangles().
Referenced by clean_soup(), and repair_soup().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::close_cracks | ( | Mesh & | mesh, |
| double | tolerance ) |
References close_cracks().
Referenced by close_cracks(), and repair_unit().
| UnionFind Slic3r::anonymous_namespace{MeshRepair.cpp}::connect_vertices | ( | std::size_t | num_points, |
| const std::vector< Triangle > & | triangles ) |
References connect_vertices(), and Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::unite().
Referenced by connect_vertices(), remove_duplicate_triangles(), soup_units(), and take_closed_shells().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::erase_marked | ( | Container & | items, |
| const Mask & | marked ) |
References erase_marked().
Referenced by clean_soup(), erase_marked(), remove_duplicate_triangles(), resolve_shells(), and take_closed_shells().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::extract_group | ( | const std::vector< Point > & | points, |
| const std::vector< Triangle > & | triangles, | ||
| const std::vector< std::size_t > & | group, | ||
| std::vector< Point > & | group_points, | ||
| std::vector< Triangle > & | group_triangles ) |
References extract_group(), and Slic3r::f().
Referenced by extract_group(), and repair_unit().
| std::size_t Slic3r::anonymous_namespace{MeshRepair.cpp}::fill_holes | ( | Mesh & | mesh, |
| double | tolerance ) |
References Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::bbox, bbox_contains(), fill_holes(), fill_planar_region(), fill_with_fan(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::halfedge, Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::halfedges, Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::normal, Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::offset, Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::planar, and Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::unite().
Referenced by fill_holes(), and repair_unit().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::fill_planar_region | ( | Mesh & | mesh, |
| const std::vector< const BorderLoop * > & | loops ) |
References Slic3r::f(), fill_planar_region(), and mark_nesting().
Referenced by fill_holes(), and fill_planar_region().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::fill_with_fan | ( | Mesh & | mesh, |
| const BorderLoop & | loop ) |
References fill_with_fan(), and Slic3r::anonymous_namespace{MeshRepair.cpp}::BorderLoop::halfedges.
Referenced by fill_holes(), and fill_with_fan().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::for_each_edge | ( | const std::vector< EdgeUse > & | uses, |
| Fn && | fn ) |
References for_each_edge().
Referenced by analyze_topology(), for_each_edge(), and orient_soup().
References Slic3r::f(), and inner_sample().
Referenced by inner_sample(), and resolve_shells().
| std::size_t Slic3r::anonymous_namespace{MeshRepair.cpp}::keep_input_orientation | ( | Mesh & | mesh, |
| const std::vector< Point > & | points_before, | ||
| const std::vector< Triangle > & | triangles_before, | ||
| const std::vector< Point > & | points, | ||
| const std::vector< Triangle > & | triangles ) |
References Slic3r::f(), and keep_input_orientation().
Referenced by keep_input_orientation(), and repair_unit().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::mark_nesting | ( | Cdt & | cdt | ) |
References Slic3r::f(), and mark_nesting().
Referenced by fill_planar_region(), and mark_nesting().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::orient_soup | ( | std::vector< Point > & | points, |
| std::vector< Triangle > & | triangles, | ||
| std::size_t & | reversed_parts ) |
References Slic3r::area(), Slic3r::f(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), for_each_edge(), NONE, orient_soup(), sorted_edge_uses(), and Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::unite().
Referenced by orient_soup(), and repair_unit().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::orient_with_cgal | ( | std::vector< Point > & | points, |
| std::vector< Triangle > & | triangles ) |
References orient_with_cgal().
Referenced by orient_with_cgal(), and repair_unit().
| std::vector< std::pair< std::size_t, std::size_t > > Slic3r::anonymous_namespace{MeshRepair.cpp}::overlapping_boxes | ( | std::vector< Box > & | boxes | ) |
References overlapping_boxes().
Referenced by overlapping_boxes(), resolve_shells(), and soup_units().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::parallel_for_each | ( | std::size_t | n, |
| Fn && | fn ) |
References parallel_for_each(), and Slic3r::range().
Referenced by parallel_for_each(), repair_soup(), resolve_shells(), and soup_to_meshes().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::remove_duplicate_triangles | ( | std::size_t | num_points, |
| std::vector< Triangle > & | triangles ) |
References connect_vertices(), erase_marked(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), and remove_duplicate_triangles().
Referenced by clean_soup(), and remove_duplicate_triangles().
| std::size_t Slic3r::anonymous_namespace{MeshRepair.cpp}::remove_local_self_intersections | ( | Mesh & | shell | ) |
References remove_local_self_intersections(), and signed_volume().
Referenced by remove_local_self_intersections().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::repair_its | ( | const indexed_triangle_set & | its, |
| indexed_triangle_set & | result, | ||
| MeshRepairStats & | stats, | ||
| const std::function< void(int)> & | progress ) |
References Slic3r::f(), Slic3r::MeshRepairStats::modified, Slic3r::offset(), repair_its(), and repair_soup().
Referenced by repair_its().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::repair_soup | ( | std::vector< Point > & | points, |
| std::vector< Triangle > & | triangles, | ||
| std::vector< Mesh > & | shells, | ||
| MeshRepairStats & | stats, | ||
| const std::function< void(int)> & | progress ) |
References analyze_topology(), bbox_diagonal(), Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::border, clean_soup(), Slic3r::MeshRepairStats::filled_holes, Slic3r::MeshRepairStats::modified, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::open_fraction, parallel_for_each(), Slic3r::MeshRepairStats::removed_shells, Slic3r::MeshRepairStats::removed_triangles, repair_soup(), resolve_shells(), Slic3r::MeshRepairStats::reversed_shells, Slic3r::MeshRepairStats::self_intersections, signed_volume(), soup_units(), take_closed_shells(), weld_border_vertices(), and Slic3r::MeshRepairStats::welded_vertices.
Referenced by repair_its(), and repair_soup().
| UnitResult Slic3r::anonymous_namespace{MeshRepair.cpp}::repair_unit | ( | const std::vector< Point > & | points, |
| const std::vector< Triangle > & | triangles, | ||
| const std::vector< std::size_t > & | faces, | ||
| const SoupTopology & | topology, | ||
| double | tolerance ) |
References Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::bad_face, close_cracks(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnitResult::closed, extract_group(), Slic3r::f(), fill_holes(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnitResult::filled, keep_input_orientation(), orient_soup(), orient_with_cgal(), Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::pinched, repair_unit(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnitResult::reversed, Slic3r::anonymous_namespace{MeshRepair.cpp}::UnitResult::shells, and split_shells().
Referenced by repair_unit().
| void Slic3r::anonymous_namespace{MeshRepair.cpp}::resolve_shells | ( | std::vector< Mesh > & | shells, |
| MeshRepairStats & | stats, | ||
| const std::function< void(int)> & | progress ) |
References bbox_contains(), erase_marked(), inner_sample(), overlapping_boxes(), Slic3r::overlaps(), parallel_for_each(), Slic3r::MeshRepairStats::removed_shells, resolve_shells(), Slic3r::MeshRepairStats::reversed_shells, and signed_volume().
Referenced by repair_soup(), and resolve_shells().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::same_direction | ( | const std::vector< Triangle > & | triangles, |
| const EdgeUse & | e1, | ||
| const EdgeUse & | e2 ) |
References Slic3r::anonymous_namespace{MeshRepair.cpp}::EdgeUse::corner, and same_direction().
Referenced by analyze_topology(), and same_direction().
| double Slic3r::anonymous_namespace{MeshRepair.cpp}::signed_volume | ( | const Mesh & | mesh | ) |
References Slic3r::f(), and signed_volume().
Referenced by remove_local_self_intersections(), repair_soup(), resolve_shells(), and signed_volume().
| std::vector< EdgeUse > Slic3r::anonymous_namespace{MeshRepair.cpp}::sorted_edge_uses | ( | const std::vector< Triangle > & | triangles | ) |
References Slic3r::f(), and sorted_edge_uses().
Referenced by analyze_topology(), orient_soup(), and sorted_edge_uses().
| std::vector< Mesh > Slic3r::anonymous_namespace{MeshRepair.cpp}::soup_to_meshes | ( | const std::vector< Point > & | points, |
| const std::vector< Triangle > & | triangles, | ||
| const std::vector< std::vector< std::size_t > > & | groups, | ||
| bool | known_valid ) |
References parallel_for_each(), and soup_to_meshes().
Referenced by soup_to_meshes(), split_shells(), and take_closed_shells().
| std::vector< std::vector< std::size_t > > Slic3r::anonymous_namespace{MeshRepair.cpp}::soup_units | ( | const std::vector< Point > & | points, |
| const std::vector< Triangle > & | triangles, | ||
| const SoupTopology & | topology, | ||
| double | tolerance ) |
References connect_vertices(), Slic3r::f(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), NONE, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::open_face, overlapping_boxes(), soup_units(), and Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::unite().
Referenced by repair_soup(), and soup_units().
References Slic3r::f(), soup_to_meshes(), and split_shells().
Referenced by repair_unit(), and split_shells().
| bool Slic3r::anonymous_namespace{MeshRepair.cpp}::surfaces_intersect | ( | const Mesh & | mesh, |
| const Tree & | other ) |
References Slic3r::f(), and surfaces_intersect().
Referenced by surfaces_intersect().
| std::vector< Mesh > Slic3r::anonymous_namespace{MeshRepair.cpp}::take_closed_shells | ( | const std::vector< Point > & | points, |
| std::vector< Triangle > & | triangles ) |
References analyze_topology(), Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::bad_face, connect_vertices(), erase_marked(), Slic3r::f(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), NONE, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::open_face, Slic3r::anonymous_namespace{MeshRepair.cpp}::SoupTopology::pinched, soup_to_meshes(), and take_closed_shells().
Referenced by repair_soup(), and take_closed_shells().
| std::size_t Slic3r::anonymous_namespace{MeshRepair.cpp}::weld_border_vertices | ( | const std::vector< Point > & | points, |
| std::vector< Triangle > & | triangles, | ||
| const std::vector< std::size_t > & | border, | ||
| double | tolerance ) |
References Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::find(), Slic3r::grid(), Slic3r::anonymous_namespace{MeshRepair.cpp}::UnionFind::unite(), and weld_border_vertices().
Referenced by repair_soup(), and weld_border_vertices().
|
constexpr |
Referenced by analyze_topology(), clean_soup(), orient_soup(), soup_units(), and take_closed_shells().