0024750: Replace instantiations of TCollection generic classes by NCollection templat...
[occt.git] / src / MeshVS / MeshVS_DeformedDataSource.cxx
1 // Created on: 2003-12-11
2 // Created by: Alexander SOLOVYOV
3 // Copyright (c) 2003-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <MeshVS_DeformedDataSource.ixx>
17 #include <MeshVS_Buffer.hxx>
18
19 //================================================================
20 // Function : Constructor MeshVS_DeformedDataSource
21 // Purpose  :
22 //================================================================
23 MeshVS_DeformedDataSource::MeshVS_DeformedDataSource( const Handle(MeshVS_DataSource)& theNonDeformDS,
24                                                       const Standard_Real theMagnify )
25 {
26   myNonDeformedDataSource = theNonDeformDS;
27   SetMagnify ( theMagnify );
28 }
29
30 //================================================================
31 // Function : shiftCoord
32 // Purpose  : auxiliary: shift coordinate of the node on a given vector
33 //================================================================
34
35 static inline void shiftCoord (TColStd_Array1OfReal& Coords, Standard_Integer i, const gp_Vec &aVec)
36 {
37   Coords(3*i-2) = Coords(3*i-2) + aVec.X();
38   Coords(3*i-1) = Coords(3*i-1) + aVec.Y();
39   Coords(3*i)   = Coords(3*i)   + aVec.Z();
40 }
41
42 //================================================================
43 // Function : GetGeom
44 // Purpose  :
45 //================================================================
46 Standard_Boolean MeshVS_DeformedDataSource::GetGeom( const Standard_Integer ID,
47                                                      const Standard_Boolean IsElement,
48                                                      TColStd_Array1OfReal& Coords,
49                                                      Standard_Integer& NbNodes,
50                                                      MeshVS_EntityType& Type) const
51 {
52   if ( myNonDeformedDataSource.IsNull() ||
53        ! myNonDeformedDataSource->GetGeom ( ID, IsElement, Coords, NbNodes, Type ) )
54     return Standard_False;
55   
56   if ( Type==MeshVS_ET_Node )
57   {
58     gp_Vec Vect;
59     if ( ! GetVector( ID, Vect ) )
60       return Standard_False;
61     shiftCoord ( Coords, 1, myMagnify * Vect );
62   }
63   else
64   {
65     MeshVS_Buffer aNodesBuf (NbNodes * sizeof(Standard_Integer));
66     TColStd_Array1OfInteger aNodes (aNodesBuf, 1, NbNodes);
67     if ( !myNonDeformedDataSource->GetNodesByElement ( ID, aNodes, NbNodes ) )
68       return Standard_False;
69     for ( int i=1; i <= NbNodes; i++ )
70     {
71       gp_Vec Vect;
72       if ( ! GetVector( aNodes(i), Vect ) )
73         return Standard_False;
74       shiftCoord ( Coords, i, myMagnify * Vect );
75     }
76   }
77   return Standard_True;
78 }
79
80 //================================================================
81 // Function : GetGeomType
82 // Purpose  :
83 //================================================================
84 Standard_Boolean MeshVS_DeformedDataSource::GetGeomType( const Standard_Integer ID,
85                                                          const Standard_Boolean IsElement,
86                                                          MeshVS_EntityType& Type) const
87 {
88   if ( myNonDeformedDataSource.IsNull() )
89     return Standard_False;
90   else
91     return myNonDeformedDataSource->GetGeomType( ID, IsElement, Type );
92 }
93
94 //================================================================
95 // Function : Get3DGeom
96 // Purpose  :
97 //================================================================
98 Standard_Boolean MeshVS_DeformedDataSource::Get3DGeom( const Standard_Integer ID, 
99                                                        Standard_Integer& NbNodes,
100                                                        Handle( MeshVS_HArray1OfSequenceOfInteger )& Data ) const
101 {
102   if( myNonDeformedDataSource.IsNull() )
103     return Standard_False;
104   else
105     return myNonDeformedDataSource->Get3DGeom( ID, NbNodes, Data );
106 }
107
108 //================================================================
109 // Function : GetAddr
110 // Purpose  :
111 //================================================================
112 Standard_Address MeshVS_DeformedDataSource::GetAddr( const Standard_Integer ID,
113                                                      const Standard_Boolean IsElement ) const
114 {
115   if ( myNonDeformedDataSource.IsNull() )
116     return 0;
117   else
118     return myNonDeformedDataSource->GetAddr( ID, IsElement );
119 }
120
121 //================================================================
122 // Function : GetNodesByElement
123 // Purpose  :
124 //================================================================
125 Standard_Boolean MeshVS_DeformedDataSource::GetNodesByElement
126                          (const Standard_Integer   ID,
127                           TColStd_Array1OfInteger& NodeIDs,
128                           Standard_Integer&        NbNodes) const
129 {
130   if ( myNonDeformedDataSource.IsNull() )
131     return Standard_False;
132   else
133     return myNonDeformedDataSource->GetNodesByElement( ID, NodeIDs, NbNodes );
134 }
135
136 //================================================================
137 // Function : GetAllNodes
138 // Purpose  :
139 //================================================================
140 const TColStd_PackedMapOfInteger& MeshVS_DeformedDataSource::GetAllNodes() const
141 {
142   if ( myNonDeformedDataSource.IsNull() )
143     return myEmptyMap;
144   else
145     return myNonDeformedDataSource->GetAllNodes();
146 }
147
148 //================================================================
149 // Function : GetAllElements
150 // Purpose  :
151 //================================================================
152 const TColStd_PackedMapOfInteger& MeshVS_DeformedDataSource::GetAllElements() const
153 {
154   if ( myNonDeformedDataSource.IsNull() )
155     return myEmptyMap;
156   else
157     return myNonDeformedDataSource->GetAllElements();
158 }
159
160 //================================================================
161 // Function : GetVectors
162 // Purpose  :
163 //================================================================
164 const MeshVS_DataMapOfIntegerVector& MeshVS_DeformedDataSource::GetVectors() const
165 {
166   return myVectors;
167 }
168
169 //================================================================
170 // Function : SetVectors
171 // Purpose  :
172 //================================================================
173 void MeshVS_DeformedDataSource::SetVectors( const MeshVS_DataMapOfIntegerVector& Map )
174 {
175   myVectors = Map;
176 }
177
178 //================================================================
179 // Function : GetVector
180 // Purpose  :
181 //================================================================
182 Standard_Boolean MeshVS_DeformedDataSource::GetVector( const Standard_Integer ID,
183                                                        gp_Vec& Vect ) const
184 {
185   Standard_Boolean aRes = myVectors.IsBound ( ID );
186   if ( aRes )
187     Vect = myVectors.Find ( ID );
188   return aRes;
189 }
190
191 //================================================================
192 // Function : SetVector
193 // Purpose  :
194 //================================================================
195 void MeshVS_DeformedDataSource::SetVector( const Standard_Integer ID,
196                                            const gp_Vec& Vect )
197 {
198   Standard_Boolean aRes = myVectors.IsBound ( ID );
199   if ( aRes )
200     myVectors.ChangeFind ( ID ) = Vect;
201   else
202     myVectors.Bind( ID, Vect );
203 }
204
205 //================================================================
206 // Function : SetNonDeformedDataSource
207 // Purpose  :
208 //================================================================
209 void MeshVS_DeformedDataSource::SetNonDeformedDataSource( const Handle(MeshVS_DataSource)& theDS )
210 {
211   myNonDeformedDataSource = theDS;
212 }
213
214 //================================================================
215 // Function : GetNonDeformedDataSource
216 // Purpose  :
217 //================================================================
218 Handle(MeshVS_DataSource) MeshVS_DeformedDataSource::GetNonDeformedDataSource() const
219 {
220   return myNonDeformedDataSource;
221 }
222
223 //================================================================
224 // Function : SetMagnify
225 // Purpose  :
226 //================================================================
227 void MeshVS_DeformedDataSource::SetMagnify( const Standard_Real theMagnify )
228 {
229   if ( theMagnify<=0 )
230     myMagnify = 1.0;
231   else
232     myMagnify = theMagnify;
233 }
234
235 //================================================================
236 // Function : GetMagnify
237 // Purpose  :
238 //================================================================
239 Standard_Real MeshVS_DeformedDataSource::GetMagnify() const
240 {
241   return myMagnify;
242 }