pure k-gon to corners

This commit is contained in:
Alec Jacobson
2021-01-01 18:14:00 -05:00
parent a0c6750917
commit babf491b69
2 changed files with 43 additions and 0 deletions
+29
View File
@@ -34,8 +34,37 @@ IGL_INLINE void igl::polygon_corners(
I = Eigen::Map<DerivedI>(vI.data(),vI.size());
}
template <
typename DerivedQ,
typename DerivedI,
typename DerivedC>
IGL_INLINE void igl::polygon_corners(
const Eigen::MatrixBase<DerivedQ> & Q,
Eigen::PlainObjectBase<DerivedI> & I,
Eigen::PlainObjectBase<DerivedC> & C)
{
I.resize(Q.size());
C.resize(Q.rows()+1);
int c = 0;
C(0) = 0;
for(int p = 0;p<Q.rows();p++)
{
int np = 0;
for(int i = 0;i<Q.cols();i++)
{
if(Q(p,i) == -1){ break;}
I(c++) = Q(p,i);
np++;
}
C(p+1) = C(p)+np;
}
I.conservativeResize(c);
}
#ifdef IGL_STATIC_LIBRARY
// Explicit template instantiation
// generated by autoexplicit.sh
template void igl::polygon_corners<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
// generated by autoexplicit.sh
template void igl::polygon_corners<int, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
#endif
+14
View File
@@ -32,6 +32,20 @@ namespace igl
const std::vector<std::vector<PType> > & P,
Eigen::PlainObjectBase<DerivedI> & I,
Eigen::PlainObjectBase<DerivedC> & C);
// Convert a pure k-gon list of polygon mesh indices to list of polygon corners
// and sizes
//
// Inputs:
// Q #Q by k list of k-gon indices (Q(i,j) = -1 means that face i is a
// j-gon)
template <
typename DerivedQ,
typename DerivedI,
typename DerivedC>
IGL_INLINE void polygon_corners(
const Eigen::MatrixBase<DerivedQ> & Q,
Eigen::PlainObjectBase<DerivedI> & I,
Eigen::PlainObjectBase<DerivedC> & C);
}
#ifndef IGL_STATIC_LIBRARY