Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO > Class Template Reference
+ Collaboration diagram for igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >:

Public Member Functions

 MeshCutter (const Eigen::PlainObjectBase< DerivedV > &V_, const Eigen::PlainObjectBase< DerivedF > &F_, const Eigen::PlainObjectBase< DerivedM > &Handle_MMatch_)
 
void cut (Eigen::PlainObjectBase< DerivedO > &Handle_Seams)
 

Protected Member Functions

bool IsRotSeam (const int f0, const int edge)
 
void FloodFill (const int start, Eigen::PlainObjectBase< DerivedO > &Handle_Seams)
 
void Retract (Eigen::PlainObjectBase< DerivedO > &Handle_Seams)
 

Protected Attributes

const Eigen::PlainObjectBase< DerivedV > & V
 
const Eigen::PlainObjectBase< DerivedF > & F
 
const Eigen::PlainObjectBase< DerivedM > & Handle_MMatch
 
Eigen::VectorXi F_visited
 
DerivedF TT
 
DerivedF TTi
 
Eigen::MatrixXi E
 
Eigen::MatrixXi F2E
 
Eigen::MatrixXi E2F
 

Detailed Description

template<typename DerivedV, typename DerivedF, typename DerivedM, typename DerivedO>
class igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >

Constructor & Destructor Documentation

◆ MeshCutter()

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::MeshCutter ( const Eigen::PlainObjectBase< DerivedV > &  V_,
const Eigen::PlainObjectBase< DerivedF > &  F_,
const Eigen::PlainObjectBase< DerivedM > &  Handle_MMatch_ 
)
inline
145 :
146 V(V_),
147 F(F_),
148 Handle_MMatch(Handle_MMatch_)
149 {
152 };
DerivedF TTi
Definition cut_mesh_from_singularities.cpp:34
const Eigen::PlainObjectBase< DerivedV > & V
Definition cut_mesh_from_singularities.cpp:28
Eigen::MatrixXi E2F
Definition cut_mesh_from_singularities.cpp:36
const Eigen::PlainObjectBase< DerivedF > & F
Definition cut_mesh_from_singularities.cpp:29
DerivedF TT
Definition cut_mesh_from_singularities.cpp:33
Eigen::MatrixXi E
Definition cut_mesh_from_singularities.cpp:36
const Eigen::PlainObjectBase< DerivedM > & Handle_MMatch
Definition cut_mesh_from_singularities.cpp:30
Eigen::MatrixXi F2E
Definition cut_mesh_from_singularities.cpp:36
IGL_INLINE void edge_topology(const Eigen::PlainObjectBase< DerivedV > &V, const Eigen::PlainObjectBase< DerivedF > &F, Eigen::MatrixXi &EV, Eigen::MatrixXi &FE, Eigen::MatrixXi &EF)
Definition edge_topology.cpp:13
IGL_INLINE void triangle_triangle_adjacency(const Eigen::MatrixBase< DerivedF > &F, Eigen::PlainObjectBase< DerivedTT > &TT, Eigen::PlainObjectBase< DerivedTTi > &TTi)
Definition triangle_triangle_adjacency.cpp:116

References igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::E, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::E2F, igl::edge_topology(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F2E, igl::triangle_triangle_adjacency(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TT, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TTi, and igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::V.

+ Here is the call graph for this function:

Member Function Documentation

◆ cut()

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
void igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::cut ( Eigen::PlainObjectBase< DerivedO > &  Handle_Seams)
inline
155 {
156 F_visited.setConstant(F.rows(),0);
157 Handle_Seams.setConstant(F.rows(),3,1);
158
159 int index=0;
160 for (unsigned f = 0; f<F.rows(); f++)
161 {
162 if (!F_visited(f))
163 {
164 index++;
165 FloodFill(f, Handle_Seams);
166 }
167 }
168
169 Retract(Handle_Seams);
170
171 for (unsigned int f=0;f<F.rows();f++)
172 for (int j=0;j<3;j++)
173 if (IsRotSeam(f,j))
174 Handle_Seams(f,j)=true;
175
176 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rows() const
Definition PlainObjectBase.h:151
EIGEN_DEVICE_FUNC Derived & setConstant(Index size, const Scalar &val)
Definition CwiseNullaryOp.h:341
bool IsRotSeam(const int f0, const int edge)
Definition cut_mesh_from_singularities.cpp:39
Eigen::VectorXi F_visited
Definition cut_mesh_from_singularities.cpp:32
void FloodFill(const int start, Eigen::PlainObjectBase< DerivedO > &Handle_Seams)
Definition cut_mesh_from_singularities.cpp:45
void Retract(Eigen::PlainObjectBase< DerivedO > &Handle_Seams)
Definition cut_mesh_from_singularities.cpp:77

References igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F_visited, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::FloodFill(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::IsRotSeam(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::Retract(), Eigen::PlainObjectBase< Derived >::rows(), and Eigen::PlainObjectBase< Derived >::setConstant().

Referenced by igl::cut_mesh_from_singularities().

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

◆ FloodFill()

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
void igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::FloodFill ( const int  start,
Eigen::PlainObjectBase< DerivedO > &  Handle_Seams 
)
inlineprotected

clean the visited flag

46 {
47 std::deque<int> d;
49 F_visited(start) = true;
50 d.push_back(start);
51
52 while (!d.empty())
53 {
54 int f = d.at(0); d.pop_front();
55 for (int s = 0; s<3; s++)
56 {
57 int g = TT(f,s); // f->FFp(s);
58 int j = TTi(f,s); // f->FFi(s);
59
60 if (j == -1)
61 {
62 g = f;
63 j = s;
64 }
65
66 if ((!(IsRotSeam(f,s))) && (!(IsRotSeam(g,j))) && (!F_visited(g)) )
67 {
68 Handle_Seams(f,s)=false;
69 Handle_Seams(g,j)=false;
70 F_visited(g) = true;
71 d.push_back(g);
72 }
73 }
74 }
75 }

References igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F_visited, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::IsRotSeam(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TT, and igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TTi.

Referenced by igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::cut().

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

◆ IsRotSeam()

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
bool igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::IsRotSeam ( const int  f0,
const int  edge 
)
inlineprotected
40 {
41 unsigned char MM = Handle_MMatch(f0,edge);
42 return (MM!=0);
43 }

References igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::Handle_MMatch.

Referenced by igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::cut(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::FloodFill(), and igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::Retract().

+ Here is the caller graph for this function:

◆ Retract()

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
void igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::Retract ( Eigen::PlainObjectBase< DerivedO > &  Handle_Seams)
inlineprotected
78 {
79 std::vector<int> e(V.rows(),0); // number of edges per vert
80 // for (unsigned f=0; f<F.rows(); f++)
81 // {
82 // for (int s = 0; s<3; s++)
83 // {
84 // if (Handle_Seams(f,s))
85 // if (TT(f,s)<=f)
86 // {
87 // e[ F(f,s) ] ++;
88 // e[ F(f,(s+1)%3) ] ++;
89 // }
90 // }
91 // }
92 for (int ei=0; ei<E.rows(); ++ei)
93 {
94 //only need one face
95 int f0 = E2F(ei,0);
96 if (f0==-1)
97 f0 = E2F(ei,1);
98 int k=0;
99 for (k=0; k<3; ++k)
100 if (F2E(f0,k)==ei)
101 break;
102 if (Handle_Seams(f0,k))
103 {
104 e[ F(f0,k) ] ++;
105 e[ F(f0,(k+1)%3) ] ++;
106 }
107 }
108
109 bool over=true;
110 int guard = 0;
111 do
112 {
113 over = true;
114 for (int f = 0; f<F.rows(); f++) //if (!f->IsD())
115 {
116 for (int s = 0; s<3; s++)
117 {
118 if (Handle_Seams(f,s))
119 if (!(IsRotSeam(f,s))) // never retract rot seams
120 {
121 if (e[ F(f,s) ] == 1) {
122 // dissolve seam
123 Handle_Seams(f,s)=false;
124 if (TT(f,s) != -1)
125 Handle_Seams(TT(f,s),TTi(f,s))=false;
126
127 e[ F(f,s)] --;
128 e[ F(f,(s+1)%3) ] --;
129 over = false;
130 }
131 }
132 }
133 }
134
135 if (guard++>10000)
136 over = true;
137
138 } while (!over);
139 }

References igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::E, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::E2F, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F2E, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::IsRotSeam(), Eigen::PlainObjectBase< Derived >::rows(), igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TT, igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TTi, and igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::V.

Referenced by igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::cut().

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

Member Data Documentation

◆ E

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
Eigen::MatrixXi igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::E
protected

◆ E2F

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
Eigen::MatrixXi igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::E2F
protected

◆ F

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
const Eigen::PlainObjectBase<DerivedF>& igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F
protected

◆ F2E

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
Eigen::MatrixXi igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F2E
protected

◆ F_visited

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
Eigen::VectorXi igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::F_visited
protected

◆ Handle_MMatch

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
const Eigen::PlainObjectBase<DerivedM>& igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::Handle_MMatch
protected

◆ TT

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
DerivedF igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TT
protected

◆ TTi

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
DerivedF igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::TTi
protected

◆ V

template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
const Eigen::PlainObjectBase<DerivedV>& igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >::V
protected

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