// C++ : Tests unitaires sur les creations h'hexaedres
-// Copyright (C) 2009-2011 CEA/DEN, EDF R&D
+// Copyright (C) 2009-2016 CEA/DEN, EDF R&D
//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.salome-platform.org/
-// or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include "Hex.hxx"
#include "HexDocument.hxx"
#include "HexElements.hxx"
-#include "HexCrossElements.hxx"
#include "HexHexa.hxx"
#include "HexQuad.hxx"
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_5";
Hex::Quad* qe = hexa->getQuad (Hex::Q_E);
Hex::Quad* qf = hexa->getQuad (Hex::Q_F);
- qb->setScalar (5);
+ qb->setColor (5);
doc->saveVtk (fic_vtk, nvtk);
qb->remove ();
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_ab";
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_ac";
doc->saveVtk (fic_vtk, nvtk);
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_ace";
doc->saveVtk (fic_vtk, nvtk);
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_acd";
doc->saveVtk (fic_vtk, nvtk);
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_abcd";
doc->saveVtk (fic_vtk, nvtk);
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
int nvtk = 0;
cpchar fic_vtk = "HexaQuad_abce";
doc->saveVtk (fic_vtk, nvtk);
doc->saveVtk ("hexa_quads.vtk");
return HOK;
}
-// ======================================================== test_part_rind
-int test_part_rind (int& nvtk)
-{
- Hex::Hex mon_ex;
- Hex::Document* doc = mon_ex.addDocument ();
-
- Hex::Vertex* center = doc->addVertex (0,0,0);
- Hex::Real radius = 8;
- Hex::Real radint = 7;
- Hex::Vertex* orig = NULL;
- Hex::Vector* vz = doc->addVector (0,0,1);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Real angle = 90;
- Hex::Real radhole = 1;
- int nrad = 3;
- int nang = 4;
- int nhaut = 8;
-
- Hex::Elements* grid = doc->makePartRind (center, vx, vz, radius, radint,
- radhole, orig, angle, nrad, nang, nhaut);
- if (grid!=NULL)
- doc->saveVtk ("makeSphere", nvtk);
- return HOK;
-}
-// ======================================================== test_rind
-int test_rind (int& nvtk)
-{
- Hex::Hex mon_ex;
- Hex::Document* doc = mon_ex.addDocument ();
-
- Hex::Vertex* center = doc->addVertex (0,0,0);
- Hex::Real radius = 8;
- Hex::Real radint = 7;
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vz = doc->addVector (0,1,1);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Real radhole = 1;
- int nrad = 3;
- int nang = 16;
- int nhaut = 8;
-
- Hex::Elements* grid = doc->makeRind (center, vx, vz, radius, radint,
- radhole, orig, nrad, nang, nhaut);
- if (grid!=NULL)
- doc->saveVtk ("makeSphere", nvtk);
- return HOK;
-}
-// ======================================================== test_part_sphere
-int test_part_sphere (int& nvtk)
-{
- Hex::Hex mon_ex;
- Hex::Document* doc = mon_ex.addDocument ();
-
- Hex::Vertex* center = doc->addVertex (0,0,0);
- Hex::Real radius = 8;
- Hex::Vertex* orig = doc->addVertex (0,0,-4);
- Hex::Vector* vz = doc->addVector (0,0,1);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Real angle = 90;
- Hex::Real radhole = 1;
- int nrad = 3;
- int nang = 4;
- int nhaut = 8;
-
- Hex::Elements* grid = doc->makePartSphere (center, vx, vz, radius,
- radhole, orig, angle, nrad, nang, nhaut);
- if (grid!=NULL)
- doc->saveVtk ("makeSphere", nvtk);
- return HOK;
-}
-// ======================================================== test_sphere
-int test_sphere (int& nvtk)
-{
- Hex::Hex mon_ex;
- Hex::Document* doc = mon_ex.addDocument ();
-
- Hex::Vertex* center = doc->addVertex (0,0,0);
- Hex::Real radius = 8;
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Real radhole = 1;
- int nrad = 3;
- int nang = 16;
- int nhaut = 8;
-
- Hex::Elements* grid = doc->makeSphere (center, vx, vz, radius,
- radhole, orig, nrad, nang, nhaut);
- if (grid!=NULL)
- doc->saveVtk ("makeSphere", nvtk);
- return HOK;
-}
-// ================================================== test_asso_grid
-int test_asso_grid (int nbargs, cpchar tabargs[])
-{
- Hex::Hex mon_ex;
- Hex::Document* doc = mon_ex.addDocument ();
-
- Hex::Vertex* orig1 = doc->addVertex ( 0, 0,0);
-
- Hex::Vector* vz = doc->addVector (0,0,1);
- Hex::Vector* vx = doc->addVector (1,0,0);
-
- double dr = 1;
- double dl = 1;
- int nr = 2;
- int nl = 3;
- int na = 8;
-
- Hex::Elements *c1 = NULL;
-
- c1 = doc->makeCylindrical (orig1, vx,vz,dr, 300, dl, nr, na, nl, false);
- for (int ned=0 ; ned<na ; ned++)
- {
- Hex::Edge* edge = c1->getEdgeJ (nr, ned, 1);
- if (edge != NULL)
- edge->setScalar (5);
- else
- printf (" ... c1->getEdgeJ (nr, %d, 1) = NULL\n", ned);
- }
-
- doc->saveVtk ("asso_grid.vtk");
-
- return HOK;
-}
// ======================================================== test_piquage
int test_piquage (int nbargs, cpchar tabargs[])
{
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
Hex::Vector* vz = doc->addVector (0,0,1);
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
- double dr = 1;
double dl = 1;
int nr = 1;
int nl = 1;
Hex::Vertex* orig2 = doc->addVertex (0,0,5);
- Hex::Elements* grid2 = doc->makeCylindrical (orig2, vx,vz,
- dr, 360, dl, nr, na, nl, false);
+ Hex::Elements* grid2 = doc->makeCylinderUni (orig2, vx,vz, 1.0, 5.0,
+ 360, dl, nr, na, nl);
Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
Hex::Vertex* p2 = grid2->getVertexIJK (1, 1, 1);
Hex::Vertex* p3 = grid2->getVertexIJK (1, 2, 1);
- c1->setScalar (4);
- c2->setScalar (6);
- c3->setScalar (6);
+ c1->setColor (4);
+ c2->setColor (6);
+ c3->setColor (6);
- p1->setScalar (4);
- p2->setScalar (6);
- p3->setScalar (6);
+ p1->setColor (4);
+ p2->setColor (6);
+ p3->setColor (6);
int nvtk=0;
doc->saveVtk ("piquage", nvtk);
for (int ny=0; ny<4 ; ny++)
{
Hex::Quad* quad = grid2->getQuadIJ (0, ny, 1);
- quad->setScalar(5);
+ quad->setColor(5);
qpattern.push_back (quad);
}
return HOK;
}
-// ======================================================== test_replace
-int test_replace (int nbargs, cpchar tabargs[])
+// ======================================================== test_replace0
+int test_replace0 (int nbargs, cpchar tabargs[])
{
const int size_x = 3;
const int size_y = 3;
Hex::Hex mon_ex;
Hex::Document* doc = mon_ex.addDocument ();
- Hex::Vertex* orig = doc->addVertex (0,0,0);
- Hex::Vector* vx = doc->addVector (1,0,0);
- Hex::Vector* vy = doc->addVector (0,1,0);
- Hex::Vector* vz = doc->addVector (0,0,1);
-
- Hex::Elements* grid = doc->makeCartesian (orig, vx, vy, vz,
- size_x,size_y,size_z);
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
doc->replace (qpattern, pd2,c1, pa2,c2, pb2,c3);
- c1->setScalar (4);
- c2->setScalar (6);
- c3->setScalar (6);
+ c1->setColor (4);
+ c2->setColor (6);
+ c3->setColor (6);
doc->saveVtk ("replace1.vtk");
return HOK;
}
-// ======================================================== test_hemispheres
-int test_hemispheres (int nbargs, cpchar tabargs[])
+// ======================================================== test_replace1
+int test_replace1 (int nbargs, cpchar tabargs[])
{
- int nvtk = 0;
- test_sphere (nvtk);
- test_rind (nvtk);
- test_part_rind (nvtk);
- test_part_sphere (nvtk);
+ const int size_x = 3;
+ const int size_y = 3;
+ const int size_z = 3;
+ const int size_cyl = 4;
+
+ Hex::Hex mon_ex;
+ Hex::Document* doc = mon_ex.addDocument ();
+ Hex::Vector* vx = doc->addVector (1, 0, 0);
+ Hex::Vector* vz = doc->addVector (0, 0, 1);
+ Hex::Vertex* ori = doc->addVertex (8, 0, 0);
+ const double rint = 1;
+ const double rext = 3;
+ const double angle = 360;
+ const double haut = 1;
+ const int nr = 1;
+ const int nh = 1;
+
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
+ Hex::Elements* pipe = doc->makePipeUni (ori, vx, vz, rint, rext, angle,
+ haut, nr, size_cyl, nh);
+
+ Hex::Vertex* c1 = grid->getVertexIJK (1, 2, size_z);
+ Hex::Vertex* c2 = grid->getVertexIJK (1, 1, size_z);
+ Hex::Vertex* c3 = grid->getVertexIJK (2, 1, size_z);
+
+ Hex::Vertex* p1 = pipe->getVertexIJK (1, 1, 1);
+ Hex::Vertex* p2 = pipe->getVertexIJK (1, 2, 1);
+ Hex::Vertex* p3 = pipe->getVertexIJK (1, 3, 1);
+
+ Hex::Quads qpattern;
+ for (int na=0; na<size_cyl; ++na)
+ {
+ Hex::Quad* quad =pipe->getQuadIJ (0, na, 1);
+ quad->setColor (2);
+ qpattern.push_back (quad);
+ }
+
+ c1->setColor (6);
+ c2->setColor (4);
+ c3->setColor (2);
+
+ p1->setColor (6);
+ p2->setColor (5);
+ p3->setColor (4);
+ doc->saveVtk ("replace0.vtk");
+
+ Hex::Elements* rep = doc->replaceHexa (qpattern, p1,c1, p2,c2, p3,c3);
+ HexDisplay (rep->isValid());
+ Hex::what ();
+
+ doc->saveVtk ("replace1.vtk");
+ doc->saveVtk ("replace2.vtk");
+ doc->saveVtk ("replace3.vtk");
+ return HOK;
+}
+// ======================================================== test_replace
+int test_replace (int nbargs, cpchar tabargs[])
+{
+ const int size_x = 5;
+ const int size_y = 5;
+ const int size_z = 3;
+ const int size_cyl = 12;
+
+ Hex::Hex mon_ex;
+ Hex::Document* doc = mon_ex.addDocument ();
+ Hex::Vector* vx = doc->addVector (1, 0, 0);
+ Hex::Vector* vz = doc->addVector (0, 0, 1);
+ Hex::Vertex* ori = doc->addVertex (8, 0, 0);
+ const double rint = 2;
+ const double rext = 3;
+ const double angle = 360;
+ const double haut = 1;
+ const int nr = 1;
+ const int nh = 1;
+
+ Hex::Elements* grid = doc->makeCartesianTop (size_x,size_y,size_z);
+ Hex::Elements* pipe = doc->makePipeUni (ori, vx, vz, rint, rext, angle,
+ haut, nr, size_cyl, nh);
+
+ Hex::Vertex* c1 = grid->getVertexIJK (2, 1, size_z);
+ Hex::Vertex* c2 = grid->getVertexIJK (3, 1, size_z);
+
+ Hex::Vertex* p1 = pipe->getVertexIJK (1, 7, 1);
+ Hex::Vertex* p2 = pipe->getVertexIJK (1, 8, 1);
+
+ Hex::Quads qpattern, qtarget;
+ for (int na=0; na<size_cyl; ++na)
+ {
+ Hex::Quad* quad =pipe->getQuadIJ (0, na, 1);
+ quad->setColor (2);
+ qpattern.push_back (quad);
+ }
+
+ for (int ni=1; ni<size_x-1; ++ni)
+ for (int nj=1; nj<size_y-1; ++nj)
+ {
+ cout << " grid->getQuad (" << ni << "," << nj << ")\n";
+ Hex::Quad* quad = grid->getQuadIJ (ni, nj, size_z);
+ quad->setColor (2);
+ qtarget.push_back (quad);
+ }
+
+ c1->setColor (6);
+ c2->setColor (4);
+
+ p1->setColor (6);
+ p2->setColor (4);
+ doc->saveVtk ("replace0.vtk");
+
+ Hex::Elements* rep = doc->replace (qpattern, qtarget, p1,c1, p2,c2);
+ HexDisplay (rep->isValid());
+ Hex::what ();
+
+ doc->saveVtk ("replace1.vtk");
+ doc->saveVtk ("replace2.vtk");
return HOK;
}
// ======================================================== test_quads