2 // C++ : La clase principale de Hexa
4 // Copyright (C) 2009-2013 CEA/DEN, EDF R&D
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "HexDocument.hxx"
24 #include "HexEltBase.hxx"
25 #include "HexVertex.hxx"
26 #include "HexEdge.hxx"
27 #include "HexQuad.hxx"
28 #include "HexHexa.hxx"
30 #include "HexElements.hxx"
31 #include "HexCrossElements.hxx"
33 #include "HexVector.hxx"
34 #include "HexCylinder.hxx"
35 #include "HexPipe.hxx"
36 #include "HexMatrix.hxx"
37 #include "HexCloner.hxx"
38 #include "HexPropagation.hxx"
41 #include "HexXmlWriter.hxx"
42 #include "HexXmlTree.hxx"
43 #include "HexGlobale.hxx"
46 // ========================================================= performTranslation
47 int Document::performTranslation (Elements* elts, Vector* trans)
49 DumpStart ("performTranslation", elts << trans);
52 matrice.defTranslation (trans);
54 int ier = elts->transform (&matrice);
59 // ==================================================== performScale
60 int Document::performScale (Elements* elts, Vertex* ver, double k)
62 DumpStart ("performScale", elts << ver << k);
65 matrice.defScale (ver, k);
67 int ier = elts->transform (&matrice);
72 // ==================================================== performRotation
73 int Document::performRotation (Elements* elts, Vertex* ver, Vector* vec, double angle)
75 DumpStart ("performRotation", elts << ver << vec << angle);
78 matrice.defRotation (ver, vec, angle);
80 int ier = elts->transform (&matrice);
85 // ==================================================== performSymmetryPoint
86 int Document::performSymmetryPoint (Elements* elts, Vertex* ver)
88 DumpStart ("performSymmetryPoint", elts << ver);
91 matrice.defSymmetryPoint (ver);
93 int ier = elts->transform (&matrice);
98 // ==================================================== performSymmetryPlane
99 int Document::performSymmetryPlane (Elements* elts, Vertex* ver, Vector* vec)
101 DumpStart ("performSymmetryPlane", elts << ver << vec);
104 matrice.defSymmetryPlane (ver, vec);
106 int ier = elts->transform (&matrice);
112 // ==================================================== performSymmetryLine
113 int Document::performSymmetryLine (Elements* elts, Vertex* ver, Vector* vec)
115 DumpStart ("performSymmetryLine", elts << ver << vec);
118 matrice.defSymmetryLine (ver, vec);
120 int ier = elts->transform (&matrice);
125 // --------------------------------------------------------
126 // --------------------------------------------------------
127 // --------------------------------------------------------
128 // ========================================================= clonerElements
129 Elements* Document::clonerElements (Elements* table, Matrix* matrice)
131 Cloner copieur (matrice);
132 Elements* grille = copieur.clonerElements (table);
135 // --------------------------------------------------------
136 // --------------------------------------------------------
137 // --------------------------------------------------------
138 // ========================================================= makeTranslation
139 Elements* Document::makeTranslation (Elements* table, Vector* trans)
141 DumpStart ("makeTranslation", table << trans);
144 matrice.defTranslation (trans);
146 Elements* grille = clonerElements (table, &matrice);
151 // ========================================================= makeScale
152 Elements* Document::makeScale (Elements* table, Vertex* ver, double k)
154 DumpStart ("makeScale", table << ver << k);
157 matrice.defScale (ver, k);
159 Elements* grille = clonerElements (table, &matrice);
164 // ========================================================= makeRotation
165 Elements* Document::makeRotation (Elements* table, Vertex* ver, Vector* vec,
168 DumpStart ("makeRotation", table << ver << vec << angle);
171 matrice.defRotation (ver, vec, angle);
173 Elements* grille = clonerElements (table, &matrice);
178 // ========================================================= makeSymmetryPoint
179 Elements* Document::makeSymmetryPoint (Elements* table, Vertex* ver)
181 DumpStart ("makeSymmetryPoint", table << ver);
184 matrice.defSymmetryPoint (ver);
186 Elements* grille = clonerElements (table, &matrice);
191 // ========================================================= makeSymmetryLine
192 Elements* Document::makeSymmetryLine (Elements* table, Vertex* ver, Vector* vec)
194 DumpStart ("makeSymmetryLine", table << ver << vec);
197 matrice.defSymmetryLine (ver, vec);
199 Elements* grille = clonerElements (table, &matrice);
204 // ========================================================= makeSymmetryPlane
205 Elements* Document::makeSymmetryPlane (Elements* table, Vertex* ver, Vector* vec)
207 DumpStart ("makeSymmetryPlane", table << ver << vec);
210 matrice.defSymmetryPlane (ver, vec);
212 Elements* grille = clonerElements (table, &matrice);
217 // ----------------------------------------------------------------------
218 // ------------ Destroy
219 // ----------------------------------------------------------------------
220 // ========================================================= removeHexa
221 int Document::removeHexa (Hexa* cell)
223 DumpStart ("removeHexa", cell);
234 // ========================================================= removeQuad
235 int Document::removeQuad (Quad* cell)
237 DumpStart ("removeQuad", cell);
248 // ========================================================= removeElements
249 int Document::removeElements (Elements* bloc)
251 DumpStart ("removeElements", bloc);
263 // ====================================================== removeConnectedHexa
264 int Document::removeConnectedHexa (Hexa* cell)
266 DumpStart ("removeConnectedHexa", cell);
275 cell->removeConnected ();
281 // ========================================================= dumpPropagation
282 void Document::dumpPropagation ()
284 int nb = countPropagation ();
286 for (int nro=0 ; nro<nb ; nro++)
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++)
293 bool way = table [ned]->getWay ();
295 table [ned]->printName (" = ");
299 table [ned]->getVertex (0)->printName (", ");
300 table [ned]->getVertex (1)->printName (")\n");
305 table [ned]->getVertex (1)->printName (", ");
306 table [ned]->getVertex (0)->printName (")\n");
311 // ----------------------------------------------------------------------
312 // ------------ reorderFaces
313 // ----------------------------------------------------------------------
314 // ========================================================= reorderFaces
315 // ==== Ordonner les faces externes
316 void Document::reorderFaces ()
319 for (EltBase* elt = doc_first_elt[EL_QUAD]->next (); elt!=NULL;
322 Quad* quad = static_cast <Quad*> (elt);
323 if (quad!=NULL && quad->isHere())
324 quad->setOrientation ();