具有OPEN CASCADE的曲面交点

时间:2017-02-07 13:58:11

标签: c++ intersection surface opencascade

我对两个表面之间的交叉点有疑问。 第一个是修剪的,而第二个是未修剪的。

我使用BRepAlgoAPI_Section与两个曲面相交并获得交叉边(在我的例子中只有一个):

这是我的代码,在这里我做了交集:

TopoDS_Face trimface, face;

BRepAlgoAPI_Section ffsect( trimface, face, Standard_True);
ffsect.Approximation(Standard_True);
ffsect.Build();

这里我在节边之间进行迭代。对于每个边缘,我创建一个TopoDS_Edge以放在屏幕上。

Standard_Real pFirst, pLast;    

TopTools_ListOfShape edges = ffsect.SectionEdges();

TopTools_ListIteratorOfListOfShape eIter(edges);
while ( eIter.More() ) {

    // For each edge I create a TopoDS_Edge object and I put it on screen   
    TopoDS_Edge edge = TopoDS::Edge(eIter.Value());         
    Handle(AIS_Shape) anAisEdge;
    anAisEdge = new AIS_Shape(edge);
    anAisEdge->SetColor(Quantity_NOC_RED);
    anAisEdge->SetWidth(2.0);
    // get my Ais_InteractiveContext
    myOccView->getContext()->Display(anAisEdge);

    // Create a Geom_BSplineCurve from edge
    Handle(Geom_BSplineCurve) myCurve =     Handle(Geom_BSplineCurve)::DownCast(BRep_Tool::Curve(edge, pFirst, pLast));

    // Now create a TopoDS_Edge from my curve 
    TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(myCurve);
    Handle(AIS_Shape) anAisEdge2;
    anAisEdge2 = new AIS_Shape(edge2);
    anAisEdge2->SetColor(Quantity_NOC_RED);
    anAisEdge2->SetWidth(2.0);
    myOccView->getContext()->Display(anAisEdge2);

    eIter.Next();
}

如果我单独检查anAisEdgeanAisEdge2屏幕上的显示,我会得到两个不同的结果。我不明白为什么。 在第一个显示屏的顶部显示两个图像,而在第二个显示屏上显示。

enter image description here

1 个答案:

答案 0 :(得分:1)

BRepBuilderAPI_MakeEdge类的OCC文档中声明"如果曲线是修剪曲线,则使用基础曲线"。在这种情况下,我认为您应该直接在BRepBuilderAPI_MakeEdge构造函数中指定曲线所需的参数值。