1 // Copyright (c) 2015 OPEN CASCADE SAS
3 // This file is part of Open CASCADE Technology software library.
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.
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
14 #include <ShapePersistent_Poly.hxx>
15 #include <ShapePersistent_HArray1.hxx>
17 #include <Poly_Polygon2D.hxx>
18 #include <Poly_Polygon3D.hxx>
19 #include <Poly_PolygonOnTriangulation.hxx>
20 #include <Poly_Triangulation.hxx>
23 void ShapePersistent_Poly::pPolygon2D::PChildren
24 (StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
26 theChildren.Append(myNodes);
29 Handle(Poly_Polygon2D) ShapePersistent_Poly::pPolygon2D::Import() const
34 Handle(Poly_Polygon2D) aPolygon = new Poly_Polygon2D (*myNodes->Array());
35 aPolygon->Deflection (myDeflection);
39 void ShapePersistent_Poly::pPolygon3D::PChildren
40 (StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
42 theChildren.Append(myNodes);
43 theChildren.Append(myParameters);
46 Handle(Poly_Polygon3D) ShapePersistent_Poly::pPolygon3D::Import() const
48 if (myNodes.IsNull() || myParameters.IsNull())
51 Handle(Poly_Polygon3D) aPolygon = new Poly_Polygon3D (*myNodes->Array(),
52 *myParameters->Array());
53 aPolygon->Deflection (myDeflection);
57 void ShapePersistent_Poly::pPolygonOnTriangulation::PChildren
58 (StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
60 theChildren.Append(myNodes);
61 theChildren.Append(myParameters);
64 Handle(Poly_PolygonOnTriangulation)
65 ShapePersistent_Poly::pPolygonOnTriangulation::Import() const
67 Handle(Poly_PolygonOnTriangulation) aPolygon;
72 aPolygon = new Poly_PolygonOnTriangulation (*myNodes->Array(),
73 *myParameters->Array());
75 aPolygon = new Poly_PolygonOnTriangulation (*myNodes->Array());
77 aPolygon->Deflection (myDeflection);
83 void ShapePersistent_Poly::pTriangulation::PChildren
84 (StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const
86 theChildren.Append(myNodes);
87 theChildren.Append(myUVNodes);
88 theChildren.Append(myTriangles);
91 Handle(Poly_Triangulation) ShapePersistent_Poly::pTriangulation::Import() const
93 Handle(Poly_Triangulation) aTriangulation;
95 // Triangulation is not used
97 if (myNodes && myTriangles)
100 aTriangulation = new Poly_Triangulation (*myNodes->Array(),
102 *myTriangles->Array());
104 aTriangulation = new Poly_Triangulation (*myNodes->Array(),
105 *myTriangles->Array());
107 aTriangulation->Deflection (myDeflection);
111 return aTriangulation;
114 Handle(ShapePersistent_Poly::Polygon2D)
115 ShapePersistent_Poly::Translate(const Handle(Poly_Polygon2D)& thePoly,
116 StdObjMgt_TransientPersistentMap& theMap)
118 Handle(Polygon2D) aPP;
119 if (!thePoly.IsNull())
121 if (theMap.IsBound(thePoly))
122 aPP = Handle(Polygon2D)::DownCast(theMap.Find(thePoly));
126 aPP->myPersistent = new pPolygon2D;
127 aPP->myPersistent->myDeflection = thePoly->Deflection();
128 aPP->myPersistent->myNodes =
129 StdLPersistent_HArray1::Translate<TColgp_HArray1OfPnt2d>("PColgp_HArray1OfPnt2d", thePoly->Nodes());
130 theMap.Bind(thePoly, aPP);
136 Handle(ShapePersistent_Poly::Polygon3D)
137 ShapePersistent_Poly::Translate(const Handle(Poly_Polygon3D)& thePoly,
138 StdObjMgt_TransientPersistentMap& theMap)
140 Handle(Polygon3D) aPP = new Polygon3D;
141 if (!thePoly.IsNull())
143 if (theMap.IsBound(thePoly))
144 aPP = Handle(Polygon3D)::DownCast(theMap.Find(thePoly));
148 aPP->myPersistent = new pPolygon3D;
149 aPP->myPersistent->myDeflection = thePoly->Deflection();
150 aPP->myPersistent->myNodes =
151 StdLPersistent_HArray1::Translate<TColgp_HArray1OfPnt>("PColgp_HArray1OfPnt", thePoly->Nodes());
152 if (thePoly->HasParameters()) {
153 aPP->myPersistent->myParameters =
154 StdLPersistent_HArray1::Translate<TColStd_HArray1OfReal>(thePoly->Parameters());
156 theMap.Bind(thePoly, aPP);
162 Handle(ShapePersistent_Poly::PolygonOnTriangulation)
163 ShapePersistent_Poly::Translate(const Handle(Poly_PolygonOnTriangulation)& thePolyOnTriang,
164 StdObjMgt_TransientPersistentMap& theMap)
166 Handle(PolygonOnTriangulation) aPPonT;
167 if (!thePolyOnTriang.IsNull())
169 if (theMap.IsBound(thePolyOnTriang))
170 aPPonT = Handle(PolygonOnTriangulation)::DownCast(theMap.Find(thePolyOnTriang));
173 aPPonT = new PolygonOnTriangulation;
174 aPPonT->myPersistent = new pPolygonOnTriangulation;
175 aPPonT->myPersistent->myDeflection = thePolyOnTriang->Deflection();
176 aPPonT->myPersistent->myNodes =
177 StdLPersistent_HArray1::Translate<TColStd_HArray1OfInteger>(thePolyOnTriang->Nodes());
178 if (thePolyOnTriang->HasParameters()) {
179 aPPonT->myPersistent->myParameters =
180 StdLPersistent_HArray1::Translate<TColStd_HArray1OfReal>(thePolyOnTriang->Parameters()->Array1());
182 theMap.Bind(thePolyOnTriang, aPPonT);
188 Handle(ShapePersistent_Poly::Triangulation)
189 ShapePersistent_Poly::Translate(const Handle(Poly_Triangulation)& thePolyTriang,
190 StdObjMgt_TransientPersistentMap& theMap)
192 Handle(Triangulation) aPT;
193 if (!thePolyTriang.IsNull())
195 if (theMap.IsBound(thePolyTriang))
196 aPT = Handle(Triangulation)::DownCast(theMap.Find(thePolyTriang));
199 aPT = new Triangulation;
200 aPT->myPersistent = new pTriangulation;
201 aPT->myPersistent->myNodes =
202 StdLPersistent_HArray1::Translate<TColgp_HArray1OfPnt>("PColgp_HArray1OfPnt", thePolyTriang->Nodes());
203 aPT->myPersistent->myTriangles =
204 StdLPersistent_HArray1::Translate<Poly_HArray1OfTriangle>("PPoly_HArray1OfTriangle", thePolyTriang->Triangles());
205 if (thePolyTriang->HasUVNodes()) {
206 aPT->myPersistent->myUVNodes =
207 StdLPersistent_HArray1::Translate<TColgp_HArray1OfPnt2d>("PColgp_HArray1OfPnt2d", thePolyTriang->UVNodes());
209 theMap.Bind(thePolyTriang, aPT);