2 // C++ : Tests unitaires sur les creations h'hexaedres
4 // Copyright (C) 2009-2016 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, or (at your option) any later version.
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
24 #include "test_unit.hxx"
30 #include "HexDocument.hxx"
31 #include "HexElements.hxx"
32 #include "HexCrossElements.hxx"
34 #include "HexHexa.hxx"
35 #include "HexQuad.hxx"
36 #include "HexEdge.hxx"
37 #include "HexVertex.hxx"
39 #include "HexCramer.hxx"
41 // ======================================================== test_hexa_quads_5
42 int test_hexa_quads_5 (int nbargs, cpchar tabargs[])
49 Hex::Document* doc = mon_ex.addDocument ();
51 Hex::Vertex* orig = doc->addVertex (0,0,0);
52 Hex::Vector* vx = doc->addVector (1,0,0);
53 Hex::Vector* vy = doc->addVector (0,1,0);
54 Hex::Vector* vz = doc->addVector (0,0,1);
56 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
57 size_x,size_y,size_z);
60 cpchar fic_vtk = "HexaQuad_5";
61 doc->saveVtk (fic_vtk, nvtk);
63 Hex::Hexa* hexa = grid->getHexaIJK (1,1,1);
65 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
66 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
67 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
68 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
69 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
70 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
73 doc->saveVtk (fic_vtk, nvtk);
76 doc->saveVtk (fic_vtk, nvtk);
78 doc->addHexa5Quads (qa, qc, qd, qe, qf);
79 doc->saveVtk (fic_vtk, nvtk);
82 HexDisplay (doc->countHexa ());
83 HexDisplay (doc->countQuad ());
84 HexDisplay (doc->countEdge ());
85 HexDisplay (doc->countVertex ());
87 doc->saveVtk (fic_vtk, nvtk);
90 // ====================================================== test_hexa_quads_ab
91 int test_hexa_quads_ab (int nbargs, cpchar tabargs[])
98 Hex::Document* doc = mon_ex.addDocument ();
100 Hex::Vertex* orig = doc->addVertex (0,0,0);
101 Hex::Vector* vx = doc->addVector (1,0,0);
102 Hex::Vector* vy = doc->addVector (0,1,0);
103 Hex::Vector* vz = doc->addVector (0,0,1);
105 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
106 size_x,size_y,size_z);
109 cpchar fic_vtk = "HexaQuad_ab";
110 doc->saveVtk (fic_vtk, nvtk);
112 Hex::Hexa* hexa = grid->getHexaIJK (0, 0, 1);
114 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
115 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
116 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
117 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
118 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
119 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
125 doc->saveVtk (fic_vtk, nvtk);
127 doc->addHexa2Quads (qa, qb);
128 doc->saveVtk (fic_vtk, nvtk);
131 HexDisplay (doc->countHexa ());
132 HexDisplay (doc->countQuad ());
133 HexDisplay (doc->countEdge ());
134 HexDisplay (doc->countVertex ());
136 doc->saveVtk (fic_vtk, nvtk);
139 // ====================================================== test_hexa_quads_ac
140 int test_hexa_quads_ac (int nbargs, cpchar tabargs[])
142 const int size_x = 2;
143 const int size_y = 1;
144 const int size_z = 2;
147 Hex::Document* doc = mon_ex.addDocument ();
149 Hex::Vertex* orig = doc->addVertex (0,0,0);
150 Hex::Vector* vx = doc->addVector (1,0,0);
151 Hex::Vector* vy = doc->addVector (0,1,0);
152 Hex::Vector* vz = doc->addVector (0,0,1);
154 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
155 size_x,size_y,size_z);
157 cpchar fic_vtk = "HexaQuad_ac";
158 doc->saveVtk (fic_vtk, nvtk);
160 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
162 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
163 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
164 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
165 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
166 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
167 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
173 doc->saveVtk (fic_vtk, nvtk);
175 doc->addHexa2Quads (qa, qe);
176 doc->saveVtk (fic_vtk, nvtk);
179 HexDisplay (doc->countHexa ());
180 HexDisplay (doc->countQuad ());
181 HexDisplay (doc->countEdge ());
182 HexDisplay (doc->countVertex ());
184 HexDisplay (doc->countUsedHexa ());
185 HexDisplay (doc->countUsedQuad ());
186 HexDisplay (doc->countUsedEdge ());
187 HexDisplay (doc->countUsedVertex ());
189 doc->saveVtk (fic_vtk, nvtk);
192 // ====================================================== test_hexa_quads_ace
193 int test_hexa_quads_ace (int nbargs, cpchar tabargs[])
195 const int size_x = 2;
196 const int size_y = 2;
197 const int size_z = 2;
200 Hex::Document* doc = mon_ex.addDocument ();
202 Hex::Vertex* orig = doc->addVertex (0,0,0);
203 Hex::Vector* vx = doc->addVector (1,0,0);
204 Hex::Vector* vy = doc->addVector (0,1,0);
205 Hex::Vector* vz = doc->addVector (0,0,1);
207 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
208 size_x,size_y,size_z);
210 cpchar fic_vtk = "HexaQuad_ace";
211 doc->saveVtk (fic_vtk, nvtk);
213 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
215 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
216 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
217 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
218 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
219 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
220 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
225 doc->saveVtk (fic_vtk, nvtk);
227 doc->addHexa3Quads (qa, qd, qe);
228 doc->saveVtk (fic_vtk, nvtk);
231 HexDisplay (doc->countHexa ());
232 HexDisplay (doc->countQuad ());
233 HexDisplay (doc->countEdge ());
234 HexDisplay (doc->countVertex ());
236 HexDisplay (doc->countUsedHexa ());
237 HexDisplay (doc->countUsedQuad ());
238 HexDisplay (doc->countUsedEdge ());
239 HexDisplay (doc->countUsedVertex ());
241 doc->saveVtk (fic_vtk, nvtk);
244 // ====================================================== test_hexa_quads_acd
245 int test_hexa_quads_acd (int nbargs, cpchar tabargs[])
247 const int size_x = 3;
248 const int size_y = 1;
249 const int size_z = 2;
252 Hex::Document* doc = mon_ex.addDocument ();
254 Hex::Vertex* orig = doc->addVertex (0,0,0);
255 Hex::Vector* vx = doc->addVector (1,0,0);
256 Hex::Vector* vy = doc->addVector (0,1,0);
257 Hex::Vector* vz = doc->addVector (0,0,1);
259 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
260 size_x,size_y,size_z);
262 cpchar fic_vtk = "HexaQuad_acd";
263 doc->saveVtk (fic_vtk, nvtk);
265 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
267 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
268 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
269 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
270 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
271 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
272 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
277 doc->saveVtk (fic_vtk, nvtk);
279 doc->addHexa3Quads (qa, qe, qf);
280 doc->saveVtk (fic_vtk, nvtk);
283 HexDisplay (doc->countHexa ());
284 HexDisplay (doc->countQuad ());
285 HexDisplay (doc->countEdge ());
286 HexDisplay (doc->countVertex ());
288 HexDisplay (doc->countUsedHexa ());
289 HexDisplay (doc->countUsedQuad ());
290 HexDisplay (doc->countUsedEdge ());
291 HexDisplay (doc->countUsedVertex ());
293 doc->saveVtk (fic_vtk, nvtk);
296 // ====================================================== test_hexa_quads_abcd
297 int test_hexa_quads_abcd (int nbargs, cpchar tabargs[])
299 const int size_x = 3;
300 const int size_y = 1;
301 const int size_z = 3;
304 Hex::Document* doc = mon_ex.addDocument ();
306 Hex::Vertex* orig = doc->addVertex (0,0,0);
307 Hex::Vector* vx = doc->addVector (1,0,0);
308 Hex::Vector* vy = doc->addVector (0,1,0);
309 Hex::Vector* vz = doc->addVector (0,0,1);
311 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
312 size_x,size_y,size_z);
314 cpchar fic_vtk = "HexaQuad_abcd";
315 doc->saveVtk (fic_vtk, nvtk);
317 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
319 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
320 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
321 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
322 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
323 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
324 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
328 doc->saveVtk (fic_vtk, nvtk);
330 doc->addHexa4Quads (qa, qe, qf, qb);
331 doc->saveVtk (fic_vtk, nvtk);
334 HexDisplay (doc->countHexa ());
335 HexDisplay (doc->countQuad ());
336 HexDisplay (doc->countEdge ());
337 HexDisplay (doc->countVertex ());
339 HexDisplay (doc->countUsedHexa ());
340 HexDisplay (doc->countUsedQuad ());
341 HexDisplay (doc->countUsedEdge ());
342 HexDisplay (doc->countUsedVertex ());
344 doc->saveVtk (fic_vtk, nvtk);
347 // ====================================================== test_hexa_quads_abce
348 int test_hexa_quads_abce (int nbargs, cpchar tabargs[])
350 const int size_x = 3;
351 const int size_y = 2;
352 const int size_z = 2;
355 Hex::Document* doc = mon_ex.addDocument ();
357 Hex::Vertex* orig = doc->addVertex (0,0,0);
358 Hex::Vector* vx = doc->addVector (1,0,0);
359 Hex::Vector* vy = doc->addVector (0,1,0);
360 Hex::Vector* vz = doc->addVector (0,0,1);
362 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
363 size_x,size_y,size_z);
365 cpchar fic_vtk = "HexaQuad_abce";
366 doc->saveVtk (fic_vtk, nvtk);
368 Hex::Hexa* hexa = grid->getHexaIJK (1,0,1);
370 Hex::Quad* qa = hexa->getQuad (Hex::Q_A);
371 Hex::Quad* qb = hexa->getQuad (Hex::Q_B);
372 Hex::Quad* qc = hexa->getQuad (Hex::Q_C);
373 Hex::Quad* qd = hexa->getQuad (Hex::Q_D);
374 Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
375 Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
379 doc->saveVtk (fic_vtk, nvtk);
381 doc->addHexa4Quads (qa, qe, qf, qd);
382 doc->saveVtk (fic_vtk, nvtk);
385 HexDisplay (doc->countHexa ());
386 HexDisplay (doc->countQuad ());
387 HexDisplay (doc->countEdge ());
388 HexDisplay (doc->countVertex ());
390 HexDisplay (doc->countUsedHexa ());
391 HexDisplay (doc->countUsedQuad ());
392 HexDisplay (doc->countUsedEdge ());
393 HexDisplay (doc->countUsedVertex ());
395 doc->saveVtk (fic_vtk, nvtk);
398 // ======================================================== test_cramer
399 int test_cramer (int nbargs, cpchar tabargs[])
401 double matrice [] = { 2, 7, 1,
404 double second [] = { 1, 1, 1 };
407 Hex::Cramer systeme(3);
409 int ier = systeme.resoudre (matrice, second, solution);
412 cout << " Second membre = (" << second[Hex::dir_x] << ", "
413 << second[Hex::dir_y] << ", " << second[Hex::dir_z] << ")"
416 cout << " Solution = (" << solution[Hex::dir_x] << ", "
417 << solution[Hex::dir_y] << ", " << solution[Hex::dir_z] << ")"
421 systeme.multiply (solution, produit);
422 cout << " Produit = (" << produit[Hex::dir_x] << ", "
423 << produit[Hex::dir_y] << ", " << produit[Hex::dir_z] << ")"
428 // ====================================================== test_hexa_quads_ac1
429 int test_hexa_quads_ac1 (int nbargs, cpchar tabargs[])
432 cout << "test_hexa_quads_ac1, trace nro " << ++nbtraces <<endl;
434 Hex::Document* doc = mon_ex.addDocument ();
436 Hex::Vertex* ace = doc->addVertex (0,0,0);
437 Hex::Vertex* acf = doc->addVertex (1,0,0);
439 /****************************************
440 Hex::Vertex* ade = doc->addVertex (0,1,0);
441 Hex::Vertex* adf = doc->addVertex (1,1,0);
443 Hex::Vertex* bce = doc->addVertex (0,0,1);
444 Hex::Vertex* bcf = doc->addVertex (1,0,1);
445 Hex::Vertex* bde = doc->addVertex (0,1,1);
446 Hex::Vertex* bdf = doc->addVertex (1,1,1);
447 *****************************************/
449 Hex::Vertex* ade = doc->addVertex (-2,2,0);
450 Hex::Vertex* adf = doc->addVertex ( 2,1,0);
451 Hex::Vertex* bce = doc->addVertex ( 1,0,1);
452 Hex::Vertex* bcf = doc->addVertex ( 2,0,1);
454 Hex::Edge* ac = doc->addEdge (ace, acf);
455 Hex::Edge* af = doc->addEdge (adf, acf);
456 Hex::Edge* ad = doc->addEdge (ade, adf);
457 Hex::Edge* ae = doc->addEdge (ace, ade);
459 Hex::Edge* bc = doc->addEdge (bce, bcf);
460 // Hex::Edge* bf = doc->addEdge (bdf, bcf);
461 // Hex::Edge* bd = doc->addEdge (bde, bdf);
462 // Hex::Edge* be = doc->addEdge (bce, bde);
464 Hex::Edge* ce = doc->addEdge (ace, bce);
465 Hex::Edge* cf = doc->addEdge (acf, bcf);
466 // Hex::Edge* de = doc->addEdge (ade, bde);
467 // Hex::Edge* df = doc->addEdge (adf, bdf);
469 Hex::Quad* qa = doc->addQuad (ac, af, ad, ae);
470 Hex::Quad* qc = doc->addQuad (ac, cf, bc, ce);
472 /* Hex::Hexa* hexa = */ doc->addHexa2Quads (qa, qc);
475 doc->saveVtk ("hexa_quads.vtk");
478 // ======================================================== test_part_rind
479 int test_part_rind (int& nvtk)
482 Hex::Document* doc = mon_ex.addDocument ();
484 Hex::Vertex* center = doc->addVertex (0,0,0);
485 Hex::Real radius = 8;
486 Hex::Real radint = 7;
487 Hex::Vertex* orig = NULL;
488 Hex::Vector* vz = doc->addVector (0,0,1);
489 Hex::Vector* vx = doc->addVector (1,0,0);
490 Hex::Real angle = 90;
491 Hex::Real radhole = 1;
496 Hex::Elements* grid = doc->makePartRind (center, vx, vz, radius, radint,
497 radhole, orig, angle, nrad, nang, nhaut);
499 doc->saveVtk ("makeSphere", nvtk);
502 // ======================================================== test_rind
503 int test_rind (int& nvtk)
506 Hex::Document* doc = mon_ex.addDocument ();
508 Hex::Vertex* center = doc->addVertex (0,0,0);
509 Hex::Real radius = 8;
510 Hex::Real radint = 7;
511 Hex::Vertex* orig = doc->addVertex (0,0,0);
512 Hex::Vector* vz = doc->addVector (0,1,1);
513 Hex::Vector* vx = doc->addVector (1,0,0);
514 Hex::Real radhole = 1;
519 Hex::Elements* grid = doc->makeRind (center, vx, vz, radius, radint,
520 radhole, orig, nrad, nang, nhaut);
522 doc->saveVtk ("makeSphere", nvtk);
525 // ======================================================== test_part_sphere
526 int test_part_sphere (int& nvtk)
529 Hex::Document* doc = mon_ex.addDocument ();
531 Hex::Vertex* center = doc->addVertex (0,0,0);
532 Hex::Real radius = 8;
533 Hex::Vertex* orig = doc->addVertex (0,0,-4);
534 Hex::Vector* vz = doc->addVector (0,0,1);
535 Hex::Vector* vx = doc->addVector (1,0,0);
536 Hex::Real angle = 90;
537 Hex::Real radhole = 1;
542 Hex::Elements* grid = doc->makePartSphere (center, vx, vz, radius,
543 radhole, orig, angle, nrad, nang, nhaut);
545 doc->saveVtk ("makeSphere", nvtk);
548 // ======================================================== test_sphere
549 int test_sphere (int& nvtk)
552 Hex::Document* doc = mon_ex.addDocument ();
554 Hex::Vertex* center = doc->addVertex (0,0,0);
555 Hex::Real radius = 8;
556 Hex::Vertex* orig = doc->addVertex (0,0,0);
557 Hex::Vector* vz = doc->addVector (0,0,1);
558 Hex::Vector* vx = doc->addVector (1,0,0);
559 Hex::Real radhole = 1;
564 Hex::Elements* grid = doc->makeSphere (center, vx, vz, radius,
565 radhole, orig, nrad, nang, nhaut);
567 doc->saveVtk ("makeSphere", nvtk);
570 // ================================================== test_asso_grid
571 int test_asso_grid (int nbargs, cpchar tabargs[])
574 Hex::Document* doc = mon_ex.addDocument ();
576 Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
578 Hex::Vector* vz = doc->addVector (0,0,1);
579 Hex::Vector* vx = doc->addVector (1,0,0);
587 Hex::Elements *c1 = NULL;
589 c1 = doc->makeCylindrical (orig1, vx,vz,dr, 300, dl, nr, na, nl, false);
590 for (int ned=0 ; ned<na ; ned++)
592 Hex::Edge* edge = c1->getEdgeJ (nr, ned, 1);
596 printf (" ... c1->getEdgeJ (nr, %d, 1) = NULL\n", ned);
599 doc->saveVtk ("asso_grid.vtk");
603 // ======================================================== test_piquage
604 int test_piquage (int nbargs, cpchar tabargs[])
606 const int size_x = 3;
607 const int size_y = 3;
608 const int size_z = 3;
611 Hex::Document* doc = mon_ex.addDocument ();
613 Hex::Vertex* orig = doc->addVertex (0,0,0);
614 Hex::Vector* vx = doc->addVector (1,0,0);
615 Hex::Vector* vy = doc->addVector (0,1,0);
616 Hex::Vector* vz = doc->addVector (0,0,1);
618 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
619 size_x,size_y,size_z);
628 Hex::Vertex* orig2 = doc->addVertex (0,0,5);
629 Hex::Elements* grid2 = doc->makeCylindrical (orig2, vx,vz,
630 dr, 360, dl, nr, na, nl, false);
632 Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
633 Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
634 Hex::Vertex* c3 = grid->getVertexIJK (2, 1, size_z);
636 Hex::Vertex* p1 = grid2->getVertexIJK (1, 0, 1);
637 Hex::Vertex* p2 = grid2->getVertexIJK (1, 1, 1);
638 Hex::Vertex* p3 = grid2->getVertexIJK (1, 2, 1);
649 doc->saveVtk ("piquage", nvtk);
652 for (int ny=0; ny<4 ; ny++)
654 Hex::Quad* quad = grid2->getQuadIJ (0, ny, 1);
656 qpattern.push_back (quad);
659 doc->saveVtk ("piquage", nvtk);
660 doc->replace (qpattern, p1,c1, p2,c2, p3,c3);
662 doc->saveVtk ("piquage", nvtk);
666 // ======================================================== test_replace
667 int test_replace (int nbargs, cpchar tabargs[])
669 const int size_x = 3;
670 const int size_y = 3;
671 const int size_z = 3;
674 Hex::Document* doc = mon_ex.addDocument ();
676 Hex::Vertex* orig = doc->addVertex (0,0,0);
677 Hex::Vector* vx = doc->addVector (1,0,0);
678 Hex::Vector* vy = doc->addVector (0,1,0);
679 Hex::Vector* vz = doc->addVector (0,0,1);
681 Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
682 size_x,size_y,size_z);
684 Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
685 Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
686 Hex::Vertex* c3 = grid->getVertexIJK (2, 1, size_z);
688 Hex::Vertex* pa1 = doc->addVertex (-1, -1);
689 Hex::Vertex* pb1 = doc->addVertex ( 1, -1);
690 Hex::Vertex* pc1 = doc->addVertex ( 1, 1);
691 Hex::Vertex* pd1 = doc->addVertex (-1, 1);
693 Hex::Vertex* pa2 = doc->addVertex (-2, -2);
694 Hex::Vertex* pb2 = doc->addVertex ( 2, -2);
695 Hex::Vertex* pc2 = doc->addVertex ( 2, 2);
696 Hex::Vertex* pd2 = doc->addVertex (-2, 2);
698 Hex::Edge* edab1 = doc->addEdge (pa1, pb1);
699 Hex::Edge* edbc1 = doc->addEdge (pb1, pc1);
700 Hex::Edge* edcd1 = doc->addEdge (pc1, pd1);
701 Hex::Edge* edda1 = doc->addEdge (pd1, pa1);
703 Hex::Edge* edab2 = doc->addEdge (pa2, pb2);
704 Hex::Edge* edbc2 = doc->addEdge (pb2, pc2);
705 Hex::Edge* edcd2 = doc->addEdge (pc2, pd2);
706 Hex::Edge* edda2 = doc->addEdge (pd2, pa2);
708 Hex::Edge* edaa = doc->addEdge (pa1, pa2);
709 Hex::Edge* edbb = doc->addEdge (pb1, pb2);
710 Hex::Edge* edcc = doc->addEdge (pc1, pc2);
711 Hex::Edge* eddd = doc->addEdge (pd1, pd2);
714 // qpattern.push_back (doc->addQuad (edab1, edbc1, edcd1, edda1));
715 qpattern.push_back (doc->addQuad (edab1, edbb, edab2, edaa));
716 qpattern.push_back (doc->addQuad (edbc1, edcc, edbc2, edbb));
717 qpattern.push_back (doc->addQuad (edcd1, eddd, edcd2, edcc));
718 qpattern.push_back (doc->addQuad (edda1, edaa, edda2, eddd));
720 doc->saveVtk ("replace0.vtk");
722 doc->replace (qpattern, pd2,c1, pa2,c2, pb2,c3);
727 doc->saveVtk ("replace1.vtk");
731 // ======================================================== test_hemispheres
732 int test_hemispheres (int nbargs, cpchar tabargs[])
737 test_part_rind (nvtk);
738 test_part_sphere (nvtk);
741 // ======================================================== test_quads
742 int test_quads (int nbargs, cpchar tabargs[])
745 cpchar appel = strrchr (tabargs[0], '/');
750 appel = strrchr (tabargs[0], '\\');
760 if (Cestegal (option, "-ab") || Cestegal (option, "-AB"))
762 printf (" __________________ Appel de test_hexa_quads_ab \n");
763 test_hexa_quads_ab (nbargs, tabargs);
766 else if (Cestegal (option, "-ac1") || Cestegal (option, "-AC1"))
768 printf (" __________________ Appel de test_hexa_quads_ac1 \n");
769 test_hexa_quads_ac1 (nbargs, tabargs);
771 else if (Cestegal (option, "-ac") || Cestegal (option, "-AC"))
773 printf (" __________________ Appel de test_hexa_quads_ac \n");
774 test_hexa_quads_ac (nbargs, tabargs);
777 else if (Cestegal (option, "-ace") || Cestegal (option, "-ACE"))
779 printf (" __________________ Appel de test_hexa_quads_ace \n");
780 test_hexa_quads_ace (nbargs, tabargs);
783 else if (Cestegal (option, "-acd") || Cestegal (option, "-ACD"))
785 printf (" __________________ Appel de test_hexa_quads_acd \n");
786 test_hexa_quads_acd (nbargs, tabargs);
789 else if (Cestegal (option, "-abcd") || Cestegal (option, "-ABCD"))
791 printf (" __________________ Appel de test_hexa_quads_abcd \n");
792 test_hexa_quads_abcd (nbargs, tabargs);
795 else if (Cestegal (option, "-abce") || Cestegal (option, "-ABCE"))
797 printf (" __________________ Appel de test_hexa_quads_abce \n");
798 test_hexa_quads_abce (nbargs, tabargs);
801 else if (Cestegal (option, "-5") || Cestegal (option, "-abcde")
802 || Cestegal (option, "-ABCDE"))
804 printf (" __________________ Appel de test_hexa_quads_abcde \n");
805 test_hexa_quads_5 (nbargs, tabargs);
810 printf (" +++ Veuillez indiquer votre cas-test en argument SVP\n");
811 printf (" +++ Creation d'un hexadedre a partir de quadrangles :\n");
812 printf (" %s -ab : A partir des quadrangles A et B (opposes)\n", appel);
813 printf (" %s -ac : A partir des quadrangles A et C (diedre)\n", appel);
814 printf (" %s -acd : A partir des quadrangles A, C et D (triedre)\n",
816 printf (" %s -ace : A partir des quadrangles A, C et E (en U)\n",
818 printf (" %s -acbd : A partir des quadrangles A, B, C et D (tunnel)\n",
820 printf (" %s -acbe : A partir des quadrangles A, B, C et E (but)\n",
822 printf (" %s -5 : A partir de 5 quadrangles (boite sans couvercle)\n",