template<typename DerivedV, typename DerivedF, typename DerivedM, typename DerivedO>
class igl::MeshCutter< DerivedV, DerivedF, DerivedM, DerivedO >
template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
145 :
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.
template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
155 {
158
159 int index=0;
160 for (
unsigned f = 0; f<
F.
rows(); f++)
161 {
163 {
164 index++;
166 }
167 }
168
170
171 for (
unsigned int f=0;f<
F.
rows();f++)
172 for (int j=0;j<3;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().
template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
clean the visited flag
46 {
51
53 {
54 int f =
d.at(0);
d.pop_front();
55 for (int s = 0; s<3; s++)
56 {
59
60 if (j == -1)
61 {
62 g = f;
63 j = s;
64 }
65
67 {
68 Handle_Seams(f,s)=false;
69 Handle_Seams(g,j)=false;
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().
template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
40 {
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().
template<typename DerivedV , typename DerivedF , typename DerivedM , typename DerivedO >
78 {
79 std::vector<int> e(
V.
rows(),0);
80
81
82
83
84
85
86
87
88
89
90
91
92 for (
int ei=0; ei<
E.rows(); ++ei)
93 {
94
96 if (f0==-1)
98 int k=0;
99 for (k=0; k<3; ++k)
101 break;
102 if (Handle_Seams(f0,k))
103 {
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++)
115 {
116 for (int s = 0; s<3; s++)
117 {
118 if (Handle_Seams(f,s))
120 {
121 if (e[
F(f,s) ] == 1) {
122
123 Handle_Seams(f,s)=false;
125 Handle_Seams(
TT(f,s),
TTi(f,s))=
false;
126
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().