#include #include namespace igl { namespace predicates { using REAL = double; template IGL_INLINE Orientation orient2d( const Eigen::MatrixBase& pa, const Eigen::MatrixBase& pb, const Eigen::MatrixBase& pc) { using Point = Eigen::Matrix; const Point& a = pa.template cast(); const Point& b = pb.template cast(); const Point& c = pc.template cast(); auto r = ::orient2d( const_cast(a.data()), const_cast(b.data()), const_cast(c.data())); if (r > 0) return Orientation::POSITIVE; else if (r < 0) return Orientation::NEGATIVE; else return Orientation::COLLINEAR; } template IGL_INLINE Orientation orient3d( const Eigen::MatrixBase& pa, const Eigen::MatrixBase& pb, const Eigen::MatrixBase& pc, const Eigen::MatrixBase& pd) { using Point = Eigen::Matrix; const Point& a = pa.template cast(); const Point& b = pb.template cast(); const Point& c = pc.template cast(); const Point& d = pd.template cast(); auto r = ::orient3d( const_cast(a.data()), const_cast(b.data()), const_cast(c.data()), const_cast(d.data())); if (r > 0) return Orientation::POSITIVE; else if (r < 0) return Orientation::NEGATIVE; else return Orientation::COPLANAR; } template IGL_INLINE Orientation incircle( const Eigen::MatrixBase& pa, const Eigen::MatrixBase& pb, const Eigen::MatrixBase& pc, const Eigen::MatrixBase& pd) { using Point = Eigen::Matrix; const Point& a = pa.template cast(); const Point& b = pb.template cast(); const Point& c = pc.template cast(); const Point& d = pd.template cast(); auto r = ::incircle( const_cast(a.data()), const_cast(b.data()), const_cast(c.data()), const_cast(d.data())); if (r > 0) return Orientation::INSIDE; else if (r < 0) return Orientation::OUTSIDE; else return Orientation::COCIRCULAR; } template IGL_INLINE Orientation insphere( const Eigen::MatrixBase& pa, const Eigen::MatrixBase& pb, const Eigen::MatrixBase& pc, const Eigen::MatrixBase& pd, const Eigen::MatrixBase& pe) { using Point = Eigen::Matrix; const Point& a = pa.template cast(); const Point& b = pb.template cast(); const Point& c = pc.template cast(); const Point& d = pd.template cast(); const Point& e = pe.template cast(); auto r = ::insphere( const_cast(a.data()), const_cast(b.data()), const_cast(c.data()), const_cast(d.data()), const_cast(e.data())); if (r > 0) return Orientation::INSIDE; else if (r < 0) return Orientation::OUTSIDE; else return Orientation::COSPHERICAL; } } } #ifdef IGL_STATIC_LIBRARY // Explicit template instantiation template igl::predicates::Orientation igl::predicates::orient2d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient2d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient2d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient2d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient3d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient3d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient3d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::orient3d> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::incircle> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::incircle> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::incircle> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::incircle> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::insphere> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::insphere> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::insphere> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); template igl::predicates::Orientation igl::predicates::insphere> ( const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>&, const Eigen::MatrixBase>& ); #endif