16#include <Tetraedriser_par_prisme.h>
39static void decoupe(Domaine& dom, Faces& faces)
46 IntTab nouveaux(2 * nb_faces, 3);
49 for(
int i=0; i<nb_faces; i++)
51 int i1 = sommets(i, 0);
52 int i2 = sommets(i, 1);
53 int i3 = sommets(i, 2);
54 int i4 = sommets(i, 3);
57 if ((coord(i1, 0) == coord(i2, 0)) && (coord(i1, 0) == coord(i3, 0)))
62 nouveaux(nb_faces + i, 0) = i2;
63 nouveaux(nb_faces + i, 1) = i3;
64 nouveaux(nb_faces + i, 2) = i4;
68 if ((coord(i1, 2) == coord(i2, 2)) && (coord(i1, 2) == coord(i3, 2)))
73 nouveaux(nb_faces + i, 0) = i2;
74 nouveaux(nb_faces + i, 1) = i3;
75 nouveaux(nb_faces + i, 2) = i4;
78 if ((coord(i1, 1) == coord(i2, 1)) && (coord(i1, 1) == coord(i3, 1)))
83 nouveaux(nb_faces + i, 0) = i1;
84 nouveaux(nb_faces + i, 1) = i3;
85 nouveaux(nb_faces + i, 2) = i4;
89 sommets.
ref(nouveaux);
106 if (
domaine.type_elem()->que_suis_je() ==
"Hexaedre")
109 IntTab& les_elems =
domaine.les_elems();
111 IntTab new_elems(6 * oldsz, 4);
112 for (
int i = 0; i < oldsz; i++)
114 int i0 = les_elems(i, 0);
115 int i1 = les_elems(i, 1);
116 int i2 = les_elems(i, 2);
117 int i3 = les_elems(i, 3);
118 int i4 = les_elems(i, 4);
119 int i5 = les_elems(i, 5);
120 int i6 = les_elems(i, 6);
121 int i7 = les_elems(i, 7);
123 new_elems(i, 0) = i0;
124 new_elems(i, 1) = i1;
125 new_elems(i, 2) = i2;
126 new_elems(i, 3) = i5;
128 new_elems(i + oldsz, 0) = i0;
129 new_elems(i + oldsz, 1) = i2;
130 new_elems(i + oldsz, 2) = i4;
131 new_elems(i + oldsz, 3) = i5;
134 new_elems(i + 2 * oldsz, 0) = i1;
135 new_elems(i + 2 * oldsz, 1) = i2;
136 new_elems(i + 2 * oldsz, 2) = i3;
137 new_elems(i + 2 * oldsz, 3) = i5;
140 new_elems(i + 3 * oldsz, 0) = i2;
141 new_elems(i + 3 * oldsz, 1) = i3;
142 new_elems(i + 3 * oldsz, 2) = i5;
143 new_elems(i + 3 * oldsz, 3) = i7;
146 new_elems(i + 4 * oldsz, 0) = i2;
147 new_elems(i + 4 * oldsz, 1) = i4;
148 new_elems(i + 4 * oldsz, 2) = i5;
149 new_elems(i + 4 * oldsz, 3) = i6;
152 new_elems(i + 5 * oldsz, 0) = i2;
153 new_elems(i + 5 * oldsz, 1) = i5;
154 new_elems(i + 5 * oldsz, 2) = i6;
155 new_elems(i + 5 * oldsz, 3) = i7;
159 les_elems.
ref(new_elems);
162 Cerr <<
"We do not yet know how to Tetraedriser_par_prisme the " <<
domaine.type_elem()->que_suis_je() <<
"s" << finl;
164 for (
auto &itr :
domaine.faces_bord())
166 Faces& les_faces = itr.faces();
167 les_faces.
typer(Type_Face::triangle_3D);
171 for (
auto &itr :
domaine.faces_raccord())
173 Faces& les_faces = itr->faces();
174 les_faces.
typer(Type_Face::triangle_3D);
178 for (
auto &itr :
domaine.bords_int())
180 Faces& les_faces = itr.faces();
181 les_faces.
typer(Type_Face::triangle_3D);
185 for (
auto &itr :
domaine.groupes_faces())
187 Faces& les_faces = itr.faces();
188 les_faces.
typer(Type_Face::triangle_3D);
const DoubleTab_t & coord_sommets() const
Class defining operators and methods for all reading operation in an input flow (file,...
void typer(const Motcle &)
Type les faces.
IntTab_t & voisins()
Renvoie le tableau des voisins (des faces).
const IntTab_t & les_sommets() const
Renvoie le tableau des sommets de toutes les faces.
void mettre_a_jour_sous_domaine(Domaine_t &domaine, int_t &elem, int_t num_premier_elem, int_t nb_elem) const
Domaine_t & domaine(int i=0)
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Classe de base des flux de sortie.
virtual void ref(const TRUSTTab &)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension(int d) const
Classe Tetra_par_prisme Cette classe est un interprete qui sert a lire et executer.
void trianguler(Domaine &) const override
Tetraedrise tous les elements d'un domaine : transforme les elements goemetriques du domaine en tetra...
Triangulation_base Classe destinee a factoriser l'action de triangulation des interpretes.