1 #include <Precision.hxx>
2 #include <Standard_Failure.hxx>
4 void Compute(const Standard_Real P1,
5 const Standard_Real P2,
6 const Standard_Real Ra,
7 const Standard_Real Rb,
23 Standard_Real Delta =Abs(Teta2-Teta1);
25 if (Delta > 2. * PI) {
32 do { Teta1+=2.*PI;} while (Teta1< 0.);
34 else if (Teta1> 2.*PI) {
35 do { Teta1-=2.*PI;} while (Teta1> 2.*PI);
37 Teta2 = Teta1 + Delta;
41 // One places already both ends
42 Standard_Real Cn1,Sn1,Cn2,Sn2;
43 Cn1 = Cos(Teta1); Sn1 = Sin(Teta1);
44 Cn2 = Cos(Teta2); Sn2 = Sin(Teta2);
45 B.Add(Point(O +Ra*Cn1*Xd +Rb*Sn1*Yd));
46 B.Add(Point(O +Ra*Cn2*Xd +Rb*Sn2*Yd));
48 Standard_Real Ram,Rbm;
50 // Main radiuses to take into account only 8 points (/cos(Pi/8.))
51 Ram=Ra/0.92387953251128674;
52 Rbm=Rb/0.92387953251128674;
55 // Main radiuses to take into account the arrow
56 Standard_Real tc=cos(Delta/2);
60 B.Add(Point(O +Ram*Cn1*Xd +Rbm*Sn1*Yd));
61 B.Add(Point(O +Ram*Cn2*Xd +Rbm*Sn2*Yd));
65 #define PI4 0.70710678118654746
67 // 8 points of the polygon
68 #define addP0 B.Add(Point(O +Ram*Xd ))
69 #define addP1 B.Add(Point(O +Ram*PI4*Xd +Rbm*PI4*Yd))
70 #define addP2 B.Add(Point(O +Rbm*Yd))
71 #define addP3 B.Add(Point(O -Ram*PI4*Xd +Rbm*PI4*Yd))
72 #define addP4 B.Add(Point(O -Ram*Xd ))
73 #define addP5 B.Add(Point(O -Ram*PI4*Xd -Rbm*PI4*Yd))
74 #define addP6 B.Add(Point(O -Rbm*Yd));
75 #define addP7 B.Add(Point(O +Ram*PI4*Xd -Rbm*PI4*Yd))
77 Standard_Integer deb = (Standard_Integer )( Teta1/(PI/4.));
78 Standard_Integer fin = (Standard_Integer )( Teta2/(PI/4.));
132 if (fin <= 10) break;
137 if (fin <= 11) break;
142 if (fin <= 12) break;
147 if (fin <= 13) break;
152 if (fin <= 14) break;
157 if (fin <= 15) break;