0027772: Foundation Classes - define Standard_Boolean using C++ type "bool" instead...
[occt.git] / src / ShapePersistent / ShapePersistent_BRep.cxx
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 #include <ShapePersistent_BRep.hxx>
15
16 #include <BRep_PointOnCurve.hxx>
17 #include <BRep_PointOnCurveOnSurface.hxx>
18 #include <BRep_PointOnSurface.hxx>
19 #include <BRep_Curve3D.hxx>
20 #include <BRep_CurveOnSurface.hxx>
21 #include <BRep_CurveOnClosedSurface.hxx>
22 #include <BRep_Polygon3D.hxx>
23 #include <BRep_PolygonOnTriangulation.hxx>
24 #include <BRep_PolygonOnClosedTriangulation.hxx>
25 #include <BRep_PolygonOnSurface.hxx>
26 #include <BRep_PolygonOnClosedSurface.hxx>
27 #include <BRep_CurveOn2Surfaces.hxx>
28
29 #include <BRep_TVertex.hxx>
30 #include <BRep_TEdge.hxx>
31 #include <BRep_TFace.hxx>
32
33
34 enum
35 {
36   ParameterMask   = 1,
37   RangeMask       = 2,
38   DegeneratedMask = 4
39 };
40
41
42 //=======================================================================
43 //function : Read
44 //purpose  : Read persistent data from a file
45 //=======================================================================
46 void ShapePersistent_BRep::PointRepresentation::Read
47   (StdObjMgt_ReadData& theReadData)
48     { theReadData >> myLocation >> myParameter >> myNext; }
49
50 //=======================================================================
51 //function : Import
52 //purpose  : Import transient object from the persistent data
53 //=======================================================================
54 void ShapePersistent_BRep::PointRepresentation::Import
55   (BRep_ListOfPointRepresentation& thePoints) const
56 {
57   thePoints.Clear();
58   Handle(PointRepresentation) aPoint = this;
59   for (; aPoint; aPoint = aPoint->myNext)
60     thePoints.Prepend (aPoint->import());
61 }
62
63 Handle(BRep_PointRepresentation)
64   ShapePersistent_BRep::PointRepresentation::import() const
65     { return NULL; }
66
67 void ShapePersistent_BRep::PointOnCurve::Read
68   (StdObjMgt_ReadData& theReadData)
69 {
70   PointRepresentation::Read (theReadData);
71   theReadData >> myCurve;
72 }
73
74 Handle(BRep_PointRepresentation)
75   ShapePersistent_BRep::PointOnCurve::import() const
76 {
77   Handle(Geom_Curve) aCurve;
78   if (myCurve)
79     aCurve = myCurve->Import();
80
81   return new BRep_PointOnCurve
82     (myParameter, aCurve, myLocation.Import());
83 }
84
85 void ShapePersistent_BRep::PointsOnSurface::Read
86   (StdObjMgt_ReadData& theReadData)
87 {
88   PointRepresentation::Read (theReadData);
89   theReadData >> mySurface;
90 }
91
92 void ShapePersistent_BRep::PointOnCurveOnSurface::Read
93   (StdObjMgt_ReadData& theReadData)
94 {
95   PointsOnSurface::Read (theReadData);
96   theReadData >> myPCurve;
97 }
98
99 Handle(BRep_PointRepresentation)
100   ShapePersistent_BRep::PointOnCurveOnSurface::import() const
101 {
102   Handle(Geom2d_Curve) aPCurve;
103   if (myPCurve)
104     aPCurve = myPCurve->Import();
105
106   Handle(Geom_Surface) aSurface;
107   if (mySurface)
108     aSurface = mySurface->Import();
109
110   return new BRep_PointOnCurveOnSurface
111     (myParameter, aPCurve, aSurface, myLocation.Import());
112 }
113
114 void ShapePersistent_BRep::PointOnSurface::Read
115   (StdObjMgt_ReadData& theReadData)
116 {
117   PointsOnSurface::Read (theReadData);
118   theReadData >> myParameter2;
119 }
120
121 Handle(BRep_PointRepresentation)
122   ShapePersistent_BRep::PointOnSurface::import() const
123 {
124   Handle(Geom_Surface) aSurface;
125   if (mySurface)
126     aSurface = mySurface->Import();
127
128   return new BRep_PointOnSurface
129     (myParameter, myParameter2, aSurface, myLocation.Import());
130 }
131
132 //=======================================================================
133 //function : Read
134 //purpose  : Read persistent data from a file
135 //=======================================================================
136 void ShapePersistent_BRep::CurveRepresentation::Read
137   (StdObjMgt_ReadData& theReadData)
138     { theReadData >> myLocation >> myNext; }
139
140 //=======================================================================
141 //function : Import
142 //purpose  : Import transient object from the persistent data
143 //=======================================================================
144 void ShapePersistent_BRep::CurveRepresentation::Import
145   (BRep_ListOfCurveRepresentation& theCurves) const
146 {
147   theCurves.Clear();
148   Handle(CurveRepresentation) aCurve = this;
149   for (; aCurve; aCurve = aCurve->myNext)
150     theCurves.Prepend (aCurve->import());
151 }
152
153 Handle(BRep_CurveRepresentation)
154   ShapePersistent_BRep::CurveRepresentation::import() const
155     { return NULL; }
156
157 void ShapePersistent_BRep::GCurve::Read
158   (StdObjMgt_ReadData& theReadData)
159 {
160   CurveRepresentation::Read (theReadData);
161   theReadData >> myFirst >> myLast;
162 }
163
164 void ShapePersistent_BRep::Curve3D::Read
165   (StdObjMgt_ReadData& theReadData)
166 {
167   GCurve::Read (theReadData);
168   theReadData >> myCurve3D;
169 }
170
171 Handle(BRep_CurveRepresentation)
172   ShapePersistent_BRep::Curve3D::import() const
173 {
174   Handle(Geom_Curve) aCurve3D;
175   if (myCurve3D)
176     aCurve3D = myCurve3D->Import();
177
178   Handle(BRep_Curve3D) aRepresentation =
179     new BRep_Curve3D (aCurve3D, myLocation.Import());
180
181   aRepresentation->SetRange (myFirst, myLast);
182   return aRepresentation;
183 }
184
185 void ShapePersistent_BRep::CurveOnSurface::Read
186   (StdObjMgt_ReadData& theReadData)
187 {
188   GCurve::Read (theReadData);
189   theReadData >> myPCurve >> mySurface >> myUV1 >> myUV2;
190 }
191
192 Handle(BRep_CurveRepresentation)
193   ShapePersistent_BRep::CurveOnSurface::import() const
194 {
195   Handle(Geom2d_Curve) aPCurve;
196   if (myPCurve)
197     aPCurve = myPCurve->Import();
198
199   Handle(Geom_Surface) aSurface;
200   if (mySurface)
201     aSurface = mySurface->Import();
202
203   Handle(BRep_CurveOnSurface) aRepresentation =
204     new BRep_CurveOnSurface (aPCurve, aSurface, myLocation.Import());
205
206   aRepresentation->SetUVPoints (myUV1, myUV2);
207   aRepresentation->SetRange (myFirst, myLast);
208
209   return aRepresentation;
210 }
211
212 void ShapePersistent_BRep::CurveOnClosedSurface::Read
213   (StdObjMgt_ReadData& theReadData)
214 {
215   CurveOnSurface::Read (theReadData);
216   theReadData >> myPCurve2 >> myContinuity >> myUV21 >> myUV22;
217 }
218
219 Handle(BRep_CurveRepresentation)
220   ShapePersistent_BRep::CurveOnClosedSurface::import() const
221 {
222   Handle(Geom2d_Curve) aPCurve;
223   if (myPCurve)
224     aPCurve = myPCurve->Import();
225
226   Handle(Geom2d_Curve) aPCurve2;
227   if (myPCurve2)
228     aPCurve2 = myPCurve2->Import();
229
230   Handle(Geom_Surface) aSurface;
231   if (mySurface)
232     aSurface = mySurface->Import();
233
234   GeomAbs_Shape aContinuity = static_cast<GeomAbs_Shape> (myContinuity);
235
236   Handle(BRep_CurveOnClosedSurface) aRepresentation =
237     new BRep_CurveOnClosedSurface
238       (aPCurve, aPCurve2, aSurface, myLocation.Import(), aContinuity);
239
240   aRepresentation->SetUVPoints  (myUV1  , myUV2 );
241   aRepresentation->SetUVPoints2 (myUV21 , myUV22);
242   aRepresentation->SetRange     (myFirst, myLast);
243
244   return aRepresentation;
245 }
246
247 void ShapePersistent_BRep::Polygon3D::Read
248   (StdObjMgt_ReadData& theReadData)
249 {
250   CurveRepresentation::Read (theReadData);
251   theReadData >> myPolygon3D;
252 }
253
254 Handle(BRep_CurveRepresentation)
255   ShapePersistent_BRep::Polygon3D::import() const
256 {
257   Handle(Poly_Polygon3D) aPolygon3D;
258   if (myPolygon3D)
259     aPolygon3D = myPolygon3D->Import();
260
261   return new BRep_Polygon3D (aPolygon3D, myLocation.Import());
262 }
263
264 void ShapePersistent_BRep::PolygonOnTriangulation::Read
265   (StdObjMgt_ReadData& theReadData)
266 {
267   CurveRepresentation::Read (theReadData);
268   theReadData >> myPolygon >> myTriangulation;
269 }
270
271 Handle(BRep_CurveRepresentation)
272   ShapePersistent_BRep::PolygonOnTriangulation::import() const
273 {
274   Handle(Poly_PolygonOnTriangulation) aPolygon;
275   if (myPolygon)
276     aPolygon = myPolygon->Import();
277
278   Handle(Poly_Triangulation) aTriangulation;
279   if (myTriangulation)
280     aTriangulation = myTriangulation->Import();
281
282   return new BRep_PolygonOnTriangulation
283     (aPolygon, aTriangulation, myLocation.Import());
284 }
285
286 void ShapePersistent_BRep::PolygonOnClosedTriangulation::Read
287   (StdObjMgt_ReadData& theReadData)
288 {
289   PolygonOnTriangulation::Read (theReadData);
290   theReadData >> myPolygon2;
291 }
292
293 Handle(BRep_CurveRepresentation)
294   ShapePersistent_BRep::PolygonOnClosedTriangulation::import() const
295 {
296   Handle(Poly_PolygonOnTriangulation) aPolygon;
297   if (myPolygon)
298     aPolygon = myPolygon->Import();
299
300   Handle(Poly_PolygonOnTriangulation) aPolygon2;
301   if (myPolygon2)
302     aPolygon2 = myPolygon2->Import();
303
304   Handle(Poly_Triangulation) aTriangulation;
305   if (myTriangulation)
306     aTriangulation = myTriangulation->Import();
307
308   return new BRep_PolygonOnClosedTriangulation
309     (aPolygon, aPolygon2, aTriangulation, myLocation.Import());
310 }
311
312 void ShapePersistent_BRep::PolygonOnSurface::Read
313   (StdObjMgt_ReadData& theReadData)
314 {
315   CurveRepresentation::Read (theReadData);
316   theReadData >> myPolygon2D >> mySurface;
317 }
318
319 Handle(BRep_CurveRepresentation)
320   ShapePersistent_BRep::PolygonOnSurface::import() const
321 {
322   Handle(Poly_Polygon2D) aPolygon2D;
323   if (myPolygon2D)
324     aPolygon2D = myPolygon2D->Import();
325
326   Handle(Geom_Surface) aSurface;
327   if (mySurface)
328     aSurface = mySurface->Import();
329
330   return new BRep_PolygonOnSurface (aPolygon2D, aSurface, myLocation.Import());
331 }
332
333 void ShapePersistent_BRep::PolygonOnClosedSurface::Read
334   (StdObjMgt_ReadData& theReadData)
335 {
336   PolygonOnSurface::Read (theReadData);
337   theReadData >> myPolygon2;
338 }
339
340 Handle(BRep_CurveRepresentation)
341   ShapePersistent_BRep::PolygonOnClosedSurface::import() const
342 {
343   Handle(Poly_Polygon2D) aPolygon2D;
344   if (myPolygon2D)
345     aPolygon2D = myPolygon2D->Import();
346
347   Handle(Poly_Polygon2D) aPolygon2;
348   if (myPolygon2)
349     aPolygon2 = myPolygon2->Import();
350
351   Handle(Geom_Surface) aSurface;
352   if (mySurface)
353     aSurface = mySurface->Import();
354
355   return new BRep_PolygonOnClosedSurface
356     (aPolygon2D, aPolygon2, aSurface, myLocation.Import());
357 }
358
359 void ShapePersistent_BRep::CurveOn2Surfaces::Read
360   (StdObjMgt_ReadData& theReadData)
361 {
362   CurveRepresentation::Read (theReadData);
363   theReadData >> mySurface >> mySurface2 >> myLocation2 >> myContinuity;
364 }
365
366 Handle(BRep_CurveRepresentation)
367   ShapePersistent_BRep::CurveOn2Surfaces::import() const
368 {
369   Handle(Geom_Surface) aSurface;
370   if (mySurface)
371     aSurface = mySurface->Import();
372
373   Handle(Geom_Surface) aSurface2;
374   if (mySurface2)
375     aSurface2 = mySurface2->Import();
376
377   GeomAbs_Shape aContinuity = static_cast<GeomAbs_Shape> (myContinuity);
378
379   return new BRep_CurveOn2Surfaces
380     (aSurface, aSurface2, myLocation.Import(), myLocation2.Import(), aContinuity);
381 }
382
383 //=======================================================================
384 //function : createTShape
385 //purpose  : Create transient TShape object
386 //=======================================================================
387 Handle(TopoDS_TShape) ShapePersistent_BRep::pTVertex::createTShape() const
388 {
389   Handle(BRep_TVertex) aTVertex = new BRep_TVertex;
390
391   aTVertex->Tolerance (myTolerance);
392   aTVertex->Pnt       (myPnt);
393
394   myPoints->Import (aTVertex->ChangePoints());
395
396   return aTVertex;
397 }
398
399 //=======================================================================
400 //function : createTShape
401 //purpose  : Create transient TShape object
402 //=======================================================================
403 Handle(TopoDS_TShape) ShapePersistent_BRep::pTEdge::createTShape() const
404 {
405   Handle(BRep_TEdge) aTEdge = new BRep_TEdge;
406
407   aTEdge->Tolerance     (myTolerance);
408   aTEdge->SameParameter ((myFlags & ParameterMask)   != 0);
409   aTEdge->SameRange     ((myFlags & RangeMask)       != 0);
410   aTEdge->Degenerated   ((myFlags & DegeneratedMask) != 0);
411
412   myCurves->Import (aTEdge->ChangeCurves());
413
414   return aTEdge;
415 }
416
417 //=======================================================================
418 //function : createTShape
419 //purpose  : Create transient TShape object
420 //=======================================================================
421 Handle(TopoDS_TShape) ShapePersistent_BRep::pTFace::createTShape() const
422 {
423   Handle(BRep_TFace) aTFace = new BRep_TFace;
424
425   aTFace->NaturalRestriction (myNaturalRestriction);
426   aTFace->Tolerance          (myTolerance);
427   aTFace->Location           (myLocation.Import());
428
429   if (mySurface)
430     aTFace->Surface (mySurface->Import());
431
432   if (myTriangulation)
433     aTFace->Triangulation (myTriangulation->Import());
434
435   return aTFace;
436 }