// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2015 Alec Jacobson // // This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #include "winding_number.h" #include "WindingNumberAABB.h" #include "signed_angle.h" #include "parallel_for.h" #include "solid_angle.h" #include "PI.h" #include template < typename DerivedV, typename DerivedF, typename DerivedO, typename DerivedW> IGL_INLINE void igl::winding_number( const Eigen::MatrixBase & V, const Eigen::MatrixBase & F, const Eigen::MatrixBase & O, Eigen::PlainObjectBase & W) { using namespace Eigen; // make room for output W.resize(O.rows(),1); switch(F.cols()) { case 2: { igl::parallel_for(O.rows(),[&](const int o) { W(o) = winding_number(V,F,O.row(o)); },10000); return; } case 3: { WindingNumberAABB< Eigen::Matrix, DerivedV, DerivedF> hier(V,F); hier.grow(); // loop over origins igl::parallel_for(O.rows(),[&](const int o) { W(o) = hier.winding_number(O.row(o)); },10000); break; } default: assert(false && "Bad simplex size"); break; } } template < typename DerivedV, typename DerivedF, typename Derivedp> IGL_INLINE typename DerivedV::Scalar igl::winding_number( const Eigen::MatrixBase & V, const Eigen::MatrixBase & F, const Eigen::MatrixBase & p) { typedef typename DerivedV::Scalar wType; const int ss = F.cols(); const int m = F.rows(); wType w = 0; for(int f = 0;f::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template void igl::winding_number, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::PlainObjectBase >&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); // generated by autoexplicit.sh template Eigen::Matrix::Scalar igl::winding_number, Eigen::Matrix, Eigen::Matrix >(Eigen::MatrixBase > const&, Eigen::MatrixBase > const&, Eigen::MatrixBase > const&); #endif