Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/hexablock.git] / src / HEXABLOCK / HexDocument_trans.cxx
1
2 // C++ : La clase principale de Hexa
3
4 // Copyright (C) 2009-2012  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    Matrix matrice;
50    matrice.defTranslation (trans);
51
52    int    ier = elts->transform (&matrice);
53    return ier;
54 }
55 // ==================================================== performScale
56 int Document::performScale (Elements* elts, Vertex* ver, double k)
57
58    Matrix matrice;
59    matrice.defScale (ver, k);
60
61    int    ier = elts->transform (&matrice);
62    return ier;
63 }
64 // ==================================================== performRotation
65 int Document::performRotation (Elements* elts, Vertex* ver, Vector* vec, double angle)
66
67    Matrix matrice;
68    matrice.defRotation (ver, vec, angle);
69
70    int    ier = elts->transform (&matrice);
71    return ier;
72 }
73 // ==================================================== performSymmetryPoint
74 int Document::performSymmetryPoint (Elements* elts, Vertex* ver)
75
76    Matrix matrice;
77    matrice.defSymmetryPoint (ver);
78
79    int    ier = elts->transform (&matrice);
80    return ier;
81 }
82 // ==================================================== performSymmetryPlane
83 int Document::performSymmetryPlane (Elements* elts, Vertex* ver, Vector* vec)    
84
85    Matrix matrice;
86    matrice.defSymmetryPlane (ver, vec);
87
88    int    ier = elts->transform (&matrice);
89    return ier;
90 }
91 // ==================================================== performSymmetryLine
92 int Document::performSymmetryLine (Elements* elts, Vertex* ver, Vector* vec)
93
94    Matrix matrice;
95    matrice.defSymmetryLine (ver, vec);
96
97    int    ier = elts->transform (&matrice);
98    return ier;
99 }
100 // -------------------------------------------------------- 
101 // -------------------------------------------------------- 
102 // -------------------------------------------------------- 
103 // ========================================================= clonerElements
104 Elements* Document::clonerElements (Elements* table, Matrix* matrice)
105 {
106    Cloner    copieur (matrice);
107    Elements* grille = copieur.clonerElements (table);
108    return    grille;
109 }
110 // -------------------------------------------------------- 
111 // -------------------------------------------------------- 
112 // -------------------------------------------------------- 
113 // ========================================================= makeTranslation
114 Elements* Document::makeTranslation (Elements* table, Vector* trans)
115 {
116    Matrix  matrice;
117    matrice.defTranslation (trans);
118
119    Elements* grille = clonerElements (table, &matrice);
120    return    grille;
121 }
122 // ========================================================= makeScale
123 Elements* Document::makeScale (Elements* table, Vertex* ver, double k)
124 {
125    Matrix  matrice;
126    matrice.defScale (ver, k);
127
128    Elements* grille = clonerElements (table, &matrice);
129    return    grille;
130 }
131 // ========================================================= makeRotation
132 Elements* Document::makeRotation (Elements* table, Vertex* ver, Vector* vec, 
133                                 double angle)
134 {
135    Matrix  matrice;
136    matrice.defRotation (ver, vec, angle);
137
138    Elements* grille = clonerElements (table, &matrice);
139    return    grille;
140 }
141 // ========================================================= makeSymmetryPoint
142 Elements* Document::makeSymmetryPoint (Elements* table, Vertex* ver)
143 {
144    Matrix  matrice;
145    matrice.defSymmetryPoint (ver);
146
147    Elements* grille = clonerElements (table, &matrice);
148    return    grille;
149 }
150 // ========================================================= makeSymmetryLine
151 Elements* Document::makeSymmetryLine (Elements* table, Vertex* ver, Vector* vec)
152 {
153    Matrix  matrice;
154    matrice.defSymmetryLine (ver, vec);
155
156    Elements* grille = clonerElements (table, &matrice);
157    return    grille;
158 }
159 // ========================================================= makeSymmetryPlane
160 Elements* Document::makeSymmetryPlane (Elements* table, Vertex* ver, Vector* vec)
161 {
162    Matrix  matrice;
163    matrice.defSymmetryPlane (ver, vec);
164
165    Elements* grille = clonerElements (table, &matrice);
166    return    grille;
167 }
168 // ----------------------------------------------------------------------
169 // ------------ Destroy
170 // ----------------------------------------------------------------------
171 // ========================================================= removeHexa
172 int Document::removeHexa (Hexa* cell)
173 {
174    if (cell==NULL)
175       return HERR;
176
177    cell->remove ();
178    return  HOK;
179 }
180 // ========================================================= removeQuad
181 int Document::removeQuad (Quad* cell)
182 {
183    if (cell==NULL)
184       return HERR;
185
186    cell->remove ();
187    return  HOK;
188 }
189 // ========================================================= removeElements
190 int Document::removeElements (Elements* bloc)
191 {
192    if (bloc==NULL)
193       return HERR;
194
195    bloc->remove ();
196    return  HOK;
197 }
198 // ====================================================== removeConnectedHexa
199 int Document::removeConnectedHexa (Hexa* cell)
200 {
201    if (cell==NULL)
202       return HERR;
203
204    update ();
205    cell->removeConnected ();
206    return  HOK;
207 }
208 // ========================================================= dumpPropagation
209 void Document::dumpPropagation ()
210 {
211    int nb = countPropagation ();
212
213    for (int nro=0 ; nro<nb ; nro++)
214        {
215        Propagation*  prop  = getPropagation (nro);
216        const Edges&  table = prop->getEdges ();
217        printf (" ____________________________________ Prop nro %d\n", nro);
218        for (int ned=0 ; ned<(int)table.size() ; ned++)
219            {
220            bool way = table [ned]->getWay ();
221
222            table [ned]->printName (" = ");
223            if (way)
224               {
225               printf (" +(");
226               table [ned]->getVertex (0)->printName (", ");
227               table [ned]->getVertex (1)->printName (")\n");
228               }
229           else
230               {
231               printf (" -(");
232               table [ned]->getVertex (1)->printName (", ");
233               table [ned]->getVertex (0)->printName (")\n");
234               }
235            }
236        }
237 }
238 // ----------------------------------------------------------------------
239 // ------------ reorderFaces
240 // ----------------------------------------------------------------------
241 // ========================================================= reorderFaces
242 // ==== Ordonner les faces externes
243 void Document::reorderFaces ()
244 {
245    majReferences ();
246    Real3 cg, orig, pi, pj, vi, vj, vk;
247
248    for (EltBase* elt = doc_first_elt[EL_QUAD]->next (); elt!=NULL;
249                  elt = elt->next())
250        {
251        Quad* quad = static_cast <Quad*> (elt);
252        if (quad!=NULL && quad->isHere())
253            quad->setOrientation ();
254        }
255
256 }
257 END_NAMESPACE_HEXA