gp_Pnt aP;
GeomAPI_ProjectPointOnCurve aProj1(aPoint, aCurve1);
- if (aProj1.NbPoints() > 0)
- aCurve1->D1(aProj1.Parameter(1), aP, anAngle->myDir1);
+ if (aProj1.NbPoints() > 0) {
+ aCurve1->D1(aProj1.LowerDistanceParameter(), aP, anAngle->myDir1);
+ if (aCurve1->Value(aF1).SquareDistance(aPoint) < aCurve1->Value(aL1).SquareDistance(aPoint))
+ anAngle->myDir1.Reverse();
+ }
GeomAPI_ProjectPointOnCurve aProj2(aPoint, aCurve2);
- if (aProj2.NbPoints() > 0)
- aCurve2->D1(aProj2.Parameter(1), aP, anAngle->myDir2);
+ if (aProj2.NbPoints() > 0) {
+ aCurve2->D1(aProj2.LowerDistanceParameter(), aP, anAngle->myDir2);
+ if (aCurve2->Value(aF2).SquareDistance(aPoint) < aCurve2->Value(aL2).SquareDistance(aPoint))
+ anAngle->myDir2.Reverse();
+ }
setImpl(anAngle);
}
+GeomAPI_Angle::GeomAPI_Angle(const std::shared_ptr<GeomAPI_Pnt>& thePoint1,
+ const std::shared_ptr<GeomAPI_Pnt>& thePoint2,
+ const std::shared_ptr<GeomAPI_Pnt>& thePoint3)
+{
+ gp_Pnt aPoint1 = thePoint1->impl<gp_Pnt>();
+ gp_Pnt aPoint2 = thePoint2->impl<gp_Pnt>();
+ gp_Pnt aPoint3 = thePoint3->impl<gp_Pnt>();
+
+ AngleDirections* anAngle = new AngleDirections;
+ anAngle->myDir1.SetXYZ(aPoint1.XYZ() - aPoint2.XYZ());
+ anAngle->myDir2.SetXYZ(aPoint3.XYZ() - aPoint2.XYZ());
+ setImpl(anAngle);
+}
+
double GeomAPI_Angle::angleDegree()
{
return angleRadian() * 180.0 / PI;