17#include <lagrange/internal/orientable_patches.h>
21template <
typename DerivedF,
typename DerivedFF,
typename DerivedC>
23 const Eigen::MatrixBase<DerivedF>& F,
24 Eigen::PlainObjectBase<DerivedFF>& FF,
25 Eigen::PlainObjectBase<DerivedC>& C)
27 Eigen::SparseMatrix<typename DerivedF::Scalar> A;
28 lagrange::internal::orientable_patches(F, C, A);
31 const int m =
static_cast<int>(F.rows());
33 const int num_cc = C.maxCoeff() + 1;
34 Eigen::VectorXi seen = Eigen::VectorXi::Zero(m);
37 const int ES[3][2] = {{1, 2}, {2, 0}, {0, 1}};
39 if (((
void*)&FF) != ((
void*)&F)) {
43 tbb::parallel_for(0, num_cc, [&](
int c) {
44 std::queue<typename DerivedF::Scalar> Q;
46 for (
int f = 0; f < FF.rows(); f++) {
54 const typename DerivedF::Scalar f = Q.front();
61 for (
typename Eigen::SparseMatrix<typename DerivedF::Scalar>::InnerIterator it(A, f);
65 if (it.value() != 0 && it.row() != f) {
66 const int n =
static_cast<int>(it.row());
69 for (
int efi = 0; efi < 3; efi++) {
71 Eigen::Vector2i ef(FF(f, ES[efi][0]), FF(f, ES[efi][1]));
73 for (
int eni = 0; eni < 3; eni++) {
75 Eigen::Vector2i en(FF(n, ES[eni][0]), FF(n, ES[eni][1]));
77 if (ef(0) == en(0) && ef(1) == en(1)) {
79 FF.row(n) = FF.row(n).reverse().eval();
nullptr_t, size_t, ptrdiff_t basic_ostream bad_weak_ptr extent, remove_extent, is_array,...
Definition: attribute_string_utils.h:21