]> SALOME platform Git repositories - modules/hexablock.git/blob - src/HEXABLOCK/HexDocument_trans.cxx
Salome HOME
Hexa6 : Mise ajour des sources
[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 "HexCylinder.hxx"
35 #include "HexPipe.hxx"
36 #include "HexMatrix.hxx"
37 #include "HexCloner.hxx"
38 #include "HexPropagation.hxx"
39 #include "HexLaw.hxx"
40
41 #include "HexXmlWriter.hxx"
42 #include "HexXmlTree.hxx"
43 #include "HexGlobale.hxx"
44
45 BEGIN_NAMESPACE_HEXA
46 // ========================================================= performTranslation
47 int Document::performTranslation (Elements* elts, Vector* trans)
48
49    DumpStart ("performTranslation", elts << trans);
50
51    Matrix matrice;
52    matrice.defTranslation (trans);
53
54    int    ier = elts->transform (&matrice);
55
56    DumpReturn (ier);
57    return ier;
58 }
59 // ==================================================== performScale
60 int Document::performScale (Elements* elts, Vertex* ver, double k)
61
62    DumpStart ("performScale", elts << ver << k);
63
64    Matrix matrice;
65    matrice.defScale (ver, k);
66
67    int    ier = elts->transform (&matrice);
68
69    DumpReturn (ier);
70    return ier;
71 }
72 // ==================================================== performRotation
73 int Document::performRotation (Elements* elts, Vertex* ver, Vector* vec, double angle)
74
75    DumpStart ("performRotation", elts << ver << vec << angle);
76
77    Matrix matrice;
78    matrice.defRotation (ver, vec, angle);
79
80    int    ier = elts->transform (&matrice);
81
82    DumpReturn (ier);
83    return ier;
84 }
85 // ==================================================== performSymmetryPoint
86 int Document::performSymmetryPoint (Elements* elts, Vertex* ver)
87
88    DumpStart ("performSymmetryPoint", elts << ver);
89
90    Matrix matrice;
91    matrice.defSymmetryPoint (ver);
92
93    int    ier = elts->transform (&matrice);
94
95    DumpReturn (ier);
96    return ier;
97 }
98 // ==================================================== performSymmetryPlane
99 int Document::performSymmetryPlane (Elements* elts, Vertex* ver, Vector* vec)    
100
101    DumpStart ("performSymmetryPlane", elts << ver << vec);
102
103    Matrix matrice;
104    matrice.defSymmetryPlane (ver, vec);
105
106    int    ier = elts->transform (&matrice);
107
108    DumpReturn (ier);
109    return ier;
110 }
111
112 // ==================================================== performSymmetryLine
113 int Document::performSymmetryLine (Elements* elts, Vertex* ver, Vector* vec)
114
115    DumpStart ("performSymmetryLine", elts << ver << vec);
116
117    Matrix matrice;
118    matrice.defSymmetryLine (ver, vec);
119
120    int    ier = elts->transform (&matrice);
121
122    DumpReturn (ier);
123    return ier;
124 }
125 // -------------------------------------------------------- 
126 // -------------------------------------------------------- 
127 // -------------------------------------------------------- 
128 // ========================================================= clonerElements
129 Elements* Document::clonerElements (Elements* table, Matrix* matrice)
130 {
131    Cloner    copieur (matrice);
132    Elements* grille = copieur.clonerElements (table);
133    return    grille;
134 }
135 // -------------------------------------------------------- 
136 // -------------------------------------------------------- 
137 // -------------------------------------------------------- 
138 // ========================================================= makeTranslation
139 Elements* Document::makeTranslation (Elements* table, Vector* trans)
140 {
141    DumpStart ("makeTranslation", table  << trans);
142
143    Matrix  matrice;
144    matrice.defTranslation (trans);
145
146    Elements* grille = clonerElements (table, &matrice);
147
148    DumpReturn (grille);
149    return  grille;
150 }
151 // ========================================================= makeScale
152 Elements* Document::makeScale (Elements* table, Vertex* ver, double k)
153 {
154    DumpStart ("makeScale", table  << ver << k);
155
156    Matrix  matrice;
157    matrice.defScale (ver, k);
158
159    Elements* grille = clonerElements (table, &matrice);
160
161    DumpReturn (grille);
162    return    grille;
163 }
164 // ========================================================= makeRotation
165 Elements* Document::makeRotation (Elements* table, Vertex* ver, Vector* vec, 
166                                   double angle)
167 {
168    DumpStart ("makeRotation", table  << ver << vec << angle);
169
170    Matrix  matrice;
171    matrice.defRotation (ver, vec, angle);
172
173    Elements* grille = clonerElements (table, &matrice);
174
175    DumpReturn (grille);
176    return    grille;
177 }
178 // ========================================================= makeSymmetryPoint
179 Elements* Document::makeSymmetryPoint (Elements* table, Vertex* ver)
180 {
181    DumpStart ("makeSymmetryPoint", table  << ver);
182
183    Matrix  matrice;
184    matrice.defSymmetryPoint (ver);
185
186    Elements* grille = clonerElements (table, &matrice);
187
188    DumpReturn (grille);
189    return    grille;
190 }
191 // ========================================================= makeSymmetryLine
192 Elements* Document::makeSymmetryLine (Elements* table, Vertex* ver, Vector* vec)
193 {
194    DumpStart ("makeSymmetryLine", table  << ver << vec);
195
196    Matrix  matrice;
197    matrice.defSymmetryLine (ver, vec);
198
199    Elements* grille = clonerElements (table, &matrice);
200
201    DumpReturn (grille);
202    return    grille;
203 }
204 // ========================================================= makeSymmetryPlane
205 Elements* Document::makeSymmetryPlane (Elements* table, Vertex* ver, Vector* vec)
206 {
207    DumpStart ("makeSymmetryPlane", table  << ver << vec);
208
209    Matrix  matrice;
210    matrice.defSymmetryPlane (ver, vec);
211
212    Elements* grille = clonerElements (table, &matrice);
213
214    DumpReturn (grille);
215    return    grille;
216 }
217 // ----------------------------------------------------------------------
218 // ------------ Destroy
219 // ----------------------------------------------------------------------
220 // ========================================================= removeHexa
221 int Document::removeHexa (Hexa* cell)
222 {
223    DumpStart ("removeHexa", cell);
224
225    int ier = HOK;
226    if (cell==NULL)
227       ier = HERR;
228    else
229       cell->remove ();
230
231    DumpReturn (ier);
232    return ier;
233 }
234 // ========================================================= removeQuad
235 int Document::removeQuad (Quad* cell)
236 {
237    DumpStart ("removeQuad", cell);
238
239    int ier = HOK;
240    if (cell==NULL)
241       ier = HERR;
242    else
243       cell->remove ();
244
245    DumpReturn (ier);
246    return ier;
247 }
248 // ========================================================= removeElements
249 int Document::removeElements (Elements* bloc)
250 {
251    DumpStart ("removeElements", bloc);
252
253    int ier = HOK;
254
255    if (bloc==NULL)
256       ier = HERR;
257    else
258       bloc->remove ();
259
260    DumpReturn (ier);
261    return ier;
262 }
263 // ====================================================== removeConnectedHexa
264 int Document::removeConnectedHexa (Hexa* cell)
265 {
266    DumpStart ("removeConnectedHexa", cell);
267
268    int ier = HOK;
269
270    if (cell==NULL)
271       ier = HERR;
272    else
273       {
274       update ();
275       cell->removeConnected ();
276       }
277
278    DumpReturn (ier);
279    return ier;
280 }
281 // ========================================================= dumpPropagation
282 void Document::dumpPropagation ()
283 {
284    int nb = countPropagation ();
285
286    for (int nro=0 ; nro<nb ; nro++)
287        {
288        Propagation*  prop  = getPropagation (nro);
289        const Edges&  table = prop->getEdges ();
290        printf (" ____________________________________ Prop nro %d\n", nro);
291        for (int ned=0 ; ned<(int)table.size() ; ned++)
292            {
293            bool way = table [ned]->getWay ();
294
295            table [ned]->printName (" = ");
296            if (way)
297               {
298               printf (" +(");
299               table [ned]->getVertex (0)->printName (", ");
300               table [ned]->getVertex (1)->printName (")\n");
301               }
302           else
303               {
304               printf (" -(");
305               table [ned]->getVertex (1)->printName (", ");
306               table [ned]->getVertex (0)->printName (")\n");
307               }
308            }
309        }
310 }
311 // ----------------------------------------------------------------------
312 // ------------ reorderFaces
313 // ----------------------------------------------------------------------
314 // ========================================================= reorderFaces
315 // ==== Ordonner les faces externes
316 void Document::reorderFaces ()
317 {
318    majReferences ();
319    for (EltBase* elt = doc_first_elt[EL_QUAD]->next (); elt!=NULL;
320                  elt = elt->next())
321        {
322        Quad* quad = static_cast <Quad*> (elt);
323        if (quad!=NULL && quad->isHere())
324            quad->setOrientation ();
325        }
326
327 }
328 END_NAMESPACE_HEXA