void judgeTopoEdgeType(const TopoDS_Edge& topoedge){
double first = 0.0;
double last = 0.0;
Handle(Geom_Curve) handleGeomCurve = BRep_Tool::Curve(topoedge,first,last);
if(handleGeomCurve .IsNull()){
return;
}
if(handleGeomCurve->IsKind(STANDARD_TYPE(Geom_Line))){
std::cout << "Type is Geom_Line" << std::endl;
}
else if(handleGeomCurve->IsKind(STANDARD_TYPE(Geom_Circle))){
std::cout << "Type is Geom_Circle" << std::endl;
}
}
int main(){
gp_Pnt pnt1(0,0,0);
gp_Pnt pnt2(10,0,0);
BRepBuilderAPI_MakeEdge makeLineEdge(pnt1,pnt2);
if(makeLineEdge.IsDone()){
TopoDS_Edge topoEdge = makeLineEdge.Edge();
judgeTopoEdgeType(topoEdge);
}
gp_Circ circle(gp_Ax2(),20);
BRepBuilderAPI_MakeEdge makeCircleEdge(circle);
if(makeCircleEdge.IsDone()){
TopoDS_Edge topoEdge = makeCircleEdge.Edge();
judgeTopoEdgeType(topoEdge);
}
}
//结果输出:
//Type is Geom_Line
//Type is Geom_Circle
其他继承Geom_Curve的子类也可判断
TopoDS_Face类型通过BRep_Tool::Surface判断