- std::shared_ptr<GeomAPI_Shape> aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(
- aCenter, aStartPoint, aEndPoint, aNormal);
+ std::shared_ptr<GeomAPI_Dir> anXDir(new GeomAPI_Dir(aStartPoint->xyz()->decreased(aCenter->xyz())));
+ std::shared_ptr<GeomAPI_Ax2> anAx2(new GeomAPI_Ax2(aCenter, aNormal, anXDir));
+ std::shared_ptr<GeomAPI_Circ> aCirc(new GeomAPI_Circ(anAx2, aCenter->distance(aStartPoint)));
+ double aParameterNew = 0.0;
+ if(aCirc->parameter(aEndPoint, paramTolerance, aParameterNew)) {
+ if(0 < myParamBefore && myParamBefore <= PI / 2.0
+ && PI * 1.5 < aParameterNew && aParameterNew <= PI * 2.0) {
+ myForwardDirection = false;
+ } else if(PI * 1.5 < myParamBefore && myParamBefore <= PI * 2.0
+ && 0 < aParameterNew && aParameterNew <= PI / 2.0) {
+ myForwardDirection = true;
+ }
+ }
+ myParamBefore = aParameterNew;
+
+ std::shared_ptr<GeomAPI_Shape> aCircleShape;
+ if(myForwardDirection) {
+ aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aStartPoint, aEndPoint, aNormal);
+ } else {
+ aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aEndPoint, aStartPoint, aNormal);
+ }
+