2 // C++ : La clase principale de Hexa
4 // Copyright (C) 2009-2012 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)
50 matrice.defTranslation (trans);
52 int ier = elts->transform (&matrice);
55 // ==================================================== performScale
56 int Document::performScale (Elements* elts, Vertex* ver, double k)
59 matrice.defScale (ver, k);
61 int ier = elts->transform (&matrice);
64 // ==================================================== performRotation
65 int Document::performRotation (Elements* elts, Vertex* ver, Vector* vec, double angle)
68 matrice.defRotation (ver, vec, angle);
70 int ier = elts->transform (&matrice);
73 // ==================================================== performSymmetryPoint
74 int Document::performSymmetryPoint (Elements* elts, Vertex* ver)
77 matrice.defSymmetryPoint (ver);
79 int ier = elts->transform (&matrice);
82 // ==================================================== performSymmetryPlane
83 int Document::performSymmetryPlane (Elements* elts, Vertex* ver, Vector* vec)
86 matrice.defSymmetryPlane (ver, vec);
88 int ier = elts->transform (&matrice);
92 // ==================================================== performSymmetryLine
93 int Document::performSymmetryLine (Elements* elts, Vertex* ver, Vector* vec)
96 matrice.defSymmetryLine (ver, vec);
98 int ier = elts->transform (&matrice);
101 // --------------------------------------------------------
102 // --------------------------------------------------------
103 // --------------------------------------------------------
104 // ========================================================= clonerElements
105 Elements* Document::clonerElements (Elements* table, Matrix* matrice)
107 Cloner copieur (matrice);
108 Elements* grille = copieur.clonerElements (table);
111 // --------------------------------------------------------
112 // --------------------------------------------------------
113 // --------------------------------------------------------
114 // ========================================================= makeTranslation
115 Elements* Document::makeTranslation (Elements* table, Vector* trans)
118 matrice.defTranslation (trans);
120 Elements* grille = clonerElements (table, &matrice);
123 // ========================================================= makeScale
124 Elements* Document::makeScale (Elements* table, Vertex* ver, double k)
127 matrice.defScale (ver, k);
129 Elements* grille = clonerElements (table, &matrice);
132 // ========================================================= makeRotation
133 Elements* Document::makeRotation (Elements* table, Vertex* ver, Vector* vec,
137 matrice.defRotation (ver, vec, angle);
139 Elements* grille = clonerElements (table, &matrice);
142 // ========================================================= makeSymmetryPoint
143 Elements* Document::makeSymmetryPoint (Elements* table, Vertex* ver)
146 matrice.defSymmetryPoint (ver);
148 Elements* grille = clonerElements (table, &matrice);
151 // ========================================================= makeSymmetryLine
152 Elements* Document::makeSymmetryLine (Elements* table, Vertex* ver, Vector* vec)
155 matrice.defSymmetryLine (ver, vec);
157 Elements* grille = clonerElements (table, &matrice);
160 // ========================================================= makeSymmetryPlane
161 Elements* Document::makeSymmetryPlane (Elements* table, Vertex* ver, Vector* vec)
164 matrice.defSymmetryPlane (ver, vec);
166 Elements* grille = clonerElements (table, &matrice);
169 // ----------------------------------------------------------------------
170 // ------------ Destroy
171 // ----------------------------------------------------------------------
172 // ========================================================= removeHexa
173 int Document::removeHexa (Hexa* cell)
181 // ========================================================= removeQuad
182 int Document::removeQuad (Quad* cell)
190 // ========================================================= removeElements
191 int Document::removeElements (Elements* bloc)
199 // ====================================================== removeConnectedHexa
200 int Document::removeConnectedHexa (Hexa* cell)
206 cell->removeConnected ();
209 // ========================================================= dumpPropagation
210 void Document::dumpPropagation ()
212 int nb = countPropagation ();
214 for (int nro=0 ; nro<nb ; nro++)
216 Propagation* prop = getPropagation (nro);
217 const Edges& table = prop->getEdges ();
218 printf (" ____________________________________ Prop nro %d\n", nro);
219 for (int ned=0 ; ned<(int)table.size() ; ned++)
221 bool way = table [ned]->getWay ();
223 table [ned]->printName (" = ");
227 table [ned]->getVertex (0)->printName (", ");
228 table [ned]->getVertex (1)->printName (")\n");
233 table [ned]->getVertex (1)->printName (", ");
234 table [ned]->getVertex (0)->printName (")\n");
239 // ----------------------------------------------------------------------
240 // ------------ reorderFaces
241 // ----------------------------------------------------------------------
242 // ========================================================= reorderFaces
243 // ==== Ordonner les faces externes
244 void Document::reorderFaces ()
247 for (EltBase* elt = doc_first_elt[EL_QUAD]->next (); elt!=NULL;
250 Quad* quad = static_cast <Quad*> (elt);
251 if (quad!=NULL && quad->isHere())
252 quad->setOrientation ();