MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mailleur3d_front.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mailleur3d_front.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 
26 
27 
28 #include <math.h>
29 #include "ot_mathematique.h"
30 #include "mailleur3d_front.h"
31 #include "m3d_noeud.h"
32 #include "m3d_triangle.h"
33 #include "m3d_tetra.h"
34 #include "mg_gestionnaire.h"
35 
36 
37 
38 
39 
40 #include <fstream>
41 
42 CAS_FRONT::CAS_FRONT(int type_cas,MG_NOEUD* noeud,int numero_cote)
43 {
44 type=type_cas;
45 degre=0;
46 mgnoeud=noeud;
47 liaison[0]=0;
48 liaison[1]=0;
49 liaison[2]=0;
50 angle[0]=0.;
51 angle[1]=0.;
52 angle[2]=0.;
54 }
55 
57 {
58 }
59 
60 
61 
63 {
64 char mess[255];
65 int couche=0;
66 if (affichageactif==1)
67  {
68  char mess[500];
69  sprintf(mess," Initialisation du front. %d fronts restants. %d tetras construits ",get_nb_front(front_attente)+get_nb_front_courant(),mg_maillage->get_nb_mg_tetra());
70  affiche(mess);
72  }
73 if (activelog) ini_log();
74 passe=0;
75 int nb_front_convergence=(int)param.get_valeur((char*)"Convergence_mailleur3d_frontal");
76 long Nb_front_max_mailleur3d=(long)param.get_valeur((char*)"Nb_front_max_mailleur3d");
78  {
79  std::vector<CAS_FRONT*> liste_cas;
80  passe++;
81  int numfront=premier_front_courant();
82  if (activelog)
83  if (numfront==(-1)) genere_log(1); else genere_log(0);
84  if (numfront==(-1))
85  {
86  couche++;
88  if(nb>Nb_front_max_mailleur3d)
89  {
90  std::cerr << "*** MAILLEUR3D::progresse_front : Nb_front_max_mailleur3d atteint ! ***" << std::endl;
91  mg_maillage->get_gestionnaire()->enregistrer("void.magic");
92  return FAIL;
93  }
94  for (int i=0;i<nb;i++)
95  {
97  if (nb>nb_front_convergence) fttmp->ini_ifail();
99  }
101  numfront=premier_front_courant();
102  if (affichageactif==1)
103  {
104  char mess[500];
105  sprintf(mess," Itération %d : Couche %d terminee. %d fronts restants. %d tetras construits",passe,couche,nb,mg_maillage->get_nb_mg_tetra());
106  affiche(mess);
107  }
109  }
110  if (numfront==(-1)) continue;
112 
113  int bouclebis;
114  do
115  {
116  // recherche des cas de front
117  //ADJACENCE
118  bouclebis=false;
119  MG_NOEUD* noeudtmp;
120  MG_FRONT_3D* fttmp=ft->get_front_voisin(0);
121  if ((fttmp->get_noeud1()!=ft->get_noeud1()) && (fttmp->get_noeud1()!=ft->get_noeud2())) noeudtmp=fttmp->get_noeud1();
122  else if ((fttmp->get_noeud2()!=ft->get_noeud1()) && (fttmp->get_noeud2()!=ft->get_noeud2())) noeudtmp=fttmp->get_noeud2();
123  else if ((fttmp->get_noeud3()!=ft->get_noeud1()) && (fttmp->get_noeud3()!=ft->get_noeud2())) noeudtmp=fttmp->get_noeud3();
125  fttmp=ft->get_front_voisin(1);
126  if ((fttmp->get_noeud1()!=ft->get_noeud1()) && (fttmp->get_noeud1()!=ft->get_noeud3())) noeudtmp=fttmp->get_noeud1();
127  else if ((fttmp->get_noeud2()!=ft->get_noeud1()) && (fttmp->get_noeud2()!=ft->get_noeud3())) noeudtmp=fttmp->get_noeud2();
128  else if ((fttmp->get_noeud3()!=ft->get_noeud1()) && (fttmp->get_noeud3()!=ft->get_noeud3())) noeudtmp=fttmp->get_noeud3();
130  fttmp=ft->get_front_voisin(2);
131  if ((fttmp->get_noeud1()!=ft->get_noeud2()) && (fttmp->get_noeud1()!=ft->get_noeud3())) noeudtmp=fttmp->get_noeud1();
132  else if ((fttmp->get_noeud2()!=ft->get_noeud2()) && (fttmp->get_noeud2()!=ft->get_noeud3())) noeudtmp=fttmp->get_noeud2();
133  else if ((fttmp->get_noeud3()!=ft->get_noeud2()) && (fttmp->get_noeud3()!=ft->get_noeud3())) noeudtmp=fttmp->get_noeud3();
135  //LIE
136  MG_NOEUD* mgnoeud1=ft->get_noeud1();
137  MG_NOEUD* mgnoeud2=ft->get_noeud2();
138  MG_NOEUD* mgnoeud3=ft->get_noeud3();
139  int nb_seg=mgnoeud1->get_lien_segment()->get_nb();
140  for (int i=0;i<nb_seg;i++)
141  {
142  MG_SEGMENT* seg=mgnoeud1->get_lien_segment()->get(i);
143  MG_NOEUD* noeudtmp;
144  if (seg->get_noeud1()==mgnoeud1) noeudtmp=seg->get_noeud2(); else noeudtmp=seg->get_noeud1();
147  {
148  M3D_NOEUD* m3dno=(M3D_NOEUD*)noeudtmp;
149  etat=m3dno->get_etat();
150  }
152  if (noeudtmp!=mgnoeud2)
153  if (noeudtmp!=mgnoeud3)
154  {
155  double angle=angle_front(ft,seg);
156  insere_cas_front(MAGIC::MAILLEURFRONTALETAT::LIE,noeudtmp,0,angle,liste_cas);
157  }
158 
159  }
160  nb_seg=mgnoeud2->get_lien_segment()->get_nb();
161  for (int i=0;i<nb_seg;i++)
162  {
163  MG_SEGMENT* seg=mgnoeud2->get_lien_segment()->get(i);
164  MG_NOEUD* noeudtmp;
165  if (seg->get_noeud1()==mgnoeud2) noeudtmp=seg->get_noeud2(); else noeudtmp=seg->get_noeud1();
168  {
169  M3D_NOEUD* m3dno=(M3D_NOEUD*)noeudtmp;
170  etat=m3dno->get_etat();
171  }
173  if (noeudtmp!=mgnoeud1)
174  if (noeudtmp!=mgnoeud3)
175  {
176  double angle=angle_front(ft,seg);
177  insere_cas_front(MAGIC::MAILLEURFRONTALETAT::LIE,noeudtmp,1,angle,liste_cas);
178  }
179 
180  }
181  nb_seg=mgnoeud3->get_lien_segment()->get_nb();
182  for (int i=0;i<nb_seg;i++)
183  {
184  MG_SEGMENT* seg=mgnoeud3->get_lien_segment()->get(i);
185  MG_NOEUD* noeudtmp;
186  if (seg->get_noeud1()==mgnoeud3) noeudtmp=seg->get_noeud2(); else noeudtmp=seg->get_noeud1();
189  {
190  M3D_NOEUD* m3dno=(M3D_NOEUD*)noeudtmp;
191  etat=m3dno->get_etat();
192  }
194  if (noeudtmp!=mgnoeud1)
195  if (noeudtmp!=mgnoeud2)
196  {
197  double angle=angle_front(ft,seg);
198  insere_cas_front(MAGIC::MAILLEURFRONTALETAT::LIE,noeudtmp,0,angle,liste_cas);
199  }
200 
201  }
202  // classement des diff�rents cas
203  int nb_cas=liste_cas.size();
204  std::vector<CAS_FRONT*> liste_classe_cas[8];
205  // insertion du cas general
206  liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::GENERAL].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::GENERAL].end(),NULL);
207  for (int j=0;j<nb_cas;j++)
208  {
209  CAS_FRONT* cas=liste_cas[j];
210  if ((cas->type==MAGIC::MAILLEURFRONTALETAT::ADJACENT) && (cas->degre==3))
211  {
213  double angle=4*M_PI;
214  if (cas->liaison[0]==1) angle=std::min(angle,cas->angle[0]);
215  if (cas->liaison[1]==1) angle=std::min(angle,cas->angle[1]);
216  if (cas->liaison[2]==1) angle=std::min(angle,cas->angle[2]);
217  if (angle<M_PI) liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT3].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT3].end(),cas);
218  }
219  if ((cas->type==MAGIC::MAILLEURFRONTALETAT::ADJACENT) && (cas->degre==2))
220  {
222  double angle=4*M_PI;
223  if (cas->liaison[0]==1) angle=std::min(angle,cas->angle[0]);
224  if (cas->liaison[1]==1) angle=std::min(angle,cas->angle[1]);
225  if (cas->liaison[2]==1) angle=std::min(angle,cas->angle[2]);
226  if (angle<M_PI) liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT2].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT2].end(),cas);
227  }
228  if ((cas->type==MAGIC::MAILLEURFRONTALETAT::ADJACENT) && (cas->degre==1))
229  {
231  double angle=4*M_PI;
232  if (cas->liaison[0]==1) angle=std::min(angle,cas->angle[0]);
233  if (cas->liaison[1]==1) angle=std::min(angle,cas->angle[1]);
234  if (cas->liaison[2]==1) angle=std::min(angle,cas->angle[2]);
235  if (angle<1.396263401) liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT1].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT1].end(),cas);
236  else liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::AUTRECAS].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::AUTRECAS].end(),cas);
237  }
238  if ((cas->type==MAGIC::MAILLEURFRONTALETAT::LIE) && (cas->degre==3))
239  {
241  double angle=4*M_PI;
242  if (cas->liaison[0]==1) angle=std::min(angle,cas->angle[0]);
243  if (cas->liaison[1]==1) angle=std::min(angle,cas->angle[1]);
244  if (cas->liaison[2]==1) angle=std::min(angle,cas->angle[2]);
245  if (angle<M_PI) liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE3].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE3].end(),cas);
246 
247  }
248  if ((cas->type==MAGIC::MAILLEURFRONTALETAT::LIE) && (cas->degre==2))
249  {
251  double angle=4*M_PI;
252  if (cas->liaison[0]==1) angle=std::min(angle,cas->angle[0]);
253  if (cas->liaison[1]==1) angle=std::min(angle,cas->angle[1]);
254  if (cas->liaison[2]==1) angle=std::min(angle,cas->angle[2]);
255  if (angle<1.396263401) liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE2].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE2].end(),cas);
256  else liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::AUTRECAS].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::AUTRECAS].end(),cas);
257  }
258  if ((cas->type==MAGIC::MAILLEURFRONTALETAT::LIE) && (cas->degre==1))
259  {
261  double angle=4*M_PI;
262  if (cas->liaison[0]==1) angle=std::min(angle,cas->angle[0]);
263  if (cas->liaison[1]==1) angle=std::min(angle,cas->angle[1]);
264  if (cas->liaison[2]==1) angle=std::min(angle,cas->angle[2]);
265  if (angle<1.396263401) liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE1].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE1].end(),cas);
266  else liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::AUTRECAS].insert(liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::AUTRECAS].end(),cas);
267  }
268 
269  }
270  //traitement des differemts cas de fronts
272  CAS_FRONT *cas=NULL;
273  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT3].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE)) solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::ADJACENT3,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT3],&cas);
274  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT2].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE)) solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::ADJACENT2,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT2],&cas);
275  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT1].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE)) solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::ADJACENT1,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::ADJACENT1],&cas);
276  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE3].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE)) solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::LIE3,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE3],&cas);
277  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE2].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE)) solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::LIE2,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE2],&cas);
278  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE1].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE)) solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::LIE1,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::LIE1],&cas);
279  if ((liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::GENERAL].size()>0)&&(solution==MAGIC::MAILLEURFRONTALETAT::PASTROUVE))
280  {
281  solution=traite_front(mgvol,MAGIC::MAILLEURFRONTALETAT::GENERAL,ft,liste_cas,liste_classe_cas[MAGIC::MAILLEURFRONTALETAT::GENERAL],&cas);
283  {
284  int type=cas->type;
285  std::vector<CAS_FRONT*> liste_classe_cas_temp;
286  liste_classe_cas_temp.insert(liste_classe_cas_temp.end(),cas);
287  solution=traite_front(mgvol,type,ft,liste_cas,liste_classe_cas_temp,&cas); // pb icitte a compte=531
288  }
290  {
291  ft->incremente_ifail();
293  }
295  bouclebis=true;
296  }
297 
298  efface_cas_front(liste_cas,liste_classe_cas);
299  }
300  while (bouclebis==true);
301  refresh();
302  }
303 if (activelog) fin_log();
304 sprintf(mess," Maillage terminé en %d couches et %d iterations",couche+1,passe);
305 affiche(mess);
306 return OK;
307 }
308 
309 int MAILLEUR3D::traite_front(MG_VOLUME* mgvol,int type,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas)
310 {
311 int num;
312 switch (type)
313  {
314  case MAGIC::MAILLEURFRONTALETAT::ADJACENT3:num=traite_front_adjacent3(mgvol,ft,liste_cas,liste_classe_cas,cas);break;
315  case MAGIC::MAILLEURFRONTALETAT::ADJACENT2:num=traite_front_adjacent2(mgvol,ft,liste_cas,liste_classe_cas,cas);break;
316  case MAGIC::MAILLEURFRONTALETAT::ADJACENT1:num=traite_front_adjacent1(mgvol,ft,liste_cas,liste_classe_cas,cas);break;
319  case MAGIC::MAILLEURFRONTALETAT::LIE1:num=traite_front_lie(mgvol,ft,liste_cas,liste_classe_cas,cas);break;
320  case MAGIC::MAILLEURFRONTALETAT::GENERAL:num=traite_front_general(mgvol,ft,liste_cas,liste_classe_cas,cas);break;
321  }
322 return num;
323 }
324 
325 
326 
327 int MAILLEUR3D::traite_front_adjacent3(MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas)
328 {
329 TPL_MAP_ENTITE<class MG_TRIANGLE*> liste_intersection;
330 MG_NOEUD* noeud=liste_classe_cas[0]->mgnoeud;
331 MG_TETRA* tet=insere_tetra(mgvol,ft,noeud,MAGIC::MAILLEURFRONTALETAT::NOEUD_EXISTANT,liste_intersection);
332 liste_classe_cas[0]->traite=MAGIC::MAILLEURFRONTALETAT::TRAITE;
333 if (tet==NULL) return MAGIC::MAILLEURFRONTALETAT::PASTROUVE;
334 MG_FRONT_3D* ft1=ft->get_front_voisin(0);
335 MG_FRONT_3D* ft2=ft->get_front_voisin(1);
336 MG_FRONT_3D* ft3=ft->get_front_voisin(2);
342 }
343 
344 int MAILLEUR3D::traite_front_adjacent2(MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas)
345 {
346 TPL_MAP_ENTITE<class MG_TRIANGLE*> liste_intersection;
347 MG_NOEUD* noeud=liste_classe_cas[0]->mgnoeud;
348 MG_TETRA* tet=insere_tetra(mgvol,ft,noeud,MAGIC::MAILLEURFRONTALETAT::NOEUD_EXISTANT,liste_intersection);
349 liste_classe_cas[0]->traite=MAGIC::MAILLEURFRONTALETAT::TRAITE;
350 if (tet==NULL) return MAGIC::MAILLEURFRONTALETAT::PASTROUVE;
351 MG_FRONT_3D* ft1;
352 MG_FRONT_3D* ft2;
353 MG_FRONT_3D* ft3;
354 MG_FRONT_3D* ftn1;
355 if (liste_classe_cas[0]->liaison[0]==0)
356  {
357  ft1=ft->get_front_voisin(1);
358  ft2=ft->get_front_voisin(2);
359  ft3=ft->get_front_voisin(0);
360  ftn1=mise_a_jour_front(tet,1);
361  }
362 if (liste_classe_cas[0]->liaison[1]==0)
363  {
364  ft1=ft->get_front_voisin(0);
365  ft2=ft->get_front_voisin(2);
366  ft3=ft->get_front_voisin(1);
367  ftn1=mise_a_jour_front(tet,3);
368  }
369 if (liste_classe_cas[0]->liaison[2]==0)
370  {
371  ft1=ft->get_front_voisin(0);
372  ft2=ft->get_front_voisin(1);
373  ft3=ft->get_front_voisin(2);
374  ftn1=mise_a_jour_front(tet,2);
375  }
385 }
386 
387 int MAILLEUR3D::traite_front_adjacent1(MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas)
388 {
389 TPL_MAP_ENTITE<class MG_TRIANGLE*> liste_intersection;
390 int nb_cas=liste_classe_cas.size();
391 double *qual;
392 liste_classe_cas[0]->traite=MAGIC::MAILLEURFRONTALETAT::TRAITE;
393 qual=new double[nb_cas];
394 double xyz1[3]={ft->get_noeud1()->get_x(),ft->get_noeud1()->get_y(),ft->get_noeud1()->get_z()};
395 double xyz2[3]={ft->get_noeud2()->get_x(),ft->get_noeud2()->get_y(),ft->get_noeud2()->get_z()};
396 double xyz3[3]={ft->get_noeud3()->get_x(),ft->get_noeud3()->get_y(),ft->get_noeud3()->get_z()};
397 for (int i=0;i<nb_cas;i++)
398  {
399  MG_NOEUD* noeud=liste_classe_cas[i]->mgnoeud;
400  double xyz[3]={noeud->get_x(),noeud->get_y(),noeud->get_z()};
401  qual[i]=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz);
402  }
403 int fin=0;
404 MG_TETRA* tet;
405 int num;
406 while (fin==0)
407  {
408  double* pos_max=std::max_element(qual,qual+nb_cas);
409  if (*pos_max==0.0) {delete [] qual;return MAGIC::MAILLEURFRONTALETAT::PASTROUVE;}
410  num=pos_max-qual;
411  MG_NOEUD* noeud=liste_classe_cas[num]->mgnoeud;
412  tet=insere_tetra(mgvol,ft,noeud,MAGIC::MAILLEURFRONTALETAT::NOEUD_EXISTANT,liste_intersection);
413  if (tet!=NULL) fin=1;
414  qual[num]=0.;
415  }
416 MG_FRONT_3D* ft1;
417 MG_FRONT_3D* ft2;
418 MG_FRONT_3D* ft3;
419 MG_FRONT_3D* ftn1;
420 MG_FRONT_3D* ftn2;
421 if (liste_classe_cas[num]->liaison[0]==1)
422  {
423  ft1=ft->get_front_voisin(0);
424  ft2=ft->get_front_voisin(1);
425  ft3=ft->get_front_voisin(2);
426  ftn1=mise_a_jour_front(tet,2);
427  ftn2=mise_a_jour_front(tet,3);
428  }
429 if (liste_classe_cas[num]->liaison[1]==1)
430  {
431  ft1=ft->get_front_voisin(1);
432  ft2=ft->get_front_voisin(0);
433  ft3=ft->get_front_voisin(2);
434  ftn1=mise_a_jour_front(tet,1);
435  ftn2=mise_a_jour_front(tet,2);
436  }
437 if (liste_classe_cas[num]->liaison[2]==1)
438  {
439  ft1=ft->get_front_voisin(2);
440  ft2=ft->get_front_voisin(0);
441  ft3=ft->get_front_voisin(1);
442  ftn1=mise_a_jour_front(tet,1);
443  ftn2=mise_a_jour_front(tet,3);
444  }
457 delete [] qual;
459 }
460 
461 int MAILLEUR3D::traite_front_lie(MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas)
462 {
463 TPL_MAP_ENTITE<class MG_TRIANGLE*> liste_intersection;
464 int nb_cas=liste_classe_cas.size();
465 double *qual;
466 liste_classe_cas[0]->traite=MAGIC::MAILLEURFRONTALETAT::TRAITE;
467 qual=new double[nb_cas];
468 double xyz1[3]={ft->get_noeud1()->get_x(),ft->get_noeud1()->get_y(),ft->get_noeud1()->get_z()};
469 double xyz2[3]={ft->get_noeud2()->get_x(),ft->get_noeud2()->get_y(),ft->get_noeud2()->get_z()};
470 double xyz3[3]={ft->get_noeud3()->get_x(),ft->get_noeud3()->get_y(),ft->get_noeud3()->get_z()};
471 for (int i=0;i<nb_cas;i++)
472  {
473  MG_NOEUD* noeud=liste_classe_cas[i]->mgnoeud;
474  double xyz[3]={noeud->get_x(),noeud->get_y(),noeud->get_z()};
475  qual[i]=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz);
476  }
477 int fin=0;
478 MG_TETRA* tet;
479 while (fin==0)
480  {
481  double* pos_max=std::max_element(qual,qual+nb_cas);
482  if (*pos_max==0.0) {delete [] qual;return MAGIC::MAILLEURFRONTALETAT::PASTROUVE;}
483  int num=pos_max-qual;
484  MG_NOEUD* noeud=liste_classe_cas[num]->mgnoeud;
485  tet=insere_tetra(mgvol,ft,noeud,MAGIC::MAILLEURFRONTALETAT::NOEUD_EXISTANT,liste_intersection);
486  if (tet!=NULL) fin=1;
487  qual[num]=0.;
488  }
489 MG_FRONT_3D* ft1=ft->get_front_voisin(0);
490 MG_FRONT_3D* ft2=ft->get_front_voisin(1);
491 MG_FRONT_3D* ft3=ft->get_front_voisin(2);
492 MG_FRONT_3D* ftn1=mise_a_jour_front(tet,1);
493 MG_FRONT_3D* ftn2=mise_a_jour_front(tet,2);
494 MG_FRONT_3D* ftn3=mise_a_jour_front(tet,3);
511 delete [] qual;
513 }
514 
515 int MAILLEUR3D::traite_front_general(MG_VOLUME* mgvol,MG_FRONT_3D* ft,std::vector<CAS_FRONT*> &liste_cas,std::vector<CAS_FRONT*> &liste_classe_cas,CAS_FRONT **cas)
516 {
517 TPL_MAP_ENTITE<class MG_TRIANGLE*> liste_intersection;
519 
520 MG_NOEUD* noeud_candidat;
521 int mode=genere_noeud(mgvol,ft,liste_noeud,liste_cas);
523 if (mode==MAGIC::MAILLEURFRONTALETAT::CREATION) noeud_candidat=liste_noeud.get(0);
525  {
526  noeud_candidat=liste_noeud.get(0);
527  int nb_cas=liste_cas.size();
528  for (int i=0;i<nb_cas;i++)
529  if (liste_cas[i]->mgnoeud==noeud_candidat)
530  if (liste_cas[i]->traite==MAGIC::MAILLEURFRONTALETAT::PASTRAITE)
531  {
532  *cas=liste_cas[i];
534  }
536  }
537 MG_TETRA* tet=NULL;
539  {
540  double *qual;
541  int nb_noeud_candidat=liste_noeud.get_nb();
542  qual=new double[nb_noeud_candidat];
543  //int nb_cas=liste_cas.size();
544  for (int i=0;i<nb_noeud_candidat;i++)
545  {
546  //qual[i]=-1.;
547  /*for (int j=0;j<nb_cas;j++)
548  {
549  MG_NOEUD* casnoeud=liste_cas[j]->mgnoeud;
550  if (liste_noeud.get(i)==casnoeud) qual[i]=-100.;
551  }*/
552  //if (qual[i]!=-100.)
553  // {
554  double xyz1[3]={ft->get_noeud1()->get_x(),ft->get_noeud1()->get_y(),ft->get_noeud1()->get_z()};
555  double xyz2[3]={ft->get_noeud2()->get_x(),ft->get_noeud2()->get_y(),ft->get_noeud2()->get_z()};
556  double xyz3[3]={ft->get_noeud3()->get_x(),ft->get_noeud3()->get_y(),ft->get_noeud3()->get_z()};
557  MG_NOEUD* noeud=liste_noeud.get(i);
558  double xyz[3]={noeud->get_x(),noeud->get_y(),noeud->get_z()};
559  qual[i]=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz);
560  // }
561  }
562  for (int i=0;i<nb_noeud_candidat;i++)
563  {
564  if (tet==NULL)
565  {
566  double* max_i=std::max_element(qual,qual+nb_noeud_candidat);
567  if (*max_i>0.)
568  {
569  int pos_max=max_i-qual;
570  qual[pos_max]=-100.;
571  MG_NOEUD* noeud=liste_noeud.get(pos_max);
572  liste_intersection.vide();
573  tet=insere_tetra(mgvol,ft,noeud,mode,liste_intersection);
574  if ((tet==NULL) && (liste_intersection.get_nb()>0))
575  {
576  int traite_reussi=traite_destruction(ft,liste_intersection);
578  {
579  M3D_NOEUD* mnoeud=(M3D_NOEUD*)noeud;
580  mnoeud->etat_actif();
581  }
582  if (traite_reussi==true)
583  {
584  delete [] qual;
586  }
587  }
588  }
589  }
590  }
591  if (tet==NULL)
592  {
593  delete [] qual;
595  }
596  }
597 else tet=insere_tetra(mgvol,ft,noeud_candidat,mode,liste_intersection);
598 if ((tet==NULL) && (liste_intersection.get_nb()>0))
599  {
600  int traite_reussi=traite_destruction(ft,liste_intersection);
601  if (noeud_candidat->get_type_entite()==MAGIC::TYPE_ENTITE::IDM3D_NOEUD)
602  {
603  M3D_NOEUD* mnoeud=(M3D_NOEUD*)noeud_candidat;
604  mnoeud->etat_actif();
605  }
606  if (traite_reussi==true)
607  {
609  tet=insere_tetra(mgvol,ft,noeud_candidat,mode,liste_intersection);
610  else
612  }
613  }
614 
615 if (tet!=NULL)
616  {
617  MG_FRONT_3D* ft1=ft->get_front_voisin(0);
618  MG_FRONT_3D* ft2=ft->get_front_voisin(1);
619  MG_FRONT_3D* ft3=ft->get_front_voisin(2);
620  MG_FRONT_3D* ftn1=mise_a_jour_front(tet,1);
621  MG_FRONT_3D* ftn2=mise_a_jour_front(tet,2);
622  MG_FRONT_3D* ftn3=mise_a_jour_front(tet,3);
640  }
641 else
642  {
645  }
646 
648 }
649 
650 
651 
652 
653 
654 
655 void MAILLEUR3D::insere_cas_front(int type,MG_NOEUD* noeud,int numero_cote,double angle,std::vector<CAS_FRONT*>& liste_cas)
656 {
657 
658 std::vector<CAS_FRONT*>::iterator i;
659 std::vector<CAS_FRONT*>::iterator nouveau = liste_cas.end();
660 
661 for (i=liste_cas.begin();i!=liste_cas.end();i++)
662  {
663  if ((*i)->mgnoeud==noeud) nouveau=i;
664  }
665 
666 CAS_FRONT* cas;
667 if (nouveau==liste_cas.end()) // etait nouveau==NULL
668  {
669  cas=new CAS_FRONT(type,noeud,numero_cote);
670  liste_cas.insert(liste_cas.end(),cas);
671  }
672 else
673  {
674  cas=(*nouveau);
676  }
677 
678 cas->liaison[numero_cote]=1;
679 cas->angle[numero_cote]=angle;
680 cas->degre=cas->liaison[0]+cas->liaison[1]+cas->liaison[2];
681 }
682 
683 
684 
685 void MAILLEUR3D::efface_cas_front(std::vector<CAS_FRONT*>& liste_cas,std::vector<CAS_FRONT*> liste_classe_cas[8])
686 {
687 for (std::vector<CAS_FRONT*>::iterator i=liste_cas.begin();i!=liste_cas.end();i++)
688  {
689  delete *i;
690  }
691 liste_cas.clear();
692 
693 }
694 
695 
696 
698 {
699 MG_FRONT_3D* ft;
700 
701 if (cote==0) ft=ajouter_front_courant(numfront,tet->get_noeud1(),tet->get_noeud3(),tet->get_noeud2(),tet->get_triangle1());
702 if (cote==1) ft=ajouter_front_courant(numfront,tet->get_noeud1(),tet->get_noeud2(),tet->get_noeud4(),tet->get_triangle2());
703 if (cote==2) ft=ajouter_front_courant(numfront,tet->get_noeud2(),tet->get_noeud3(),tet->get_noeud4(),tet->get_triangle3());
704 if (cote==3) ft=ajouter_front_courant(numfront,tet->get_noeud1(),tet->get_noeud4(),tet->get_noeud3(),tet->get_triangle4());
705 
706 return ft;
707 }
708 
709 
711 {
712 MG_NOEUD* mgnoeud1=ft->get_noeud1();
713 MG_NOEUD* mgnoeud2=ft->get_noeud2();
714 MG_NOEUD* mgnoeud3=ft->get_noeud3();
715 static int nbpasse=0;
716 nbpasse++;
717 ft->changer_front_voisin(NULL,0);
718 ft->changer_front_voisin(NULL,1);
719 ft->changer_front_voisin(NULL,2);
720 for (int j=0;j<mgnoeud1->get_lien_triangle()->get_nb();j++)
721  for (int k=0;k<mgnoeud2->get_lien_triangle()->get_nb();k++)
722  {
723  M3D_TRIANGLE* tri1=(M3D_TRIANGLE*)mgnoeud1->get_lien_triangle()->get(j);
724  M3D_TRIANGLE* tri2=(M3D_TRIANGLE*)mgnoeud2->get_lien_triangle()->get(k);
725  if (tri1==tri2)
727  if (tri1->get_mgfront()!=ft)
728  {
729  MG_FRONT_3D* ft2=tri1->get_mgfront();
730  if (ft->get_front_voisin(0)==NULL)
731  {
732  ft->changer_front_voisin(ft2,0);
733  ft->changer_angle_voisin(angle_front(ft,ft2),0);
734  }
735  else
736  {
737  double angle=angle_front(ft,ft2);
738  if (angle<ft->get_angle_voisin(0))
739  {
740  ft->changer_front_voisin(ft2,0);
741  ft->changer_angle_voisin(angle,0);
742  }
743  }
744  }
745  }
746 for (int j=0;j<mgnoeud1->get_lien_triangle()->get_nb();j++)
747  for (int k=0;k<mgnoeud3->get_lien_triangle()->get_nb();k++)
748  {
749  M3D_TRIANGLE* tri1=(M3D_TRIANGLE*)mgnoeud1->get_lien_triangle()->get(j);
750  M3D_TRIANGLE* tri2=(M3D_TRIANGLE*)mgnoeud3->get_lien_triangle()->get(k);
751  if (tri1==tri2)
753  if (tri1->get_mgfront()!=ft)
754  {
755  MG_FRONT_3D* ft2=tri1->get_mgfront();
756  if (ft->get_front_voisin(1)==NULL)
757  {
758  ft->changer_front_voisin(ft2,1);
759  ft->changer_angle_voisin(angle_front(ft,ft2),1);
760  }
761  else
762  {
763  double angle=angle_front(ft,ft2);
764  if (angle<ft->get_angle_voisin(1))
765  {
766  ft->changer_front_voisin(ft2,1);
767  ft->changer_angle_voisin(angle,1);
768  }
769  }
770  }
771  }
772 for (int j=0;j<mgnoeud2->get_lien_triangle()->get_nb();j++)
773  for (int k=0;k<mgnoeud3->get_lien_triangle()->get_nb();k++)
774  {
775  M3D_TRIANGLE* tri1=(M3D_TRIANGLE*)mgnoeud2->get_lien_triangle()->get(j);
776  M3D_TRIANGLE* tri2=(M3D_TRIANGLE*)mgnoeud3->get_lien_triangle()->get(k);
777  if (tri1==tri2)
779  if (tri1->get_mgfront()!=ft)
780  {
781  MG_FRONT_3D* ft2=tri1->get_mgfront();
782  if (ft->get_front_voisin(2)==NULL)
783  {
784  ft->changer_front_voisin(ft2,2);
785  ft->changer_angle_voisin(angle_front(ft,ft2),2);
786  }
787  else
788  {
789  double angle=angle_front(ft,ft2);
790  if (angle<ft->get_angle_voisin(2))
791  {
792  ft->changer_front_voisin(ft2,2);
793  ft->changer_angle_voisin(angle,2);
794  }
795  }
796  }
797  }
798 if ( (ft->get_front_voisin(0)==NULL) || (ft->get_front_voisin(1)==NULL)|| (ft->get_front_voisin(2)==NULL))
799  refresh();
800 }
801 
802 
803 
804 
806 {
808 MG_TETRA* tetbase=((M3D_TRIANGLE*)(ft->get_triangle()))->get_voisin(0);
809 for (MG_TRIANGLE* mtri=liste_intersection.get_premier(it);mtri!=NULL;mtri=liste_intersection.get_suivant(it))
810  {
811  M3D_TRIANGLE* tri=(M3D_TRIANGLE*)mtri;
812  if (tri->get_nb_voisin()>0)
813  if (tri->get_voisin(0)==tetbase)
814  return false;
815  if (tri->get_nb_voisin()>1)
816  if (tri->get_voisin(1)==tetbase)
817  return false;
818  }
819 for (MG_TRIANGLE* mtri=liste_intersection.get_premier(it);mtri!=NULL;mtri=liste_intersection.get_suivant(it))
820  {
821  M3D_TRIANGLE* tri=(M3D_TRIANGLE*)mtri;
822  if (tri->get_frontiere()==1) return false;
823  if (tri->get_lien_topologie()!=NULL)
824  if (tri->get_lien_topologie()->get_dimension()==2) return false;
826  if (tri->get_origine()!=MAGIC::ORIGINE::MAILLEUR_AUTO) return false;
827  }
828 for (MG_TRIANGLE* mtri=liste_intersection.get_premier(it);mtri!=NULL;mtri=liste_intersection.get_suivant(it))
829  {
830  M3D_TRIANGLE* tri=(M3D_TRIANGLE*)mtri;
831  if (tri->get_nb_voisin()==1)
832  detruit_tetra(tri);
833  }
834 return true;
835 }
836 
837 
839 {
840 char chaine[500];
841 sprintf(chaine,"%s.pfj",nomlog.c_str());
842 inlog=fopen(chaine,"wt");
843 fclose(inlog);
844 sprintf(chaine,"%s.frt2",nomlog.c_str());
845 inlog=fopen(chaine,"wb");
846 }
847 
849 {
850 fclose(inlog);
851 char chaine[500];
852 sprintf(chaine,"%s.frt1",nomlog.c_str());
853 inlog=fopen(chaine,"wb");
854 int nbnoeud=mg_maillage->get_nb_mg_noeud();
855 int nbseg=0;
856 int nbsegment=mg_maillage->get_nb_mg_segment();
857 for (int i=0;i<nbsegment;i++) if (mg_maillage->get_mg_segment(i)->get_lien_topologie()->get_dimension()==1) nbseg++;
858 int nbtriangle=mg_maillage->get_nb_mg_triangle();
859 int nbtriangle2d=0;
860 for (int i=0;i<nbtriangle;i++) if (mg_maillage->get_mg_triangle(i)->get_lien_topologie()->get_dimension()==2) nbtriangle2d++;
861 fwrite(&nbnoeud,sizeof(int),1,inlog);
862 fwrite(&nbseg,sizeof(int),1,inlog);
863 fwrite(&nbtriangle2d,sizeof(int),1,inlog);
864 fwrite(&nbtriangle,sizeof(int),1,inlog);
865 for (int i=0;i<nbnoeud;i++)
866  {
867  MG_NOEUD* noeud=mg_maillage->get_mg_noeud(i);
868  unsigned long num=noeud->get_id();
869  fwrite(&num,sizeof(unsigned long),1,inlog);
870  double *xyz=noeud->get_coord();
871  fwrite(xyz,sizeof(double),3,inlog);
872  }
873 for (int i=0;i<nbsegment;i++)
874  {
876  if (seg->get_lien_topologie()->get_dimension()!=1) continue;
877  unsigned long num[3];
878  num[0]=seg->get_id();
879  num[1]=seg->get_noeud1()->get_id();
880  num[2]=seg->get_noeud2()->get_id();
881  fwrite(num,sizeof(unsigned long),3,inlog);
882  }
883 for (int i=0;i<nbtriangle;i++)
884  {
886  unsigned long num[4];
887  num[0]=tri->get_id();
888  num[1]=tri->get_noeud1()->get_id();
889  num[2]=tri->get_noeud2()->get_id();
890  num[3]=tri->get_noeud3()->get_id();
891  fwrite(num,sizeof(unsigned long),4,inlog);
892  }
893 
894 
895 fclose(inlog);
896 }
897 
898 
899 void MAILLEUR3D::genere_log(int fincouche)
900 {
901 for (int i=0;i<12;i++)
902  {
903  int nb_front;
904  if (i!=11) nb_front=get_nb_front(front_courant[i]);
905  else nb_front=get_nb_front(front_attente);
906  FRONT::iterator it;
907  FRONT& frontactif=front_courant[i];
908  if (i==11) frontactif=front_attente;
909  for (MG_FRONT_3D *ft=get_premier_front(frontactif,it);ft!=NULL;ft!=get_suivant_front(frontactif,it))
910  {
911  unsigned long num=ft->get_triangle()->get_id();
912  fwrite(&num,sizeof(unsigned long),1,inlog);
913  }
914 
915  }
916 unsigned long num=fincouche;
917 fwrite(&num,sizeof(unsigned long),1,inlog);
918 }
919 
921 {
922 int erreur=0;
923 int nbnoeud=mg_maillage->get_nb_mg_noeud();
924 
925 
926 /*ofstream o("c:\\home\\dessin\\step\\voidf_2D.mai",ios::out|ios::trunc);
927 o.precision(16);
928 o.setf(ios::showpoint);
929 o << nbnoeud << " " << nbfront << endl;*/
930 /*for (int i=0;i<nbnoeud;i++)
931  {
932  MG_NOEUD* noeud=mg_maillage->get_mg_noeud(i);
933  // o << i+1 << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << endl;
934  noeud->change_nouveau_numero(i+1);
935  }*/
936 for (int i=0;i<12;i++)
937  {
938  FRONT::iterator it;
939  FRONT& frontactif=front_courant[i];
940  if (i==11) frontactif=front_attente;
941  for (MG_FRONT_3D *ft=get_premier_front(frontactif,it);ft!=NULL;ft=get_suivant_front(frontactif,it))
942  {
943  MG_NOEUD* noeud1=ft->get_noeud1();
944  MG_NOEUD* noeud2=ft->get_noeud2();
945  MG_NOEUD* noeud3=ft->get_noeud3();
946  if (((M3D_TRIANGLE*)(ft->get_triangle()))->get_etat_front()!=MAGIC::MAILLEURFRONTALETAT::FRONT_ACTIF)
947  erreur=-100;
948  if (((M3D_TRIANGLE*)(ft->get_triangle()))->get_nb_voisin()>1)
949  erreur=-101;
950 
952  erreur=-10;
954  erreur=-11;
956  erreur=-12;
957  OT_VECTEUR_3D n1n2(noeud2->get_x()-noeud1->get_x(),noeud2->get_y()-noeud1->get_y(),noeud2->get_z()-noeud1->get_z());
958  OT_VECTEUR_3D n1n3(noeud3->get_x()-noeud1->get_x(),noeud3->get_y()-noeud1->get_y(),noeud3->get_z()-noeud1->get_z());
959  OT_VECTEUR_3D n=n1n2&n1n3;
960  n.norme();
961  M3D_TRIANGLE* tri=(M3D_TRIANGLE*)ft->get_triangle();
962  if (tri->get_nb_voisin()==1)
963  {
964  MG_TETRA* tet=tri->get_voisin(0);
965  MG_NOEUD* noeud4;
966  if (tet->get_noeud1()!=ft->get_noeud1())
967  if (tet->get_noeud1()!=ft->get_noeud2())
968  if (tet->get_noeud1()!=ft->get_noeud3())
969  noeud4=tet->get_noeud1();
970 
971  if (tet->get_noeud2()!=ft->get_noeud1())
972  if (tet->get_noeud2()!=ft->get_noeud2())
973  if (tet->get_noeud2()!=ft->get_noeud3())
974  noeud4=tet->get_noeud2();
975  if (tet->get_noeud3()!=ft->get_noeud1())
976  if (tet->get_noeud3()!=ft->get_noeud2())
977  if (tet->get_noeud3()!=ft->get_noeud3())
978  noeud4=tet->get_noeud3();
979 
980  if (tet->get_noeud4()!=ft->get_noeud1())
981  if (tet->get_noeud4()!=ft->get_noeud2())
982  if (tet->get_noeud4()!=ft->get_noeud3())
983  noeud4=tet->get_noeud4();
984  OT_VECTEUR_3D n1n4(noeud4->get_x()-noeud1->get_x(),noeud4->get_y()-noeud1->get_y(),noeud4->get_z()-noeud1->get_z());
985  n1n4.norme();
986  double ps=n1n4*n;
987  if (ps>0.0001)
988  erreur=tet->get_id();
989  }
990  MG_FRONT_3D* ft1=ft->get_front_voisin(0);
991  MG_FRONT_3D* ft2=ft->get_front_voisin(1);
992  MG_FRONT_3D* ft3=ft->get_front_voisin(2);
993  MG_FRONT_3D* ft11=ft1->get_front_voisin(0);
994  MG_FRONT_3D* ft12=ft1->get_front_voisin(1);
995  MG_FRONT_3D* ft13=ft1->get_front_voisin(2);
996  MG_FRONT_3D* ft21=ft2->get_front_voisin(0);
997  MG_FRONT_3D* ft22=ft2->get_front_voisin(1);
998  MG_FRONT_3D* ft23=ft2->get_front_voisin(2);
999  MG_FRONT_3D* ft31=ft3->get_front_voisin(0);
1000  MG_FRONT_3D* ft32=ft3->get_front_voisin(1);
1001  MG_FRONT_3D* ft33=ft3->get_front_voisin(2);
1002  if ((ft11!=ft) && (ft12!=ft) && (ft13!=ft) )
1003  erreur=-1;
1004  if ((ft21!=ft) && (ft22!=ft) && (ft23!=ft) )
1005  erreur=-2;
1006  if ((ft31!=ft) && (ft32!=ft) && (ft33!=ft) )
1007  erreur=-3;
1008  }
1009  }
1010 
1011 return erreur;
1012 }
MAILLEUR3D::traite_front_adjacent2
virtual int traite_front_adjacent2(class MG_VOLUME *mgvol, MG_FRONT_3D *ft, std::vector< CAS_FRONT * > &liste_cas, std::vector< CAS_FRONT * > &liste_classe_cas, CAS_FRONT **cas)
Definition: mailleur3d_front.cpp:344
MAILLEUR::savedbg
bool savedbg
Definition: mailleur.h:53
MG_GESTIONNAIRE::enregistrer
virtual void enregistrer(std::ostream &o, double version=MAGIC_VERSION_FICHIER_DOUBLE)
Definition: mg_gestionnaire.cpp:1070
TPL_MAP_ENTITE::get_premier
virtual X get_premier(ITERATEUR &it)
Definition: tpl_map_entite.h:112
MAILLEUR3D::traite_destruction
virtual int traite_destruction(MG_FRONT_3D *ft, TPL_MAP_ENTITE< class MG_TRIANGLE * > &liste_intersection)
Definition: mailleur3d_front.cpp:805
MAILLEUR3D::traite_front_adjacent3
virtual int traite_front_adjacent3(class MG_VOLUME *mgvol, MG_FRONT_3D *ft, std::vector< CAS_FRONT * > &liste_cas, std::vector< CAS_FRONT * > &liste_classe_cas, CAS_FRONT **cas)
Definition: mailleur3d_front.cpp:327
MG_SEGMENT
Definition: mg_segment.h:38
MAILLEUR3D::efface_cas_front
virtual void efface_cas_front(std::vector< CAS_FRONT * > &liste_cas, std::vector< CAS_FRONT * > liste_classe_cas[8])
Definition: mailleur3d_front.cpp:685
MAILLEUR3D::get_suivant_front
virtual MG_FRONT_3D * get_suivant_front(FRONT &front, FRONT::iterator &it)
Definition: mailleur3d.cpp:317
CAS_FRONT::mgnoeud
class MG_NOEUD * mgnoeud
Definition: mailleur3d_front.h:35
MAILLEUR3D::ajouter_front_courant
virtual MG_FRONT_3D * ajouter_front_courant(int numero_front, MG_NOEUD *noeud1, MG_NOEUD *noeud2, MG_NOEUD *noeud3, MG_TRIANGLE *triangle)
Definition: mailleur3d.cpp:267
M3D_NOEUD
Definition: m3d_noeud.h:32
MAILLEUR3D::premier_front_courant
virtual int premier_front_courant(void)
Definition: mailleur3d.cpp:434
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
MAGIC::MAILLEURFRONTALETAT::AUTRECAS
@ AUTRECAS
Definition: mg_definition.h:111
gestionversion.h
MAILLEUR3D::traite_front
virtual int traite_front(class MG_VOLUME *mgvol, int type, MG_FRONT_3D *ft, std::vector< class CAS_FRONT * > &liste_cas, std::vector< class CAS_FRONT * > &liste_classe_cas, class CAS_FRONT **cas)
Definition: mailleur3d_front.cpp:309
MAILLEUR3D::mise_a_jour_voisin_front
virtual void mise_a_jour_voisin_front(MG_FRONT_3D *ft)
Definition: mailleur3d_front.cpp:710
MG_FRONT_3D
Definition: CAD4FE_mg_front_3d.h:42
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
FAIL
const int FAIL
Definition: mg_definition.h:39
M3D_TRIANGLE::get_nb_voisin
virtual int get_nb_voisin(void)
Definition: m3d_triangle.cpp:137
OT_PARAMETRES::get_valeur
double get_valeur(std::string chaine, int num=0)
Definition: ot_parametres.cpp:191
MAILLEUR3D::get_premier_front
virtual MG_FRONT_3D * get_premier_front(FRONT &front)
Definition: mailleur3d.cpp:303
mg_gestionnaire.h
MAGIC::MAILLEURFRONTALETAT::TRAITE
@ TRAITE
Definition: mg_definition.h:111
MG_SEGMENT::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_segment.cpp:113
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MG_NOEUD::get_lien_triangle
TPL_LISTE_ENTITE< class MG_TRIANGLE * > * get_lien_triangle(void)
Definition: mg_noeud.cpp:153
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
CAS_FRONT
Definition: mailleur3d_front.h:29
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
MG_MAILLAGE::get_nb_mg_triangle
unsigned int get_nb_mg_triangle(void)
Definition: mg_maillage.cpp:814
MAGIC::MAILLEURFRONTALETAT::NONFORCE
@ NONFORCE
Definition: mg_definition.h:114
MAILLEUR3D::echange_de_front
virtual void echange_de_front(FRONT &front_original, FRONT &front_destination, MG_FRONT_3D *ft)
Definition: mailleur3d.cpp:385
MAILLEUR::refresh
void refresh(void)
Definition: mailleur.cpp:49
MAGIC::MAILLEURFRONTALETAT::ACTIF
@ ACTIF
Definition: mg_definition.h:109
MAILLEUR3D::front_attente
FRONT front_attente
Definition: mailleur3d.h:174
MAILLEUR3D::detruit_tetra
virtual void detruit_tetra(MG_TRIANGLE *tri)
Definition: mailleur3d_outil.cpp:572
MG_FRONT_3D::ini_ifail
void ini_ifail(void)
Definition: mg_front_3D.cpp:113
MAGIC::MAILLEURFRONTALETAT::LIE
@ LIE
Definition: mg_definition.h:111
M3D_TRIANGLE
Definition: m3d_triangle.h:31
m3d_triangle.h
MAGIC::MAILLEURFRONTALETAT::LIE3
@ LIE3
Definition: mg_definition.h:111
M3D_TRIANGLE::get_mgfront
virtual class MG_FRONT_3D * get_mgfront(void)
Definition: m3d_triangle.cpp:78
MAGIC::MAILLEURFRONTALETAT::ADJACENT3
@ ADJACENT3
Definition: mg_definition.h:111
MAGIC::MAILLEURFRONTALETAT::PASTROUVE
@ PASTROUVE
Definition: mg_definition.h:106
MAILLEUR3D::insere_cas_front
virtual void insere_cas_front(int type, MG_NOEUD *noeud, int numero_cote, double angle, std::vector< CAS_FRONT * > &liste_cas)
Definition: mailleur3d_front.cpp:655
MAILLEUR3D::traite_front_general
virtual int traite_front_general(class MG_VOLUME *mgvol, MG_FRONT_3D *ft, std::vector< CAS_FRONT * > &liste_cas, std::vector< CAS_FRONT * > &liste_classe_cas, CAS_FRONT **cas)
Definition: mailleur3d_front.cpp:515
M3D_TRIANGLE::get_frontiere
virtual int get_frontiere(void)
Definition: m3d_triangle.cpp:160
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
MAGIC_AFFICHE::affiche
virtual void affiche(char *mess)
Definition: magic_affiche.cpp:43
MAILLEUR3D::mg_maillage
MG_MAILLAGE * mg_maillage
Definition: mailleur3d.h:167
OK
const int OK
Definition: mg_definition.h:38
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_VOLUME
Definition: mg_volume.h:33
CAS_FRONT::CAS_FRONT
CAS_FRONT(int type_cas, MG_NOEUD *noeud, int numero_cote)
Definition: mailleur3d_front.cpp:42
MAGIC::MAILLEURFRONTALETAT::PASTRAITE
@ PASTRAITE
Definition: mg_definition.h:111
MG_TETRA
Definition: mg_tetra.h:37
CAS_FRONT::~CAS_FRONT
~CAS_FRONT()
Definition: mailleur3d_front.cpp:56
MAILLEUR3D::supprimer_front_en_avancant
virtual void supprimer_front_en_avancant(MG_FRONT_3D *ft)
Definition: mailleur3d.cpp:336
MAILLEUR3D::FRONT
std::multimap< double, MG_FRONT_3D *, std::less< double > > FRONT
Definition: mailleur3d.h:76
MG_FRONT_3D::get_noeud3
MG_NOEUD * get_noeud3(void)
Definition: mg_front_3D.cpp:68
M3D_NOEUD::get_etat
virtual int get_etat(void)
Definition: m3d_noeud.cpp:74
MAILLEUR3D::genere_log
virtual void genere_log(int fincouche)
Definition: mailleur3d_front.cpp:899
MAGIC::MAILLEURFRONTALETAT::TROUVE
@ TROUVE
Definition: mg_definition.h:106
MG_FRONT_3D::get_noeud2
MG_NOEUD * get_noeud2(void)
Definition: mg_front_3D.cpp:63
MAILLEUR3D::front_courant
FRONT front_courant[12]
Definition: mailleur3d.h:173
MAGIC::TYPE_ENTITE::IDMG_NOEUD
@ IDMG_NOEUD
Definition: mg_definition.h:69
MG_MAILLAGE::get_mg_noeud
MG_NOEUD * get_mg_noeud(unsigned int num)
Definition: mg_maillage.cpp:463
MAILLEUR3D::traite_front_lie
virtual int traite_front_lie(class MG_VOLUME *mgvol, MG_FRONT_3D *ft, std::vector< CAS_FRONT * > &liste_cas, std::vector< CAS_FRONT * > &liste_classe_cas, CAS_FRONT **cas)
Definition: mailleur3d_front.cpp:461
MG_NOEUD::get_type_entite
virtual int get_type_entite()
Definition: mg_noeud.cpp:72
MAGIC::MAILLEURFRONTALETAT::LIE1
@ LIE1
Definition: mg_definition.h:111
MAILLEUR3D::genere_noeud
virtual int genere_noeud(MG_VOLUME *mgvol, MG_FRONT_3D *ft, TPL_MAP_ENTITE< MG_NOEUD * > &liste_noeud, std::vector< class CAS_FRONT * > &liste_cas)
Definition: mailleur3d_outil.cpp:414
MAILLEUR3D::passe
int passe
Definition: mailleur3d.h:188
CAS_FRONT::traite
int traite
Definition: mailleur3d_front.h:40
MAGIC::MAILLEURFRONTALETAT::AUTRECASATRAITER
@ AUTRECASATRAITER
Definition: mg_definition.h:111
MAILLEUR3D::mise_a_jour_front
virtual class MG_FRONT_3D * mise_a_jour_front(MG_TETRA *tet, int cote, int numfront=MAGIC::MAILLEURFRONTALETAT::ATTENTE)
Definition: mailleur3d_front.cpp:697
MAILLEUR3D::get_nb_front
virtual unsigned int get_nb_front(FRONT &front)
Definition: mailleur3d.cpp:325
MG_SEGMENT::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_segment.cpp:108
MAILLEUR3D::get_nb_front_courant
virtual unsigned int get_nb_front_courant(void)
Definition: mailleur3d.cpp:330
MG_NOEUD::get_lien_segment
TPL_LISTE_ENTITE< class MG_SEGMENT * > * get_lien_segment(void)
Definition: mg_noeud.cpp:141
M3D_TRIANGLE::get_etat_front
virtual int get_etat_front(void)
Definition: m3d_triangle.cpp:67
MAILLEUR3D::progresse_front
virtual int progresse_front(MG_VOLUME *mgvol)
Definition: mailleur3d_front.cpp:62
MAGIC::MAILLEURFRONTALETAT::GENERAL
@ GENERAL
Definition: mg_definition.h:111
MAILLEUR3D::traite_front_adjacent1
virtual int traite_front_adjacent1(class MG_VOLUME *mgvol, MG_FRONT_3D *ft, std::vector< CAS_FRONT * > &liste_cas, std::vector< CAS_FRONT * > &liste_classe_cas, CAS_FRONT **cas)
Definition: mailleur3d_front.cpp:387
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MG_NOEUD
Definition: mg_noeud.h:41
MAGIC::MAILLEURFRONTALETAT::ADJACENT2
@ ADJACENT2
Definition: mg_definition.h:111
MAILLEUR3D::test_front
virtual int test_front(void)
Definition: mailleur3d_front.cpp:920
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
CAS_FRONT::type
int type
Definition: mailleur3d_front.h:36
TPL_MAP_ENTITE::ITERATEUR
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
Definition: tpl_map_entite.h:38
MG_FRONT_3D::changer_front_voisin
void changer_front_voisin(MG_FRONT_3D *front, int num)
Definition: mg_front_3D.cpp:83
MG_TETRA::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_tetra.cpp:163
MAILLEUR3D::angle_front
virtual double angle_front(MG_FRONT_3D *ft1, MG_FRONT_3D *ft2)
Definition: mailleur3d_outil.cpp:47
MAILLEUR3D::detruit_element_inactif
virtual void detruit_element_inactif(void)
Definition: mailleur3d_outil.cpp:731
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
MAILLEUR3D::nomlog
std::string nomlog
Definition: mailleur3d.h:177
MG_MAILLAGE::get_nb_mg_segment
unsigned int get_nb_mg_segment(void)
Definition: mg_maillage.cpp:646
MG_TRIANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_triangle.cpp:131
MG_FRONT_3D::get_numero_front
int get_numero_front(void)
Definition: mg_front_3D.cpp:135
MAILLEUR3D::inlog
FILE * inlog
Definition: mailleur3d.h:183
MG_FRONT_3D::changer_angle_voisin
void changer_angle_voisin(double angle, int num)
Definition: mg_front_3D.cpp:93
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
MG_TETRA::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_tetra.cpp:168
ot_mathematique.h
CAS_FRONT::angle
double angle[3]
Definition: mailleur3d_front.h:39
m3d_noeud.h
MG_FRONT_3D::get_front_voisin
MG_FRONT_3D * get_front_voisin(int num)
Definition: mg_front_3D.cpp:78
OPERATEUR::qualite_tetra
static double qualite_tetra(double *noeud1, double *noeud2, double *noeud3, double *noeud4)
Definition: ot_mathematique.cpp:1673
M3D_NOEUD::etat_actif
virtual void etat_actif(void)
Definition: m3d_noeud.cpp:69
CAS_FRONT::degre
int degre
Definition: mailleur3d_front.h:37
MAGIC::MAILLEURFRONTALETAT::FRONT_ACTIF
@ FRONT_ACTIF
Definition: mg_definition.h:109
MG_FRONT_3D::incremente_ifail
void incremente_ifail(void)
Definition: mg_front_3D.cpp:108
MAGIC::MAILLEURFRONTALETAT::ADJACENT
@ ADJACENT
Definition: mg_definition.h:111
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
MG_MAILLAGE::get_mg_segment
MG_SEGMENT * get_mg_segment(unsigned int num)
Definition: mg_maillage.cpp:619
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
m3d_tetra.h
MAGIC::MAILLEURFRONTALETAT::LIE2
@ LIE2
Definition: mg_definition.h:111
MG_FRONT_3D::get_triangle
MG_TRIANGLE * get_triangle(void)
Definition: mg_front_3D.cpp:73
M3D_TRIANGLE::get_voisin
virtual class MG_TETRA * get_voisin(int num)
Definition: m3d_triangle.cpp:130
MG_TRIANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_triangle.cpp:126
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
MG_MAILLAGE::get_mg_triangle
MG_TRIANGLE * get_mg_triangle(unsigned int num)
Definition: mg_maillage.cpp:784
MG_MAILLAGE::get_gestionnaire
MG_GESTIONNAIRE * get_gestionnaire(void)
Definition: mg_maillage.cpp:2658
MAGIC::MAILLEURFRONTALETAT::NOEUD_EXISTANT
@ NOEUD_EXISTANT
Definition: mg_definition.h:114
MAGIC::MAILLEURFRONTALETAT::LIMITEDETRUIRE
@ LIMITEDETRUIRE
Definition: mg_definition.h:114
MG_MAILLAGE::supprimer_mg_noeudid
int supprimer_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:482
MAGIC_AFFICHE::affichageactif
int affichageactif
Definition: magic_affiche.h:42
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
TPL_MAP_ENTITE::get
virtual X get(int num)
Definition: tpl_map_entite.h:89
MG_TRIANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_triangle.cpp:137
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
MAGIC::MAILLEURFRONTALETAT::MULTIEXISTE
@ MULTIEXISTE
Definition: mg_definition.h:114
MG_MAILLAGE::get_nb_mg_noeud
unsigned int get_nb_mg_noeud(void)
Definition: mg_maillage.cpp:476
MAGIC::MAILLEURFRONTALETAT::ADJACENT1
@ ADJACENT1
Definition: mg_definition.h:111
MAILLEUR3D::ini_log
virtual void ini_log(void)
Definition: mailleur3d_front.cpp:838
MG_MAILLAGE::get_nb_mg_tetra
unsigned int get_nb_mg_tetra(void)
Definition: mg_maillage.cpp:1262
MG_TETRA::get_triangle4
virtual MG_TRIANGLE * get_triangle4(void)
Definition: mg_tetra.cpp:178
MG_ELEMENT_MAILLAGE::get_origine
virtual int get_origine(void)
Definition: mg_element_maillage.cpp:91
TPL_MAP_ENTITE::get_suivant
virtual X get_suivant(ITERATEUR &it)
Definition: tpl_map_entite.h:120
MG_FRONT_3D::get_angle_voisin
double get_angle_voisin(int num)
Definition: mg_front_3D.cpp:88
mailleur3d_front.h
CAS_FRONT::liaison
int liaison[3]
Definition: mailleur3d_front.h:38
MAILLEUR::nomfichierdbg
char nomfichierdbg[500]
Definition: mailleur.h:54
MAILLEUR3D::activelog
int activelog
Definition: mailleur3d.h:176
MAGIC::ORIGINE::MAILLEUR_AUTO
@ MAILLEUR_AUTO
Definition: mg_definition.h:79
MAGIC::MAILLEURFRONTALETAT::DESTRUCTION
@ DESTRUCTION
Definition: mg_definition.h:111
TPL_MAP_ENTITE::vide
virtual void vide(void)
Definition: tpl_map_entite.h:106
MAILLEUR3D::typedestruction
int typedestruction
Definition: mailleur3d.h:182
MAGIC::MAILLEURFRONTALETAT::CREATION
@ CREATION
Definition: mg_definition.h:114
MAGIC::MAILLEURFRONTALETAT::EXISTE
@ EXISTE
Definition: mg_definition.h:114
MG_TETRA::get_triangle3
virtual MG_TRIANGLE * get_triangle3(void)
Definition: mg_tetra.cpp:173
MAGIC::TYPE_ENTITE::IDM3D_NOEUD
@ IDM3D_NOEUD
Definition: mg_definition.h:69
MAILLEUR::param
OT_PARAMETRES param
Definition: mailleur.h:57
MG_FRONT_3D::get_noeud1
MG_NOEUD * get_noeud1(void)
Definition: mg_front_3D.cpp:58
MAILLEUR3D::insere_tetra
virtual class MG_TETRA * insere_tetra(class MG_ELEMENT_TOPOLOGIQUE *mgvol, class MG_FRONT_3D *ft, MG_NOEUD *noeud4, int type, TPL_MAP_ENTITE< class MG_TRIANGLE * > &liste_intersection)
Definition: mailleur3d_outil.cpp:147
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82
MG_MAILLAGE::ajouter_mg_noeud
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:421
MAILLEUR3D::fin_log
virtual void fin_log(void)
Definition: mailleur3d_front.cpp:848