我正在使用CGAL来计算3d三角形之间的交点。我需要验证交叉点是否返回点、线或三角形。
typedef CGAL::Cartesian<double> tc;
typedef tc::Triangle_3 Triangle3;
CGAL::cpp11::result_of<tc::Intersect_3(Triangle3,Triangle3)>::type
resultL1 = CGAL::intersection(*t_3,*tLado1_3);
if (resultL1){ // LINE 110
boost::apply_visitor(Intersection_visitor(), *resultL1); // LINE 111
}交叉口访问者:
template<typename R>
struct Intersection_visitor {
typedef void result_type;
void operator()(const Point3<R>& p) const{
// handle point
}
void operator()(const Segment_3<R>& s) const{
// handle segment
}
void operator()(const Triangle3<R>& t) const{
// handle triangle
}
};这给了我两个错误:
TextureManager.cpp:110: error: invalid type argument of unary '*' (have 'bool')和
TextureManager.cpp:111: error: could not convert 'resultL1' from 'CGAL::cpp11::result_of<CGAL::CommonKernelFunctors::Intersect_3<CGAL::Cartesian<double> >(CGAL::Triangle_3<CGAL::Cartesian<double> >, CGAL::Triangle_3<CGAL::Cartesian<double> >)>::type {aka CGAL::Object}' to 'bool'有人知道怎么解决这些问题吗?
发布于 2014-08-06 12:59:29
根据manual page,您在访问器中缺少一个可能的运算符()类型。下面的示例编译得很好。
#include <CGAL/Cartesian.h>
typedef CGAL::Cartesian<double> tc;
typedef tc::Triangle_3 Triangle3;
template<typename R>
struct Intersection_visitor {
typedef void result_type;
void operator()(const CGAL::Point_3<R>& /* p */) const{
// handle point
}
void operator()(const CGAL::Segment_3<R>& /* s */) const{
// handle segment
}
void operator()(const CGAL::Triangle_3<R>& /* t */) const{
// handle triangle
}
void operator()(const std::vector< CGAL::Point_3<R> >& /* t */) const{
// handle triangle
}
};
int main()
{
Triangle3 t1, t2;
CGAL::cpp11::result_of<tc::Intersect_3(Triangle3,Triangle3)>::type
resultL1 = CGAL::intersection(t1, t2);
if (resultL1){ // LINE 110
boost::apply_visitor(Intersection_visitor<tc>(), *resultL1); // LINE 111
}
}https://stackoverflow.com/questions/25123939
复制相似问题