Salome HOME
Cas tests bielle + tuyau
[modules/hexablock.git] / src / HEXABLOCK / HexDocument_trans.cxx
1
2 // C++ : La clase principale de Hexa
3
4 // Copyright (C) 2009-2013  CEA/DEN, EDF R&D
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 #include "HexDocument.hxx"
23
24 #include "HexEltBase.hxx"
25 #include "HexVertex.hxx"
26 #include "HexEdge.hxx"
27 #include "HexQuad.hxx"
28 #include "HexHexa.hxx"
29
30 #include "HexElements.hxx"
31 #include "HexCrossElements.hxx"
32
33 #include "HexVector.hxx"
34 #include "HexMatrix.hxx"
35 #include "HexCloner.hxx"
36 #include "HexPropagation.hxx"
37 #include "HexLaw.hxx"
38
39 #include "HexXmlWriter.hxx"
40 #include "HexXmlTree.hxx"
41 #include "HexGlobale.hxx"
42
43 BEGIN_NAMESPACE_HEXA
44 // ========================================================= performTranslation
45 int Document::performTranslation (Elements* elts, Vector* trans)
46
47    DumpStart ("performTranslation", elts << trans);
48
49    Matrix matrice;
50    matrice.defTranslation (trans);
51
52    int    ier = elts->transform (&matrice);
53
54    DumpReturn (ier);
55    return ier;
56 }
57 // ==================================================== performScale
58 int Document::performScale (Elements* elts, Vertex* ver, double k)
59
60    DumpStart ("performScale", elts << ver << k);
61
62    Matrix matrice;
63    matrice.defScale (ver, k);
64
65    int    ier = elts->transform (&matrice);
66
67    DumpReturn (ier);
68    return ier;
69 }
70 // ==================================================== performRotation
71 int Document::performRotation (Elements* elts, Vertex* ver, Vector* vec, double angle)
72
73    DumpStart ("performRotation", elts << ver << vec << angle);
74
75    Matrix matrice;
76    matrice.defRotation (ver, vec, angle);
77
78    int    ier = elts->transform (&matrice);
79
80    DumpReturn (ier);
81    return ier;
82 }
83 // ==================================================== performSymmetryPoint
84 int Document::performSymmetryPoint (Elements* elts, Vertex* ver)
85
86    DumpStart ("performSymmetryPoint", elts << ver);
87
88    Matrix matrice;
89    matrice.defSymmetryPoint (ver);
90
91    int    ier = elts->transform (&matrice);
92
93    DumpReturn (ier);
94    return ier;
95 }
96 // ==================================================== performSymmetryPlane
97 int Document::performSymmetryPlane (Elements* elts, Vertex* ver, Vector* vec)    
98
99    DumpStart ("performSymmetryPlane", elts << ver << vec);
100
101    Matrix matrice;
102    matrice.defSymmetryPlane (ver, vec);
103
104    int    ier = elts->transform (&matrice);
105
106    DumpReturn (ier);
107    return ier;
108 }
109
110 // ==================================================== performSymmetryLine
111 int Document::performSymmetryLine (Elements* elts, Vertex* ver, Vector* vec)
112
113    DumpStart ("performSymmetryLine", elts << ver << vec);
114
115    Matrix matrice;
116    matrice.defSymmetryLine (ver, vec);
117
118    int    ier = elts->transform (&matrice);
119
120    DumpReturn (ier);
121    return ier;
122 }
123 // -------------------------------------------------------- 
124 // -------------------------------------------------------- 
125 // -------------------------------------------------------- 
126 // ========================================================= clonerElements
127 Elements* Document::clonerElements (Elements* table, Matrix* matrice)
128 {
129    Cloner    copieur (matrice);
130    Elements* grille = copieur.clonerElements (table);
131    return    grille;
132 }
133 // -------------------------------------------------------- 
134 // -------------------------------------------------------- 
135 // -------------------------------------------------------- 
136 // ========================================================= makeTranslation
137 Elements* Document::makeTranslation (Elements* table, Vector* trans)
138 {
139    DumpStart ("makeTranslation", table  << trans);
140
141    Matrix  matrice;
142    matrice.defTranslation (trans);
143
144    Elements* grille = clonerElements (table, &matrice);
145
146    DumpReturn (grille);
147    return  grille;
148 }
149 // ========================================================= makeScale
150 Elements* Document::makeScale (Elements* table, Vertex* ver, double k)
151 {
152    DumpStart ("makeScale", table  << ver << k);
153
154    Matrix  matrice;
155    matrice.defScale (ver, k);
156
157    Elements* grille = clonerElements (table, &matrice);
158
159    DumpReturn (grille);
160    return    grille;
161 }
162 // ========================================================= makeRotation
163 Elements* Document::makeRotation (Elements* table, Vertex* ver, Vector* vec, 
164                                   double angle)
165 {
166    DumpStart ("makeRotation", table  << ver << vec << angle);
167
168    Matrix  matrice;
169    matrice.defRotation (ver, vec, angle);
170
171    Elements* grille = clonerElements (table, &matrice);
172
173    DumpReturn (grille);
174    return    grille;
175 }
176 // ========================================================= makeSymmetryPoint
177 Elements* Document::makeSymmetryPoint (Elements* table, Vertex* ver)
178 {
179    DumpStart ("makeSymmetryPoint", table  << ver);
180
181    Matrix  matrice;
182    matrice.defSymmetryPoint (ver);
183
184    Elements* grille = clonerElements (table, &matrice);
185
186    DumpReturn (grille);
187    return    grille;
188 }
189 // ========================================================= makeSymmetryLine
190 Elements* Document::makeSymmetryLine (Elements* table, Vertex* ver, Vector* vec)
191 {
192    DumpStart ("makeSymmetryLine", table  << ver << vec);
193
194    Matrix  matrice;
195    matrice.defSymmetryLine (ver, vec);
196
197    Elements* grille = clonerElements (table, &matrice);
198
199    DumpReturn (grille);
200    return    grille;
201 }
202 // ========================================================= makeSymmetryPlane
203 Elements* Document::makeSymmetryPlane (Elements* table, Vertex* ver, Vector* vec)
204 {
205    DumpStart ("makeSymmetryPlane", table  << ver << vec);
206
207    Matrix  matrice;
208    matrice.defSymmetryPlane (ver, vec);
209
210    Elements* grille = clonerElements (table, &matrice);
211
212    DumpReturn (grille);
213    return    grille;
214 }
215 // ----------------------------------------------------------------------
216 // ------------ Destroy
217 // ----------------------------------------------------------------------
218 // ========================================================= removeHexa
219 int Document::removeHexa (Hexa* cell)
220 {
221    DumpStart ("removeHexa", cell);
222
223    int ier = HOK;
224    if (cell==NULL)
225       ier = HERR;
226    else
227       cell->remove ();
228
229    DumpReturn (ier);
230    return ier;
231 }
232 // ========================================================= removeQuad
233 int Document::removeQuad (Quad* cell)
234 {
235    DumpStart ("removeQuad", cell);
236
237    int ier = HOK;
238    if (cell==NULL)
239       ier = HERR;
240    else
241       cell->remove ();
242
243    DumpReturn (ier);
244    return ier;
245 }
246 // ========================================================= removeElements
247 int Document::removeElements (Elements* bloc)
248 {
249    DumpStart ("removeElements", bloc);
250
251    int ier = HOK;
252
253    if (bloc==NULL)
254       ier = HERR;
255    else
256       bloc->remove ();
257
258    DumpReturn (ier);
259    return ier;
260 }
261 // ====================================================== removeConnectedHexa
262 int Document::removeConnectedHexa (Hexa* cell)
263 {
264    DumpStart ("removeConnectedHexa", cell);
265
266    int ier = HOK;
267
268    if (cell==NULL)
269       ier = HERR;
270    else
271       {
272       update ();
273       cell->removeConnected ();
274       }
275
276    DumpReturn (ier);
277    return ier;
278 }
279 // ========================================================= dumpPropagation
280 void Document::dumpPropagation ()
281 {
282    int nb = countPropagation ();
283
284    for (int nro=0 ; nro<nb ; nro++)
285        {
286        Propagation*  prop  = getPropagation (nro);
287        const Edges&  table = prop->getEdges ();
288        printf (" ____________________________________ Prop nro %d\n", nro);
289        for (int ned=0 ; ned<(int)table.size() ; ned++)
290            {
291            bool way = table [ned]->getWay ();
292
293            table [ned]->printName (" = ");
294            if (way)
295               {
296               printf (" +(");
297               table [ned]->getVertex (0)->printName (", ");
298               table [ned]->getVertex (1)->printName (")\n");
299               }
300           else
301               {
302               printf (" -(");
303               table [ned]->getVertex (1)->printName (", ");
304               table [ned]->getVertex (0)->printName (")\n");
305               }
306            }
307        }
308 }
309 // ----------------------------------------------------------------------
310 // ------------ reorderFaces
311 // ----------------------------------------------------------------------
312 // ========================================================= reorderFaces
313 // ==== Ordonner les faces externes
314 void Document::reorderFaces ()
315 {
316    majReferences ();
317    for (EltBase* elt = doc_first_elt[EL_QUAD]->next (); elt!=NULL;
318                  elt = elt->next())
319        {
320        Quad* quad = static_cast <Quad*> (elt);
321        if (quad!=NULL && quad->isHere())
322            quad->setOrientation ();
323        }
324
325 }
326 END_NAMESPACE_HEXA