0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / ShapePersistent / ShapePersistent_Geom_Curve.hxx
1 // Copyright (c) 2015 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14
15 #ifndef _ShapePersistent_Geom_Curve_HeaderFile
16 #define _ShapePersistent_Geom_Curve_HeaderFile
17
18 #include <StdObjMgt_TransientPersistentMap.hxx>
19
20 #include <ShapePersistent_Geom.hxx>
21 #include <ShapePersistent_HArray1.hxx>
22 #include <StdLPersistent_HArray1.hxx>
23
24 #include <Geom_Line.hxx>
25 #include <Geom_Circle.hxx>
26 #include <Geom_Ellipse.hxx>
27 #include <Geom_Hyperbola.hxx>
28 #include <Geom_Parabola.hxx>
29 #include <Geom_BezierCurve.hxx>
30 #include <Geom_BSplineCurve.hxx>
31 #include <Geom_TrimmedCurve.hxx>
32 #include <Geom_OffsetCurve.hxx>
33
34 #include <gp_Circ.hxx>
35 #include <gp_Elips.hxx>
36 #include <gp_Hypr.hxx>
37 #include <gp_Parab.hxx>
38
39 class gp_Dir;
40
41 class ShapePersistent_Geom_Curve : private ShapePersistent_Geom
42 {
43   typedef Curve::PersistentBase pBase;
44
45   typedef pBase pBounded;
46
47   class pBezier : public pBounded
48   {
49     friend class ShapePersistent_Geom_Curve;
50
51   public:
52     pBezier()
53     : myRational(Standard_False)
54     {
55     }
56     inline void Read (StdObjMgt_ReadData& theReadData)
57       { theReadData >> myRational >> myPoles >> myWeights; }
58     inline void Write(StdObjMgt_WriteData& theWriteData)
59       { theWriteData << myRational << myPoles << myWeights; }
60     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
61     {
62       theChildren.Append(myPoles);
63       theChildren.Append(myWeights);
64     }
65     inline Standard_CString PName() const { return "PGeom_BezierCurve"; }
66
67     virtual Handle(Geom_Curve) Import() const;
68
69   private:
70     Standard_Boolean                     myRational;
71     Handle(ShapePersistent_HArray1::Pnt) myPoles;
72     Handle(StdLPersistent_HArray1::Real) myWeights;
73   };
74
75   class pBSpline : public pBounded
76   {
77     friend class ShapePersistent_Geom_Curve;
78
79   public:
80     pBSpline()
81     : myRational(Standard_False),
82       myPeriodic(Standard_False),
83       mySpineDegree(0)
84     {
85     }
86     inline void Read (StdObjMgt_ReadData& theReadData)
87     {
88       theReadData >> myRational >> myPeriodic >> mySpineDegree;
89       theReadData >> myPoles >> myWeights >> myKnots >> myMultiplicities;
90     }
91     inline void Write (StdObjMgt_WriteData& theWriteData) const
92     {
93       theWriteData << myRational << myPeriodic << mySpineDegree;
94       theWriteData << myPoles << myWeights << myKnots << myMultiplicities;
95     }
96     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
97     {
98       theChildren.Append(myPoles);
99       theChildren.Append(myWeights);
100       theChildren.Append(myKnots);
101       theChildren.Append(myMultiplicities);
102     }
103     inline Standard_CString PName() const { return "PGeom_BSplineCurve"; }
104
105     virtual Handle(Geom_Curve) Import() const;
106
107   private:
108     Standard_Boolean                        myRational;
109     Standard_Boolean                        myPeriodic;
110     Standard_Integer                        mySpineDegree;
111     Handle(ShapePersistent_HArray1::Pnt)    myPoles;
112     Handle(StdLPersistent_HArray1::Real)    myWeights;
113     Handle(StdLPersistent_HArray1::Real)    myKnots;
114     Handle(StdLPersistent_HArray1::Integer) myMultiplicities;
115   };
116
117   class pTrimmed : public pBounded
118   {
119     friend class ShapePersistent_Geom_Curve;
120
121   public:
122     pTrimmed()
123     : myFirstU(0.0),
124       myLastU(0.0)
125     {
126     }
127     inline void Read (StdObjMgt_ReadData& theReadData)
128       { theReadData >> myBasisCurve >> myFirstU >> myLastU; }
129     inline void Write (StdObjMgt_WriteData& theWriteData) const
130       { theWriteData << myBasisCurve << myFirstU << myLastU; }
131     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
132       { theChildren.Append(myBasisCurve); }
133     inline Standard_CString PName() const { return "PGeom_TrimmedCurve"; }
134
135     virtual Handle(Geom_Curve) Import() const;
136
137   private:
138     Handle(Curve) myBasisCurve;
139     Standard_Real myFirstU;
140     Standard_Real myLastU;
141   };
142
143   class pOffset : public pBase
144   {
145     friend class ShapePersistent_Geom_Curve;
146
147   public:
148     pOffset()
149     : myOffsetValue(0.0)
150     {
151     }
152     inline void Read (StdObjMgt_ReadData& theReadData)
153       { theReadData >> myBasisCurve >> myOffsetDirection >> myOffsetValue; }
154     inline void Write (StdObjMgt_WriteData& theWriteData) const
155       { theWriteData << myBasisCurve << myOffsetDirection << myOffsetValue; }
156     inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
157       { theChildren.Append(myBasisCurve); }
158     inline Standard_CString PName() const { return "PGeom_OffsetCurve"; }
159
160     virtual Handle(Geom_Curve) Import() const;
161
162   private:
163     Handle(Curve) myBasisCurve;
164     gp_Dir        myOffsetDirection;
165     Standard_Real myOffsetValue;
166   };
167
168 public:
169   typedef instance<Curve, Geom_Line, gp_Ax1>        Line;
170
171   typedef subBase_gp<Curve, gp_Ax2>                 Conic;
172   typedef instance<Conic, Geom_Circle   , gp_Circ > Circle;
173   typedef instance<Conic, Geom_Ellipse  , gp_Elips> Ellipse;
174   typedef instance<Conic, Geom_Hyperbola, gp_Hypr > Hyperbola;
175   typedef instance<Conic, Geom_Parabola , gp_Parab> Parabola;
176
177   typedef subBase_empty<Curve>                      Bounded;
178   typedef Delayed<Bounded, pBezier>                 Bezier;
179   typedef Delayed<Bounded, pBSpline>                BSpline;
180   typedef Delayed<Bounded, pTrimmed>                Trimmed;
181
182   typedef Delayed<Curve, pOffset>                   Offset;
183
184 public:
185   //! Create a persistent object for a line
186   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_Line)& theCurve,
187                                                   StdObjMgt_TransientPersistentMap& theMap);
188   //! Create a persistent object for a circle
189   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_Circle)& theCurve,
190                                                   StdObjMgt_TransientPersistentMap& theMap);
191   //! Create a persistent object for a ellipse
192   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_Ellipse)& theCurve,
193                                                   StdObjMgt_TransientPersistentMap& theMap);
194   //! Create a persistent object for a hyperbola
195   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_Hyperbola)& theCurve,
196                                                   StdObjMgt_TransientPersistentMap& theMap);
197   //! Create a persistent object for a parabola
198   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_Parabola)& theCurve,
199                                                   StdObjMgt_TransientPersistentMap& theMap);
200   //! Create a persistent object for a Bezier curve
201   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_BezierCurve)& theCurve,
202                                                   StdObjMgt_TransientPersistentMap& theMap);
203   //! Create a persistent object for a BSpline curve
204   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_BSplineCurve)& theCurve,
205                                                   StdObjMgt_TransientPersistentMap& theMap);
206   //! Create a persistent object for a trimmed curve
207   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_TrimmedCurve)& theCurve,
208                                                   StdObjMgt_TransientPersistentMap& theMap);
209   //! Create a persistent object for an offset curve 
210   Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom_OffsetCurve)& theCurve,
211                                                   StdObjMgt_TransientPersistentMap& theMap);
212 };
213
214 //=======================================================================
215 // Line
216 //=======================================================================
217 template<>
218 Standard_CString ShapePersistent_Geom::instance<ShapePersistent_Geom::Curve, 
219                                                 Geom_Line, 
220                                                 gp_Ax1>
221   ::PName() const;
222
223 template<>
224 void ShapePersistent_Geom::instance<ShapePersistent_Geom::Curve,
225                                     Geom_Line,
226                                     gp_Ax1>
227   ::Write(StdObjMgt_WriteData& theWriteData) const;
228
229 //=======================================================================
230 // Conic
231 //=======================================================================
232 template<>
233 Standard_CString ShapePersistent_Geom::subBase_gp<ShapePersistent_Geom::Curve, 
234                                                   gp_Ax2>
235   ::PName() const;
236
237 //=======================================================================
238 // Circle
239 //=======================================================================
240 template<>
241 Standard_CString ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic, 
242                                                 Geom_Circle, 
243                                                 gp_Circ>
244   ::PName() const;
245
246 template<>
247 void ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
248                                     Geom_Circle,
249                                     gp_Circ>
250   ::Write(StdObjMgt_WriteData& theWriteData) const;
251
252 //=======================================================================
253 // Ellipse
254 //=======================================================================
255 template<>
256 Standard_CString ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
257                                                 Geom_Ellipse,
258                                                 gp_Elips>
259   ::PName() const;
260
261 template<>
262 void ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
263                                     Geom_Ellipse,
264                                     gp_Elips>
265   ::Write(StdObjMgt_WriteData& theWriteData) const;
266
267 //=======================================================================
268 // Hyperbola
269 //=======================================================================
270 template<>
271 Standard_CString ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
272                                                 Geom_Hyperbola,
273                                                 gp_Hypr>
274   ::PName() const;
275
276 template<>
277 void ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
278                                     Geom_Hyperbola,
279                                     gp_Hypr>
280   ::Write(StdObjMgt_WriteData& theWriteData) const;
281
282 //=======================================================================
283 // Parabola
284 //=======================================================================
285 template<>
286 Standard_CString ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
287                                                 Geom_Parabola,
288                                                 gp_Parab>
289   ::PName() const;
290
291 template<>
292 void ShapePersistent_Geom::instance<ShapePersistent_Geom_Curve::Conic,
293                                     Geom_Parabola,
294                                     gp_Parab>
295   ::Write(StdObjMgt_WriteData& theWriteData) const;
296
297 #endif