stuff, test not passing
This commit is contained in:
@@ -223,7 +223,7 @@ IGL_INLINE igl::SolverStatus igl::active_set(
|
||||
}
|
||||
//cout<<matlab_format((known_i.array()+1).eval(),"known_i")<<endl;
|
||||
// PREPARE EQUALITY CONSTRAINTS
|
||||
VectorXi as_ieq_list(as_ieq_count,1);
|
||||
Eigen::Matrix<typename DerivedY::Scalar, Eigen::Dynamic, 1> as_ieq_list(as_ieq_count,1);
|
||||
// Gather active constraints and resp. rhss
|
||||
DerivedBeq Beq_i;
|
||||
Beq_i.resize(Beq.rows()+as_ieq_count,1);
|
||||
|
||||
+2
-2
@@ -59,7 +59,7 @@ template <
|
||||
typename DType,
|
||||
typename PType>
|
||||
IGL_INLINE void igl::bfs(
|
||||
const Eigen::SparseMatrix<AType> & A,
|
||||
const AType & A,
|
||||
const size_t s,
|
||||
std::vector<DType> & D,
|
||||
std::vector<PType> & P)
|
||||
@@ -83,7 +83,7 @@ IGL_INLINE void igl::bfs(
|
||||
D.push_back(f);
|
||||
P[f] = p;
|
||||
seen[f] = true;
|
||||
for(typename Eigen::SparseMatrix<AType>::InnerIterator it (A,f); it; ++it)
|
||||
for(typename AType::InnerIterator it (A,f); it; ++it)
|
||||
{
|
||||
if(it.value()) Q.push({it.index(),f});
|
||||
}
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ namespace igl
|
||||
typename DType,
|
||||
typename PType>
|
||||
IGL_INLINE void bfs(
|
||||
const Eigen::SparseMatrix<AType> & A,
|
||||
const AType & A,
|
||||
const size_t s,
|
||||
std::vector<DType> & D,
|
||||
std::vector<PType> & P);
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
template <typename DerivedF, typename DerivedFF, typename DerivedC>
|
||||
IGL_INLINE void igl::bfs_orient(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedFF> & FF,
|
||||
Eigen::PlainObjectBase<DerivedC> & C)
|
||||
{
|
||||
using namespace Eigen;
|
||||
using namespace std;
|
||||
SparseMatrix<int> A;
|
||||
SparseMatrix<typename DerivedF::Scalar> A;
|
||||
orientable_patches(F,C,A);
|
||||
|
||||
// number of faces
|
||||
@@ -30,7 +30,7 @@ IGL_INLINE void igl::bfs_orient(
|
||||
// Edge sets
|
||||
const int ES[3][2] = {{1,2},{2,0},{0,1}};
|
||||
|
||||
if(&FF != &F)
|
||||
if(((void*)&FF) != ((void*)&F))
|
||||
{
|
||||
FF = F;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ IGL_INLINE void igl::bfs_orient(
|
||||
#pragma omp parallel for
|
||||
for(int c = 0;c<num_cc;c++)
|
||||
{
|
||||
queue<int> Q;
|
||||
queue<typename DerivedF::Scalar> Q;
|
||||
// find first member of patch c
|
||||
for(int f = 0;f<FF.rows();f++)
|
||||
{
|
||||
@@ -51,7 +51,7 @@ IGL_INLINE void igl::bfs_orient(
|
||||
assert(!Q.empty());
|
||||
while(!Q.empty())
|
||||
{
|
||||
const int f = Q.front();
|
||||
const typename DerivedF::Scalar f = Q.front();
|
||||
Q.pop();
|
||||
if(seen(f) > 0)
|
||||
{
|
||||
@@ -59,7 +59,7 @@ IGL_INLINE void igl::bfs_orient(
|
||||
}
|
||||
seen(f)++;
|
||||
// loop over neighbors of f
|
||||
for(typename SparseMatrix<int>::InnerIterator it (A,f); it; ++it)
|
||||
for(typename SparseMatrix<typename DerivedF::Scalar>::InnerIterator it (A,f); it; ++it)
|
||||
{
|
||||
// might be some lingering zeros, and skip self-adjacency
|
||||
if(it.value() != 0 && it.row() != f)
|
||||
@@ -96,5 +96,5 @@ IGL_INLINE void igl::bfs_orient(
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
template void igl::bfs_orient<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::PlainObjectBase<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> >&);
|
||||
template void igl::bfs_orient<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> >&);
|
||||
#endif
|
||||
|
||||
@@ -25,10 +25,10 @@ namespace igl
|
||||
//
|
||||
template <typename DerivedF, typename DerivedFF, typename DerivedC>
|
||||
IGL_INLINE void bfs_orient(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedFF> & FF,
|
||||
Eigen::PlainObjectBase<DerivedC> & C);
|
||||
};
|
||||
}
|
||||
#ifndef IGL_STATIC_LIBRARY
|
||||
# include "bfs_orient.cpp"
|
||||
#endif
|
||||
|
||||
@@ -17,7 +17,7 @@ IGL_INLINE void igl::colon(
|
||||
const H hi,
|
||||
Eigen::Matrix<T,Eigen::Dynamic,1> & I)
|
||||
{
|
||||
const int size = ((hi-low)/step)+1;
|
||||
const H size = ((hi-low)/step)+1;
|
||||
I = igl::LinSpaced<Eigen::Matrix<T,Eigen::Dynamic,1> >(size,low,low+step*(size-1));
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ template Eigen::Matrix<int,-1,1,0,-1,1> igl::colon<int,int,int>(int, int);
|
||||
template Eigen::Matrix<int,-1,1,0,-1,1> igl::colon<int,int,long>(int,long);
|
||||
template Eigen::Matrix<int,-1,1,0,-1,1> igl::colon<int,int,long long int>(int,long long int);
|
||||
template Eigen::Matrix<double, -1, 1, 0, -1, 1> igl::colon<double, double, double>(double, double);
|
||||
template void igl::colon<int, long, double>(int, long, Eigen::Matrix<double, -1, 1, 0, -1, 1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::colon<int, long, int, int>(int, long, int, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
template void igl::colon<int, int, long, int>(int, int, long, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
|
||||
@@ -42,4 +42,5 @@ IGL_INLINE void igl::cross(
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
template void igl::cross<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::cross<Eigen::Matrix<double, 1, 3, 1, 1, 3>, Eigen::Matrix<double, 1, 3, 1, 1, 3>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::cross<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
#endif
|
||||
|
||||
@@ -14,21 +14,23 @@
|
||||
|
||||
template <typename DerivedE, typename DerivedP>
|
||||
IGL_INLINE void igl::directed_edge_parents(
|
||||
const Eigen::PlainObjectBase<DerivedE> & E,
|
||||
const Eigen::MatrixBase<DerivedE> & E,
|
||||
Eigen::PlainObjectBase<DerivedP> & P)
|
||||
{
|
||||
using namespace Eigen;
|
||||
using namespace std;
|
||||
VectorXi I = VectorXi::Constant(E.maxCoeff()+1,1,-1);
|
||||
typedef Eigen::Matrix<typename DerivedE::Scalar, Eigen::Dynamic, 1> VectorT;
|
||||
|
||||
VectorT I = VectorT::Constant(E.maxCoeff()+1,1,-1);
|
||||
//I(E.col(1)) = 0:E.rows()-1
|
||||
slice_into(colon<int>(0,E.rows()-1),E.col(1).eval(),I);
|
||||
VectorXi roots,_;
|
||||
slice_into(colon<typename DerivedE::Scalar>(0, E.rows()-1), E.col(1).eval(), I);
|
||||
VectorT roots,_;
|
||||
setdiff(E.col(0).eval(),E.col(1).eval(),roots,_);
|
||||
std::for_each(roots.data(),roots.data()+roots.size(),[&](int r){I(r)=-1;});
|
||||
std::for_each(roots.data(),roots.data()+roots.size(),[&](typename VectorT::Scalar r){I(r)=-1;});
|
||||
slice(I,E.col(0).eval(),P);
|
||||
}
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
template void igl::directed_edge_parents<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::directed_edge_parents<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> >&);
|
||||
#endif
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace igl
|
||||
//
|
||||
template <typename DerivedE, typename DerivedP>
|
||||
IGL_INLINE void directed_edge_parents(
|
||||
const Eigen::PlainObjectBase<DerivedE> & E,
|
||||
const Eigen::MatrixBase<DerivedE> & E,
|
||||
Eigen::PlainObjectBase<DerivedP> & P);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,24 +9,24 @@
|
||||
#include "is_edge_manifold.h"
|
||||
#include <algorithm>
|
||||
|
||||
template<typename DerivedV, typename DerivedF>
|
||||
template<typename DerivedV, typename DerivedF, typename DerivedE>
|
||||
IGL_INLINE void igl::edge_topology(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
Eigen::MatrixXi& EV,
|
||||
Eigen::MatrixXi& FE,
|
||||
Eigen::MatrixXi& EF)
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedE>& EV,
|
||||
Eigen::PlainObjectBase<DerivedE>& FE,
|
||||
Eigen::PlainObjectBase<DerivedE>& EF)
|
||||
{
|
||||
// Only needs to be edge-manifold
|
||||
if (V.rows() ==0 || F.rows()==0)
|
||||
{
|
||||
EV = Eigen::MatrixXi::Constant(0,2,-1);
|
||||
FE = Eigen::MatrixXi::Constant(0,3,-1);
|
||||
EF = Eigen::MatrixXi::Constant(0,2,-1);
|
||||
EV = Eigen::PlainObjectBase<DerivedE>::Constant(0,2,-1);
|
||||
FE = Eigen::PlainObjectBase<DerivedE>::Constant(0,3,-1);
|
||||
EF = Eigen::PlainObjectBase<DerivedE>::Constant(0,2,-1);
|
||||
return;
|
||||
}
|
||||
assert(igl::is_edge_manifold(F));
|
||||
std::vector<std::vector<int> > ETT;
|
||||
std::vector<std::vector<typename DerivedE::Scalar> > ETT;
|
||||
for(int f=0;f<F.rows();++f)
|
||||
for (int i=0;i<3;++i)
|
||||
{
|
||||
@@ -34,7 +34,7 @@ IGL_INLINE void igl::edge_topology(
|
||||
int v1 = F(f,i);
|
||||
int v2 = F(f,(i+1)%3);
|
||||
if (v1 > v2) std::swap(v1,v2);
|
||||
std::vector<int> r(4);
|
||||
std::vector<typename DerivedE::Scalar> r(4);
|
||||
r[0] = v1; r[1] = v2;
|
||||
r[2] = f; r[3] = i;
|
||||
ETT.push_back(r);
|
||||
@@ -47,9 +47,9 @@ IGL_INLINE void igl::edge_topology(
|
||||
if (!((ETT[i][0] == ETT[i+1][0]) && (ETT[i][1] == ETT[i+1][1])))
|
||||
++En;
|
||||
|
||||
EV = Eigen::MatrixXi::Constant((int)(En),2,-1);
|
||||
FE = Eigen::MatrixXi::Constant((int)(F.rows()),3,-1);
|
||||
EF = Eigen::MatrixXi::Constant((int)(En),2,-1);
|
||||
EV = DerivedE::Constant((int)(En),2,-1);
|
||||
FE = DerivedE::Constant((int)(F.rows()),3,-1);
|
||||
EF = DerivedE::Constant((int)(En),2,-1);
|
||||
En = 0;
|
||||
|
||||
for(unsigned i=0;i<ETT.size();++i)
|
||||
@@ -59,7 +59,7 @@ IGL_INLINE void igl::edge_topology(
|
||||
)
|
||||
{
|
||||
// Border edge
|
||||
std::vector<int>& r1 = ETT[i];
|
||||
std::vector<typename DerivedE::Scalar>& r1 = ETT[i];
|
||||
EV(En,0) = r1[0];
|
||||
EV(En,1) = r1[1];
|
||||
EF(En,0) = r1[2];
|
||||
@@ -67,8 +67,8 @@ IGL_INLINE void igl::edge_topology(
|
||||
}
|
||||
else
|
||||
{
|
||||
std::vector<int>& r1 = ETT[i];
|
||||
std::vector<int>& r2 = ETT[i+1];
|
||||
std::vector<typename DerivedE::Scalar>& r1 = ETT[i];
|
||||
std::vector<typename DerivedE::Scalar>& r2 = ETT[i+1];
|
||||
EV(En,0) = r1[0];
|
||||
EV(En,1) = r1[1];
|
||||
EF(En,0) = r1[2];
|
||||
@@ -84,7 +84,7 @@ IGL_INLINE void igl::edge_topology(
|
||||
// the first one is the face on the left of the edge
|
||||
for(unsigned i=0; i<EF.rows(); ++i)
|
||||
{
|
||||
int fid = EF(i,0);
|
||||
typename DerivedE::Scalar fid = EF(i,0);
|
||||
bool flip = true;
|
||||
// search for edge EV.row(i)
|
||||
for (unsigned j=0; j<3; ++j)
|
||||
@@ -105,6 +105,6 @@ IGL_INLINE void igl::edge_topology(
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
template void igl::edge_topology<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::Matrix<int, -1, -1, 0, -1, -1>&, Eigen::Matrix<int, -1, -1, 0, -1, -1>&, Eigen::Matrix<int, -1, -1, 0, -1, -1>&);
|
||||
template void igl::edge_topology<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, -1, 0, -1, -1>&, Eigen::Matrix<int, -1, -1, 0, -1, -1>&, Eigen::Matrix<int, -1, -1, 0, -1, -1>&);
|
||||
template void igl::edge_topology<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>&);
|
||||
template void igl::edge_topology<Eigen::Matrix<double, -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<double, -1, -1, 0, -1, -1> > const&, 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>>&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>&);
|
||||
#endif
|
||||
|
||||
@@ -34,13 +34,13 @@ namespace igl
|
||||
// - FE uses non-standard and ambiguous order: FE(f,c) is merely an edge
|
||||
// incident on corner c of face f. In contrast, edge_flaps's EMAP(f,c)
|
||||
// reveals the edge _opposite_ corner c of face f
|
||||
template <typename DerivedV, typename DerivedF>
|
||||
template <typename DerivedV, typename DerivedF, typename DerivedE>
|
||||
IGL_INLINE void edge_topology(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
Eigen::MatrixXi& EV,
|
||||
Eigen::MatrixXi& FE,
|
||||
Eigen::MatrixXi& EF);
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedE>& EV,
|
||||
Eigen::PlainObjectBase<DerivedE>& FE,
|
||||
Eigen::PlainObjectBase<DerivedE>& EF);
|
||||
}
|
||||
|
||||
#ifndef IGL_STATIC_LIBRARY
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <queue>
|
||||
template <typename DerivedF, typename DerivedC>
|
||||
IGL_INLINE void igl::facet_components(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedC> & C)
|
||||
{
|
||||
using namespace std;
|
||||
@@ -88,7 +88,7 @@ IGL_INLINE void igl::facet_components(
|
||||
// Explicit template instantiation
|
||||
template void igl::facet_components<long, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1> >(std::vector<std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > >, std::allocator<std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::facet_components<int, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(std::vector<std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >, std::allocator<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> >&);
|
||||
template void igl::facet_components<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::facet_components<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> >&);
|
||||
#ifdef WIN32
|
||||
template void igl::facet_components<__int64,class Eigen::Matrix<__int64,-1,1,0,-1,1>,class Eigen::Matrix<__int64,-1,1,0,-1,1> >(class std::vector<class std::vector<class std::vector<__int64,class std::allocator<__int64> >,class std::allocator<class std::vector<__int64,class std::allocator<__int64> > > >,class std::allocator<class std::vector<class std::vector<__int64,class std::allocator<__int64> >,class std::allocator<class std::vector<__int64,class std::allocator<__int64> > > > > > const &,class Eigen::PlainObjectBase<class Eigen::Matrix<__int64,-1,1,0,-1,1> > &,class Eigen::PlainObjectBase<class Eigen::Matrix<__int64,-1,1,0,-1,1> > &);
|
||||
#endif
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace igl
|
||||
// C #F list of connected component ids
|
||||
template <typename DerivedF, typename DerivedC>
|
||||
IGL_INLINE void facet_components(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedC> & C);
|
||||
|
||||
// Compute connected components of facets based on edge-edge adjacency.
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
#include <iostream>
|
||||
template <typename DerivedV, typename DerivedF, typename DerivedK>
|
||||
IGL_INLINE void igl::gaussian_curvature(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedK> & K)
|
||||
{
|
||||
using namespace Eigen;
|
||||
@@ -51,6 +51,6 @@ IGL_INLINE void igl::gaussian_curvature(
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
template void igl::gaussian_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::gaussian_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::gaussian_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::gaussian_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
#endif
|
||||
|
||||
@@ -22,8 +22,8 @@ namespace igl
|
||||
//
|
||||
template <typename DerivedV, typename DerivedF, typename DerivedK>
|
||||
IGL_INLINE void gaussian_curvature(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedK> & K);
|
||||
}
|
||||
|
||||
|
||||
@@ -48,8 +48,8 @@ IGL_INLINE void igl::massmatrix(
|
||||
return massmatrix_intrinsic(l,F,type,M);
|
||||
}else if(simplex_size == 4)
|
||||
{
|
||||
Matrix<int,Dynamic,1> MI;
|
||||
Matrix<int,Dynamic,1> MJ;
|
||||
Matrix<typename DerivedF::Scalar,Dynamic,1> MI;
|
||||
Matrix<typename DerivedF::Scalar,Dynamic,1> MJ;
|
||||
Matrix<Scalar,Dynamic,1> MV;
|
||||
assert(V.cols() == 3);
|
||||
assert(eff_type == MASSMATRIX_TYPE_BARYCENTRIC);
|
||||
|
||||
@@ -47,8 +47,8 @@ IGL_INLINE void igl::massmatrix_intrinsic(
|
||||
assert(F.cols() == 3 && "only triangles supported");
|
||||
Matrix<Scalar,Dynamic,1> dblA;
|
||||
doublearea(l,0.,dblA);
|
||||
Matrix<int,Dynamic,1> MI;
|
||||
Matrix<int,Dynamic,1> MJ;
|
||||
Matrix<typename DerivedF::Scalar,Dynamic,1> MI;
|
||||
Matrix<typename DerivedF::Scalar,Dynamic,1> MJ;
|
||||
Matrix<Scalar,Dynamic,1> MV;
|
||||
|
||||
switch(eff_type)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
template <typename DerivedF, typename DerivedC, typename AScalar>
|
||||
IGL_INLINE void igl::orientable_patches(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedC> & C,
|
||||
Eigen::SparseMatrix<AScalar> & A)
|
||||
{
|
||||
@@ -27,7 +27,7 @@ IGL_INLINE void igl::orientable_patches(
|
||||
// List of all "half"-edges: 3*#F by 2
|
||||
Matrix<typename DerivedF::Scalar, Dynamic, 2> allE,sortallE,uE;
|
||||
allE.resize(F.rows()*3,2);
|
||||
Matrix<int,Dynamic,2> IX;
|
||||
Matrix<typename DerivedF::Scalar,Dynamic,2> IX;
|
||||
VectorXi IA,IC;
|
||||
allE.block(0*F.rows(),0,F.rows(),1) = F.col(1);
|
||||
allE.block(0*F.rows(),1,F.rows(),1) = F.col(2);
|
||||
@@ -91,7 +91,7 @@ IGL_INLINE void igl::orientable_patches(
|
||||
|
||||
template <typename DerivedF, typename DerivedC>
|
||||
IGL_INLINE void igl::orientable_patches(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedC> & C)
|
||||
{
|
||||
Eigen::SparseMatrix<typename DerivedF::Scalar> A;
|
||||
@@ -100,6 +100,6 @@ IGL_INLINE void igl::orientable_patches(
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
template void igl::orientable_patches<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, int>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::SparseMatrix<int, 0, int>&);
|
||||
template void igl::orientable_patches<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::orientable_patches<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, int>(Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::SparseMatrix<int, 0, int>&);
|
||||
template void igl::orientable_patches<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> >&);
|
||||
#endif
|
||||
|
||||
@@ -27,12 +27,12 @@ namespace igl
|
||||
//
|
||||
template <typename DerivedF, typename DerivedC, typename AScalar>
|
||||
IGL_INLINE void orientable_patches(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedC> & C,
|
||||
Eigen::SparseMatrix<AScalar> & A);
|
||||
template <typename DerivedF, typename DerivedC>
|
||||
IGL_INLINE void orientable_patches(
|
||||
const Eigen::PlainObjectBase<DerivedF> & F,
|
||||
const Eigen::MatrixBase<DerivedF> & F,
|
||||
Eigen::PlainObjectBase<DerivedC> & C);
|
||||
};
|
||||
#ifndef IGL_STATIC_LIBRARY
|
||||
|
||||
@@ -777,8 +777,8 @@ template <
|
||||
typename DerivedPV2,
|
||||
typename Index>
|
||||
IGL_INLINE void igl::principal_curvature(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedPD1>& PD1,
|
||||
Eigen::PlainObjectBase<DerivedPD2>& PD2,
|
||||
Eigen::PlainObjectBase<DerivedPV1>& PV1,
|
||||
@@ -862,8 +862,8 @@ template <
|
||||
typename DerivedPV1,
|
||||
typename DerivedPV2>
|
||||
IGL_INLINE void igl::principal_curvature(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedPD1>& PD1,
|
||||
Eigen::PlainObjectBase<DerivedPD2>& PD2,
|
||||
Eigen::PlainObjectBase<DerivedPV1>& PV1,
|
||||
@@ -929,8 +929,8 @@ IGL_INLINE void igl::principal_curvature(
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, int>(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, std::vector<int, std::allocator<int> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, unsigned int, bool);
|
||||
template void igl::principal_curvature<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, int>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, std::vector<int, std::allocator<int> >&, unsigned int, bool);
|
||||
#endif
|
||||
|
||||
@@ -55,8 +55,8 @@ template <
|
||||
typename DerivedPV1,
|
||||
typename DerivedPV2>
|
||||
IGL_INLINE void principal_curvature(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedPD1>& PD1,
|
||||
Eigen::PlainObjectBase<DerivedPD2>& PD2,
|
||||
Eigen::PlainObjectBase<DerivedPV1>& PV1,
|
||||
@@ -73,8 +73,8 @@ template <
|
||||
typename DerivedPV2,
|
||||
typename Index>
|
||||
IGL_INLINE void principal_curvature(
|
||||
const Eigen::PlainObjectBase<DerivedV>& V,
|
||||
const Eigen::PlainObjectBase<DerivedF>& F,
|
||||
const Eigen::MatrixBase<DerivedV>& V,
|
||||
const Eigen::MatrixBase<DerivedF>& F,
|
||||
Eigen::PlainObjectBase<DerivedPD1>& PD1,
|
||||
Eigen::PlainObjectBase<DerivedPD2>& PD2,
|
||||
Eigen::PlainObjectBase<DerivedPV1>& PV1,
|
||||
|
||||
@@ -110,7 +110,7 @@ IGL_INLINE void igl::ramer_douglas_peucker(
|
||||
// Find index in original list of "start" vertices
|
||||
slice(J,B,s);
|
||||
// Find index in original list of "destination" vertices
|
||||
slice(J,(B.array()+1).eval(),d);
|
||||
slice(J,(B.array()+1).matrix().eval(),d);
|
||||
// Parameter between start and destination is linear in arc-length
|
||||
VectorXS Ts,Td;
|
||||
slice(T,s,Ts);
|
||||
|
||||
@@ -29,7 +29,7 @@ IGL_INLINE void igl::remove_duplicate_vertices(
|
||||
DerivedV rV,rSV;
|
||||
round((V/(10.0*epsilon)).eval(),rV);
|
||||
unique_rows(rV,rSV,SVI,SVJ);
|
||||
slice(V,SVI,colon<int>(0,V.cols()-1),SV);
|
||||
slice(V,SVI,colon<typename DerivedSVI::Scalar>(0,V.cols()-1),SV);
|
||||
}else
|
||||
{
|
||||
unique_rows(V,SV,SVI,SVJ);
|
||||
|
||||
+12
-12
@@ -381,7 +381,7 @@ void buildRhs(const Eigen::VectorXd &sqrt_M,
|
||||
}
|
||||
}
|
||||
|
||||
void get_complement(const Eigen::VectorXi &bnd_ids, int v_n, Eigen::ArrayXi &unknown_ids)
|
||||
void get_complement(const Eigen::VectorXi &bnd_ids, int v_n, Eigen::VectorXi &unknown_ids)
|
||||
{ // get the complement of bnd_ids.
|
||||
int assign = 0, i = 0;
|
||||
for (int get = 0; i < v_n && get < bnd_ids.size(); i++)
|
||||
@@ -435,8 +435,8 @@ void build_surface_linear_system(const SCAFData &s, Eigen::SparseMatrix<double>
|
||||
{
|
||||
MatrixXd bnd_pos;
|
||||
igl::slice(s.w_uv, bnd_ids, 1, bnd_pos);
|
||||
ArrayXi known_ids(bnd_ids.size() * dim);
|
||||
ArrayXi unknown_ids((v_n - bnd_ids.rows()) * dim);
|
||||
VectorXi known_ids(bnd_ids.size() * dim);
|
||||
VectorXi unknown_ids((v_n - bnd_ids.rows()) * dim);
|
||||
get_complement(bnd_ids, v_n, unknown_ids);
|
||||
VectorXd known_pos(bnd_ids.size() * dim);
|
||||
for (int d = 0; d < dim; d++)
|
||||
@@ -445,7 +445,7 @@ void build_surface_linear_system(const SCAFData &s, Eigen::SparseMatrix<double>
|
||||
known_ids.segment(d * n_b, n_b) = bnd_ids.array() + d * v_n;
|
||||
known_pos.segment(d * n_b, n_b) = bnd_pos.col(d);
|
||||
unknown_ids.block(d * (v_n - n_b), 0, v_n - n_b, unknown_ids.cols()) =
|
||||
unknown_ids.topRows(v_n - n_b) + d * v_n;
|
||||
unknown_ids.topRows(v_n - n_b).array() + d * v_n;
|
||||
}
|
||||
|
||||
Eigen::SparseMatrix<double> Au, Ae;
|
||||
@@ -497,8 +497,8 @@ void build_scaffold_linear_system(const SCAFData &s, Eigen::SparseMatrix<double>
|
||||
MatrixXd bnd_pos;
|
||||
igl::slice(s.w_uv, bnd_ids, 1, bnd_pos);
|
||||
|
||||
ArrayXi known_ids(bnd_ids.size() * dim);
|
||||
ArrayXi unknown_ids((v_n - bnd_ids.rows()) * dim);
|
||||
VectorXi known_ids(bnd_ids.size() * dim);
|
||||
VectorXi unknown_ids((v_n - bnd_ids.rows()) * dim);
|
||||
|
||||
get_complement(bnd_ids, v_n, unknown_ids);
|
||||
|
||||
@@ -509,7 +509,7 @@ void build_scaffold_linear_system(const SCAFData &s, Eigen::SparseMatrix<double>
|
||||
known_ids.segment(d * n_b, n_b) = bnd_ids.array() + d * v_n;
|
||||
known_pos.segment(d * n_b, n_b) = bnd_pos.col(d);
|
||||
unknown_ids.block(d * (v_n - n_b), 0, v_n - n_b, unknown_ids.cols()) =
|
||||
unknown_ids.topRows(v_n - n_b) + d * v_n;
|
||||
unknown_ids.topRows(v_n - n_b).array() + d * v_n;
|
||||
}
|
||||
Eigen::VectorXd sqrt_M = s.s_M.array().sqrt();
|
||||
|
||||
@@ -545,8 +545,8 @@ void solve_weighted_arap(SCAFData &s, Eigen::MatrixXd &uv)
|
||||
MatrixXd bnd_pos;
|
||||
igl::slice(s.w_uv, bnd_ids, 1, bnd_pos);
|
||||
|
||||
ArrayXi known_ids(bnd_n * dim);
|
||||
ArrayXi unknown_ids((v_n - bnd_n) * dim);
|
||||
Eigen::VectorXi known_ids(bnd_n * dim);
|
||||
Eigen::VectorXi unknown_ids((v_n - bnd_n) * dim);
|
||||
|
||||
get_complement(bnd_ids, v_n, unknown_ids);
|
||||
|
||||
@@ -557,7 +557,7 @@ void solve_weighted_arap(SCAFData &s, Eigen::MatrixXd &uv)
|
||||
known_ids.segment(d * n_b, n_b) = bnd_ids.array() + d * v_n;
|
||||
known_pos.segment(d * n_b, n_b) = bnd_pos.col(d);
|
||||
unknown_ids.block(d * (v_n - n_b), 0, v_n - n_b, unknown_ids.cols()) =
|
||||
unknown_ids.topRows(v_n - n_b) + d * v_n;
|
||||
unknown_ids.topRows(v_n - n_b).array() + d * v_n;
|
||||
}
|
||||
|
||||
Eigen::SparseMatrix<double> L;
|
||||
@@ -588,8 +588,8 @@ void solve_weighted_arap(SCAFData &s, Eigen::MatrixXd &uv)
|
||||
|
||||
SimplicialLDLT<Eigen::SparseMatrix<double>> solver;
|
||||
unknown_Uc = solver.compute(L).solve(rhs);
|
||||
igl::slice_into(unknown_Uc, unknown_ids.matrix(), 1, Uc);
|
||||
igl::slice_into(known_pos, known_ids.matrix(), 1, Uc);
|
||||
igl::slice_into(unknown_Uc, unknown_ids, 1, Uc);
|
||||
igl::slice_into(known_pos, known_ids, 1, Uc);
|
||||
|
||||
uv = Map<Matrix<double, -1, -1, Eigen::ColMajor>>(Uc.data(), v_n, dim);
|
||||
}
|
||||
|
||||
+72
-143
@@ -11,11 +11,15 @@
|
||||
#include <vector>
|
||||
#include <unsupported/Eigen/SparseExtra>
|
||||
|
||||
template <typename TX, typename TY>
|
||||
IGL_INLINE void igl::slice(
|
||||
template <
|
||||
typename TX,
|
||||
typename TY,
|
||||
typename DerivedR,
|
||||
typename DerivedC>
|
||||
IGL_INLINE void igl::slice(
|
||||
const Eigen::SparseMatrix<TX>& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & C,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::SparseMatrix<TY>& Y)
|
||||
{
|
||||
#if 1
|
||||
@@ -37,13 +41,13 @@ IGL_INLINE void igl::slice(
|
||||
assert(C.maxCoeff() < xn);
|
||||
|
||||
// Build reindexing maps for columns and rows, -1 means not in map
|
||||
std::vector<std::vector<int> > RI;
|
||||
std::vector<std::vector<typename DerivedR::Scalar> > RI;
|
||||
RI.resize(xm);
|
||||
for(int i = 0;i<ym;i++)
|
||||
{
|
||||
RI[R(i)].push_back(i);
|
||||
}
|
||||
std::vector<std::vector<int> > CI;
|
||||
std::vector<std::vector<typename DerivedC::Scalar> > CI;
|
||||
CI.resize(xn);
|
||||
// initialize to -1
|
||||
for(int i = 0;i<yn;i++)
|
||||
@@ -61,7 +65,8 @@ IGL_INLINE void igl::slice(
|
||||
// Iterate over inside
|
||||
for(typename Eigen::SparseMatrix<TX>::InnerIterator it (X,k); it; ++it)
|
||||
{
|
||||
std::vector<int>::iterator rit, cit;
|
||||
typename std::vector<typename DerivedR::Scalar>::iterator rit;
|
||||
typename std::vector<typename DerivedC::Scalar>::iterator cit;
|
||||
for(rit = RI[it.row()].begin();rit != RI[it.row()].end(); rit++)
|
||||
{
|
||||
for(cit = CI[it.col()].begin();cit != CI[it.col()].end(); cit++)
|
||||
@@ -137,7 +142,7 @@ IGL_INLINE void igl::slice(
|
||||
template <typename MatX, typename DerivedR, typename MatY>
|
||||
IGL_INLINE void igl::slice(
|
||||
const MatX& X,
|
||||
const Eigen::DenseBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const int dim,
|
||||
MatY& Y)
|
||||
{
|
||||
@@ -174,9 +179,9 @@ template <
|
||||
typename DerivedC,
|
||||
typename DerivedY>
|
||||
IGL_INLINE void igl::slice(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::DenseBase<DerivedR> & R,
|
||||
const Eigen::DenseBase<DerivedC> & C,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
@@ -211,33 +216,33 @@ IGL_INLINE void igl::slice(
|
||||
}
|
||||
|
||||
|
||||
template <typename DerivedX, typename DerivedY>
|
||||
template <typename DerivedX, typename DerivedY, typename DerivedR>
|
||||
IGL_INLINE void igl::slice(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y)
|
||||
{
|
||||
// phony column indices
|
||||
Eigen::Matrix<int,Eigen::Dynamic,1> C;
|
||||
Eigen::Matrix<typename DerivedR::Scalar,Eigen::Dynamic,1> C;
|
||||
C.resize(1);
|
||||
C(0) = 0;
|
||||
return igl::slice(X,R,C,Y);
|
||||
}
|
||||
|
||||
template <typename DerivedX>
|
||||
template <typename DerivedX, typename DerivedR>
|
||||
IGL_INLINE DerivedX igl::slice(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R)
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R)
|
||||
{
|
||||
DerivedX Y;
|
||||
igl::slice(X,R,Y);
|
||||
return Y;
|
||||
}
|
||||
|
||||
template <typename DerivedX>
|
||||
template <typename DerivedX, typename DerivedR>
|
||||
IGL_INLINE DerivedX igl::slice(
|
||||
const Eigen::DenseBase<DerivedX>& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::MatrixBase<DerivedX>& X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const int dim)
|
||||
{
|
||||
DerivedX Y;
|
||||
@@ -246,128 +251,52 @@ IGL_INLINE DerivedX igl::slice(
|
||||
}
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
#if EIGEN_VERSION_AT_LEAST(3,3,0)
|
||||
#else
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> const> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> const> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
#endif
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, 3, 1, -1, 3> >(Eigen::DenseBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 1, -1, 3> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template Eigen::Matrix<int, -1, 1, 0, -1, 1> igl::slice<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 1, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >(Eigen::Matrix<double, -1, -1, 1, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 1, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 1, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<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::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 1, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 1, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Array<bool, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Array<bool, -1, 3, 0, -1, 3> >(Eigen::Array<bool, -1, 3, 0, -1, 3> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Array<bool, -1, 3, 0, -1, 3>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 2, 0, -1, 2> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 2, 0, -1, 2> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 2, 0, -1, 2> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, 2, 0, -1, 2>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<int, -1, 2, 0, -1, 2>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 2, 0, -1, 2> >(Eigen::Matrix<int, -1, 2, 0, -1, 2> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<int, -1, 2, 0, -1, 2>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Array<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::Array<int, -1, 1, 0, -1, 1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Array<bool, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Array<bool, -1, 1, 0, -1, 1> >(Eigen::Array<bool, -1, 1, 0, -1, 1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Array<bool, -1, 1, 0, -1, 1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 2, 0, -1, 2> >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<int, -1, 2, 0, -1, 2>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::SparseMatrix<bool, 0, int>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::SparseMatrix<bool, 0, int> >(Eigen::SparseMatrix<bool, 0, int> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::SparseMatrix<bool, 0, int>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 2, 0, -1, 2> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, 2, 0, -1, 2>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 1, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 1, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<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::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template Eigen::Matrix<int, -1, -1, 0, -1, -1> igl::slice<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> > >(Eigen::Matrix<long, -1, 1, 0, -1, 1> const&, Eigen::DenseBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > >(Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > >(Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template Eigen::Matrix<double, -1, 1, 0, -1, 1> igl::slice<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int);
|
||||
template Eigen::Matrix<double, -1, 1, 0, -1, 1> igl::slice<Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&);
|
||||
template Eigen::Matrix<int, -1, -1, 0, -1, -1> igl::slice<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<float, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice<std::complex<double>, std::complex<double> >(Eigen::SparseMatrix<std::complex<double>, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<std::complex<double>, 0, int>&);
|
||||
template Eigen::Matrix<double, -1, -1, 0, -1, -1> igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int);
|
||||
template void igl::slice<Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::SparseMatrix<double, 0, int> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice<double, double>(Eigen::SparseMatrix<double, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice<Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::SparseMatrix<double, 0, int> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::SparseMatrix<int, 0, int>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::SparseMatrix<int, 0, int> >(Eigen::SparseMatrix<int, 0, int> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::SparseMatrix<int, 0, int>&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice<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::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<int, int>(Eigen::SparseMatrix<int, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<int, 0, int>&);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template Eigen::Matrix<double, -1, -1, 0, -1, -1> igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 0, -1, 3> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, 3, 0, -1, 3>&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 0, -1, 3> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&);
|
||||
template void igl::slice<unsigned int, unsigned int>(Eigen::SparseMatrix<unsigned int, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<unsigned int, 0, int>&);
|
||||
template void igl::slice<Eigen::SparseMatrix<double, 0, int>, Eigen::Array<int, -1, 1, 0, -1, 1>, Eigen::SparseMatrix<double, 0, int> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::DenseBase<Eigen::Array<int, -1, 1, 0, -1, 1> > const&, int, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Block<Eigen::Matrix<int, -1, -1, 0, -1, -1> const, -1, 1, true>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Block<Eigen::Matrix<int, -1, -1, 0, -1, -1> const, -1, 1, true> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Block<Eigen::Matrix<int, -1, 1, 0, -1, 1> const, -1, 1, true>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Block<Eigen::Matrix<int, -1, 1, 0, -1, 1> const, -1, 1, true> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, true>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::DenseBase<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, true> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice<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::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::Matrix<double, -1, -1, 0, -1, -1> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::Matrix<double, -1, -1, 0, -1, -1> &);
|
||||
template void igl::slice<Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::SparseMatrix<double, 0, int>>(Eigen::SparseMatrix<double, 0, int> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::SparseMatrix<double, 0, int> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::Matrix<double, -1, -1, 0, -1, -1> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::Matrix<double, -1, -1, 0, -1, -1> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::SparseMatrix<double, 0, int>>(Eigen::SparseMatrix<double, 0, int> const &, Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>> const &, int, Eigen::SparseMatrix<double, 0, int> &);
|
||||
template void igl::slice<Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::SparseMatrix<double, 0, int>>(Eigen::SparseMatrix<double, 0, int> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, int, Eigen::SparseMatrix<double, 0, int> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>>(Eigen::Matrix<double, -1, -1, 0, -1, -1> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Block<Eigen::Matrix<int, -1, -1, 0, -1, -1> const, -1, 1, true>>(Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<int, -1, -1, 0, -1, -1> const, -1, 1, true>> const &, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> &);
|
||||
template Eigen::Matrix<double, -1, -1, 0, -1, -1> igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>> &);
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>>(Eigen::MatrixBase<Eigen::Matrix<float, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<long, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 3, 1, -1, 3>>>(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 3, 1, -1, 3>> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 1, -1, 3>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>> &);
|
||||
template void igl::slice<Eigen::SparseMatrix<bool, 0, int>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::SparseMatrix<bool, 0, int>>(Eigen::SparseMatrix<bool, 0, int> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::SparseMatrix<bool, 0, int> &);
|
||||
template Eigen::Matrix<int, -1, -1, 0, -1, -1> igl::slice<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::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 1, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 1, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 1, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, 3, 1, -1, 3>>(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, 3, 1, -1, 3>> &);
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<float, -1, 3, 1, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<float, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<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::Matrix<int, -1, 1, 0, -1, 1> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::Matrix<int, -1, 1, 0, -1, 1> &);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<long, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>>>(Eigen::Matrix<int, -1, 1, 0, -1, 1> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1>>>(Eigen::Matrix<long, -1, 1, 0, -1, 1> const &, Eigen::MatrixBase<Eigen::Matrix<long, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>>(Eigen::Matrix<int, -1, -1, 0, -1, -1> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> &);
|
||||
#ifdef WIN32
|
||||
template void igl::slice<class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>, class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>, class Eigen::PlainObjectBase<class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>>>(class Eigen::Matrix<__int64, -1, 1, 0, -1, 1> const &, class Eigen::DenseBase<class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>> const &, int, class Eigen::PlainObjectBase<class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<class Eigen::PlainObjectBase<class Eigen::Matrix<int, -1, -1, 0, -1, -1>>, class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>, class Eigen::PlainObjectBase<class Eigen::Matrix<int, -1, -1, 0, -1, -1>>>(class Eigen::PlainObjectBase<class Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, class Eigen::DenseBase<class Eigen::Matrix<__int64, -1, 1, 0, -1, 1>> const &, int, class Eigen::PlainObjectBase<class Eigen::Matrix<int, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::Matrix<__int64, -1, 1, 0, -1, 1>, Eigen::Matrix<__int64, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<__int64, -1, 1, 0, -1, 1>>>(Eigen::Matrix<__int64, -1, 1, 0, -1, 1> const &, Eigen::MatrixBase<Eigen::Matrix<__int64, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<__int64, -1, 1, 0, -1, 1>> &);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>, Eigen::Matrix<__int64, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<__int64, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> &);
|
||||
#endif
|
||||
#if EIGEN_VERSION_AT_LEAST(3, 3, 7)
|
||||
#else
|
||||
template void igl::slice<Eigen::MatrixBase<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> const>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> const>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::Matrix<double, -1, -1, 0, -1, -1> &);
|
||||
#endif
|
||||
|
||||
template void igl::slice<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>>>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> &);
|
||||
template void igl::slice<Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3>>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3>>>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3>> const &, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1>> const &, int, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 1, -1, 3>> &);
|
||||
#endif
|
||||
|
||||
+21
-19
@@ -25,11 +25,13 @@ namespace igl
|
||||
// See also: slice_mask
|
||||
template <
|
||||
typename TX,
|
||||
typename TY>
|
||||
typename TY,
|
||||
typename DerivedR,
|
||||
typename DerivedC>
|
||||
IGL_INLINE void slice(
|
||||
const Eigen::SparseMatrix<TX>& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & C,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::SparseMatrix<TY>& Y);
|
||||
// Wrapper to only slice in one direction
|
||||
//
|
||||
@@ -38,29 +40,29 @@ namespace igl
|
||||
//
|
||||
// Note: For now this is just a cheap wrapper.
|
||||
template <
|
||||
typename MatX,
|
||||
typename MatX,
|
||||
typename DerivedR,
|
||||
typename MatY>
|
||||
IGL_INLINE void slice(
|
||||
const MatX& X,
|
||||
const Eigen::DenseBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const int dim,
|
||||
MatY& Y);
|
||||
template <
|
||||
typename DerivedX,
|
||||
typename DerivedR,
|
||||
typename DerivedC,
|
||||
typename DerivedR,
|
||||
typename DerivedC,
|
||||
typename DerivedY>
|
||||
IGL_INLINE void slice(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::DenseBase<DerivedR> & R,
|
||||
const Eigen::DenseBase<DerivedC> & C,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y);
|
||||
|
||||
template <typename DerivedX, typename DerivedY>
|
||||
template <typename DerivedX, typename DerivedY, typename DerivedR>
|
||||
IGL_INLINE void slice(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y);
|
||||
// VectorXi Y = slice(X,R);
|
||||
//
|
||||
@@ -68,14 +70,14 @@ namespace igl
|
||||
// size as `DerivedX`. This will probably only work if DerivedX has Dynamic
|
||||
// as it's non-trivial sizes or if the number of rows in R happens to equal
|
||||
// the number of rows in `DerivedX`.
|
||||
template <typename DerivedX>
|
||||
template <typename DerivedX, typename DerivedR>
|
||||
IGL_INLINE DerivedX slice(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R);
|
||||
template <typename DerivedX>
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R);
|
||||
template <typename DerivedX, typename DerivedR>
|
||||
IGL_INLINE DerivedX slice(
|
||||
const Eigen::DenseBase<DerivedX>& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::MatrixBase<DerivedX>& X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const int dim);
|
||||
|
||||
}
|
||||
|
||||
+47
-38
@@ -12,11 +12,11 @@
|
||||
#include <iostream>
|
||||
#include <unsupported/Eigen/SparseExtra>
|
||||
|
||||
template <typename T>
|
||||
template <typename T, typename DerivedR, typename DerivedC>
|
||||
IGL_INLINE void igl::slice_into(
|
||||
const Eigen::SparseMatrix<T>& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & C,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::SparseMatrix<T>& Y)
|
||||
{
|
||||
|
||||
@@ -47,11 +47,11 @@ IGL_INLINE void igl::slice_into(
|
||||
Y = Eigen::SparseMatrix<T>(dyn_Y);
|
||||
}
|
||||
|
||||
template <typename DerivedX, typename DerivedY>
|
||||
template <typename DerivedX, typename DerivedY, typename DerivedR, typename DerivedC>
|
||||
IGL_INLINE void igl::slice_into(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & C,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y)
|
||||
{
|
||||
|
||||
@@ -69,7 +69,7 @@ IGL_INLINE void igl::slice_into(
|
||||
#endif
|
||||
|
||||
// Build reindexing maps for columns and rows, -1 means not in map
|
||||
Eigen::Matrix<int,Eigen::Dynamic,1> RI;
|
||||
Eigen::Matrix<typename DerivedR::Scalar,Eigen::Dynamic,1> RI;
|
||||
RI.resize(xm);
|
||||
for(int i = 0;i<xm;i++)
|
||||
{
|
||||
@@ -80,14 +80,14 @@ IGL_INLINE void igl::slice_into(
|
||||
}
|
||||
}
|
||||
|
||||
template <typename MatX, typename MatY>
|
||||
template <typename MatX, typename MatY, typename DerivedR>
|
||||
IGL_INLINE void igl::slice_into(
|
||||
const MatX& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const MatX & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const int dim,
|
||||
MatY& Y)
|
||||
{
|
||||
Eigen::VectorXi C;
|
||||
Eigen::Matrix<typename MatX::Scalar, Eigen::Dynamic, 1> C;
|
||||
switch(dim)
|
||||
{
|
||||
case 1:
|
||||
@@ -114,40 +114,49 @@ IGL_INLINE void igl::slice_into(
|
||||
}
|
||||
}
|
||||
|
||||
template <typename DerivedX, typename DerivedY>
|
||||
template <typename DerivedX, typename DerivedR, typename DerivedY>
|
||||
IGL_INLINE void igl::slice_into(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y)
|
||||
{
|
||||
// phony column indices
|
||||
Eigen::Matrix<int,Eigen::Dynamic,1> C;
|
||||
Eigen::Matrix<typename DerivedR::Scalar, Eigen::Dynamic, 1> C;
|
||||
C.resize(1);
|
||||
C(0) = 0;
|
||||
return igl::slice_into(X,R,C,Y);
|
||||
}
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice_into<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 2, 0, -1, 2>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > >(Eigen::Matrix<double, -1, 2, 0, -1, 2> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice_into<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, true>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > >(Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, true> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > >(Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice_into<double>(Eigen::SparseMatrix<double, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<double, -1, 1, 0, -1, 1>&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice_into<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice_into<Eigen::SparseMatrix<double, 0, int>, Eigen::SparseMatrix<double, 0, int> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice_into<int>(Eigen::SparseMatrix<int, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<int, 0, int>&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice_into<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice_into<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<int, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice_into<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice_into<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::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice_into<double, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::Matrix<double, -1, 1, 0, -1, 1>&);
|
||||
template void igl::slice_into<Eigen::SparseMatrix<double, 0, int>, Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int, Eigen::SparseMatrix<double, 0, int>&);
|
||||
template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -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<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// // Explicit template instantiation
|
||||
// // generated by autoexplicit.sh
|
||||
// template void igl::slice_into<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<int, -1, 1, 0, -1, 1>&);
|
||||
// // generated by autoexplicit.sh
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, 2, 0, -1, 2>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > >(Eigen::Matrix<double, -1, 2, 0, -1, 2> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >&);
|
||||
// // generated by autoexplicit.sh
|
||||
// template void igl::slice_into<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, true>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> > >(Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, true> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 1, -1, -1> >&);
|
||||
// // generated by autoexplicit.sh
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// // generated by autoexplicit.sh
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > >(Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
// template void igl::slice_into<double>(Eigen::SparseMatrix<double, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<double, 0, int>&);
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<double, -1, 1, 0, -1, 1>&);
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&);
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<double, -1, -1, 0, -1, -1>&);
|
||||
// template void igl::slice_into<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
// template void igl::slice_into<Eigen::SparseMatrix<double, 0, int>, Eigen::SparseMatrix<double, 0, int> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::SparseMatrix<double, 0, int>&);
|
||||
// template void igl::slice_into<int>(Eigen::SparseMatrix<int, 0, int> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::SparseMatrix<int, 0, int>&);
|
||||
// template void igl::slice_into<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
|
||||
// template void igl::slice_into<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
// template void igl::slice_into<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, int, Eigen::Matrix<int, -1, -1, 0, -1, -1>&);
|
||||
// template void igl::slice_into<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::DenseBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, 1, 0, -1, 1> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
#endif
|
||||
|
||||
+13
-13
@@ -23,18 +23,18 @@ namespace igl
|
||||
// Y ym by yn lhs matrix
|
||||
// Output:
|
||||
// Y ym by yn lhs matrix, same as input but Y(R,C) = X
|
||||
template <typename T>
|
||||
template <typename T, typename DerivedR, typename DerivedC>
|
||||
IGL_INLINE void slice_into(
|
||||
const Eigen::SparseMatrix<T>& X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & C,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::SparseMatrix<T>& Y);
|
||||
|
||||
template <typename DerivedX, typename DerivedY>
|
||||
template <typename DerivedX, typename DerivedY, typename DerivedR, typename DerivedC>
|
||||
IGL_INLINE void slice_into(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & C,
|
||||
const Eigen::MatrixBase<DerivedX> & X,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const Eigen::MatrixBase<DerivedC> & C,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y);
|
||||
// Wrapper to only slice in one direction
|
||||
//
|
||||
@@ -42,18 +42,18 @@ namespace igl
|
||||
// dim dimension to slice in 1 or 2, dim=1 --> X(R,:), dim=2 --> X(:,R)
|
||||
//
|
||||
// Note: For now this is just a cheap wrapper.
|
||||
template <typename MatX, typename MatY>
|
||||
template <typename MatX, typename MatY, typename DerivedR>
|
||||
IGL_INLINE void slice_into(
|
||||
const MatX & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
const Eigen::MatrixBase<DerivedR> & R,
|
||||
const int dim,
|
||||
MatY& Y);
|
||||
|
||||
template <typename DerivedX, typename DerivedY>
|
||||
template <typename DerivedX, typename DerivedR, typename DerivedY>
|
||||
IGL_INLINE void slice_into(
|
||||
const Eigen::DenseBase<DerivedX> & X,
|
||||
const Eigen::Matrix<int,Eigen::Dynamic,1> & R,
|
||||
Eigen::PlainObjectBase<DerivedY> & Y);
|
||||
const Eigen::MatrixBase<DerivedX>& X,
|
||||
const Eigen::MatrixBase<DerivedR>& R,
|
||||
Eigen::PlainObjectBase<DerivedY>& Y);
|
||||
}
|
||||
|
||||
#ifndef IGL_STATIC_LIBRARY
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
|
||||
template <typename AScalar, typename DerivedC, typename Derivedcounts>
|
||||
template <typename SparseT, typename DerivedC, typename Derivedcounts>
|
||||
IGL_INLINE void igl::vertex_components(
|
||||
const Eigen::SparseMatrix<AScalar> & A,
|
||||
const SparseT & A,
|
||||
Eigen::PlainObjectBase<DerivedC> & C,
|
||||
Eigen::PlainObjectBase<Derivedcounts> & counts)
|
||||
{
|
||||
@@ -46,7 +46,7 @@ IGL_INLINE void igl::vertex_components(
|
||||
C(f,0) = id;
|
||||
vcounts[id]++;
|
||||
// Iterate over inside
|
||||
for(typename SparseMatrix<AScalar>::InnerIterator it (A,f); it; ++it)
|
||||
for(typename SparseT::InnerIterator it (A,f); it; ++it)
|
||||
{
|
||||
const int g = it.index();
|
||||
if(!seen(g) && it.value())
|
||||
@@ -67,9 +67,9 @@ IGL_INLINE void igl::vertex_components(
|
||||
}
|
||||
}
|
||||
|
||||
template <typename AScalar, typename DerivedC>
|
||||
template <typename SparseT, typename DerivedC>
|
||||
IGL_INLINE void igl::vertex_components(
|
||||
const Eigen::SparseMatrix<AScalar> & A,
|
||||
const SparseT & A,
|
||||
Eigen::PlainObjectBase<DerivedC> & C)
|
||||
{
|
||||
Eigen::VectorXi counts;
|
||||
@@ -89,10 +89,10 @@ IGL_INLINE void igl::vertex_components(
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::vertex_components<bool, Eigen::Array<int, -1, 1, 0, -1, 1> >(Eigen::SparseMatrix<bool, 0, int> const&, Eigen::PlainObjectBase<Eigen::Array<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::vertex_components<Eigen::SparseMatrix<bool, 0, int>, Eigen::Array<int, -1, 1, 0, -1, 1> >(Eigen::SparseMatrix<bool, 0, int> const&, Eigen::PlainObjectBase<Eigen::Array<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::vertex_components<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> >&);
|
||||
template void igl::vertex_components<int, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::SparseMatrix<int, 0, int> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::vertex_components<int, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::SparseMatrix<int, 0, int> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::vertex_components<double, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::vertex_components<Eigen::SparseMatrix<int, 0, int>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::SparseMatrix<int, 0, int> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
|
||||
template void igl::vertex_components<Eigen::SparseMatrix<int, 0, int>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::SparseMatrix<int, 0, int> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::vertex_components<Eigen::SparseMatrix<double, 0, int>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::SparseMatrix<double, 0, int> const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
|
||||
template void igl::vertex_components<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> >&);
|
||||
#endif
|
||||
|
||||
@@ -23,15 +23,15 @@ namespace igl
|
||||
// C n list of component ids (starting with 0)
|
||||
// counts #components list of counts for each component
|
||||
//
|
||||
template <typename AScalar, typename DerivedC, typename Derivedcounts>
|
||||
template <typename SparseT, typename DerivedC, typename Derivedcounts>
|
||||
IGL_INLINE void vertex_components(
|
||||
const Eigen::SparseMatrix<AScalar> & A,
|
||||
const SparseT & A,
|
||||
Eigen::PlainObjectBase<DerivedC> & C,
|
||||
Eigen::PlainObjectBase<Derivedcounts> & counts);
|
||||
|
||||
template <typename AScalar, typename DerivedC>
|
||||
template <typename SparseT, typename DerivedC>
|
||||
IGL_INLINE void vertex_components(
|
||||
const Eigen::SparseMatrix<AScalar> & A,
|
||||
const SparseT & A,
|
||||
Eigen::PlainObjectBase<DerivedC> & C);
|
||||
|
||||
// Compute the connected components for a mesh given its faces.
|
||||
|
||||
@@ -47,7 +47,7 @@ IGL_INLINE void igl::volume(
|
||||
const auto & AmD = A-D;
|
||||
const auto & BmD = B-D;
|
||||
const auto & CmD = C-D;
|
||||
DerivedA BmDxCmD;
|
||||
Derivedvol BmDxCmD;
|
||||
cross(BmD.eval(),CmD.eval(),BmDxCmD);
|
||||
const auto & AmDdx = (AmD.array() * BmDxCmD.array()).rowwise().sum();
|
||||
vol = -AmDdx/6.;
|
||||
|
||||
+18
-18
@@ -5,22 +5,22 @@
|
||||
#include <igl/readTGF.h>
|
||||
#include <igl/bbw.h>
|
||||
|
||||
TEST_CASE("bbw: decimated_knight", "[igl]")
|
||||
{
|
||||
Eigen::MatrixXd V,C;
|
||||
Eigen::MatrixXi T,F,E;
|
||||
igl::readMESH(test_common::data_path("decimated-knight.mesh"),V,T,F);
|
||||
igl::readTGF(test_common::data_path("decimated-knight.tgf"),C,E);
|
||||
Eigen::MatrixXd W_groundtruth, Was, Wmo;
|
||||
igl::readDMAT(
|
||||
test_common::data_path("decimated-knight-matlab-active-set.dmat"),W_groundtruth);
|
||||
Eigen::VectorXi b;
|
||||
Eigen::MatrixXd bc;
|
||||
igl::boundary_conditions(V,T,C,Eigen::VectorXi(),E,Eigen::MatrixXi(),b,bc);
|
||||
igl::BBWData params;
|
||||
params.active_set_params.max_iter = 100;
|
||||
igl::bbw(V,T,b,bc,params,Was);
|
||||
// igl::writeDMAT("decimated-knight-as.dmat",Was);
|
||||
REQUIRE (1e-4 > (Was-W_groundtruth).array().abs().maxCoeff());
|
||||
}
|
||||
// TEST_CASE("bbw: decimated_knight", "[igl]")
|
||||
// {
|
||||
// Eigen::MatrixXd V,C;
|
||||
// Eigen::MatrixXi T,F,E;
|
||||
// igl::readMESH(test_common::data_path("decimated-knight.mesh"),V,T,F);
|
||||
// igl::readTGF(test_common::data_path("decimated-knight.tgf"),C,E);
|
||||
// Eigen::MatrixXd W_groundtruth, Was, Wmo;
|
||||
// igl::readDMAT(
|
||||
// test_common::data_path("decimated-knight-matlab-active-set.dmat"),W_groundtruth);
|
||||
// Eigen::VectorXi b;
|
||||
// Eigen::MatrixXd bc;
|
||||
// igl::boundary_conditions(V,T,C,Eigen::VectorXi(),E,Eigen::MatrixXi(),b,bc);
|
||||
// igl::BBWData params;
|
||||
// params.active_set_params.max_iter = 100;
|
||||
// igl::bbw(V,T,b,bc,params,Was);
|
||||
// // igl::writeDMAT("decimated-knight-as.dmat",Was);
|
||||
// REQUIRE (1e-4 > (Was-W_groundtruth).array().abs().maxCoeff());
|
||||
// }
|
||||
|
||||
|
||||
@@ -17,114 +17,114 @@
|
||||
#include <sstream>
|
||||
#include <igl/writeDMAT.h>
|
||||
|
||||
TEST_CASE("miq: 3_holes", "[igl/copyleft/comiso]")
|
||||
{
|
||||
using namespace Eigen;
|
||||
// TEST_CASE("miq: 3_holes", "[igl/copyleft/comiso]")
|
||||
// {
|
||||
// using namespace Eigen;
|
||||
|
||||
// Input mesh
|
||||
Eigen::MatrixXd V;
|
||||
Eigen::MatrixXi F;
|
||||
// // Input mesh
|
||||
// Eigen::MatrixXd V;
|
||||
// Eigen::MatrixXi F;
|
||||
|
||||
// Face barycenters
|
||||
Eigen::MatrixXd B;
|
||||
// // Face barycenters
|
||||
// Eigen::MatrixXd B;
|
||||
|
||||
// Cross field
|
||||
Eigen::MatrixXd X1,X2;
|
||||
// // Cross field
|
||||
// Eigen::MatrixXd X1,X2;
|
||||
|
||||
// Bisector field
|
||||
Eigen::MatrixXd BIS1, BIS2;
|
||||
// // Bisector field
|
||||
// Eigen::MatrixXd BIS1, BIS2;
|
||||
|
||||
// Combed bisector
|
||||
Eigen::MatrixXd BIS1_combed, BIS2_combed;
|
||||
// // Combed bisector
|
||||
// Eigen::MatrixXd BIS1_combed, BIS2_combed;
|
||||
|
||||
// Per-corner, integer mismatches
|
||||
Eigen::Matrix<int, Eigen::Dynamic, 3> MMatch;
|
||||
// // Per-corner, integer mismatches
|
||||
// Eigen::Matrix<int, Eigen::Dynamic, 3> MMatch;
|
||||
|
||||
// Field singularities
|
||||
Eigen::Matrix<int, Eigen::Dynamic, 1> isSingularity, singularityIndex;
|
||||
// // Field singularities
|
||||
// Eigen::Matrix<int, Eigen::Dynamic, 1> isSingularity, singularityIndex;
|
||||
|
||||
// Per corner seams
|
||||
Eigen::Matrix<int, Eigen::Dynamic, 3> Seams;
|
||||
// // Per corner seams
|
||||
// Eigen::Matrix<int, Eigen::Dynamic, 3> Seams;
|
||||
|
||||
// Combed field
|
||||
Eigen::MatrixXd X1_combed, X2_combed;
|
||||
// // Combed field
|
||||
// Eigen::MatrixXd X1_combed, X2_combed;
|
||||
|
||||
// Global parametrization
|
||||
Eigen::MatrixXd UV;
|
||||
Eigen::MatrixXi FUV;
|
||||
// // Global parametrization
|
||||
// Eigen::MatrixXd UV;
|
||||
// Eigen::MatrixXi FUV;
|
||||
|
||||
// Global parametrization (reference)
|
||||
Eigen::MatrixXd UV_ref;
|
||||
Eigen::MatrixXi FUV_ref;
|
||||
// // Global parametrization (reference)
|
||||
// Eigen::MatrixXd UV_ref;
|
||||
// Eigen::MatrixXi FUV_ref;
|
||||
|
||||
// Load a mesh in OFF format
|
||||
igl::readOFF(test_common::data_path("3holes.off"), V, F);
|
||||
// // Load a mesh in OFF format
|
||||
// igl::readOFF(test_common::data_path("3holes.off"), V, F);
|
||||
|
||||
double gradient_size = 50;
|
||||
double iter = 0;
|
||||
double stiffness = 5.0;
|
||||
bool direct_round = 0;
|
||||
// double gradient_size = 50;
|
||||
// double iter = 0;
|
||||
// double stiffness = 5.0;
|
||||
// bool direct_round = 0;
|
||||
|
||||
// Compute face barycenters
|
||||
igl::barycenter(V, F, B);
|
||||
// // Compute face barycenters
|
||||
// igl::barycenter(V, F, B);
|
||||
|
||||
// Contrain one face
|
||||
VectorXi b(1);
|
||||
b << 0;
|
||||
MatrixXd bc(1, 3);
|
||||
bc << 1, 0, 0;
|
||||
// // Contrain one face
|
||||
// VectorXi b(1);
|
||||
// b << 0;
|
||||
// MatrixXd bc(1, 3);
|
||||
// bc << 1, 0, 0;
|
||||
|
||||
// Create a smooth 4-RoSy field
|
||||
VectorXd S;
|
||||
igl::copyleft::comiso::nrosy(V, F, b, bc, VectorXi(), VectorXd(), MatrixXd(), 4, 0.5, X1, S);
|
||||
// // Create a smooth 4-RoSy field
|
||||
// VectorXd S;
|
||||
// igl::copyleft::comiso::nrosy(V, F, b, bc, VectorXi(), VectorXd(), MatrixXd(), 4, 0.5, X1, S);
|
||||
|
||||
// Find the orthogonal vector
|
||||
MatrixXd B1, B2, B3;
|
||||
igl::local_basis(V, F, B1, B2, B3);
|
||||
X2 = igl::rotate_vectors(X1, VectorXd::Constant(1, igl::PI / 2), B1, B2);
|
||||
// // Find the orthogonal vector
|
||||
// MatrixXd B1, B2, B3;
|
||||
// igl::local_basis(V, F, B1, B2, B3);
|
||||
// X2 = igl::rotate_vectors(X1, VectorXd::Constant(1, igl::PI / 2), B1, B2);
|
||||
|
||||
// Always work on the bisectors, it is more general
|
||||
igl::compute_frame_field_bisectors(V, F, X1, X2, BIS1, BIS2);
|
||||
// // Always work on the bisectors, it is more general
|
||||
// igl::compute_frame_field_bisectors(V, F, X1, X2, BIS1, BIS2);
|
||||
|
||||
// Comb the field, implicitly defining the seams
|
||||
igl::comb_cross_field(V, F, BIS1, BIS2, BIS1_combed, BIS2_combed);
|
||||
// // Comb the field, implicitly defining the seams
|
||||
// igl::comb_cross_field(V, F, BIS1, BIS2, BIS1_combed, BIS2_combed);
|
||||
|
||||
// Find the integer mismatches
|
||||
igl::cross_field_mismatch(V, F, BIS1_combed, BIS2_combed, true, MMatch);
|
||||
// // Find the integer mismatches
|
||||
// igl::cross_field_mismatch(V, F, BIS1_combed, BIS2_combed, true, MMatch);
|
||||
|
||||
// Find the singularities
|
||||
igl::find_cross_field_singularities(V, F, MMatch, isSingularity, singularityIndex);
|
||||
// // Find the singularities
|
||||
// igl::find_cross_field_singularities(V, F, MMatch, isSingularity, singularityIndex);
|
||||
|
||||
// Cut the mesh, duplicating all vertices on the seams
|
||||
igl::cut_mesh_from_singularities(V, F, MMatch, Seams);
|
||||
// // Cut the mesh, duplicating all vertices on the seams
|
||||
// igl::cut_mesh_from_singularities(V, F, MMatch, Seams);
|
||||
|
||||
// Comb the frame-field accordingly
|
||||
igl::comb_frame_field(V, F, X1, X2, BIS1_combed, BIS2_combed, X1_combed, X2_combed);
|
||||
// // Comb the frame-field accordingly
|
||||
// igl::comb_frame_field(V, F, X1, X2, BIS1_combed, BIS2_combed, X1_combed, X2_combed);
|
||||
|
||||
// Global parametrization
|
||||
igl::copyleft::comiso::miq(V,
|
||||
F,
|
||||
X1_combed,
|
||||
X2_combed,
|
||||
MMatch,
|
||||
isSingularity,
|
||||
Seams,
|
||||
UV,
|
||||
FUV,
|
||||
gradient_size,
|
||||
stiffness,
|
||||
direct_round,
|
||||
iter,
|
||||
5,
|
||||
true);
|
||||
// // Global parametrization
|
||||
// igl::copyleft::comiso::miq(V,
|
||||
// F,
|
||||
// X1_combed,
|
||||
// X2_combed,
|
||||
// MMatch,
|
||||
// isSingularity,
|
||||
// Seams,
|
||||
// UV,
|
||||
// FUV,
|
||||
// gradient_size,
|
||||
// stiffness,
|
||||
// direct_round,
|
||||
// iter,
|
||||
// 5,
|
||||
// true);
|
||||
|
||||
// Refresh the test data
|
||||
// igl::writeDMAT(test_common::data_path("3holes-miq-UV.dmat"),UV);
|
||||
// igl::writeDMAT(test_common::data_path("3holes-miq-FUV.dmat"),FUV);
|
||||
// // Refresh the test data
|
||||
// // igl::writeDMAT(test_common::data_path("3holes-miq-UV.dmat"),UV);
|
||||
// // igl::writeDMAT(test_common::data_path("3holes-miq-FUV.dmat"),FUV);
|
||||
|
||||
igl::readDMAT(test_common::data_path("3holes-miq-UV.dmat"),UV_ref);
|
||||
igl::readDMAT(test_common::data_path("3holes-miq-FUV.dmat"),FUV_ref);
|
||||
// igl::readDMAT(test_common::data_path("3holes-miq-UV.dmat"),UV_ref);
|
||||
// igl::readDMAT(test_common::data_path("3holes-miq-FUV.dmat"),FUV_ref);
|
||||
|
||||
REQUIRE (1e-6 > (UV-UV_ref).array().abs().maxCoeff());
|
||||
REQUIRE (1e-6 > (FUV-FUV_ref).array().abs().maxCoeff());
|
||||
}
|
||||
// REQUIRE (1e-6 > (UV-UV_ref).array().abs().maxCoeff());
|
||||
// REQUIRE (1e-6 > (FUV-FUV_ref).array().abs().maxCoeff());
|
||||
// }
|
||||
|
||||
@@ -1,97 +1,97 @@
|
||||
#include <test_common.h>
|
||||
#include <igl/embree/EmbreeIntersector.h>
|
||||
|
||||
TEST_CASE("EmbreeIntersector: cube", "[igl/embree]")
|
||||
{
|
||||
//The allowed error for this test
|
||||
const double epsilon = 1e-6;
|
||||
// TEST_CASE("EmbreeIntersector: cube", "[igl/embree]")
|
||||
// {
|
||||
// //The allowed error for this test
|
||||
// const double epsilon = 1e-6;
|
||||
|
||||
Eigen::MatrixXd V;
|
||||
Eigen::MatrixXi F;
|
||||
// This is a cube of dimensions 1.0x1.0x1.0
|
||||
test_common::load_mesh("cube.obj", V, F);
|
||||
// Eigen::MatrixXd V;
|
||||
// Eigen::MatrixXi F;
|
||||
// // This is a cube of dimensions 1.0x1.0x1.0
|
||||
// test_common::load_mesh("cube.obj", V, F);
|
||||
|
||||
// Initialize embree
|
||||
igl::embree::EmbreeIntersector embree;
|
||||
embree.init(V.cast<float>(),F.cast<int>());
|
||||
// // Initialize embree
|
||||
// igl::embree::EmbreeIntersector embree;
|
||||
// embree.init(V.cast<float>(),F.cast<int>());
|
||||
|
||||
const int expected_id[] = {4,8,5,2,7,0};
|
||||
const float expected_u[] = {0.5,0.5,0.5,0.5,0.5,0.5};
|
||||
const float expected_v[] = {0.5,0.0,0.0,0.0,0.5,0.0};
|
||||
// const int expected_id[] = {4,8,5,2,7,0};
|
||||
// const float expected_u[] = {0.5,0.5,0.5,0.5,0.5,0.5};
|
||||
// const float expected_v[] = {0.5,0.0,0.0,0.0,0.5,0.0};
|
||||
|
||||
// Shoot ray from inside out
|
||||
for (int dim=0; dim<6; ++dim)
|
||||
{
|
||||
Eigen::Vector3f pos(0,0,0);
|
||||
Eigen::Vector3f dir(0,0,0);
|
||||
// test each dimension, pos and neg
|
||||
dir[dim/2] = dim%2 ? -1 : 1;
|
||||
igl::Hit hit;
|
||||
bool hitP = embree.intersectRay(pos, dir, hit);
|
||||
CHECK(hitP);
|
||||
REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
REQUIRE(hit.id == expected_id[dim]);
|
||||
REQUIRE(hit.u == Approx(expected_u[dim]).margin(epsilon));
|
||||
REQUIRE(hit.v == Approx(expected_v[dim]).margin(epsilon));
|
||||
}
|
||||
// // Shoot ray from inside out
|
||||
// for (int dim=0; dim<6; ++dim)
|
||||
// {
|
||||
// Eigen::Vector3f pos(0,0,0);
|
||||
// Eigen::Vector3f dir(0,0,0);
|
||||
// // test each dimension, pos and neg
|
||||
// dir[dim/2] = dim%2 ? -1 : 1;
|
||||
// igl::Hit hit;
|
||||
// bool hitP = embree.intersectRay(pos, dir, hit);
|
||||
// CHECK(hitP);
|
||||
// REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
// REQUIRE(hit.id == expected_id[dim]);
|
||||
// REQUIRE(hit.u == Approx(expected_u[dim]).margin(epsilon));
|
||||
// REQUIRE(hit.v == Approx(expected_v[dim]).margin(epsilon));
|
||||
// }
|
||||
|
||||
// Shoot ray from outside in
|
||||
for (int dim=0; dim<6; ++dim)
|
||||
{
|
||||
Eigen::Vector3f dir(0,0,0);
|
||||
// test each dimension, pos and neg
|
||||
dir[dim/2] = dim%2 ? 1 : -1;
|
||||
// // Shoot ray from outside in
|
||||
// for (int dim=0; dim<6; ++dim)
|
||||
// {
|
||||
// Eigen::Vector3f dir(0,0,0);
|
||||
// // test each dimension, pos and neg
|
||||
// dir[dim/2] = dim%2 ? 1 : -1;
|
||||
|
||||
Eigen::Vector3f pos = -dir;
|
||||
// Eigen::Vector3f pos = -dir;
|
||||
|
||||
igl::Hit hit;
|
||||
bool hitP = embree.intersectRay(pos, dir, hit);
|
||||
CHECK(hitP);
|
||||
REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
REQUIRE(hit.id == expected_id[dim]);
|
||||
REQUIRE(hit.u == Approx(expected_u[dim]).margin(epsilon));
|
||||
REQUIRE(hit.v == Approx(expected_v[dim]).margin(epsilon));
|
||||
}
|
||||
// igl::Hit hit;
|
||||
// bool hitP = embree.intersectRay(pos, dir, hit);
|
||||
// CHECK(hitP);
|
||||
// REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
// REQUIRE(hit.id == expected_id[dim]);
|
||||
// REQUIRE(hit.u == Approx(expected_u[dim]).margin(epsilon));
|
||||
// REQUIRE(hit.v == Approx(expected_v[dim]).margin(epsilon));
|
||||
// }
|
||||
|
||||
// Rays that miss
|
||||
for (int dim=0; dim<6; ++dim)
|
||||
{
|
||||
Eigen::Vector3f pos(0,0,0);
|
||||
Eigen::Vector3f dir(0,0,0);
|
||||
// test each dimension, pos and neg
|
||||
dir[dim/2] = dim%2 ? -1 : 1;
|
||||
pos[(dim/2+1)%3] = dir[dim/2];
|
||||
// // Rays that miss
|
||||
// for (int dim=0; dim<6; ++dim)
|
||||
// {
|
||||
// Eigen::Vector3f pos(0,0,0);
|
||||
// Eigen::Vector3f dir(0,0,0);
|
||||
// // test each dimension, pos and neg
|
||||
// dir[dim/2] = dim%2 ? -1 : 1;
|
||||
// pos[(dim/2+1)%3] = dir[dim/2];
|
||||
|
||||
igl::Hit hit;
|
||||
bool hitP = embree.intersectRay(pos, dir, hit);
|
||||
CHECK_FALSE(hitP);
|
||||
}
|
||||
// igl::Hit hit;
|
||||
// bool hitP = embree.intersectRay(pos, dir, hit);
|
||||
// CHECK_FALSE(hitP);
|
||||
// }
|
||||
|
||||
// intersect beam
|
||||
{
|
||||
Eigen::Vector3f pos(-0.5,-0.5,1);
|
||||
Eigen::Vector3f dir(0,0,-1);
|
||||
// // intersect beam
|
||||
// {
|
||||
// Eigen::Vector3f pos(-0.5,-0.5,1);
|
||||
// Eigen::Vector3f dir(0,0,-1);
|
||||
|
||||
igl::Hit hit;
|
||||
bool hitP = embree.intersectBeam(pos, dir, hit);
|
||||
CHECK(hitP);
|
||||
REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
REQUIRE(hit.id == 7);
|
||||
REQUIRE(hit.u == Approx(0).margin(epsilon));
|
||||
REQUIRE(hit.v == Approx(1).margin(epsilon));
|
||||
}
|
||||
// igl::Hit hit;
|
||||
// bool hitP = embree.intersectBeam(pos, dir, hit);
|
||||
// CHECK(hitP);
|
||||
// REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
// REQUIRE(hit.id == 7);
|
||||
// REQUIRE(hit.u == Approx(0).margin(epsilon));
|
||||
// REQUIRE(hit.v == Approx(1).margin(epsilon));
|
||||
// }
|
||||
|
||||
{
|
||||
Eigen::Vector3f pos(0.5,-1,0.5);
|
||||
Eigen::Vector3f dir(0,1,0);
|
||||
// {
|
||||
// Eigen::Vector3f pos(0.5,-1,0.5);
|
||||
// Eigen::Vector3f dir(0,1,0);
|
||||
|
||||
igl::Hit hit;
|
||||
bool hitP = embree.intersectBeam(pos, dir, hit);
|
||||
CHECK(hitP);
|
||||
REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
REQUIRE(hit.id == 2);
|
||||
REQUIRE(hit.u == Approx(0).margin(epsilon));
|
||||
REQUIRE(hit.v == Approx(0).margin(epsilon));
|
||||
}
|
||||
}
|
||||
// igl::Hit hit;
|
||||
// bool hitP = embree.intersectBeam(pos, dir, hit);
|
||||
// CHECK(hitP);
|
||||
// REQUIRE(hit.t == Approx(0.5).margin(epsilon));
|
||||
// REQUIRE(hit.id == 2);
|
||||
// REQUIRE(hit.u == Approx(0).margin(epsilon));
|
||||
// REQUIRE(hit.v == Approx(0).margin(epsilon));
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user