// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2013 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 "shape_diameter_function.h" #include "../shape_diameter_function.h" #include "EmbreeIntersector.h" #include "../Hit.h" template < typename DerivedP, typename DerivedN, typename DerivedS > IGL_INLINE void igl::embree::shape_diameter_function( const igl::embree::EmbreeIntersector & ei, const Eigen::PlainObjectBase & P, const Eigen::PlainObjectBase & N, const int num_samples, Eigen::PlainObjectBase & S) { const auto & shoot_ray = [&ei]( const Eigen::Vector3f& s, const Eigen::Vector3f& dir)->double { igl::Hit hit; const float tnear = 1e-4f; if(ei.intersectRay(s,dir,hit,tnear)) { return hit.t; }else { return std::numeric_limits::infinity(); } }; return igl::shape_diameter_function(shoot_ray,P,N,num_samples,S); } template < typename DerivedV, typename DerivedF, typename DerivedP, typename DerivedN, typename DerivedS > IGL_INLINE void igl::embree::shape_diameter_function( const Eigen::PlainObjectBase & V, const Eigen::PlainObjectBase & F, const Eigen::PlainObjectBase & P, const Eigen::PlainObjectBase & N, const int num_samples, Eigen::PlainObjectBase & S) { using namespace Eigen; EmbreeIntersector ei; ei.init(V.template cast(),F.template cast()); shape_diameter_function(ei,P,N,num_samples,S); } #ifdef IGL_STATIC_LIBRARY // Explicit template instantiation template void igl::embree::shape_diameter_function, Eigen::Matrix, Eigen::Matrix >(igl::embree::EmbreeIntersector const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, int, Eigen::PlainObjectBase >&); template void igl::embree::shape_diameter_function, Eigen::Matrix, Eigen::Matrix >(igl::embree::EmbreeIntersector const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, int, Eigen::PlainObjectBase >&); template void igl::embree::shape_diameter_function, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, int, Eigen::PlainObjectBase >&); template void igl::embree::shape_diameter_function, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, int, Eigen::PlainObjectBase >&); template void igl::embree::shape_diameter_function, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, Eigen::PlainObjectBase > const&, int, Eigen::PlainObjectBase >&); #endif