使用IntAna_QuadQuadGeo这个类可以实现,下面是一段代码示例。
/// the instersection line of the two plane
gp_Pnt pnt_in_plane1(point_estimates[0](0),point_estimates[0](1),point_estimates[0](2));
gp_Pnt pnt_in_plane2(point_estimates[1](0),point_estimates[1](1),point_estimates[1](2));
gp_Dir dir_to_plane1(normal_estimates[0](0),normal_estimates[0](1),normal_estimates[0](2));
gp_Dir dir_to_plane2(normal_estimates[1](0),normal_estimates[1](1),normal_estimates[1](2));
//构建两个平面:用平面内一点和平面的法向量
gp_Pln plane1(pnt_in_plane1,dir_to_plane1);
gp_Pln plane2(pnt_in_plane2,dir_to_plane2);
IntAna_QuadQuadGeo inter_plane2plane(plane1,plane2,0.1,0.1);
gp_Lin inter_line;
if(inter_plane2plane.IsDone()){
//检查是否有相交结果
if(inter_plane2plane.NbSolutions()>0){
//注意:openCASCADE是从1开始计数,所以下面的1表示第0个点哈!!
inter_line = inter_plane2plane.Line(1);
}else{
JH_INFO_TRACE("inter_plane2plane.NbSolutions()==0");
return false;
}
}else{
JH_INFO_TRACE("inter_plane2plane.IsDone() error");
return false;
}
IntAna_QuadQuadGeo这个类不仅仅可以求解平面相交,看他的头文件里面还有各种曲面和曲面,平面和曲面求交线。大家可以通过简单的代码实现去测试