0031004: Coding - eliminate warnings issued by gcc 9.1.0
[occt.git] / src / HatchGen / HatchGen_PointOnElement.cxx
1 // Created on: 1993-10-29
2 // Created by: Jean Marc LACHAUME
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <HatchGen_PointOnElement.hxx>
19 #include <IntRes2d_IntersectionPoint.hxx>
20 #include <Standard_Stream.hxx>
21
22 //=======================================================================
23 // Function : HatchGen_PointOnElement
24 // Purpose  : Constructor.
25 //=======================================================================
26 HatchGen_PointOnElement::HatchGen_PointOnElement () :
27        HatchGen_IntersectionPoint () ,
28        myType (HatchGen_UNDETERMINED)
29 {
30 }
31
32 //=======================================================================
33 // Function : HatchGen_PointOnElement
34 // Purpose  : Constructor.
35 //=======================================================================
36
37 HatchGen_PointOnElement::HatchGen_PointOnElement (const IntRes2d_IntersectionPoint& Point)
38 {
39   const IntRes2d_Transition& TrsH = Point.TransitionOfFirst() ;
40   const IntRes2d_Transition& TrsE = Point.TransitionOfSecond() ;
41
42   myIndex = 0 ;
43
44   myParam = Point.ParamOnSecond() ;
45
46   switch (TrsE.PositionOnCurve()) {
47       case IntRes2d_Head   : myPosit = TopAbs_FORWARD  ; break ;
48       case IntRes2d_Middle : myPosit = TopAbs_INTERNAL ; break ;
49       case IntRes2d_End    : myPosit = TopAbs_REVERSED ; break ;
50   }
51
52   switch (TrsH.TransitionType()) {
53       case IntRes2d_In : {
54         myBefore = TopAbs_OUT ;
55         myAfter  = TopAbs_IN  ;
56         myType   = (myPosit == TopAbs_INTERNAL) ? HatchGen_TRUE : HatchGen_TOUCH ;
57         break ;
58       }
59       case IntRes2d_Out : {
60         myBefore = TopAbs_IN  ;
61         myAfter  = TopAbs_OUT ;
62         myType   = (myPosit == TopAbs_INTERNAL) ? HatchGen_TRUE : HatchGen_TOUCH ;
63         break ;
64       }
65 //  Modified by Sergey KHROMOV - Fri Jan  5 12:07:34 2001 Begin
66       case IntRes2d_Touch : {
67         switch (TrsH.Situation()) {
68             case IntRes2d_Inside : {
69               myType   = HatchGen_TANGENT ;
70               switch (myPosit) {
71                 case TopAbs_FORWARD : {
72                   if (TrsE.IsOpposite()) {
73                     myBefore = TopAbs_IN;
74                     myAfter  = TopAbs_OUT;
75                   } else {
76                     myBefore = TopAbs_OUT;
77                     myAfter  = TopAbs_IN;
78                   }
79                   break ;
80                 }
81                 case TopAbs_INTERNAL : {
82                   myBefore = TopAbs_IN  ; 
83                   myAfter  = TopAbs_IN  ;
84                   break ;
85                 }
86                 case TopAbs_REVERSED : {
87                   if (TrsE.IsOpposite()) {
88                     myBefore = TopAbs_OUT;
89                     myAfter  = TopAbs_IN;
90                   } else {
91                     myBefore = TopAbs_IN;
92                     myAfter  = TopAbs_OUT;
93                   }
94                   break ;
95                 }
96                 case TopAbs_EXTERNAL:
97                   break ;
98               }
99               break ;
100             }
101             case IntRes2d_Outside : {
102               myType   = HatchGen_TANGENT ;
103               switch (myPosit) {
104                 case TopAbs_FORWARD : {
105                   if (TrsE.IsOpposite()) {
106                     myBefore = TopAbs_OUT;
107                     myAfter  = TopAbs_IN;
108                   } else {
109                     myBefore = TopAbs_IN;
110                     myAfter  = TopAbs_OUT;
111                   }
112                   break ;
113                 }
114                 case TopAbs_INTERNAL : {
115                   myBefore = TopAbs_OUT ;
116                   myAfter  = TopAbs_OUT ;
117                   break ;
118                 }
119                 case TopAbs_REVERSED : {
120                   if (TrsE.IsOpposite()) {
121                     myBefore = TopAbs_IN;
122                     myAfter  = TopAbs_OUT;
123                   } else {
124                     myBefore = TopAbs_OUT;
125                     myAfter  = TopAbs_IN;
126                   }
127                   break ;
128                 }
129                 case TopAbs_EXTERNAL:
130                   break ;
131               }
132               break ;
133             }
134             case IntRes2d_Unknown : {
135               myBefore = TopAbs_UNKNOWN ;
136               myAfter  = TopAbs_UNKNOWN ;
137               myType   = HatchGen_TANGENT ;
138               break ;
139             }
140         }
141         break ;
142       }
143 //  Modified by Sergey KHROMOV - Fri Jan  5 12:07:46 2001 End
144       case IntRes2d_Undecided : {
145         myBefore = TopAbs_UNKNOWN ;
146         myAfter  = TopAbs_UNKNOWN ;
147         myType   = HatchGen_UNDETERMINED ;
148         break ;
149       }
150   }
151
152   mySegBeg = Standard_False ;
153   mySegEnd = Standard_False ;
154 }
155
156
157 //=======================================================================
158 // Function : IsIdentical
159 // Purpose  : Tests if the point is identical to an other.
160 //=======================================================================
161
162 Standard_Boolean HatchGen_PointOnElement::IsIdentical (const HatchGen_PointOnElement& Point,
163                                                        const Standard_Real Confusion) const
164 {
165   Standard_Real Delta = Abs (myParam - Point.myParam) ;
166   return (   (Delta    <= Confusion)
167           && (myIndex  == Point.myIndex)
168           && (myPosit  == Point.myPosit)
169           && (myType   == Point.myType)
170           && (myBefore == Point.myBefore)
171           && (myAfter  == Point.myAfter)
172           && (mySegBeg == Point.mySegBeg)
173           && (mySegEnd == Point.mySegEnd)) ;
174 }
175
176 //=======================================================================
177 // Function : IsDifferent
178 // Purpose  : Tests if the point is different from an other.
179 //=======================================================================
180
181 Standard_Boolean HatchGen_PointOnElement::IsDifferent (const HatchGen_PointOnElement& Point,
182                                                        const Standard_Real Confusion) const
183 {
184   Standard_Real Delta = Abs (myParam - Point.myParam) ;
185   return (   (Delta    >  Confusion)
186           || (myIndex  != Point.myIndex)
187           || (myPosit  != Point.myPosit)
188           || (myType   != Point.myType)
189           || (myBefore != Point.myBefore)
190           || (myAfter  != Point.myAfter)
191           || (mySegBeg != Point.mySegBeg)
192           || (mySegEnd != Point.mySegEnd)) ;
193 }
194
195 //=======================================================================
196 // Function : Dump
197 // Purpose  : Dump of the point on element
198 //=======================================================================
199
200 void HatchGen_PointOnElement::Dump (const Standard_Integer Index) const
201 {
202   std::cout << "    --- Point on element " ;
203   if (Index > 0) {
204     std::cout << "# " << std::setw(3) << Index << " " ;
205   } else {
206     std::cout << "------" ;
207   }
208   std::cout << "---------------" << std::endl ;
209
210   std::cout << "        Index of the element = " << myIndex << std::endl ;
211   std::cout << "        Parameter on element = " << myParam << std::endl ;
212   std::cout << "        Position  on element = " ;
213   switch (myPosit) {
214       case TopAbs_FORWARD  : std::cout << "FORWARD  (i.e. BEGIN  )" ; break ;
215       case TopAbs_INTERNAL : std::cout << "INTERNAL (i.e. MIDDLE )" ; break ;
216       case TopAbs_REVERSED : std::cout << "REVERSED (i.e. END    )" ; break ;
217       case TopAbs_EXTERNAL : std::cout << "EXTERNAL (i.e. UNKNOWN)" ; break ;
218   }
219   std::cout << std::endl ;
220   std::cout << "        Intersection Type    = " ;
221   switch (myType) {
222       case HatchGen_TRUE         : std::cout << "TRUE"         ; break ;
223       case HatchGen_TOUCH        : std::cout << "TOUCH"        ; break ;
224       case HatchGen_TANGENT      : std::cout << "TANGENT"      ; break ;
225       case HatchGen_UNDETERMINED : std::cout << "UNDETERMINED" ; break ;
226   }
227   std::cout << std::endl ;
228   std::cout << "        State Before         = " ;
229   switch (myBefore) {
230       case TopAbs_IN      : std::cout << "IN"      ; break ;
231       case TopAbs_OUT     : std::cout << "OUT"     ; break ;
232       case TopAbs_ON      : std::cout << "ON"      ; break ;
233       case TopAbs_UNKNOWN : std::cout << "UNKNOWN" ; break ;
234   }
235   std::cout << std::endl ;
236   std::cout << "        State After          = " ;
237   switch (myAfter) {
238       case TopAbs_IN      : std::cout << "IN"      ; break ;
239       case TopAbs_OUT     : std::cout << "OUT"     ; break ;
240       case TopAbs_ON      : std::cout << "ON"      ; break ;
241       case TopAbs_UNKNOWN : std::cout << "UNKNOWN" ; break ;
242   }
243   std::cout << std::endl ;
244   std::cout << "        Beginning of segment = " << (mySegBeg ? "TRUE" : "FALSE") << std::endl ;
245   std::cout << "        End       of segment = " << (mySegEnd ? "TRUE" : "FALSE") << std::endl ;
246
247   std::cout << "    ------------------------------------------" << std::endl ;
248 }