0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / Geom2dHatch / Geom2dHatch_Hatching.cxx
1 // Created on: 1993-11-03
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 <Geom2dAdaptor_Curve.hxx>
19 #include <Geom2dHatch_Hatching.hxx>
20 #include <gp_Pnt2d.hxx>
21 #include <HatchGen_Domain.hxx>
22 #include <HatchGen_PointOnElement.hxx>
23 #include <HatchGen_PointOnHatching.hxx>
24 #include <Standard_OutOfRange.hxx>
25
26 #define RAISE_IF_NOSUCHOBJECT 0
27
28 #include <Precision.hxx>
29 //=======================================================================
30 // Function : Geom2dHatch_Hatching
31 // Purpose  : Constructor.
32 //=======================================================================
33
34 Geom2dHatch_Hatching::Geom2dHatch_Hatching ()
35 : myTrimDone(Standard_False),
36   myTrimFailed(Standard_False),
37   myIsDone(Standard_False),
38   myStatus(HatchGen_NoProblem)
39 {
40 }
41
42 //=======================================================================
43 // Function : Geom2dHatch_Hatching
44 // Purpose  : Constructor.
45 //=======================================================================
46
47 Geom2dHatch_Hatching::Geom2dHatch_Hatching (const Geom2dAdaptor_Curve& Curve) :
48        myCurve      (Curve),
49        myTrimDone   (Standard_False),
50        myTrimFailed (Standard_False),
51        myIsDone     (Standard_False),
52        myStatus     (HatchGen_NoProblem)
53 {
54 }
55
56 //=======================================================================
57 // Function : Curve
58 // Purpose  : Returns the curve associated to the hatching.
59 //=======================================================================
60
61 const Geom2dAdaptor_Curve& Geom2dHatch_Hatching::Curve () const
62 {
63   return myCurve ;
64 }
65      
66 //=======================================================================
67 // Function : ChangeCurve
68 // Purpose  : Returns the curve associated to the hatching.
69 //=======================================================================
70
71 Geom2dAdaptor_Curve& Geom2dHatch_Hatching::ChangeCurve ()
72 {
73   return myCurve ;
74 }
75      
76 //=======================================================================
77 // Function : TrimDone
78 // Purpose  : Sets the flag about the trimmings computation to the given
79 //            value.
80 //=======================================================================
81
82 void Geom2dHatch_Hatching::TrimDone (const Standard_Boolean Flag)
83 {
84   myTrimDone = Flag ;
85 }
86
87 //=======================================================================
88 // Function : TrimDone
89 // Purpose  : Returns the flag about the trimmings computation.
90 //=======================================================================
91
92 Standard_Boolean Geom2dHatch_Hatching::TrimDone () const
93 {
94   return myTrimDone ;
95 }
96
97 //=======================================================================
98 // Function : TrimFailed
99 // Purpose  : Sets the flag about the trimmings failure to the given
100 //            value.
101 //=======================================================================
102
103 void Geom2dHatch_Hatching::TrimFailed (const Standard_Boolean Flag)
104 {
105   myTrimFailed = Flag ;
106   if (myTrimFailed) myStatus = HatchGen_TrimFailure ;
107 }
108
109 //=======================================================================
110 // Function : TrimFailed
111 // Purpose  : Returns the flag about the trimmings failure.
112 //=======================================================================
113
114 Standard_Boolean Geom2dHatch_Hatching::TrimFailed () const
115 {
116   return myTrimFailed ;
117 }
118
119 //=======================================================================
120 // Function : IsDone
121 // Purpose  : Sets the flag about the domains computation to the given
122 //            value.
123 //=======================================================================
124
125 void Geom2dHatch_Hatching::IsDone (const Standard_Boolean Flag)
126 {
127   myIsDone = Flag ;
128 }
129
130 //=======================================================================
131 // Function : IsDone
132 // Purpose  : Returns the flag about the domains computation.
133 //=======================================================================
134
135 Standard_Boolean Geom2dHatch_Hatching::IsDone () const
136 {
137   return myIsDone ;
138 }
139
140 //=======================================================================
141 // Function : SetStatus
142 // Purpose  : Sets the error status.
143 //=======================================================================
144
145 void Geom2dHatch_Hatching::Status (const HatchGen_ErrorStatus theStatus)
146 {
147   myStatus = theStatus;
148 }
149
150 //=======================================================================
151 // Function : Status
152 // Purpose  : Returns the error status.
153 //=======================================================================
154
155 HatchGen_ErrorStatus Geom2dHatch_Hatching::Status () const
156 {
157   return myStatus ;
158 }
159
160 //=======================================================================
161 // Function : AddPoint
162 // Purpose  : Adds an intersection point to the hatching.
163 //=======================================================================
164
165 void Geom2dHatch_Hatching::AddPoint (const HatchGen_PointOnHatching& Point,
166                                      const Standard_Real Confusion)
167 {
168   Standard_Integer NbPoints = myPoints.Length () ;
169 //for (Standard_Integer IPntH = 1 ; IPntH <= NbPoints ; IPntH++) {
170   Standard_Integer IPntH;
171   for (IPntH = 1 ; IPntH <= NbPoints ; IPntH++) {
172     const HatchGen_PointOnHatching& PntH = myPoints.Value (IPntH) ;
173     if (!PntH.IsLower (Point, Confusion)) break ;
174   }
175   if (IPntH > NbPoints) {
176     myPoints.Append (Point) ;
177   } else {
178     HatchGen_PointOnHatching& PntH = myPoints.ChangeValue (IPntH) ;
179     if (PntH.IsGreater (Point, Confusion)) {
180       myPoints.InsertBefore (IPntH, Point) ;
181     } else {
182       for (Standard_Integer IPntE = 1 ; IPntE <= Point.NbPoints() ; IPntE++) {
183         const HatchGen_PointOnElement& PntE = Point.Point (IPntE) ;
184         PntH.AddPoint (PntE, Confusion) ;
185       }
186     }
187   }
188   if (myIsDone) ClrDomains() ;
189 }
190
191 //=======================================================================
192 // Function : NbPoints
193 // Purpose  : Returns the number of intersection points on the hatching.
194 //=======================================================================
195
196 Standard_Integer Geom2dHatch_Hatching::NbPoints () const
197 {
198   return myPoints.Length () ;
199 }
200      
201 //=======================================================================
202 // Function : Point
203 // Purpose  : Returns the Index-th intersection point on the hatching.
204 //=======================================================================
205
206 const HatchGen_PointOnHatching& Geom2dHatch_Hatching::Point (const Standard_Integer Index) const
207 {
208 #if RAISE_IF_NOSUCHOBJECT
209   Standard_Integer NbPoints = myPoints.Length () ;
210   Standard_OutOfRange_Raise_if (Index < 1 || Index > NbPoints, "") ;
211 #endif
212   const HatchGen_PointOnHatching& Point = myPoints.Value (Index) ;
213   return Point ;
214 }
215      
216 //=======================================================================
217 // Function : ChangePoint
218 // Purpose  : Returns the Index-th intersection point on the hatching.
219 //=======================================================================
220
221 HatchGen_PointOnHatching& Geom2dHatch_Hatching::ChangePoint (const Standard_Integer Index) 
222 {
223 #if RAISE_IF_NOSUCHOBJECT
224   Standard_Integer NbPoints = myPoints.Length () ;
225   Standard_OutOfRange_Raise_if (Index < 1 || Index > NbPoints, "") ;
226 #endif
227   HatchGen_PointOnHatching& Point = myPoints.ChangeValue (Index) ;
228   return Point ;
229 }
230      
231 //=======================================================================
232 // Function : RemPoint
233 // Purpose  : Removes the Index-th intersection point of the hatching.
234 //=======================================================================
235
236 void Geom2dHatch_Hatching::RemPoint (const Standard_Integer Index)
237 {
238 #if RAISE_IF_NOSUCHOBJECT
239   Standard_Integer NbPoints = myPoints.Length () ;
240   Standard_OutOfRange_Raise_if (Index < 1 || Index > NbPoints, "") ;
241 #endif
242   if (myIsDone) ClrDomains() ;
243   myPoints.Remove (Index) ;
244 }
245
246 //=======================================================================
247 // Function : ClrPoints
248 // Purpose  : Removes all the intersection points of the hatching.
249 //=======================================================================
250
251 void Geom2dHatch_Hatching::ClrPoints ()
252 {
253   if (myIsDone) ClrDomains() ;
254   for (Standard_Integer IPntH = 1 ; IPntH <= myPoints.Length() ; IPntH++) {
255     HatchGen_PointOnHatching& Point = myPoints.ChangeValue (IPntH) ;
256     Point.ClrPoints() ;
257   }
258   myPoints.Clear () ;
259   myTrimDone   = Standard_False ;
260   myTrimFailed = Standard_False ;
261 }
262
263 //=======================================================================
264 // Function : AddDomain
265 // Purpose  : Adds a domain to the hatching.
266 //=======================================================================
267
268 void Geom2dHatch_Hatching::AddDomain (const HatchGen_Domain& Domain)
269 {
270   myDomains.Append (Domain) ;
271 }
272
273 //=======================================================================
274 // Function : NbDomains
275 // Purpose  : Returns the number of domains on the hatching.
276 //=======================================================================
277
278 Standard_Integer Geom2dHatch_Hatching::NbDomains () const
279 {
280   return myDomains.Length () ;
281 }
282      
283 //=======================================================================
284 // Function : Domain
285 // Purpose  : Returns the Index-th domain on the hatching.
286 //=======================================================================
287
288 const HatchGen_Domain& Geom2dHatch_Hatching::Domain (const Standard_Integer Index) const
289 {
290 #if RAISE_IF_NOSUCHOBJECT
291   Standard_Integer NbDomains = myDomains.Length () ;
292   Standard_OutOfRange_Raise_if (Index < 1 || Index > NbDomains, "") ;
293 #endif
294   const HatchGen_Domain& Domain = myDomains.Value (Index) ;
295   return Domain ;
296 }
297      
298 //=======================================================================
299 // Function : RemDomain
300 // Purpose  : Removes the Index-th domain of the hatching.
301 //=======================================================================
302
303 void Geom2dHatch_Hatching::RemDomain (const Standard_Integer Index)
304 {
305 #if RAISE_IF_NOSUCHOBJECT
306   Standard_Integer NbDomains = myDomains.Length () ;
307   Standard_OutOfRange_Raise_if (Index < 1 || Index > NbDomains, "") ;
308 #endif
309   myDomains.Remove (Index) ;
310 }
311
312 //=======================================================================
313 // Function : ClrDomains
314 // Purpose  : Removes all the domains of the hatching.
315 //=======================================================================
316
317 void Geom2dHatch_Hatching::ClrDomains ()
318 {
319   myDomains.Clear () ;
320   myIsDone = Standard_False ;
321 }
322
323 //=======================================================================
324 // Function : ClassificationPoint
325 // Purpose  : returns a 2d point on the curve 
326 //=======================================================================
327 gp_Pnt2d Geom2dHatch_Hatching::ClassificationPoint () const { 
328   Standard_Real t,a,b;
329   a = myCurve.FirstParameter();
330   b = myCurve.LastParameter();
331   if(b >= Precision::Infinite()) { 
332     if(a <= -Precision::Infinite()) { 
333       t=0;
334     }
335     else { 
336       t = a;
337     }
338   }
339   else { 
340     t = b; 
341   }
342   return(myCurve.Value(t));
343 }
344