0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / Geom2dLProp / Geom2dLProp_CurAndInf2d.cxx
1 // Created on: 1994-09-06
2 // Created by: Yves FRICAUD
3 // Copyright (c) 1994-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 <Geom2d_Curve.hxx>
19 #include <Geom2dAdaptor_Curve.hxx>
20 #include <Geom2dLProp_CurAndInf2d.hxx>
21 #include <Geom2dLProp_NumericCurInf2d.hxx>
22 #include <gp_Circ2d.hxx>
23 #include <gp_Elips2d.hxx>
24 #include <gp_Hypr2d.hxx>
25 #include <gp_Lin2d.hxx>
26 #include <gp_Parab2d.hxx>
27 #include <LProp_AnalyticCurInf.hxx>
28 #include <TColStd_Array1OfReal.hxx>
29
30 //=======================================================================
31 //function : Geom2dLProp_CurAndInf2d
32 //purpose  : 
33 //=======================================================================
34 Geom2dLProp_CurAndInf2d::Geom2dLProp_CurAndInf2d()
35 : isDone(Standard_False)
36 {
37 }
38
39
40 //=======================================================================
41 //function : Perform
42 //purpose  : 
43 //=======================================================================
44
45 void Geom2dLProp_CurAndInf2d::Perform(const Handle(Geom2d_Curve)& C)
46 {
47   PerformCurExt(C);
48   PerformInf   (C);
49 }
50
51
52 //=======================================================================
53 //function : PerformCurExt
54 //purpose  : 
55 //=======================================================================
56
57 void Geom2dLProp_CurAndInf2d::PerformCurExt(const Handle(Geom2d_Curve)& C)
58 {
59   isDone = Standard_True;
60
61   Geom2dAdaptor_Curve         CC(C);
62   LProp_AnalyticCurInf        AC;
63   Geom2dLProp_NumericCurInf2d NC;
64   GeomAbs_CurveType           CType = CC.GetType();
65
66   switch (CType) {
67   case GeomAbs_Line: 
68     break;
69   case GeomAbs_Circle:
70     break;
71   case GeomAbs_Ellipse:
72     AC.Perform(CType,CC.FirstParameter(),CC.LastParameter(),*this);
73     break;
74   case GeomAbs_Hyperbola:
75     AC.Perform(CType,CC.FirstParameter(),CC.LastParameter(),*this);
76     break;
77   case GeomAbs_Parabola:
78     AC.Perform(CType,CC.FirstParameter(),CC.LastParameter(),*this);
79     break;
80   case GeomAbs_BSplineCurve:
81     if (CC.Continuity() >= GeomAbs_C3 ) {
82       NC.PerformCurExt(C,*this);
83       isDone = NC.IsDone();
84     }
85     else {
86       // Decoupage en intervalles C3.
87       isDone = Standard_True;
88       Standard_Integer NbInt = CC.NbIntervals(GeomAbs_C3);
89       TColStd_Array1OfReal Param(1,NbInt+1);
90       CC.Intervals(Param,GeomAbs_C3);
91       for (Standard_Integer i = 1; i <= NbInt; i++) {
92         NC.PerformCurExt(C,Param(i),Param(i+1),*this);
93         if (!NC.IsDone()) {isDone = Standard_False;}
94       }
95     }
96     break;
97
98     default : {
99       NC.PerformCurExt(C,*this);
100       isDone = NC.IsDone();
101     }
102     break;
103   }
104   
105 }
106
107
108 //=======================================================================
109 //function : PerformInf
110 //purpose  : 
111 //=======================================================================
112
113 void Geom2dLProp_CurAndInf2d::PerformInf(const Handle(Geom2d_Curve)& C)
114 {
115   isDone = Standard_True;
116
117   Geom2dAdaptor_Curve  CC(C);
118   GeomAbs_CurveType    CType = CC.GetType();
119   Geom2dLProp_NumericCurInf2d NC;
120
121   switch (CType) {
122   case GeomAbs_Line:
123     break;
124   case GeomAbs_Circle:
125     break;
126   case GeomAbs_Ellipse:
127       break;
128   case GeomAbs_Hyperbola:
129     break;
130   case GeomAbs_Parabola:
131     break;
132   case GeomAbs_BSplineCurve:
133     if (CC.Continuity() >= GeomAbs_C3 ) {
134       NC.PerformInf(C,*this);
135       isDone = NC.IsDone();
136     }
137     else {
138       // Decoupage en intervalles C3.
139       isDone = Standard_True;
140       Standard_Integer NbInt = CC.NbIntervals(GeomAbs_C3);
141       TColStd_Array1OfReal Param(1,NbInt+1);
142       CC.Intervals(Param,GeomAbs_C3);
143
144       for (Standard_Integer i = 1; i <= NbInt; i++) {
145         NC.PerformInf(C,Param(i),Param(i+1),*this);
146         if (!NC.IsDone()) {isDone = Standard_False;}
147       }
148     }
149     break;
150
151     default : {
152       NC.PerformInf(C,*this);
153       isDone = NC.IsDone();
154     }
155     break;
156   }  
157 }
158
159
160 //=======================================================================
161 //function : IsDone
162 //purpose  : 
163 //=======================================================================
164
165 Standard_Boolean Geom2dLProp_CurAndInf2d::IsDone() const 
166 {
167   return isDone;
168 }
169
170