2017-02-07 34 views
0

У меня проблема с пересечением двух поверхностей. Первый обрезается, а второй - без обрезки.Поверхностные перекрестки с OPEN CASCADE

Я использую 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(); 
} 

Если я проверяю отдельно дисплей на экране anAisEdge и anAisEdge2 я получить два различных результата. Я не понимаю, почему. В двух изображениях сверху первый дисплей, а второй.

enter image description here

ответ

1

В документации OCC для BRepBuilderAPI_MakeEdge класса указывается, что «Если кривая является кривой обрезается основой кривая используется». В этом случае, я думаю, вы должны прямо указать требуемые значения параметров кривой в конструкторе BRepBuilderAPI_MakeEdge.