Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::trianglulate_wall_detail::Triangulator< Sc > Class Template Reference

#include <src/libslic3r/TriangulateWall.hpp>

+ Collaboration diagram for Slic3r::trianglulate_wall_detail::Triangulator< Sc >:

Public Member Functions

void run (std::vector< Vec3i > &indices)
 
 Triangulator (const std::vector< Vec< 3, Sc > > *points, Ring &lower, Ring &upper)
 

Private Member Functions

double calc_score () const
 
void synchronize_rings ()
 
void emplace_indices (std::vector< Vec3i > &indices)
 

Private Attributes

const std::vector< Vec< 3, Sc > > * pts
 
Ringonring
 
Ringoffring
 

Detailed Description

template<class Sc>
class Slic3r::trianglulate_wall_detail::Triangulator< Sc >

Constructor & Destructor Documentation

◆ Triangulator()

template<class Sc >
Slic3r::trianglulate_wall_detail::Triangulator< Sc >::Triangulator ( const std::vector< Vec< 3, Sc > > *  points,
Ring lower,
Ring upper 
)
inlineexplicit
110 : pts{points}, onring{&upper}, offring{&lower}
111 {}
Ring * offring
Definition TriangulateWall.hpp:58
Ring * onring
Definition TriangulateWall.hpp:58
const std::vector< Vec< 3, Sc > > * pts
Definition TriangulateWall.hpp:57

Member Function Documentation

◆ calc_score()

template<class Sc >
double Slic3r::trianglulate_wall_detail::Triangulator< Sc >::calc_score ( ) const
inlineprivate
61 {
62 return trscore(*onring, *offring, *pts);
63 }
static Sc trscore(const Ring &onring, const Ring &offring, const std::vector< Vec< 3, Sc > > &pts)
Definition TriangulateWall.hpp:46

References Slic3r::trianglulate_wall_detail::Triangulator< Sc >::offring, Slic3r::trianglulate_wall_detail::Triangulator< Sc >::onring, Slic3r::trianglulate_wall_detail::Triangulator< Sc >::pts, and Slic3r::trianglulate_wall_detail::trscore().

Referenced by Slic3r::trianglulate_wall_detail::Triangulator< Sc >::run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ emplace_indices()

template<class Sc >
void Slic3r::trianglulate_wall_detail::Triangulator< Sc >::emplace_indices ( std::vector< Vec3i > &  indices)
inlineprivate
83 {
84 Vec3i tr{int(onring->pos().first), int(onring->pos().second),
85 int(offring->pos().first)};
86 if (onring->is_lower()) std::swap(tr(0), tr(1));
87 indices.emplace_back(tr);
88 }
std::pair< size_t, size_t > pos() const
Definition TriangulateWall.hpp:17
bool is_lower() const
Definition TriangulateWall.hpp:18
Eigen::Matrix< int, 3, 1, Eigen::DontAlign > Vec3i
Definition Point.hpp:40

References Slic3r::trianglulate_wall_detail::Ring::is_lower(), Slic3r::trianglulate_wall_detail::Triangulator< Sc >::offring, Slic3r::trianglulate_wall_detail::Triangulator< Sc >::onring, and Slic3r::trianglulate_wall_detail::Ring::pos().

Referenced by Slic3r::trianglulate_wall_detail::Triangulator< Sc >::run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ run()

template<class Sc >
void Slic3r::trianglulate_wall_detail::Triangulator< Sc >::run ( std::vector< Vec3i > &  indices)
inline
92 {
94
95 double score = 0, prev_score = 0;
96 while (!onring->is_finished() || !offring->is_finished()) {
97 prev_score = score;
98 if (onring->is_finished() || (score = calc_score()) > prev_score) {
99 std::swap(onring, offring);
100 } else {
101 emplace_indices(indices);
102 onring->inc();
103 }
104 }
105 }
bool is_finished() const
Definition TriangulateWall.hpp:35
void inc()
Definition TriangulateWall.hpp:20
double calc_score() const
Definition TriangulateWall.hpp:60
void synchronize_rings()
Definition TriangulateWall.hpp:65
void emplace_indices(std::vector< Vec3i > &indices)
Definition TriangulateWall.hpp:82

References Slic3r::trianglulate_wall_detail::Triangulator< Sc >::calc_score(), Slic3r::trianglulate_wall_detail::Triangulator< Sc >::emplace_indices(), Slic3r::trianglulate_wall_detail::Ring::inc(), Slic3r::trianglulate_wall_detail::Ring::is_finished(), Slic3r::trianglulate_wall_detail::Triangulator< Sc >::offring, Slic3r::trianglulate_wall_detail::Triangulator< Sc >::onring, and Slic3r::trianglulate_wall_detail::Triangulator< Sc >::synchronize_rings().

+ Here is the call graph for this function:

◆ synchronize_rings()

template<class Sc >
void Slic3r::trianglulate_wall_detail::Triangulator< Sc >::synchronize_rings ( )
inlineprivate
66 {
67 Ring lring = *offring;
68 auto minsc = trscore(*onring, lring, *pts);
69 size_t imin = lring.pos().first;
70
71 lring.inc();
72
73 while(!lring.is_finished()) {
74 double score = trscore(*onring, lring, *pts);
75 if (score < minsc) { minsc = score; imin = lring.pos().first; }
76 lring.inc();
77 }
78
79 offring->init(imin);
80 }
void init(size_t pos)
Definition TriangulateWall.hpp:28
std::vector< Coord > Ring
Definition MarchingSquares.hpp:26

References Slic3r::trianglulate_wall_detail::Ring::inc(), Slic3r::trianglulate_wall_detail::Ring::init(), Slic3r::trianglulate_wall_detail::Ring::is_finished(), Slic3r::trianglulate_wall_detail::Triangulator< Sc >::offring, Slic3r::trianglulate_wall_detail::Triangulator< Sc >::onring, Slic3r::trianglulate_wall_detail::Ring::pos(), Slic3r::trianglulate_wall_detail::Triangulator< Sc >::pts, and Slic3r::trianglulate_wall_detail::trscore().

Referenced by Slic3r::trianglulate_wall_detail::Triangulator< Sc >::run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ offring

◆ onring

◆ pts


The documentation for this class was generated from the following file: