2 // C++ : Tests unitaires sur les creations h'hexaedres
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
26 #include "HexDocument.hxx"
27 #include "HexElements.hxx"
28 #include "HexCrossElements.hxx"
30 #include "HexHexa.hxx"
31 #include "HexQuad.hxx"
32 #include "HexEdge.hxx"
33 #include "HexVertex.hxx"
35 #include "HexCramer.hxx"
37 // ======================================================== test_hexa_quads_5
38 int test_hexa_quads_5 (int nbargs, cpchar tabargs[])
45 Hex::Document* doc = mon_ex.addDocument ();
47 Hex::Vertex* orig = doc->addVertex (0,0,0);
48 Hex::Vector* vx = doc->addVector (1,0,0);
49 Hex::Vector* vy = doc->addVector (0,1,0);
50 Hex::Vector* vz = doc->addVector (0,0,1);
52 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
53 size_x,size_y,size_z);
56 cpchar fic_vtk = "HexaQuad_5";
57 doc->saveVtk (fic_vtk, nvtk);
59 Hex::Hexa* hexa = grid->getHexaIJK (1,1,1);
61 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
62 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
63 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
64 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
65 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
66 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
69 doc->saveVtk (fic_vtk, nvtk);
72 doc->saveVtk (fic_vtk, nvtk);
74 doc->addHexa5Quads (qa, qc, qd, qe, qf);
75 doc->saveVtk (fic_vtk, nvtk);
78 HexDisplay (doc->countHexa ());
79 HexDisplay (doc->countQuad ());
80 HexDisplay (doc->countEdge ());
81 HexDisplay (doc->countVertex ());
83 doc->saveVtk (fic_vtk, nvtk);
86 // ====================================================== test_hexa_quads_ab
87 int test_hexa_quads_ab (int nbargs, cpchar tabargs[])
94 Hex::Document* doc = mon_ex.addDocument ();
96 Hex::Vertex* orig = doc->addVertex (0,0,0);
97 Hex::Vector* vx = doc->addVector (1,0,0);
98 Hex::Vector* vy = doc->addVector (0,1,0);
99 Hex::Vector* vz = doc->addVector (0,0,1);
101 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
102 size_x,size_y,size_z);
105 cpchar fic_vtk = "HexaQuad_ab";
106 doc->saveVtk (fic_vtk, nvtk);
108 Hex::Hexa* hexa = grid->getHexaIJK (0, 0, 1);
110 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
111 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
112 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
113 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
114 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
115 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
121 doc->saveVtk (fic_vtk, nvtk);
123 doc->addHexa2Quads (qa, qb);
124 doc->saveVtk (fic_vtk, nvtk);
127 HexDisplay (doc->countHexa ());
128 HexDisplay (doc->countQuad ());
129 HexDisplay (doc->countEdge ());
130 HexDisplay (doc->countVertex ());
132 doc->saveVtk (fic_vtk, nvtk);
135 // ====================================================== test_hexa_quads_ac
136 int test_hexa_quads_ac (int nbargs, cpchar tabargs[])
138 const int size_x = 2;
139 const int size_y = 1;
140 const int size_z = 2;
143 Hex::Document* doc = mon_ex.addDocument ();
145 Hex::Vertex* orig = doc->addVertex (0,0,0);
146 Hex::Vector* vx = doc->addVector (1,0,0);
147 Hex::Vector* vy = doc->addVector (0,1,0);
148 Hex::Vector* vz = doc->addVector (0,0,1);
150 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
151 size_x,size_y,size_z);
153 cpchar fic_vtk = "HexaQuad_ac";
154 doc->saveVtk (fic_vtk, nvtk);
156 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
158 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
159 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
160 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
161 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
162 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
163 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
169 doc->saveVtk (fic_vtk, nvtk);
171 doc->addHexa2Quads (qa, qe);
172 doc->saveVtk (fic_vtk, nvtk);
175 HexDisplay (doc->countHexa ());
176 HexDisplay (doc->countQuad ());
177 HexDisplay (doc->countEdge ());
178 HexDisplay (doc->countVertex ());
180 HexDisplay (doc->countUsedHexa ());
181 HexDisplay (doc->countUsedQuad ());
182 HexDisplay (doc->countUsedEdge ());
183 HexDisplay (doc->countUsedVertex ());
185 doc->saveVtk (fic_vtk, nvtk);
188 // ====================================================== test_hexa_quads_ace
189 int test_hexa_quads_ace (int nbargs, cpchar tabargs[])
191 const int size_x = 2;
192 const int size_y = 2;
193 const int size_z = 2;
196 Hex::Document* doc = mon_ex.addDocument ();
198 Hex::Vertex* orig = doc->addVertex (0,0,0);
199 Hex::Vector* vx = doc->addVector (1,0,0);
200 Hex::Vector* vy = doc->addVector (0,1,0);
201 Hex::Vector* vz = doc->addVector (0,0,1);
203 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
204 size_x,size_y,size_z);
206 cpchar fic_vtk = "HexaQuad_ace";
207 doc->saveVtk (fic_vtk, nvtk);
209 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
211 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
212 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
213 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
214 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
215 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
216 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
221 doc->saveVtk (fic_vtk, nvtk);
223 doc->addHexa3Quads (qa, qd, qe);
224 doc->saveVtk (fic_vtk, nvtk);
227 HexDisplay (doc->countHexa ());
228 HexDisplay (doc->countQuad ());
229 HexDisplay (doc->countEdge ());
230 HexDisplay (doc->countVertex ());
232 HexDisplay (doc->countUsedHexa ());
233 HexDisplay (doc->countUsedQuad ());
234 HexDisplay (doc->countUsedEdge ());
235 HexDisplay (doc->countUsedVertex ());
237 doc->saveVtk (fic_vtk, nvtk);
240 // ====================================================== test_hexa_quads_acd
241 int test_hexa_quads_acd (int nbargs, cpchar tabargs[])
243 const int size_x = 3;
244 const int size_y = 1;
245 const int size_z = 2;
248 Hex::Document* doc = mon_ex.addDocument ();
250 Hex::Vertex* orig = doc->addVertex (0,0,0);
251 Hex::Vector* vx = doc->addVector (1,0,0);
252 Hex::Vector* vy = doc->addVector (0,1,0);
253 Hex::Vector* vz = doc->addVector (0,0,1);
255 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
256 size_x,size_y,size_z);
258 cpchar fic_vtk = "HexaQuad_acd";
259 doc->saveVtk (fic_vtk, nvtk);
261 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
263 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
264 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
265 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
266 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
267 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
268 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
273 doc->saveVtk (fic_vtk, nvtk);
275 doc->addHexa3Quads (qa, qe, qf);
276 doc->saveVtk (fic_vtk, nvtk);
279 HexDisplay (doc->countHexa ());
280 HexDisplay (doc->countQuad ());
281 HexDisplay (doc->countEdge ());
282 HexDisplay (doc->countVertex ());
284 HexDisplay (doc->countUsedHexa ());
285 HexDisplay (doc->countUsedQuad ());
286 HexDisplay (doc->countUsedEdge ());
287 HexDisplay (doc->countUsedVertex ());
289 doc->saveVtk (fic_vtk, nvtk);
292 // ====================================================== test_hexa_quads_abcd
293 int test_hexa_quads_abcd (int nbargs, cpchar tabargs[])
295 const int size_x = 3;
296 const int size_y = 1;
297 const int size_z = 3;
300 Hex::Document* doc = mon_ex.addDocument ();
302 Hex::Vertex* orig = doc->addVertex (0,0,0);
303 Hex::Vector* vx = doc->addVector (1,0,0);
304 Hex::Vector* vy = doc->addVector (0,1,0);
305 Hex::Vector* vz = doc->addVector (0,0,1);
307 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
308 size_x,size_y,size_z);
310 cpchar fic_vtk = "HexaQuad_abcd";
311 doc->saveVtk (fic_vtk, nvtk);
313 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
315 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
316 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
317 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
318 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
319 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
320 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
324 doc->saveVtk (fic_vtk, nvtk);
326 doc->addHexa4Quads (qa, qe, qf, qb);
327 doc->saveVtk (fic_vtk, nvtk);
330 HexDisplay (doc->countHexa ());
331 HexDisplay (doc->countQuad ());
332 HexDisplay (doc->countEdge ());
333 HexDisplay (doc->countVertex ());
335 HexDisplay (doc->countUsedHexa ());
336 HexDisplay (doc->countUsedQuad ());
337 HexDisplay (doc->countUsedEdge ());
338 HexDisplay (doc->countUsedVertex ());
340 doc->saveVtk (fic_vtk, nvtk);
343 // ====================================================== test_hexa_quads_abce
344 int test_hexa_quads_abce (int nbargs, cpchar tabargs[])
346 const int size_x = 3;
347 const int size_y = 2;
348 const int size_z = 2;
351 Hex::Document* doc = mon_ex.addDocument ();
353 Hex::Vertex* orig = doc->addVertex (0,0,0);
354 Hex::Vector* vx = doc->addVector (1,0,0);
355 Hex::Vector* vy = doc->addVector (0,1,0);
356 Hex::Vector* vz = doc->addVector (0,0,1);
358 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
359 size_x,size_y,size_z);
361 cpchar fic_vtk = "HexaQuad_abce";
362 doc->saveVtk (fic_vtk, nvtk);
364 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
366 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
367 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
368 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
369 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
370 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
371 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
375 doc->saveVtk (fic_vtk, nvtk);
377 doc->addHexa4Quads (qa, qe, qf, qd);
378 doc->saveVtk (fic_vtk, nvtk);
381 HexDisplay (doc->countHexa ());
382 HexDisplay (doc->countQuad ());
383 HexDisplay (doc->countEdge ());
384 HexDisplay (doc->countVertex ());
386 HexDisplay (doc->countUsedHexa ());
387 HexDisplay (doc->countUsedQuad ());
388 HexDisplay (doc->countUsedEdge ());
389 HexDisplay (doc->countUsedVertex ());
391 doc->saveVtk (fic_vtk, nvtk);
394 // ======================================================== test_cramer
395 int test_cramer (int nbargs, cpchar tabargs[])
397 double matrice [] = { 2, 7, 1,
400 double second [] = { 1, 1, 1 };
403 Hex::Cramer systeme(3);
405 int ier = systeme.resoudre (matrice, second, solution);
408 cout << " Second membre = (" << second[Hex::dir_x] << ", "
409 << second[Hex::dir_y] << ", " << second[Hex::dir_z] << ")"
412 cout << " Solution = (" << solution[Hex::dir_x] << ", "
413 << solution[Hex::dir_y] << ", " << solution[Hex::dir_z] << ")"
417 systeme.multiply (solution, produit);
418 cout << " Produit = (" << produit[Hex::dir_x] << ", "
419 << produit[Hex::dir_y] << ", " << produit[Hex::dir_z] << ")"
424 // ====================================================== test_hexa_quads_ac1
425 int test_hexa_quads_ac1 (int nbargs, cpchar tabargs[])
428 cout << "test_hexa_quads_ac1, trace nro " << ++nbtraces <<endl;
430 Hex::Document* doc = mon_ex.addDocument ();
432 Hex::Vertex* ace = doc->addVertex (0,0,0);
433 Hex::Vertex* acf = doc->addVertex (1,0,0);
435 /****************************************
436 Hex::Vertex* ade = doc->addVertex (0,1,0);
437 Hex::Vertex* adf = doc->addVertex (1,1,0);
439 Hex::Vertex* bce = doc->addVertex (0,0,1);
440 Hex::Vertex* bcf = doc->addVertex (1,0,1);
441 Hex::Vertex* bde = doc->addVertex (0,1,1);
442 Hex::Vertex* bdf = doc->addVertex (1,1,1);
443 *****************************************/
445 Hex::Vertex* ade = doc->addVertex (-2,2,0);
446 Hex::Vertex* adf = doc->addVertex ( 2,1,0);
447 Hex::Vertex* bce = doc->addVertex ( 1,0,1);
448 Hex::Vertex* bcf = doc->addVertex ( 2,0,1);
450 Hex::Edge* ac = doc->addEdge (ace, acf);
451 Hex::Edge* af = doc->addEdge (adf, acf);
452 Hex::Edge* ad = doc->addEdge (ade, adf);
453 Hex::Edge* ae = doc->addEdge (ace, ade);
455 Hex::Edge* bc = doc->addEdge (bce, bcf);
456 // Hex::Edge* bf = doc->addEdge (bdf, bcf);
457 // Hex::Edge* bd = doc->addEdge (bde, bdf);
458 // Hex::Edge* be = doc->addEdge (bce, bde);
460 Hex::Edge* ce = doc->addEdge (ace, bce);
461 Hex::Edge* cf = doc->addEdge (acf, bcf);
462 // Hex::Edge* de = doc->addEdge (ade, bde);
463 // Hex::Edge* df = doc->addEdge (adf, bdf);
465 Hex::Quad* qa = doc->addQuad (ac, af, ad, ae);
466 Hex::Quad* qc = doc->addQuad (ac, cf, bc, ce);
468 /* Hex::Hexa* hexa = */ doc->addHexa2Quads (qa, qc);
471 doc->saveVtk ("hexa_quads.vtk");
474 // ======================================================== test_part_rind
475 int test_part_rind (int& nvtk)
478 Hex::Document* doc = mon_ex.addDocument ();
480 Hex::Vertex* center = doc->addVertex (0,0,0);
481 Hex::Real radius = 8;
482 Hex::Real radint = 7;
483 Hex::Vertex* orig = NULL;
484 Hex::Vector* vz = doc->addVector (0,0,1);
485 Hex::Vector* vx = doc->addVector (1,0,0);
486 Hex::Real angle = 90;
487 Hex::Real radhole = 1;
492 Hex::Elements* grid = doc->makePartRind (center, vx, vz, radius, radint,
493 radhole, orig, angle, nrad, nang, nhaut);
495 doc->saveVtk ("makeSphere", nvtk);
498 // ======================================================== test_rind
499 int test_rind (int& nvtk)
502 Hex::Document* doc = mon_ex.addDocument ();
504 Hex::Vertex* center = doc->addVertex (0,0,0);
505 Hex::Real radius = 8;
506 Hex::Real radint = 7;
507 Hex::Vertex* orig = doc->addVertex (0,0,0);
508 Hex::Vector* vz = doc->addVector (0,1,1);
509 Hex::Vector* vx = doc->addVector (1,0,0);
510 Hex::Real radhole = 1;
515 Hex::Elements* grid = doc->makeRind (center, vx, vz, radius, radint,
516 radhole, orig, nrad, nang, nhaut);
518 doc->saveVtk ("makeSphere", nvtk);
521 // ======================================================== test_part_sphere
522 int test_part_sphere (int& nvtk)
525 Hex::Document* doc = mon_ex.addDocument ();
527 Hex::Vertex* center = doc->addVertex (0,0,0);
528 Hex::Real radius = 8;
529 Hex::Vertex* orig = doc->addVertex (0,0,-4);
530 Hex::Vector* vz = doc->addVector (0,0,1);
531 Hex::Vector* vx = doc->addVector (1,0,0);
532 Hex::Real angle = 90;
533 Hex::Real radhole = 1;
538 Hex::Elements* grid = doc->makePartSphere (center, vx, vz, radius,
539 radhole, orig, angle, nrad, nang, nhaut);
541 doc->saveVtk ("makeSphere", nvtk);
544 // ======================================================== test_sphere
545 int test_sphere (int& nvtk)
548 Hex::Document* doc = mon_ex.addDocument ();
550 Hex::Vertex* center = doc->addVertex (0,0,0);
551 Hex::Real radius = 8;
552 Hex::Vertex* orig = doc->addVertex (0,0,0);
553 Hex::Vector* vz = doc->addVector (0,0,1);
554 Hex::Vector* vx = doc->addVector (1,0,0);
555 Hex::Real radhole = 1;
560 Hex::Elements* grid = doc->makeSphere (center, vx, vz, radius,
561 radhole, orig, nrad, nang, nhaut);
563 doc->saveVtk ("makeSphere", nvtk);
566 // ================================================== test_asso_grid
567 int test_asso_grid (int nbargs, cpchar tabargs[])
570 Hex::Document* doc = mon_ex.addDocument ();
572 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
574 Hex::Vector* vz = doc->addVector (0,0,1);
575 Hex::Vector* vx = doc->addVector (1,0,0);
583 Hex::Elements *c1 = NULL;
585 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 300, dl, nr, na, nl, false);
586 for (int ned=0 ; ned<na ; ned++)
588 Hex::Edge* edge = c1->getEdgeJ (nr, ned, 1);
592 printf (" ... c1->getEdgeJ (nr, %d, 1) = NULL\n", ned);
595 doc->saveVtk ("asso_grid.vtk");
599 // ======================================================== test_piquage
600 int test_piquage (int nbargs, cpchar tabargs[])
602 const int size_x = 3;
603 const int size_y = 3;
604 const int size_z = 3;
607 Hex::Document* doc = mon_ex.addDocument ();
609 Hex::Vertex* orig = doc->addVertex (0,0,0);
610 Hex::Vector* vx = doc->addVector (1,0,0);
611 Hex::Vector* vy = doc->addVector (0,1,0);
612 Hex::Vector* vz = doc->addVector (0,0,1);
614 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
615 size_x,size_y,size_z);
624 Hex::Vertex* orig2 = doc->addVertex (0,0,5);
625 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vx,vz,
626 dr, 360, dl, nr, na, nl, false);
628 Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
629 Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
630 Hex::Vertex* c3 = grid->getVertexIJK (2, 1, size_z);
632 Hex::Vertex* p1 = grid2->getVertexIJK (1, 0, 1);
633 Hex::Vertex* p2 = grid2->getVertexIJK (1, 1, 1);
634 Hex::Vertex* p3 = grid2->getVertexIJK (1, 2, 1);
645 doc->saveVtk ("piquage", nvtk);
648 for (int ny=0; ny<4 ; ny++)
650 Hex::Quad* quad = grid2->getQuadIJ (0, ny, 1);
652 qpattern.push_back (quad);
655 doc->saveVtk ("piquage", nvtk);
656 doc->replace (qpattern, p1,c1, p2,c2, p3,c3);
658 doc->saveVtk ("piquage", nvtk);
662 // ======================================================== test_replace
663 int test_replace (int nbargs, cpchar tabargs[])
665 const int size_x = 3;
666 const int size_y = 3;
667 const int size_z = 3;
670 Hex::Document* doc = mon_ex.addDocument ();
672 Hex::Vertex* orig = doc->addVertex (0,0,0);
673 Hex::Vector* vx = doc->addVector (1,0,0);
674 Hex::Vector* vy = doc->addVector (0,1,0);
675 Hex::Vector* vz = doc->addVector (0,0,1);
677 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
678 size_x,size_y,size_z);
680 Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
681 Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
682 Hex::Vertex* c3 = grid->getVertexIJK (2, 1, size_z);
684 Hex::Vertex* pa1 = doc->addVertex (-1, -1);
685 Hex::Vertex* pb1 = doc->addVertex ( 1, -1);
686 Hex::Vertex* pc1 = doc->addVertex ( 1, 1);
687 Hex::Vertex* pd1 = doc->addVertex (-1, 1);
689 Hex::Vertex* pa2 = doc->addVertex (-2, -2);
690 Hex::Vertex* pb2 = doc->addVertex ( 2, -2);
691 Hex::Vertex* pc2 = doc->addVertex ( 2, 2);
692 Hex::Vertex* pd2 = doc->addVertex (-2, 2);
694 Hex::Edge* edab1 = doc->addEdge (pa1, pb1);
695 Hex::Edge* edbc1 = doc->addEdge (pb1, pc1);
696 Hex::Edge* edcd1 = doc->addEdge (pc1, pd1);
697 Hex::Edge* edda1 = doc->addEdge (pd1, pa1);
699 Hex::Edge* edab2 = doc->addEdge (pa2, pb2);
700 Hex::Edge* edbc2 = doc->addEdge (pb2, pc2);
701 Hex::Edge* edcd2 = doc->addEdge (pc2, pd2);
702 Hex::Edge* edda2 = doc->addEdge (pd2, pa2);
704 Hex::Edge* edaa = doc->addEdge (pa1, pa2);
705 Hex::Edge* edbb = doc->addEdge (pb1, pb2);
706 Hex::Edge* edcc = doc->addEdge (pc1, pc2);
707 Hex::Edge* eddd = doc->addEdge (pd1, pd2);
710 // qpattern.push_back (doc->addQuad (edab1, edbc1, edcd1, edda1));
711 qpattern.push_back (doc->addQuad (edab1, edbb, edab2, edaa));
712 qpattern.push_back (doc->addQuad (edbc1, edcc, edbc2, edbb));
713 qpattern.push_back (doc->addQuad (edcd1, eddd, edcd2, edcc));
714 qpattern.push_back (doc->addQuad (edda1, edaa, edda2, eddd));
716 doc->saveVtk ("replace0.vtk");
718 doc->replace (qpattern, pd2,c1, pa2,c2, pb2,c3);
723 doc->saveVtk ("replace1.vtk");
727 // ======================================================== test_hemispheres
728 int test_hemispheres (int nbargs, cpchar tabargs[])
733 test_part_rind (nvtk);
734 test_part_sphere (nvtk);
737 // ======================================================== test_quads
738 int test_quads (int nbargs, cpchar tabargs[])
741 cpchar appel = strrchr (tabargs[0], '/');
746 appel = strrchr (tabargs[0], '\\');
756 if (Cestegal (option, "-ab") || Cestegal (option, "-AB"))
758 printf (" __________________ Appel de test_hexa_quads_ab \n");
759 test_hexa_quads_ab (nbargs, tabargs);
762 else if (Cestegal (option, "-ac1") || Cestegal (option, "-AC1"))
764 printf (" __________________ Appel de test_hexa_quads_ac1 \n");
765 test_hexa_quads_ac1 (nbargs, tabargs);
767 else if (Cestegal (option, "-ac") || Cestegal (option, "-AC"))
769 printf (" __________________ Appel de test_hexa_quads_ac \n");
770 test_hexa_quads_ac (nbargs, tabargs);
773 else if (Cestegal (option, "-ace") || Cestegal (option, "-ACE"))
775 printf (" __________________ Appel de test_hexa_quads_ace \n");
776 test_hexa_quads_ace (nbargs, tabargs);
779 else if (Cestegal (option, "-acd") || Cestegal (option, "-ACD"))
781 printf (" __________________ Appel de test_hexa_quads_acd \n");
782 test_hexa_quads_acd (nbargs, tabargs);
785 else if (Cestegal (option, "-abcd") || Cestegal (option, "-ABCD"))
787 printf (" __________________ Appel de test_hexa_quads_abcd \n");
788 test_hexa_quads_abcd (nbargs, tabargs);
791 else if (Cestegal (option, "-abce") || Cestegal (option, "-ABCE"))
793 printf (" __________________ Appel de test_hexa_quads_abce \n");
794 test_hexa_quads_abce (nbargs, tabargs);
797 else if (Cestegal (option, "-5") || Cestegal (option, "-abcde")
798 || Cestegal (option, "-ABCDE"))
800 printf (" __________________ Appel de test_hexa_quads_abcde \n");
801 test_hexa_quads_5 (nbargs, tabargs);
806 printf (" +++ Veuillez indiquer votre cas-test en argument SVP\n");
807 printf (" +++ Creation d'un hexadedre a partir de quadrangles :\n");
808 printf (" %s -ab : A partir des quadrangles A et B (opposes)\n", appel);
809 printf (" %s -ac : A partir des quadrangles A et C (diedre)\n", appel);
810 printf (" %s -acd : A partir des quadrangles A, C et D (triedre)\n",
812 printf (" %s -ace : A partir des quadrangles A, C et E (en U)\n",
814 printf (" %s -acbd : A partir des quadrangles A, B, C et D (tunnel)\n",
816 printf (" %s -acbe : A partir des quadrangles A, B, C et E (but)\n",
818 printf (" %s -5 : A partir de 5 quadrangles (boite sans couvercle)\n",