Standard_Boolean Graphic2d_Circle::Pick(const Standard_ShortReal X,const Standard_ShortReal Y,const Standard_ShortReal aPrecision,const Handle(Graphic2d_Drawer)& aDrawer) { Standard_ShortReal SRX = X, SRY = Y; if(myGOPtr->IsTransformed()) { gp_GTrsf2d aTrsf = (myGOPtr->Transform()).Inverted(); Standard_Real RX = Standard_Real (SRX), RY = Standard_Real (SRY); aTrsf.Transforms( RX, RY ); SRX = Standard_ShortReal( RX ); SRY = Standard_ShortReal( RY ); } Standard_Real RDistance = Sqrt((myX - SRX)*(myX - SRX) + (myY - SRY)*(myY - SRY)); if(RDistance == 0.) { return Standard_True; } if((RDistance - myRadius) < aPrecision) { if(Abs(myFirstAngle - mySecondAngle) >= 2*Standard_PI) { return Standard_True; } else { gp_Dir2d Vector2DPick(SRX - myX, SRY - myY); gp_Dir2d Vector2DAlpha(Cos(myFirstAngle), Sin(myFirstAngle)); gp_Dir2d Vector2DBeta(Cos(mySecondAngle), Sin(mySecondAngle)); if(Vector2DPick.Angle(Vector2DAlpha) >= 0 && Vector2DPick.Angle(Vector2DBeta)<=0) { return Standard_True; } } } return Standard_False; }