0022922: Clean up warnings on uninitialized / unused variables
[occt.git] / src / SelectBasics / SelectBasics_BasicTool.cxx
1 // Copyright:   Matra-Datavision 1995
2 // File:        SelectBasics_BasicTool.cxx
3 // Created:     Thu Jun  8 11:08:55 1995
4 // Author:      Robert COUBLANC
5 //              <rob>
6
7
8 #include <SelectBasics_BasicTool.ixx>
9 #include <Precision.hxx>
10 #include <gp_Vec2d.hxx>
11
12
13 //==================================================
14 // Function: 
15 // Purpose :
16 //==================================================
17
18 Standard_Boolean SelectBasics_BasicTool::
19 MatchSegments(const gp_Pnt2d & A,
20               const gp_Pnt2d & B,
21               const gp_Pnt2d & C,
22               const gp_Pnt2d & D)
23 {
24
25   Standard_Real d[6],det,deta,detb;
26
27   if(Max(A.X(),B.X())<Min(C.X(),D.X())) return Standard_False;
28   if(Min(A.X(),B.X())>Max(C.X(),D.X())) return Standard_False;
29   if(Max(A.Y(),B.Y())<Min(C.Y(),D.Y())) return Standard_False;
30   if(Min(A.Y(),B.Y())>Max(C.Y(),D.Y())) return Standard_False;
31   
32   d[0] = B.X()-A.X();d[1]=C.X()-D.X();d[2]=C.X()-A.X();
33   d[3] = B.Y()-A.Y();d[4]=C.Y()-D.Y();d[5]=C.Y()-A.Y();
34   
35   det  = d[0]*d[4]-d[3]*d[1];
36   deta = d[4]*d[2]-d[5]*d[1];
37   detb = d[0]*d[5]-d[3]*d[2];
38
39   if(Abs(det)<=Precision::Confusion()) return Standard_False;
40   if(deta/det<Precision::Confusion()) return Standard_False;
41   if(deta/det>1+Precision::Confusion()) return Standard_False;
42   if(detb/det<Precision::Confusion()) return Standard_False;
43   if(detb/det>1+Precision::Confusion()) return Standard_False;
44
45   return Standard_True;
46 }
47
48
49
50 //==================================================
51 // Function: MatchSegment
52 // Purpose : Return True if Segment(pBegin, pEnd) is Selected
53 //==================================================
54 Standard_Boolean SelectBasics_BasicTool::MatchSegment(const gp_Pnt2d& pBegin,const gp_Pnt2d& pEnd,
55                                                       const Standard_Real X,
56                                                       const Standard_Real Y,
57                                                       const Standard_Real aTol,
58                                                       Standard_Real& DMin)
59 {
60   const Standard_Real SqTol = aTol * aTol;      
61   gp_Vec2d AB, AC, BC; 
62   const gp_Pnt2d apoint(X,Y);
63   
64   AB.SetCoord(pEnd.X()-pBegin.X(),pEnd.Y()-pBegin.Y());
65   AC.SetCoord(X-pBegin.X(),Y-pBegin.Y());
66   BC.SetCoord(pEnd.X()-X,pEnd.Y()-Y);
67   
68   //1. Check the ends, do not estimate distance to the segment itself here
69   if((apoint.SquareDistance(pBegin)<SqTol) ||
70      (apoint.SquareDistance(pEnd)<SqTol)){
71     DMin = 0.; 
72     return Standard_True;
73   }
74
75   //2. Checking if the mouse point projection onto the segment`s line
76   //   falls inside the segment.
77   if(AB.Dot(AC)>=0. && AB.Dot(BC)>=0.){
78     //3. Estimate distance from the mouse point to the segment 
79     //   if length of segment exceeds tolerance
80     const Standard_Real aSegLen = AB.Magnitude();
81     if (aSegLen>aTol){
82       DMin=Abs(AB.Crossed(gp_Vec2d(pBegin,apoint))/aSegLen);
83       if (DMin<aTol){
84           return Standard_True;
85         }
86     }
87   }
88     
89   return Standard_False;
90
91
92
93
94 //==================================================
95 // Function: 
96 // Purpose :
97 //==================================================
98
99 Standard_Boolean SelectBasics_BasicTool:: 
100 AutoInter (const TColgp_Array1OfPnt2d& points)
101 {
102   for (Standard_Integer i=3;i<=points.Length()-1;i++)
103     {     
104       for (Standard_Integer j=1;j<=i-2;j++)
105         {
106           if (MatchSegments (points(i),
107                              points(i+1),
108                              points(j),
109                              points(j+1))) return Standard_True;
110         }
111     }
112   return Standard_False;
113 }
114
115
116 //==================================================
117 // Function: 
118 // Purpose :
119 //==================================================
120
121 Standard_Boolean SelectBasics_BasicTool::
122 MatchPolyg2d (const TColgp_Array1OfPnt2d& tabpoint,
123               const Standard_Real X,
124               const Standard_Real Y,
125               const Standard_Real aTol,
126               Standard_Real& DMin,
127               Standard_Integer& Rank)
128 {
129         Rank =0;
130         Standard_Boolean Found= Standard_False;
131
132         //In the cycle towarded enumeration of possibilities segment, which is selected from wire
133         for(Standard_Integer i=tabpoint.Lower();i<=tabpoint.Upper()-1&& !Found;i++)
134         {       
135                 if(MatchSegment(tabpoint.Value(i),tabpoint.Value(i+1),X,Y,aTol,DMin))
136                 {
137                         Rank=i;
138                         return Standard_True;
139                 }       
140         }
141         return Standard_False;
142 }