Tue, 02/07/2017 - 16:40
Hi, I've a problem about the intersection between two surfaces.
The first is trimmed while the second is untrimmed.
I use the BRepAlgoAPI_Section to intersect the two surfaces and obtain the intersection
edges (in my case only one):
This is my code, here I make the intersection:
TopoDS_Face trimface, face;
// ...... filling face and trimface from IGES file
BRepAlgoAPI_Section ffsect( trimface, face, Standard_True);
ffsect.Approximation(Standard_True);
ffsect.Build();
Here I iterate between the section edges. For each edge I create a TopoDS_Edge to put on screen.
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();
}
If I check separately the display on screen of anAisEdge and anAisEdge2 I obtain two different results. I don't understand why.
In the image in attach on top the first display while down the second one.
Fri, 02/10/2017 - 17:39
Dear Gabriele,
The difference in your first and second cases is due initialization of BSplineCurve instead of TrimmedCurve here :
Handle(Geom_BSplineCurve) myCurve = Handle(Geom_BSplineCurve)::DownCast(BRep_Tool::Curve(edge, pFirst, pLast));
Please try :
Handle(Geom_TrimmedCurve) myCurve = Handle(Geom_TrimmedCurve)::DownCast(BRep_Tool::Curve(edge, pFirst, pLast));
or
Handle(Geom_Curve) myCurve = BRep_Tool::Curve(edge, pFirst, pLast);
One more remark.
These lines in your code perform section operation twice :
BRepAlgoAPI_Section ffsect( trimface, face, Standard_True);
ffsect.Approximation(Standard_True);
ffsect.Build();
Instead of that you should use :
BRepAlgoAPI_Section ffsect( trimface, face, Standard_False);
ffsect.Approximation(Standard_True);
ffsect.Build();
Best regards, FSR