0022792: Globally defined symbol PI conflicts with VTK definition (Intel compiler)
[occt.git] / src / IntAna2d / IntAna2d_AnaIntersection_6.cxx
1 //============================================ IntAna2d_AnaIntersection_6.cxx
2 //============================================================================
3 #include <IntAna2d_AnaIntersection.jxx>
4
5 #include <IntAna2d_Outils.hxx>
6
7 void IntAna2d_AnaIntersection::Perform(const gp_Elips2d& Elips,
8                                   const IntAna2d_Conic& Conic)
9 {
10   Standard_Boolean EIsDirect = Elips.IsDirect();
11   Standard_Real A,B,C,D,E,F;
12   Standard_Real pcte,ps,pc,p2sc,pcc,pss;
13   Standard_Real minor_radius=Elips.MinorRadius();
14   Standard_Real major_radius=Elips.MajorRadius();
15   Standard_Integer i;
16   Standard_Real tx,ty,S;
17   
18   done = Standard_False;
19   nbp = 0;
20   para = Standard_False;
21   iden = Standard_False; 
22   empt = Standard_False;
23   
24   
25   gp_Ax2d Axe_rep(Elips.XAxis());
26   
27   Conic.Coefficients(A,B,C,D,E,F);
28   Conic.NewCoefficients(A,B,C,D,E,F,Axe_rep);   
29
30   // Parametre : a avec x=MajorRadius Cos(a)  et y=MinorRadius Sin(a)
31   
32   pss= B*minor_radius*minor_radius;                   // SIN ^2
33   pcc= A*major_radius*major_radius-pss;               // COS ^2
34   p2sc=C*major_radius*minor_radius;                   // 2 SIN COS
35   pc= 2.0*D*major_radius;                             // COS
36   ps= 2.0*E*minor_radius;                             // SIN
37   pcte=F+pss;                                         // 1
38   
39   math_TrigonometricFunctionRoots Sol(pcc,p2sc,pc,ps,pcte,0.0,2.0*M_PI);
40
41   if (!Sol.IsDone()) {
42     done=Standard_False;
43     return;
44   }
45   else { 
46     if(Sol.InfiniteRoots()) {
47       iden=Standard_True;
48       done=Standard_True;
49       return;
50     }
51     nbp=Sol.NbSolutions();
52     for(i=1;i<=nbp;i++) {
53       S = Sol.Value(i);
54       tx=major_radius*Cos(S); 
55       ty=minor_radius*Sin(S);
56       Coord_Ancien_Repere(tx,ty,Axe_rep);
57       if(!EIsDirect) 
58         S = M_PI+M_PI-S;
59       lpnt[i-1].SetValue(tx,ty,S);
60     }
61     Traitement_Points_Confondus(nbp,lpnt);
62   }
63   done = Standard_True;
64 }
65