MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_face_nurbs.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 //####// rec_face_nurbs.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "gestionversion.h"
23 
24 #pragma hdrstop
25 
26 #include "occ_fonction.h"
27 #include "rec_face_nurbs.h"
28 #include "tpl_map_entite.h"
29 #include "rec_contour.h"
30 #include "constantegeo.h"
31 #include "fem_segment2.h"
32 #include "fem_triangle3.h"
33 #include "fem_maillage.h"
34 
35 
36 #pragma package(smart_init)
37 
38 
39 
40 
41 REC_FACE_NURBS::REC_FACE_NURBS(FEM_MAILLAGE* fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION& fonc, int test, int* faces):REC_FACE(fem_mai, Idealise, fonc, test, faces)
42 {
43 }
44 
46 {
47 }
48 
49 void REC_FACE_NURBS::Reconstruire(MG_FACE* face, double coef)
50 {
51 
52 MG_SURFACE* surface = face->get_surface();
53 TPL_LISTE_ENTITE <double> Parametres;
54 int type_surface = surface->get_type_geometrique(Parametres);
55 
56 
57 
58 if (Idealiser == 0)// Idealiser = 0;
59 {
60 
61 
62 
63 MG_BOUCLE* Boucleface = face->get_mg_boucle(0);
64 int nbareteface = Boucleface->get_nb_mg_coarete();
65 int tto = 0;
66 
67 if((face->get_nb_mg_boucle()==1)&& (nbareteface == 3 || nbareteface == 4))
68  {
69 
70  for (int j =0; j<nbareteface;j++)
71  {
72  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds;
73  MG_COARETE* coArete = Boucleface->get_mg_coarete(j);
74  MG_ARETE* Arete = coArete->get_arete();
75 
76  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
77  for (int i =0; i<nb_element1;i++)
78  {
79  FEM_ELEMENT1* mgsegment=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
80  if (!fem_maillage->contient(mgsegment)) continue;
81  if(i==0)
82  {
83  FEM_NOEUD* noeud0 = mgsegment->get_fem_noeud(0);
84  liste_noeuds.ajouter(noeud0);
85  }
86  if (mgsegment->get_nb_fem_noeud()==2)
87  {
88  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
89  liste_noeuds.ajouter(noeud1);
90  }
91  if (mgsegment->get_nb_fem_noeud()==3)
92  {
93  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
94  liste_noeuds.ajouter(noeud1);
95  FEM_NOEUD* noeud2 = mgsegment->get_fem_noeud(2);
96  liste_noeuds.ajouter(noeud2);
97  }
98  }
99  if(liste_noeuds.get_nb()<= 5)tto =1;
100  }
101  //tto = 1;
102  }
103 
104 
105 if(tto == 1)
106  {
107  MG_BOUCLE* Boucle = face->get_mg_boucle(0);
108  int nbarete = Boucle->get_nb_mg_coarete();
109  for (int w =0; w<nbarete;w++)
110  {
111  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
112 
113 
114  MG_ARETE* Arete = coArete->get_arete();
115 
116  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
117  int nb=0;
118 
119  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
120 
121  for (int i =0; i<nb_element1;i++)
122  {
123  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
124  if (!fem_maillage->contient(fem_element1)) continue;
125  liste_element1s_arete.ajouter(fem_element1);
126  }
127 
128  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
129  MG_SOMMET* sommet1 = cosommet1->get_sommet();
130  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
131  FEM_NOEUD* fem_noeud0;
132  for (int i =0; i<nb_noeud;i++)
133  {
134  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
135  if (!fem_maillage->contient(noeud)) continue;
136  fem_noeud0 = noeud;
137  }
138 
139 
140  int nb_seg = liste_element1s_arete.get_nb();
141 
142  for (int i =0; i<nb_seg;i++)
143  {
144  if(i==0)
145  {
146  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
147  nb++;
148  }
149 
150  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
151 
152  for (int j =0; j<liste_element1s_arete.get_nb();j++)
153  {
154  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
155 
156  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
157  {
158  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
159  if (fem_element1_arete==fem_element1_noeud)
160  {
161  liste_element1s_arete.supprimer(fem_element1_arete);
162  if (fem_element1_arete->get_nb_fem_noeud()==2)
163  {
164  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
165  if(noeud0!=fem_noeud0)
166  {
167  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
168  nb++;
169  fem_noeud0 = noeud0;
170  }
171  else
172  {
173  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
174  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
175  nb++;
176  fem_noeud0 = noeud1;
177  }
178  }
179  if (fem_element1_arete->get_nb_fem_noeud()==3)
180  {
181  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
182  if(noeud0!=fem_noeud0)
183  {
184  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
185  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
186  nb++;
187  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
188  nb++;
189  fem_noeud0 = noeud0;
190  }
191  else
192  {
193  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
194  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
195  nb++;
196  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
197  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
198  nb++;
199  fem_noeud0 = noeud2;
200  }
201  }
202  }
203  }
204  }
205 
206  }
207  fonction.Ajouter_courbe_liste(nb_seg+1,w+1);
208  }
209 
210  if(nbarete==4)
211  {
213  }
214  if(nbarete==3)
215  {
217  }
218 
220 
221 
222  }
223 
224 
225 
226 if(tto == 0)
227  {
228 
229 if(type_surface == GEOMETRIE::CONST::Co_PLAN )
230  {
232 
233  int nb_element2 = face->get_lien_fem_maillage()->get_nb();
234  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeudsf;
235 
236  for (int j =0; j<nb_element2;j++)
237  {
238  FEM_ELEMENT2* mgtri=(FEM_ELEMENT2*)face->get_lien_fem_maillage()->get(j);
239  if (!fem_maillage->contient(mgtri)) continue;
240  if (mgtri->get_nb_fem_noeud()==3)
241  {
242  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
243  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
244  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
245  liste_noeudsf.ajouter(noeud0);
246  liste_noeudsf.ajouter(noeud1);
247  liste_noeudsf.ajouter(noeud2);
248  }
249  if (mgtri->get_nb_fem_noeud()==6)
250  {
251  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
252  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
253  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
254  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
255  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
256  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
257  liste_noeudsf.ajouter(noeud0);
258  liste_noeudsf.ajouter(noeud1);
259  liste_noeudsf.ajouter(noeud2);
260  liste_noeudsf.ajouter(noeud3);
261  liste_noeudsf.ajouter(noeud4);
262  liste_noeudsf.ajouter(noeud5);
263  }
264  }
265 
266 
267  for (int k =0; k < liste_noeudsf.get_nb();k++)
268  {
269  FEM_NOEUD* noeud=liste_noeudsf.get(k);
270  fonction.Rapprocher_Surface_Point(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
271 
272  }
273 
274 
277  //fonction.Creer_Face_Surface();
278 
279  for (int v =0; v<face->get_nb_mg_boucle();v++)
280  {
281  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
283  Rec.Reconstruire(Boucle, coef);
284 
286  }
287 
288  }
289 
290 else
291 {
292 
293 if((type_surface == GEOMETRIE::CONST::Co_CYLINDRE || type_surface == GEOMETRIE::CONST::Co_CONE))
294  {
295 
297 
298  int nb_element2 = face->get_lien_fem_maillage()->get_nb();
299  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds;
300 
301  for (int j =0; j<nb_element2;j++)
302  {
303  FEM_ELEMENT2* mgtri=(FEM_ELEMENT2*)face->get_lien_fem_maillage()->get(j);
304  if (!fem_maillage->contient(mgtri)) continue;
305  if (mgtri->get_nb_fem_noeud()==3)
306  {
307  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
308  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
309  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
310  liste_noeuds.ajouter(noeud0);
311  liste_noeuds.ajouter(noeud1);
312  liste_noeuds.ajouter(noeud2);
313  }
314  if (mgtri->get_nb_fem_noeud()==6)
315  {
316  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
317  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
318  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
319  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
320  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
321  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
322  liste_noeuds.ajouter(noeud0);
323  liste_noeuds.ajouter(noeud1);
324  liste_noeuds.ajouter(noeud2);
325  liste_noeuds.ajouter(noeud3);
326  liste_noeuds.ajouter(noeud4);
327  liste_noeuds.ajouter(noeud5);
328  }
329  }
330 
331  int nb_boucle = face->get_nb_mg_boucle();
332 
333  for (int v =0; v<face->get_nb_mg_boucle();v++)
334  {
335  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
336  int nbarete = Boucle->get_nb_mg_coarete();
337  for (int w =0; w<nbarete;w++)
338  {
339  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
340  MG_ARETE* Arete = coArete->get_arete();
341 
342  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
343  int nb=0;
344 
345  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
346 
347  for (int i =0; i<nb_element1;i++)
348  {
349  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
350  if (!fem_maillage->contient(fem_element1)) continue;
351  liste_element1s_arete.ajouter(fem_element1);
352  }
353 
354  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
355  MG_SOMMET* sommet1 = cosommet1->get_sommet();
356  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
357  FEM_NOEUD* fem_noeud0;
358  for (int i =0; i<nb_noeud;i++)
359  {
360  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
361  if (!fem_maillage->contient(noeud)) continue;
362  fem_noeud0 = noeud;
363  }
364 
365  int nb_seg = liste_element1s_arete.get_nb();
366 
367 
368  for (int i =0; i<nb_seg;i++)
369  {
370  if(i==0)
371  {
372 
373  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
374  nb++;
375  liste_noeuds.supprimer(fem_noeud0);
376  }
377 
378  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
379 
380  for (int j =0; j<liste_element1s_arete.get_nb();j++)
381  {
382  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
383 
384  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
385  {
386  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
387  if (fem_element1_arete==fem_element1_noeud)
388  {
389  liste_element1s_arete.supprimer(fem_element1_arete);
390  if (fem_element1_arete->get_nb_fem_noeud()==2)
391  {
392  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
393  if(noeud0!=fem_noeud0)
394  {
395 
396  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
397 
398  nb++;
399  liste_noeuds.supprimer(noeud0);
400  fem_noeud0 = noeud0;
401  }
402  else
403  {
404  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
405  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
406 
407  nb++;
408  liste_noeuds.supprimer(noeud1);
409  fem_noeud0 = noeud1;
410  }
411  }
412  if (fem_element1_arete->get_nb_fem_noeud()==3)
413  {
414  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
415  if(noeud0!=fem_noeud0)
416  {
417  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
418 
419 
420  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
421  nb++;
422  liste_noeuds.supprimer(noeud1);
423 
424 
425  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
426  nb++;
427  liste_noeuds.supprimer(noeud0);
428  fem_noeud0 = noeud0;
429 
430 
431 
432 
433  }
434  else
435  {
436  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
437 
438 
439  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
440  nb++;
441  liste_noeuds.supprimer(noeud1);
442 
443  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
444 
445 
446  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
447  nb++;
448  liste_noeuds.supprimer(noeud2);
449  fem_noeud0 = noeud2;
450 
451  }
452  }
453  }
454  }
455  }
456  }
457 
458 
460 
461  }
462  }
463 
464 
465 
467 
468 
469 
470  for (int k =0; k < liste_noeuds.get_nb();k++)
471  {
472  FEM_NOEUD* noeud=liste_noeuds.get(k);
473  fonction.Rapprocher_Surface_Point(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
474  }
475 
478  //fonction.Creer_Face_Surface();
479 
480 
481  for (int v =0; v<face->get_nb_mg_boucle();v++)
482  {
483  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
485  Rec.Reconstruire(Boucle, coef);
486 
488  }
489 
490 
491  }
492 
493 else
494 {
495 
496 if((type_surface == GEOMETRIE::CONST::Co_TORE || type_surface == GEOMETRIE::CONST::Co_SPHERE ) &&(face->get_nb_mg_boucle() == 1) &&(nbareteface ==3 ||nbareteface ==4))
497  {
498  MG_BOUCLE* Boucle = face->get_mg_boucle(0);
499  int nbarete = Boucle->get_nb_mg_coarete();
500  for (int w =0; w<nbarete;w++)
501  {
502  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
503  MG_ARETE* Arete = coArete->get_arete();
504 
505  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
506  int nb=0;
507 
508  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
509 
510  for (int i =0; i<nb_element1;i++)
511  {
512  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
513  if (!fem_maillage->contient(fem_element1)) continue;
514  liste_element1s_arete.ajouter(fem_element1);
515  }
516 
517  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
518  MG_SOMMET* sommet1 = cosommet1->get_sommet();
519  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
520  FEM_NOEUD* fem_noeud0;
521  for (int i =0; i<nb_noeud;i++)
522  {
523  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
524  if (!fem_maillage->contient(noeud)) continue;
525  fem_noeud0 = noeud;
526  }
527 
528  for (int i =0; i<nb_element1;i++)
529  {
530  if(i==0)
531  {
532  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
533  nb++;
534  }
535 
536  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
537 
538  for (int j =0; j<liste_element1s_arete.get_nb();j++)
539  {
540  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
541 
542  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
543  {
544  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
545  if (fem_element1_arete==fem_element1_noeud)
546  {
547  liste_element1s_arete.supprimer(fem_element1_arete);
548  if (fem_element1_arete->get_nb_fem_noeud()==2)
549  {
550  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
551  if(noeud0!=fem_noeud0)
552  {
553  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
554  nb++;
555  fem_noeud0 = noeud0;
556  }
557  else
558  {
559  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
560  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
561  nb++;
562  fem_noeud0 = noeud1;
563  }
564  }
565  if (fem_element1_arete->get_nb_fem_noeud()==3)
566  {
567  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
568  if(noeud0!=fem_noeud0)
569  {
570  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
571  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
572  nb++;
573  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
574  nb++;
575  fem_noeud0 = noeud0;
576  }
577  else
578  {
579  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
580  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
581  nb++;
582  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
583  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
584  nb++;
585  fem_noeud0 = noeud2;
586  }
587  }
588  }
589  }
590  }
591  }
592  fonction.Ajouter_courbe_liste(nb_element1+1,w+1);
593  //fonction.Rapprocher_Surface_Courbe_Spline(nb_element1+1);
594  }
595  if(nbarete==4)
596  {
598  }
599  if(nbarete==3)
600  {
602  }
603 
604 
606  }
607 
608 
609 
610 else
611  {
612 
614 
615  int nb_element2 = face->get_lien_fem_maillage()->get_nb();
616  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds;
617 
618  for (int j =0; j<nb_element2;j++)
619  {
620  FEM_ELEMENT2* mgtri=(FEM_ELEMENT2*)face->get_lien_fem_maillage()->get(j);
621  if (!fem_maillage->contient(mgtri)) continue;
622  if (mgtri->get_nb_fem_noeud()==3)
623  {
624  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
625  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
626  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
627  liste_noeuds.ajouter(noeud0);
628  liste_noeuds.ajouter(noeud1);
629  liste_noeuds.ajouter(noeud2);
630  }
631  if (mgtri->get_nb_fem_noeud()==6)
632  {
633  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
634  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
635  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
636  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
637  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
638  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
639  liste_noeuds.ajouter(noeud0);
640  liste_noeuds.ajouter(noeud1);
641  liste_noeuds.ajouter(noeud2);
642  liste_noeuds.ajouter(noeud3);
643  liste_noeuds.ajouter(noeud4);
644  liste_noeuds.ajouter(noeud5);
645  }
646  }
647 
648  for (int v =0; v<face->get_nb_mg_boucle();v++)
649  {
650  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
651  int nbarete = Boucle->get_nb_mg_coarete();
652  for (int w =0; w<nbarete;w++)
653  {
654  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
655  MG_ARETE* Arete = coArete->get_arete();
656 
657  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
658  int nb=0;
659 
660  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
661 
662  for (int i =0; i<nb_element1;i++)
663  {
664  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
665  if (!fem_maillage->contient(fem_element1)) continue;
666  liste_element1s_arete.ajouter(fem_element1);
667  }
668 
669  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
670  MG_SOMMET* sommet1 = cosommet1->get_sommet();
671  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
672  FEM_NOEUD* fem_noeud0;
673  for (int i =0; i<nb_noeud;i++)
674  {
675  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
676  if (!fem_maillage->contient(noeud)) continue;
677  fem_noeud0 = noeud;
678  }
679 
680  int nb_seg = liste_element1s_arete.get_nb();
681 
682  for (int i =0; i<nb_seg;i++)
683  {
684  if(i==0)
685  {
686  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
687  nb++;
688  liste_noeuds.supprimer(fem_noeud0);
689  }
690 
691  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
692 
693  for (int j =0; j<liste_element1s_arete.get_nb();j++)
694  {
695  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
696 
697  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
698  {
699  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
700  if (fem_element1_arete==fem_element1_noeud)
701  {
702  liste_element1s_arete.supprimer(fem_element1_arete);
703  if (fem_element1_arete->get_nb_fem_noeud()==2)
704  {
705  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
706  if(noeud0!=fem_noeud0)
707  {
708  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
709  nb++;
710  liste_noeuds.supprimer(noeud0);
711  fem_noeud0 = noeud0;
712  }
713  else
714  {
715  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
716  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
717  nb++;
718  liste_noeuds.supprimer(noeud1);
719  fem_noeud0 = noeud1;
720  }
721  }
722  if (fem_element1_arete->get_nb_fem_noeud()==3)
723  {
724  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
725  if(noeud0!=fem_noeud0)
726  {
727  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
728  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
729  nb++;
730  liste_noeuds.supprimer(noeud1);
731  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
732  nb++;
733  liste_noeuds.supprimer(noeud0);
734  fem_noeud0 = noeud0;
735  }
736  else
737  {
738  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
739  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
740  nb++;
741  liste_noeuds.supprimer(noeud1);
742  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
743  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
744  nb++;
745  liste_noeuds.supprimer(noeud2);
746  fem_noeud0 = noeud2;
747  }
748  }
749  }
750  }
751  }
752  }
754  }
755  }
757 
758 
759  for (int k =0; k < liste_noeuds.get_nb();k++)
760  {
761  FEM_NOEUD* noeud=liste_noeuds.get(k);
762  fonction.Rapprocher_Surface_Point(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
763  }
766 
767 
768  for (int v =0; v<face->get_nb_mg_boucle();v++)
769  {
770  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
772  Rec.Reconstruire(Boucle, coef);
773 
775  }
776  }// fin else
777 
778 }
779 
780 }
781 
782 }// If tto
783 
784 
785 }// Fin If Idealiser == 0
786 
787 
788 
789 
790 else
791 {
792 
793 
794 MG_BOUCLE* Boucleface = face->get_mg_boucle(0);
795 int nbareteface = Boucleface->get_nb_mg_coarete();
796 int tto = 0;
797 
798 if((face->get_nb_mg_boucle()==1)&& (nbareteface == 3 || nbareteface == 4))
799  {
800 
801  for (int j =0; j<nbareteface;j++)
802  {
803  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds;
804  MG_COARETE* coArete = Boucleface->get_mg_coarete(j);
805  MG_ARETE* Arete = coArete->get_arete();
806 
807  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
808  for (int i =0; i<nb_element1;i++)
809  {
810  FEM_ELEMENT1* mgsegment=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
811  if (!fem_maillage->contient(mgsegment)) continue;
812  if(i==0)
813  {
814  FEM_NOEUD* noeud0 = mgsegment->get_fem_noeud(0);
815  liste_noeuds.ajouter(noeud0);
816  }
817  if (mgsegment->get_nb_fem_noeud()==2)
818  {
819  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
820  liste_noeuds.ajouter(noeud1);
821  }
822  if (mgsegment->get_nb_fem_noeud()==3)
823  {
824  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
825  liste_noeuds.ajouter(noeud1);
826  FEM_NOEUD* noeud2 = mgsegment->get_fem_noeud(2);
827  liste_noeuds.ajouter(noeud2);
828  }
829  }
830  if(liste_noeuds.get_nb()<= 5)tto =1;
831  }
832  }
833 
834 
835 if(tto == 1)
836  {
837  MG_BOUCLE* Boucle = face->get_mg_boucle(0);
838  int nbarete = Boucle->get_nb_mg_coarete();
839  for (int w =0; w<nbarete;w++)
840  {
841  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
842  MG_ARETE* Arete = coArete->get_arete();
843 
844  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
845  int nb=0;
846 
847  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
848 
849  for (int i =0; i<nb_element1;i++)
850  {
851  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
852  if (!fem_maillage->contient(fem_element1)) continue;
853  liste_element1s_arete.ajouter(fem_element1);
854  }
855 
856  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
857  MG_SOMMET* sommet1 = cosommet1->get_sommet();
858  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
859  FEM_NOEUD* fem_noeud0;
860  for (int i =0; i<nb_noeud;i++)
861  {
862  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
863  if (!fem_maillage->contient(noeud)) continue;
864  fem_noeud0 = noeud;
865  }
866 
867  int nb_seg = liste_element1s_arete.get_nb();
868 
869  //** Chercher Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
870  int nb_coarete = Arete->get_nb_mg_coarete();
871 
872  int num_faceid = 0;
873  int arete_a_projeter = 0;
874 
875  for(int co =0; co<nb_coarete;co++)
876  {
877  MG_COARETE* coArete1 = Arete->get_mg_coarete(co);
878  if(coArete1 != coArete)
879  {
880  MG_BOUCLE* Boucle1 = coArete1->get_boucle();
881  MG_FACE* Face1 = Boucle1->get_mg_face();
883  int nb_face = mggeom->get_nb_mg_face();
884  for (int f =0; f<nb_face;f++)
885  {
886  MG_FACE* F = mggeom->get_mg_face(f);
887  if(faceso[f] == 1) num_faceid = num_faceid + 1;
888  if(F == Face1 && faceso[f] == 1)
889  {
890  arete_a_projeter = 1;
891  break;
892  }
893  }
894  }
895  }
896  // Fin de la recherche Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
897 
898  for (int i =0; i<nb_seg;i++)
899  {
900  if(i==0)
901  {
902  if(arete_a_projeter == 1)
903  {
904 
905  // Projeter sur num_faceid
906  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid);
907 
909  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
910  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
911  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
912 
913  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
914  nb++;
915  }
916  else
917  {
918  //******************* rechercher si il y a une arete au sommet qui est projetee
919 
920  int sommet_a_projeter = 0;
921  int num_faceid_sommet1 = 0;
922 
923  int nb_cosommet = sommet1->get_nb_mg_cosommet();
924  for (int ii =0; ii<nb_cosommet;ii++)
925  {
926  MG_COSOMMET* cosommet_sommet1 = sommet1->get_mg_cosommet(ii);
927  MG_ARETE* arete_au_sommet1 = cosommet_sommet1->get_arete();
928  int nb_coarete_sommet1 = arete_au_sommet1->get_nb_mg_coarete();
929  for(int co =0; co<nb_coarete_sommet1;co++)
930  {
931  MG_COARETE* coArete_sommet1 = arete_au_sommet1->get_mg_coarete(co);
932  if(coArete_sommet1 != coArete)
933  {
934  MG_BOUCLE* Boucle1 = coArete_sommet1->get_boucle();
935  MG_FACE* Face1 = Boucle1->get_mg_face();
937  int nb_face = mggeom->get_nb_mg_face();
938 
939  num_faceid_sommet1 = 0;
940 
941  for (int f =0; f<nb_face;f++)
942  {
943  MG_FACE* F = mggeom->get_mg_face(f);
944  if(faceso[f] == 1) num_faceid_sommet1 = num_faceid_sommet1 + 1;
945  if(F == Face1 && faceso[f] == 1)
946  {
947  sommet_a_projeter = 1;
948  goto arete_sommet_projeteeCy;
949  }
950  }
951  }
952  }
953  }
954  arete_sommet_projeteeCy:
955  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
956 
957  if(sommet_a_projeter == 1)
958  {
959 
960  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid_sommet1);
961 
963  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
964  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
965  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
966 
967  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
968  nb++;
969  }
970  else
971  {
972  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
973  nb++;
974  }
975  }
976  }
977 
978 
979  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
980 
981  for (int j =0; j<liste_element1s_arete.get_nb();j++)
982  {
983  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
984 
985  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
986  {
987  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
988  if (fem_element1_arete==fem_element1_noeud)
989  {
990  liste_element1s_arete.supprimer(fem_element1_arete);
991 
992  // Si nombre de noeuds par segment == 2 *******************************************************************
993  if (fem_element1_arete->get_nb_fem_noeud()==2)
994  {
995  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
996  if(noeud0!=fem_noeud0)
997  {
998  //***************************************************************************************************************
999  if(arete_a_projeter == 1)
1000  {
1001  // Projeter sur num_faceid
1002  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
1003 
1005  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1006  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1007  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1008 
1009  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1010 
1011  nb++;
1012  }
1013  else
1014  {
1015  if(i==(nb_seg-1))
1016  {
1017  //******************* rechercher si il y a une arete au sommet qui est projetee
1018  int num_faceid_sommet2 = 0;
1019  int sommet2_a_projeter = 0;
1020  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1021  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1022  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1023  for (int ii =0; ii<nb_cosommet2;ii++)
1024  {
1025  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1026  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1027  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1028  for(int co =0; co<nb_coarete_sommet2;co++)
1029  {
1030  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1031  if(coArete_sommet2 != coArete)
1032  {
1033  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1034  MG_FACE* Face2 = Boucle2->get_mg_face();
1036  int nb_face = mggeom->get_nb_mg_face();
1037 
1038  num_faceid_sommet2 = 0;
1039 
1040  for (int f =0; f<nb_face;f++)
1041  {
1042  MG_FACE* F = mggeom->get_mg_face(f);
1043  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1044  if(F == Face2 && faceso[f] == 1)
1045  {
1046  sommet2_a_projeter = 1;
1047  goto arete_sommet2_projeteeCy;
1048  }
1049  }
1050  }
1051  }
1052  }
1053  arete_sommet2_projeteeCy:
1054  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1055 
1056  if(sommet2_a_projeter == 1)
1057  {
1058  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
1059 
1061  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1062  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1063  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1064 
1065  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1066 
1067  nb++;
1068  }
1069  else
1070  {
1071  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
1072  nb++;
1073  }
1074  }
1075  else
1076  {
1077  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
1078  nb++;
1079  }
1080  }
1081  fem_noeud0 = noeud0;
1082  }
1083  //** FIN if(noeud0!=fem_noeud0)
1084  //*************************************************************************************************************
1085  else
1086  {
1087  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1088 
1089  if(arete_a_projeter == 1)
1090  {
1091  // Projeter sur num_faceid
1092  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
1093 
1095  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1096  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1097  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1098 
1099  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1100  nb++;
1101  }
1102  else
1103  {
1104  if(i==(nb_seg-1))
1105  {
1106  //******************* rechercher si il y a une arete au sommet2 qui est projetee
1107  int num_faceid_sommet2 = 0;
1108  int sommet2_a_projeter = 0;
1109  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1110  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1111  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1112  for (int ii =0; ii<nb_cosommet2;ii++)
1113  {
1114  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1115  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1116  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1117  for(int co =0; co<nb_coarete_sommet2;co++)
1118  {
1119  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1120  if(coArete_sommet2 != coArete)
1121  {
1122  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1123  MG_FACE* Face2 = Boucle2->get_mg_face();
1125  int nb_face = mggeom->get_nb_mg_face();
1126 
1127  num_faceid_sommet2 = 0;
1128 
1129  for (int f =0; f<nb_face;f++)
1130  {
1131  MG_FACE* F = mggeom->get_mg_face(f);
1132  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1133  if(F == Face2 && faceso[f] == 1)
1134  {
1135  sommet2_a_projeter = 1;
1136  goto arete_sommet20_projetee;
1137  }
1138  }
1139 
1140  }
1141  }
1142  }
1143  arete_sommet20_projetee:
1144  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1145 
1146  if(sommet2_a_projeter == 1)
1147  {
1148  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid_sommet2);
1149 
1151  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1152  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1153  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1154 
1155  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1156  nb++;
1157  }
1158 
1159  else
1160  {
1161  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
1162  nb++;
1163  }
1164  }
1165  else
1166  {
1167  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
1168  nb++;
1169  }
1170 
1171  }
1172  //*******************************************************************************************
1173  fem_noeud0 = noeud1;
1174  }
1175  }
1176  if (fem_element1_arete->get_nb_fem_noeud()==3)
1177  {
1178 
1179  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
1180  if(noeud0!=fem_noeud0)
1181  {
1182  //***************************************************************************************************************
1183  if(arete_a_projeter == 1)
1184  {
1185 
1186 
1187 
1188  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1189  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
1191  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1192  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1193  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1194 
1195  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1196  nb++;
1197  // Projeter sur num_faceid
1198  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
1203 
1204  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1205  nb++;
1206 
1207  }
1208  else
1209  {
1210  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1211  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
1212  nb++;
1213 
1214  if(i==(nb_seg-1))
1215  {
1216  //******************* rechercher si il y a une arete au sommet qui est projetee
1217  int num_faceid_sommet2 = 0;
1218  int sommet2_a_projeter = 0;
1219  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1220  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1221  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1222  for (int ii =0; ii<nb_cosommet2;ii++)
1223  {
1224  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1225  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1226  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1227  for(int co =0; co<nb_coarete_sommet2;co++)
1228  {
1229  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1230  if(coArete_sommet2 != coArete)
1231  {
1232  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1233  MG_FACE* Face2 = Boucle2->get_mg_face();
1235  int nb_face = mggeom->get_nb_mg_face();
1236 
1237  num_faceid_sommet2 = 0;
1238 
1239  for (int f =0; f<nb_face;f++)
1240  {
1241  MG_FACE* F = mggeom->get_mg_face(f);
1242  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1243  if(F == Face2 && faceso[f] == 1)
1244  {
1245  sommet2_a_projeter = 1;
1246  goto arete_sommet2_projeteeCy11;
1247  }
1248  }
1249  }
1250  }
1251  }
1252  arete_sommet2_projeteeCy11:
1253  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1254 
1255  if(sommet2_a_projeter == 1)
1256  {
1257  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
1258 
1260  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1261  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1262  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1263 
1264  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1265 
1266  nb++;
1267  }
1268  else
1269  {
1270  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
1271  nb++;
1272  }
1273  }
1274  else
1275  {
1276  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
1277  nb++;
1278  }
1279  }
1280  fem_noeud0 = noeud0;
1281  }
1282  //** FIN if(noeud0!=fem_noeud0)
1283  //*************************************************************************************************************
1284 
1285  else
1286  {
1287  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
1288 
1289  if(arete_a_projeter == 1)
1290  {
1291 
1292  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1293  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
1295  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1296  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1297  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1298 
1299  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1300  nb++;
1301  // Projeter sur num_faceid
1302 
1303  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid);
1308 
1309  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1310  nb++;
1311 
1312  }
1313  else
1314  {
1315  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1316  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
1317  nb++;
1318 
1319  if(i==(nb_seg-1))
1320  {
1321  //******************* rechercher si il y a une arete au sommet2 qui est projetee
1322  int num_faceid_sommet2 = 0;
1323  int sommet2_a_projeter = 0;
1324  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1325  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1326  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1327  for (int ii =0; ii<nb_cosommet2;ii++)
1328  {
1329  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1330  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1331  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1332  for(int co =0; co<nb_coarete_sommet2;co++)
1333  {
1334  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1335  if(coArete_sommet2 != coArete)
1336  {
1337  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1338  MG_FACE* Face2 = Boucle2->get_mg_face();
1340  int nb_face = mggeom->get_nb_mg_face();
1341 
1342  num_faceid_sommet2 = 0;
1343 
1344  for (int f =0; f<nb_face;f++)
1345  {
1346  MG_FACE* F = mggeom->get_mg_face(f);
1347  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1348  if(F == Face2 && faceso[f] == 1)
1349  {
1350  sommet2_a_projeter = 1;
1351  goto arete_sommet20_projetee22;
1352  }
1353  }
1354 
1355  }
1356  }
1357  }
1358  arete_sommet20_projetee22:
1359  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1360 
1361  if(sommet2_a_projeter == 1)
1362  {
1363  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid_sommet2);
1364 
1366  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1367  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1368  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1369 
1370  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
1371  nb++;
1372  }
1373 
1374  else
1375  {
1376  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
1377  nb++;
1378  }
1379  }
1380  else
1381  {
1382  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
1383  nb++;
1384  }
1385 
1386  }
1387  //*******************************************************************************************
1388  fem_noeud0 = noeud2;
1389  }
1390 
1391 
1392 
1393  /*
1394  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
1395  if(noeud0!=fem_noeud0)
1396  {
1397  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1398  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
1399  nb++;
1400  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
1401  nb++;
1402  fem_noeud0 = noeud0;
1403  }
1404  else
1405  {
1406  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1407  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
1408  nb++;
1409  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
1410  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
1411  nb++;
1412  fem_noeud0 = noeud2;
1413  }
1414  */
1415 
1416  }// Fin Si le nombre de noeuds par segment == 3
1417 
1418  }//Fin si l'un des segments qui appartiennent aux noeuds == l'un des segments de l'arete
1419 
1420  }//Fin for k = 0 jusqu'au liste_element1s_noeud
1421 
1422  }// Fin for j = 0 jusqu'au liste_element1s_arete
1423 
1424  }// Fin for i = 0 jusqu'au nombre de segments (seg) appartenant � l'arete
1425 
1427  }
1428 
1429 
1430 
1431  if(nbarete==4)
1432  {
1434  }
1435  if(nbarete==3)
1436  {
1438  }
1439 
1441 
1442 
1443  }
1444 
1445 if(tto == 0)
1446  {
1447 
1448 if(type_surface == GEOMETRIE::CONST::Co_PLAN )
1449  {
1451 
1452  int nb_element2 = face->get_lien_fem_maillage()->get_nb();
1453  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeudsf;
1454 
1455  for (int j =0; j<nb_element2;j++)
1456  {
1457  FEM_ELEMENT2* mgtri=(FEM_ELEMENT2*)face->get_lien_fem_maillage()->get(j);
1458  if (!fem_maillage->contient(mgtri)) continue;
1459  if (mgtri->get_nb_fem_noeud()==3)
1460  {
1461  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
1462  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
1463  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
1464  liste_noeudsf.ajouter(noeud0);
1465  liste_noeudsf.ajouter(noeud1);
1466  liste_noeudsf.ajouter(noeud2);
1467  }
1468  if (mgtri->get_nb_fem_noeud()==6)
1469  {
1470  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
1471  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
1472  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
1473  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
1474  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
1475  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
1476  liste_noeudsf.ajouter(noeud0);
1477  liste_noeudsf.ajouter(noeud1);
1478  liste_noeudsf.ajouter(noeud2);
1479  liste_noeudsf.ajouter(noeud3);
1480  liste_noeudsf.ajouter(noeud4);
1481  liste_noeudsf.ajouter(noeud5);
1482  }
1483  }
1484 
1485 
1486  //TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeudsfa;
1487 
1488  for (int v =0; v<face->get_nb_mg_boucle();v++)
1489  {
1490  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
1491  int nbarete = Boucle->get_nb_mg_coarete();
1492  for (int w =0; w<nbarete;w++)
1493  {
1494 
1495  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
1496  MG_ARETE* Arete = coArete->get_arete();
1497 
1498  int nb_coarete = Arete->get_nb_mg_coarete();
1499 
1500  int num_faceid = 0;
1501  int arete_a_projeter = 0;
1502 
1503  for(int co =0; co<nb_coarete;co++)
1504  {
1505  MG_COARETE* coArete1 = Arete->get_mg_coarete(co);
1506  if(coArete1 != coArete)
1507  {
1508  MG_BOUCLE* Boucle1 = coArete1->get_boucle();
1509  MG_FACE* Face1 = Boucle1->get_mg_face();
1511  int nb_face = mggeom->get_nb_mg_face();
1512  for (int f =0; f<nb_face;f++)
1513  {
1514  MG_FACE* F = mggeom->get_mg_face(f);
1515  if(faceso[f] == 1) num_faceid = num_faceid + 1;
1516  if(F == Face1 && faceso[f] == 1)
1517  {
1518  arete_a_projeter = 1;
1519  break;
1520  }
1521 
1522 
1523  }
1524  }
1525  }
1526 
1527 
1528 
1529  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
1530  int nb=0;
1531 
1532  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
1533 
1534  for (int i =0; i<nb_element1;i++)
1535  {
1536  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
1537  if (!fem_maillage->contient(fem_element1)) continue;
1538  liste_element1s_arete.ajouter(fem_element1);
1539  }
1540 
1541  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
1542  MG_SOMMET* sommet1 = cosommet1->get_sommet();
1543  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
1544  FEM_NOEUD* fem_noeud0;
1545  for (int i =0; i<nb_noeud;i++)
1546  {
1547  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
1548  if (!fem_maillage->contient(noeud)) continue;
1549  fem_noeud0 = noeud;
1550  }
1551 
1552  int nb_seg = liste_element1s_arete.get_nb();
1553 
1554 
1555  for (int i =0; i<nb_seg;i++)
1556  {
1557  if(i==0)
1558  {
1559  int existe_dans_liste =0;
1560  for (int ii =0; ii<liste_noeudsf.get_nb();ii++)
1561  {
1562  FEM_NOEUD* noeud_listef = liste_noeudsf.get(ii);
1563  if(noeud_listef == fem_noeud0)
1564  {
1565  existe_dans_liste = 1;
1566  goto Existe0;
1567  }
1568  }
1569 
1570  Existe0:
1571  //liste_noeudsfa.ajouter(fem_noeud0);
1572  if(existe_dans_liste == 1)
1573  {
1574  liste_noeudsf.supprimer(fem_noeud0);
1575  if(arete_a_projeter == 1)
1576  {
1577  // Projeter sur num_faceid
1578  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid);
1580  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1581  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1582  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1584 
1585  }
1586  else
1587  {
1588 
1589  //******************* rechercher si il y a une arete au sommet qui est projetee
1590 
1591  int sommet_a_projeter = 0;
1592  int num_faceid_sommet1 = 0;
1593 
1594  int nb_cosommet = sommet1->get_nb_mg_cosommet();
1595  for (int ii =0; ii<nb_cosommet;ii++)
1596  {
1597  MG_COSOMMET* cosommet_sommet1 = sommet1->get_mg_cosommet(ii);
1598  MG_ARETE* arete_au_sommet1 = cosommet_sommet1->get_arete();
1599  int nb_coarete_sommet1 = arete_au_sommet1->get_nb_mg_coarete();
1600  for(int co =0; co<nb_coarete_sommet1;co++)
1601  {
1602  MG_COARETE* coArete_sommet1 = arete_au_sommet1->get_mg_coarete(co);
1603  if(coArete_sommet1 != coArete)
1604  {
1605  MG_BOUCLE* Boucle1 = coArete_sommet1->get_boucle();
1606  MG_FACE* Face1 = Boucle1->get_mg_face();
1608  int nb_face = mggeom->get_nb_mg_face();
1609 
1610  num_faceid_sommet1 = 0;
1611 
1612  for (int f =0; f<nb_face;f++)
1613  {
1614  MG_FACE* F = mggeom->get_mg_face(f);
1615  if(faceso[f] == 1) num_faceid_sommet1 = num_faceid_sommet1 + 1;
1616  if(F == Face1 && faceso[f] == 1)
1617  {
1618  sommet_a_projeter = 1;
1619  goto arete_sommet_projetee;
1620  }
1621  }
1622  }
1623  }
1624  }
1625  arete_sommet_projetee:
1626  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1627 
1628  if(sommet_a_projeter == 1)
1629  {
1630  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid_sommet1);
1631 
1633  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1634  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1635  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1636 
1638 
1639  }
1640  else
1641  {
1642  fonction.Rapprocher_Surface_Point(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef));
1643 
1644  }
1645  }
1646 
1647  }
1648 
1649  }
1650 
1651  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
1652 
1653  for (int j =0; j<liste_element1s_arete.get_nb();j++)
1654  {
1655  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
1656 
1657  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
1658  {
1659  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
1660  if (fem_element1_arete==fem_element1_noeud)
1661  {
1662  liste_element1s_arete.supprimer(fem_element1_arete);
1663 
1664  if (fem_element1_arete->get_nb_fem_noeud()==2)
1665  {
1666  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
1667  if(noeud0!=fem_noeud0)
1668  {
1669 
1670  int existe_dans_liste = 0;
1671  for (int ii =0; ii<liste_noeudsf.get_nb();ii++)
1672  {
1673  FEM_NOEUD* noeud_listef = liste_noeudsf.get(ii);
1674  if(noeud_listef == noeud0)
1675  {
1676  existe_dans_liste = 1;
1677  goto Existe1;
1678  }
1679  }
1680 
1681  Existe1:
1682  //liste_noeudsfa.ajouter(fem_noeud0);
1683  if(existe_dans_liste == 1 )
1684  {
1685  liste_noeudsf.supprimer(noeud0);
1686  if(arete_a_projeter == 1)
1687  {
1688  // Projeter sur num_faceid
1689 
1690  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
1692  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1693  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1694  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1695 
1697  }
1698  else
1699  {
1700 
1701  if(i==(nb_seg-1))
1702  {
1703  //******************* rechercher si il y a une arete au sommet qui est projetee
1704  int num_faceid_sommet2 = 0;
1705  int sommet2_a_projeter = 0;
1706  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1707  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1708  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1709  for (int ii =0; ii<nb_cosommet2;ii++)
1710  {
1711  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1712  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1713  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1714  for(int co =0; co<nb_coarete_sommet2;co++)
1715  {
1716  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1717  if(coArete_sommet2 != coArete)
1718  {
1719  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1720  MG_FACE* Face2 = Boucle2->get_mg_face();
1722  int nb_face = mggeom->get_nb_mg_face();
1723 
1724  num_faceid_sommet2 = 0;
1725 
1726  for (int f =0; f<nb_face;f++)
1727  {
1728  MG_FACE* F = mggeom->get_mg_face(f);
1729  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1730  if(F == Face2 && faceso[f] == 1)
1731  {
1732  sommet2_a_projeter = 1;
1733  goto arete_sommet2_projetee;
1734  }
1735  }
1736  }
1737  }
1738  }
1739  arete_sommet2_projetee:
1740  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1741 
1742  if(sommet2_a_projeter == 1)
1743  {
1744  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
1745 
1747  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1748  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1749  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1750 
1752  }
1753  else
1754  {
1755  fonction.Rapprocher_Surface_Point(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef));
1756  }
1757 
1758  }
1759  else
1760  {
1761  fonction.Rapprocher_Surface_Point(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef));
1762  }
1763  }
1764  }
1765  fem_noeud0 = noeud0;
1766  }
1767 
1768  else
1769  {
1770  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1771 
1772  int existe_dans_liste = 0;
1773  for (int ii =0; ii<liste_noeudsf.get_nb();ii++)
1774  {
1775  FEM_NOEUD* noeud_listef = liste_noeudsf.get(ii);
1776  if(noeud_listef == noeud1)
1777  {
1778  existe_dans_liste = 1;
1779  goto Existe2;
1780  }
1781  }
1782  Existe2:
1783 
1784  if(existe_dans_liste == 1 )
1785  {
1786  liste_noeudsf.supprimer(noeud1);
1787 
1788  if(arete_a_projeter == 1)
1789  {
1790  // Projeter sur num_faceid
1791 
1792 
1793  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
1795  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1796  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1797  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1799  }
1800 
1801  else
1802  {
1803 
1804 
1805  if(i==(nb_seg-1))
1806  {
1807  //******************* rechercher si il y a une arete au sommet qui est projetee
1808  int num_faceid_sommet2 = 0;
1809  int sommet2_a_projeter = 0;
1810  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1811  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1812  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1813  for (int ii =0; ii<nb_cosommet2;ii++)
1814  {
1815  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1816  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1817  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1818  for(int co =0; co<nb_coarete_sommet2;co++)
1819  {
1820  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1821  if(coArete_sommet2 != coArete)
1822  {
1823  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1824  MG_FACE* Face2 = Boucle2->get_mg_face();
1826  int nb_face = mggeom->get_nb_mg_face();
1827 
1828  num_faceid_sommet2 = 0;
1829 
1830  for (int f =0; f<nb_face;f++)
1831  {
1832  MG_FACE* F = mggeom->get_mg_face(f);
1833  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1834  if(F == Face2 && faceso[f] == 1)
1835  {
1836  sommet2_a_projeter = 1;
1837  goto arete_sommet2_projeteePl;
1838  }
1839  }
1840  }
1841  }
1842  }
1843  arete_sommet2_projeteePl:
1844  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1845 
1846  if(sommet2_a_projeter == 1)
1847  {
1848  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid_sommet2);
1849 
1850 
1851 
1853  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1854  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1855  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1856 
1858 
1859 
1860 
1861 
1862  }
1863  else
1864  {
1865  fonction.Rapprocher_Surface_Point(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef));
1866 
1867  }
1868 
1869  }
1870  else
1871  {
1872  fonction.Rapprocher_Surface_Point(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef));
1873 
1874  }
1875  }
1876  }
1877 
1878  fem_noeud0 = noeud1;
1879  }
1880  }
1881 
1882  if (fem_element1_arete->get_nb_fem_noeud()==3)
1883  {
1884  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
1885  if(noeud0!=fem_noeud0)
1886  {
1887 
1888  int existe_dans_liste = 0;
1889  for (int ii =0; ii<liste_noeudsf.get_nb();ii++)
1890  {
1891  FEM_NOEUD* noeud_listef = liste_noeudsf.get(ii);
1892  if(noeud_listef == noeud0)
1893  {
1894  existe_dans_liste = 1;
1895  goto Existe11;
1896  }
1897  }
1898 
1899  Existe11:
1900  //liste_noeudsfa.ajouter(fem_noeud0);
1901  if(existe_dans_liste == 1 )
1902  {
1903  liste_noeudsf.supprimer(noeud0);
1904  if(arete_a_projeter == 1)
1905  {
1906 
1907  // Projeter sur num_faceid
1908 
1909  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
1911  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1912  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1913  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1914 
1916 
1917  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1918  liste_noeudsf.supprimer(noeud1);
1919 
1920  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
1925 
1927 
1928  }
1929  else
1930  {
1931 
1932  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
1933  fonction.Rapprocher_Surface_Point(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef));
1934  liste_noeudsf.supprimer(noeud1);
1935  nb++;
1936 
1937  if(i==(nb_seg-1))
1938  {
1939  //******************* rechercher si il y a une arete au sommet qui est projetee
1940  int num_faceid_sommet2 = 0;
1941  int sommet2_a_projeter = 0;
1942  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
1943  MG_SOMMET* sommet2 = cosommet2->get_sommet();
1944  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
1945  for (int ii =0; ii<nb_cosommet2;ii++)
1946  {
1947  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
1948  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
1949  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
1950  for(int co =0; co<nb_coarete_sommet2;co++)
1951  {
1952  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
1953  if(coArete_sommet2 != coArete)
1954  {
1955  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
1956  MG_FACE* Face2 = Boucle2->get_mg_face();
1958  int nb_face = mggeom->get_nb_mg_face();
1959 
1960  num_faceid_sommet2 = 0;
1961 
1962  for (int f =0; f<nb_face;f++)
1963  {
1964  MG_FACE* F = mggeom->get_mg_face(f);
1965  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
1966  if(F == Face2 && faceso[f] == 1)
1967  {
1968  sommet2_a_projeter = 1;
1969  goto arete_sommet2_projetee1;
1970  }
1971  }
1972  }
1973  }
1974  }
1975  arete_sommet2_projetee1:
1976  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
1977 
1978  if(sommet2_a_projeter == 1)
1979  {
1980  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
1981 
1983  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
1984  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
1985  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
1986 
1988  //liste_noeudsf.supprimer(noeud0);
1989  }
1990  else
1991  {
1992  fonction.Rapprocher_Surface_Point(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef));
1993  //liste_noeudsf.supprimer(noeud0);
1994  }
1995 
1996  }
1997  else
1998  {
1999  fonction.Rapprocher_Surface_Point(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef));
2000  //liste_noeudsf.supprimer(noeud0);
2001  }
2002  }
2003  }
2004 
2005  else
2006  {
2007  liste_noeudsf.supprimer(noeud0);
2008  if(arete_a_projeter == 1)
2009  {
2010 
2011  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2012  liste_noeudsf.supprimer(noeud1);
2013 
2014  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
2016  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2017  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2018  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2019 
2021 
2022  }
2023  else
2024  {
2025 
2026  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2027  fonction.Rapprocher_Surface_Point(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef));
2028  liste_noeudsf.supprimer(noeud1);
2029 
2030  }
2031  }
2032 
2033  fem_noeud0 = noeud0;
2034  }
2035 
2036  else
2037  {
2038 
2039 
2040  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
2041  int existe_dans_liste = 0;
2042  for (int ii =0; ii<liste_noeudsf.get_nb();ii++)
2043  {
2044  FEM_NOEUD* noeud_listef = liste_noeudsf.get(ii);
2045  if(noeud_listef == noeud2)
2046  {
2047  existe_dans_liste = 1;
2048  goto Existe22;
2049  }
2050  }
2051 
2052  Existe22:
2053  //liste_noeudsfa.ajouter(fem_noeud0);
2054  if(existe_dans_liste == 1 )
2055  {
2056  liste_noeudsf.supprimer(noeud2);
2057  if(arete_a_projeter == 1)
2058  {
2059 
2060  // Projeter sur num_faceid
2061 
2062  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid);
2064  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2065  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2066  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2067 
2069 
2070  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2071  liste_noeudsf.supprimer(noeud1);
2072 
2073  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
2078 
2080 
2081  }
2082  else
2083  {
2084 
2085  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2086  fonction.Rapprocher_Surface_Point(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef));
2087  liste_noeudsf.supprimer(noeud1);
2088 
2089 
2090  if(i==(nb_seg-1))
2091  {
2092  //******************* rechercher si il y a une arete au sommet qui est projetee
2093  int num_faceid_sommet2 = 0;
2094  int sommet2_a_projeter = 0;
2095  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
2096  MG_SOMMET* sommet2 = cosommet2->get_sommet();
2097  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
2098  for (int ii =0; ii<nb_cosommet2;ii++)
2099  {
2100  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
2101  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
2102  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
2103  for(int co =0; co<nb_coarete_sommet2;co++)
2104  {
2105  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
2106  if(coArete_sommet2 != coArete)
2107  {
2108  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
2109  MG_FACE* Face2 = Boucle2->get_mg_face();
2111  int nb_face = mggeom->get_nb_mg_face();
2112 
2113  num_faceid_sommet2 = 0;
2114 
2115  for (int f =0; f<nb_face;f++)
2116  {
2117  MG_FACE* F = mggeom->get_mg_face(f);
2118  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
2119  if(F == Face2 && faceso[f] == 1)
2120  {
2121  sommet2_a_projeter = 1;
2122  goto arete_sommet2_projetee2;
2123  }
2124  }
2125  }
2126  }
2127  }
2128  arete_sommet2_projetee2:
2129  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
2130 
2131  if(sommet2_a_projeter == 1)
2132  {
2133  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid_sommet2);
2134 
2136  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2137  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2138  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2139 
2141  }
2142  else
2143  {
2144  fonction.Rapprocher_Surface_Point(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef));
2145  }
2146 
2147  }
2148  else
2149  {
2150  fonction.Rapprocher_Surface_Point(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef));
2151  }
2152  }
2153  }
2154 
2155  else
2156  {
2157 
2158  if(arete_a_projeter == 1)
2159  {
2160 
2161  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2162  liste_noeudsf.supprimer(noeud1);
2163 
2164  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
2166  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2167  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2168  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2169 
2171 
2172  }
2173  else
2174  {
2175 
2176  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2177  fonction.Rapprocher_Surface_Point(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef));
2178  liste_noeudsf.supprimer(noeud1);
2179 
2180  }
2181  }
2182 
2183  fem_noeud0 = noeud2;
2184  }
2185  }
2186  }
2187  }
2188  }
2189  }
2190  }
2191  }
2192 
2193 
2194  int nb1 = liste_noeudsf.get_nb();
2195 
2196 
2197 
2198  for (int k =0; k < liste_noeudsf.get_nb();k++)
2199  {
2200  FEM_NOEUD* noeud=liste_noeudsf.get(k);
2201  fonction.Rapprocher_Surface_Point(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
2202 
2203  }
2204 
2205 
2208  //fonction.Creer_Face_Surface();
2209 
2210 
2211  for (int v =0; v<face->get_nb_mg_boucle();v++)
2212  {
2213  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
2215  Rec.Reconstruire(Boucle, coef);
2216 
2218  }
2219 
2220  }
2221 
2222 
2223 else
2224 {
2225 
2226 if((type_surface == GEOMETRIE::CONST::Co_CYLINDRE || type_surface == GEOMETRIE::CONST::Co_CONE))
2227  {
2228 
2230 
2231  int nb_element2 = face->get_lien_fem_maillage()->get_nb();
2232  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds;
2233 
2234  for (int j =0; j<nb_element2;j++)
2235  {
2236  FEM_ELEMENT2* mgtri=(FEM_ELEMENT2*)face->get_lien_fem_maillage()->get(j);
2237  if (!fem_maillage->contient(mgtri)) continue;
2238  if (mgtri->get_nb_fem_noeud()==3)
2239  {
2240  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
2241  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
2242  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
2243  liste_noeuds.ajouter(noeud0);
2244  liste_noeuds.ajouter(noeud1);
2245  liste_noeuds.ajouter(noeud2);
2246  }
2247  if (mgtri->get_nb_fem_noeud()==6)
2248  {
2249  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
2250  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
2251  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
2252  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
2253  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
2254  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
2255  liste_noeuds.ajouter(noeud0);
2256  liste_noeuds.ajouter(noeud1);
2257  liste_noeuds.ajouter(noeud2);
2258  liste_noeuds.ajouter(noeud3);
2259  liste_noeuds.ajouter(noeud4);
2260  liste_noeuds.ajouter(noeud5);
2261  }
2262  }
2263 
2264 
2265  for (int v =0; v<face->get_nb_mg_boucle();v++)
2266  {
2267  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
2268  int nbarete = Boucle->get_nb_mg_coarete();
2269  for (int w =0; w<nbarete;w++)
2270  {
2271 
2272  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
2273  MG_ARETE* Arete = coArete->get_arete();
2274 
2275  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
2276  int nb=0;
2277 
2278  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
2279 
2280  for (int i =0; i<nb_element1;i++)
2281  {
2282  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
2283  if (!fem_maillage->contient(fem_element1)) continue;
2284  liste_element1s_arete.ajouter(fem_element1);
2285  }
2286 
2287  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
2288  MG_SOMMET* sommet1 = cosommet1->get_sommet();
2289  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
2290  FEM_NOEUD* fem_noeud0;
2291  for (int i =0; i<nb_noeud;i++)
2292  {
2293  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
2294  if (!fem_maillage->contient(noeud)) continue;
2295  fem_noeud0 = noeud;
2296  }
2297 
2298  int nb_seg = liste_element1s_arete.get_nb();
2299 
2300 
2302  //**Si la face est id�alis�e ce n'est pas la peine de chercher s'il y a une face sur la quelle la coarete doit etre projet�e
2304 
2305 
2306  if(testo == 1)
2307  {
2308  /*
2309  for (int i =0; i<nb_seg;i++)
2310  {
2311  if(i==0)
2312  {
2313  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
2314  nb++;
2315  }
2316 
2317  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
2318 
2319  for (int j =0; j<liste_element1s_arete.get_nb();j++)
2320  {
2321  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
2322 
2323  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
2324  {
2325  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
2326  if (fem_element1_arete==fem_element1_noeud)
2327  {
2328  liste_element1s_arete.supprimer(fem_element1_arete);
2329  if (fem_element1_arete->get_nb_fem_noeud()==2)
2330  {
2331  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
2332  if(noeud0!=fem_noeud0)
2333  {
2334  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
2335  nb++;
2336  fem_noeud0 = noeud0;
2337  }
2338  else
2339  {
2340  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2341  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2342  nb++;
2343  fem_noeud0 = noeud1;
2344  }
2345  }
2346 
2347  if (fem_element1_arete->get_nb_fem_noeud()==3)
2348  {
2349  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
2350  if(noeud0!=fem_noeud0)
2351  {
2352  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2353  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2354  nb++;
2355  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
2356  nb++;
2357  fem_noeud0 = noeud0;
2358  }
2359  else
2360  {
2361  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2362  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2363  nb++;
2364  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
2365  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
2366  nb++;
2367  fem_noeud0 = noeud2;
2368  }
2369  }
2370  }
2371  }
2372  }
2373  }*/
2374  }
2375 
2376 
2377  //********* La face n'est pas idealisee
2378  else
2379  {
2380 
2381  //** Chercher Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
2382  int nb_coarete = Arete->get_nb_mg_coarete();
2383 
2384  int num_faceid = 0;
2385  int arete_a_projeter = 0;
2386 
2387  for(int co =0; co<nb_coarete;co++)
2388  {
2389  MG_COARETE* coArete1 = Arete->get_mg_coarete(co);
2390  if(coArete1 != coArete)
2391  {
2392  MG_BOUCLE* Boucle1 = coArete1->get_boucle();
2393  MG_FACE* Face1 = Boucle1->get_mg_face();
2395  int nb_face = mggeom->get_nb_mg_face();
2396  for (int f =0; f<nb_face;f++)
2397  {
2398  MG_FACE* F = mggeom->get_mg_face(f);
2399  if(faceso[f] == 1) num_faceid = num_faceid + 1;
2400  if(F == Face1 && faceso[f] == 1)
2401  {
2402  arete_a_projeter = 1;
2403  break;
2404  }
2405  }
2406  }
2407  }
2408  // Fin de la recherche Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
2409 
2410  for (int i =0; i<nb_seg;i++)
2411  {
2412 
2413  if(i==0)
2414  {
2415  if(arete_a_projeter == 1)
2416  {
2417  // Projeter sur num_faceid
2418  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid);
2419 
2421  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2422  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2423  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2424 
2425  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2426  nb++;
2427  }
2428  else
2429  {
2430 
2431  //******************* rechercher si il y a une arete au sommet qui est projetee
2432 
2433  int sommet_a_projeter = 0;
2434  int num_faceid_sommet1 = 0;
2435 
2436  int nb_cosommet = sommet1->get_nb_mg_cosommet();
2437  for (int ii =0; ii<nb_cosommet;ii++)
2438  {
2439  MG_COSOMMET* cosommet_sommet1 = sommet1->get_mg_cosommet(ii);
2440  MG_ARETE* arete_au_sommet1 = cosommet_sommet1->get_arete();
2441  int nb_coarete_sommet1 = arete_au_sommet1->get_nb_mg_coarete();
2442  for(int co =0; co<nb_coarete_sommet1;co++)
2443  {
2444  MG_COARETE* coArete_sommet1 = arete_au_sommet1->get_mg_coarete(co);
2445  if(coArete_sommet1 != coArete)
2446  {
2447  MG_BOUCLE* Boucle1 = coArete_sommet1->get_boucle();
2448  MG_FACE* Face1 = Boucle1->get_mg_face();
2450  int nb_face = mggeom->get_nb_mg_face();
2451 
2452  num_faceid_sommet1 = 0;
2453 
2454  for (int f =0; f<nb_face;f++)
2455  {
2456  MG_FACE* F = mggeom->get_mg_face(f);
2457  if(faceso[f] == 1) num_faceid_sommet1 = num_faceid_sommet1 + 1;
2458  if(F == Face1 && faceso[f] == 1)
2459  {
2460  sommet_a_projeter = 1;
2461  goto arete_sommet_projeteeCyCo;
2462  }
2463  }
2464  }
2465  }
2466  }
2467  arete_sommet_projeteeCyCo:
2468  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
2469 
2470  if(sommet_a_projeter == 1)
2471  {
2472 
2473  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid_sommet1);
2474 
2476  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2477  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2478  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2479 
2480  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2481  nb++;
2482  }
2483  else
2484  {
2485  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
2486  nb++;
2487  }
2488  }
2489  }
2490 
2491 
2492  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
2493 
2494  for (int j =0; j<liste_element1s_arete.get_nb();j++)
2495  {
2496  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
2497 
2498  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
2499  {
2500  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
2501  if (fem_element1_arete==fem_element1_noeud)
2502  {
2503  liste_element1s_arete.supprimer(fem_element1_arete);
2504 
2505  // Si nombre de noeuds par segment == 2 *******************************************************************
2506  if (fem_element1_arete->get_nb_fem_noeud()==2)
2507  {
2508  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
2509  if(noeud0!=fem_noeud0)
2510  {
2511  //***************************************************************************************************************
2512  if(arete_a_projeter == 1)
2513  {
2514  // Projeter sur num_faceid
2515  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
2516 
2518  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2519  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2520  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2521 
2522  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2523  nb++;
2524  }
2525  else
2526  {
2527  if(i==(nb_seg-1))
2528  {
2529  //******************* rechercher si il y a une arete au sommet qui est projetee
2530  int num_faceid_sommet2 = 0;
2531  int sommet2_a_projeter = 0;
2532  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
2533  MG_SOMMET* sommet2 = cosommet2->get_sommet();
2534  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
2535  for (int ii =0; ii<nb_cosommet2;ii++)
2536  {
2537  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
2538  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
2539  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
2540  for(int co =0; co<nb_coarete_sommet2;co++)
2541  {
2542  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
2543  if(coArete_sommet2 != coArete)
2544  {
2545  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
2546  MG_FACE* Face2 = Boucle2->get_mg_face();
2548  int nb_face = mggeom->get_nb_mg_face();
2549 
2550  num_faceid_sommet2 = 0;
2551 
2552  for (int f =0; f<nb_face;f++)
2553  {
2554  MG_FACE* F = mggeom->get_mg_face(f);
2555  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
2556  if(F == Face2 && faceso[f] == 1)
2557  {
2558  sommet2_a_projeter = 1;
2559  goto arete_sommet2_projeteeCy1;
2560  }
2561  }
2562  }
2563  }
2564  }
2565  arete_sommet2_projeteeCy1:
2566  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
2567 
2568  if(sommet2_a_projeter == 1)
2569  {
2570  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
2571 
2573  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2574  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2575  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2576 
2577  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2578 
2579  nb++;
2580  }
2581  else
2582  {
2583  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
2584  nb++;
2585  }
2586  }
2587  else
2588  {
2589  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
2590  nb++;
2591  }
2592  }
2593  fem_noeud0 = noeud0;
2594  }
2595  //** FIN if(noeud0!=fem_noeud0)
2596  //*************************************************************************************************************
2597 
2598  else
2599  {
2600  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2601 
2602  if(arete_a_projeter == 1)
2603  {
2604  // Projeter sur num_faceid
2605  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
2606 
2608  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2609  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2610  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2611 
2612  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2613  nb++;
2614  }
2615  else
2616  {
2617  if(i==(nb_seg-1))
2618  {
2619  //******************* rechercher si il y a une arete au sommet2 qui est projetee
2620  int num_faceid_sommet2 = 0;
2621  int sommet2_a_projeter = 0;
2622  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
2623  MG_SOMMET* sommet2 = cosommet2->get_sommet();
2624  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
2625  for (int ii =0; ii<nb_cosommet2;ii++)
2626  {
2627  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
2628  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
2629  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
2630  for(int co =0; co<nb_coarete_sommet2;co++)
2631  {
2632  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
2633  if(coArete_sommet2 != coArete)
2634  {
2635  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
2636  MG_FACE* Face2 = Boucle2->get_mg_face();
2638  int nb_face = mggeom->get_nb_mg_face();
2639 
2640  num_faceid_sommet2 = 0;
2641 
2642  for (int f =0; f<nb_face;f++)
2643  {
2644  MG_FACE* F = mggeom->get_mg_face(f);
2645  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
2646  if(F == Face2 && faceso[f] == 1)
2647  {
2648  sommet2_a_projeter = 1;
2649  goto arete_sommet20_projetee2;
2650  }
2651  }
2652 
2653  }
2654  }
2655  }
2656  arete_sommet20_projetee2:
2657  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
2658 
2659  if(sommet2_a_projeter == 1)
2660  {
2661  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid_sommet2);
2662 
2664  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2665  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2666  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2667 
2668  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2669  nb++;
2670  }
2671 
2672  else
2673  {
2674  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2675  nb++;
2676  }
2677  }
2678  else
2679  {
2680  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2681  nb++;
2682  }
2683 
2684  }
2685  //*******************************************************************************************
2686  fem_noeud0 = noeud1;
2687  }
2688  }
2689  if (fem_element1_arete->get_nb_fem_noeud()==3)
2690  {
2691 
2692  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
2693  if(noeud0!=fem_noeud0)
2694  {
2695  //***************************************************************************************************************
2696  if(arete_a_projeter == 1)
2697  {
2698 
2699  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2700  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
2702  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2703  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2704  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2705 
2706  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2707  nb++;
2708  // Projeter sur num_faceid
2709  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
2714 
2715  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2716  nb++;
2717 
2718  }
2719  else
2720  {
2721  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2722  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2723  nb++;
2724 
2725  if(i==(nb_seg-1))
2726  {
2727  //******************* rechercher si il y a une arete au sommet qui est projetee
2728  int num_faceid_sommet2 = 0;
2729  int sommet2_a_projeter = 0;
2730  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
2731  MG_SOMMET* sommet2 = cosommet2->get_sommet();
2732  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
2733  for (int ii =0; ii<nb_cosommet2;ii++)
2734  {
2735  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
2736  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
2737  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
2738  for(int co =0; co<nb_coarete_sommet2;co++)
2739  {
2740  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
2741  if(coArete_sommet2 != coArete)
2742  {
2743  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
2744  MG_FACE* Face2 = Boucle2->get_mg_face();
2746  int nb_face = mggeom->get_nb_mg_face();
2747 
2748  num_faceid_sommet2 = 0;
2749 
2750  for (int f =0; f<nb_face;f++)
2751  {
2752  MG_FACE* F = mggeom->get_mg_face(f);
2753  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
2754  if(F == Face2 && faceso[f] == 1)
2755  {
2756  sommet2_a_projeter = 1;
2757  goto arete_sommet2_projeteeCy111;
2758  }
2759  }
2760  }
2761  }
2762  }
2763  arete_sommet2_projeteeCy111:
2764  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
2765 
2766  if(sommet2_a_projeter == 1)
2767  {
2768  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
2769 
2771  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2772  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2773  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2774 
2775  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2776 
2777  nb++;
2778  }
2779  else
2780  {
2781  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
2782  nb++;
2783  }
2784  }
2785  else
2786  {
2787  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
2788  nb++;
2789  }
2790  }
2791  fem_noeud0 = noeud0;
2792  }
2793  //** FIN if(noeud0!=fem_noeud0)
2794  //*************************************************************************************************************
2795 
2796  else
2797  {
2798  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
2799 
2800  if(arete_a_projeter == 1)
2801  {
2802 
2803  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2804  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
2806  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2807  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2808  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2809 
2810  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2811  nb++;
2812  // Projeter sur num_faceid
2813 
2814  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid);
2819 
2820  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2821  nb++;
2822 
2823  }
2824  else
2825  {
2826  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
2827  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
2828  nb++;
2829 
2830  if(i==(nb_seg-1))
2831  {
2832  //******************* rechercher si il y a une arete au sommet2 qui est projetee
2833  int num_faceid_sommet2 = 0;
2834  int sommet2_a_projeter = 0;
2835  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
2836  MG_SOMMET* sommet2 = cosommet2->get_sommet();
2837  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
2838  for (int ii =0; ii<nb_cosommet2;ii++)
2839  {
2840  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
2841  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
2842  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
2843  for(int co =0; co<nb_coarete_sommet2;co++)
2844  {
2845  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
2846  if(coArete_sommet2 != coArete)
2847  {
2848  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
2849  MG_FACE* Face2 = Boucle2->get_mg_face();
2851  int nb_face = mggeom->get_nb_mg_face();
2852 
2853  num_faceid_sommet2 = 0;
2854 
2855  for (int f =0; f<nb_face;f++)
2856  {
2857  MG_FACE* F = mggeom->get_mg_face(f);
2858  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
2859  if(F == Face2 && faceso[f] == 1)
2860  {
2861  sommet2_a_projeter = 1;
2862  goto arete_sommet20_projetee222;
2863  }
2864  }
2865 
2866  }
2867  }
2868  }
2869  arete_sommet20_projetee222:
2870  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
2871 
2872  if(sommet2_a_projeter == 1)
2873  {
2874  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid_sommet2);
2875 
2877  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
2878  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
2879  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
2880 
2881  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
2882  nb++;
2883  }
2884 
2885  else
2886  {
2887  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
2888  nb++;
2889  }
2890  }
2891  else
2892  {
2893  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
2894  nb++;
2895  }
2896 
2897  }
2898  //*******************************************************************************************
2899  fem_noeud0 = noeud2;
2900  }
2901 
2902  }// Fin Si le nombre de noeuds par segment == 3
2903 
2904  }//Fin si l'un des segments qui appartiennent aux noeuds == l'un des segments de l'arete
2905 
2906  }//Fin for k = 0 jusqu'au liste_element1s_noeud
2907 
2908  }// Fin for j = 0 jusqu'au liste_element1s_arete
2909 
2910  }// Fin for i = 0 jusqu'au nombre de segments (seg) appartenant � l'arete
2911 
2912  }//Fin else // // la face n'est pas idealisee
2913 
2915 
2916  }// Fin for w == 0 jusq'au nombre d'aretes
2917 
2918  }// Fin for v == 0 jusq'au nombre de contours
2919 
2921 
2922  for (int v =0; v<face->get_nb_mg_boucle();v++)
2923  {
2924  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
2925  int nbCoarete = Boucle->get_nb_mg_coarete();
2926  for (int w =0; w<nbCoarete;w++)
2927  {
2928  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
2929  MG_ARETE* Arete = coArete->get_arete();
2930 
2931  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
2932  for (int i =0; i<nb_element1;i++)
2933  {
2934  FEM_ELEMENT1* mgsegment=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
2935  if (!fem_maillage->contient(mgsegment)) continue;
2936  if (mgsegment->get_nb_fem_noeud()==2)
2937  {
2938  FEM_NOEUD* noeud0 = mgsegment->get_fem_noeud(0);
2939  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
2940  liste_noeuds.supprimer(noeud0);
2941  liste_noeuds.supprimer(noeud1);
2942  }
2943  if (mgsegment->get_nb_fem_noeud()==3)
2944  {
2945  FEM_NOEUD* noeud0 = mgsegment->get_fem_noeud(0);
2946  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
2947  FEM_NOEUD* noeud2 = mgsegment->get_fem_noeud(2);
2948  liste_noeuds.supprimer(noeud0);
2949  liste_noeuds.supprimer(noeud1);
2950  liste_noeuds.supprimer(noeud2);
2951  }
2952  }
2953  }
2954  }
2955 
2956 
2957  for (int k =0; k < liste_noeuds.get_nb();k++)
2958  {
2959  FEM_NOEUD* noeud=liste_noeuds.get(k);
2960  fonction.Rapprocher_Surface_Point(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
2961  }
2964 
2965  //fonction.Creer_Face_Surface();
2966 
2967  for (int v =0; v<face->get_nb_mg_boucle();v++)
2968  {
2969  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
2971  Rec.Reconstruire(Boucle, coef);
2972 
2974  }
2975 
2976  }// Fin if Surface Cylindre ou Cone
2977 
2978 
2979 else
2980 
2981 {
2982 
2983 if((type_surface == GEOMETRIE::CONST::Co_TORE || type_surface == GEOMETRIE::CONST::Co_SPHERE) && ((face->get_nb_mg_boucle()==1)&& (nbareteface == 3 || nbareteface == 4)) )
2984  {
2985  MG_BOUCLE* Boucle = face->get_mg_boucle(0);
2986  int nbarete = Boucle->get_nb_mg_coarete();
2987  for (int w =0; w<nbarete;w++)
2988  {
2989 
2990  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
2991  MG_ARETE* Arete = coArete->get_arete();
2992 
2993  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
2994  int nb=0;
2995 
2996  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
2997 
2998  for (int i =0; i<nb_element1;i++)
2999  {
3000  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
3001  if (!fem_maillage->contient(fem_element1)) continue;
3002  liste_element1s_arete.ajouter(fem_element1);
3003  }
3004 
3005  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
3006  MG_SOMMET* sommet1 = cosommet1->get_sommet();
3007  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
3008  FEM_NOEUD* fem_noeud0;
3009  for (int i =0; i<nb_noeud;i++)
3010  {
3011  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
3012  if (!fem_maillage->contient(noeud)) continue;
3013  fem_noeud0 = noeud;
3014  }
3015 
3016  int nb_seg = liste_element1s_arete.get_nb();
3017 
3018 
3019  //** Chercher Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
3020  int nb_coarete = Arete->get_nb_mg_coarete();
3021 
3022  int num_faceid = 0;
3023  int arete_a_projeter = 0;
3024 
3025  for(int co =0; co<nb_coarete;co++)
3026  {
3027  MG_COARETE* coArete1 = Arete->get_mg_coarete(co);
3028  if(coArete1 != coArete)
3029  {
3030  MG_BOUCLE* Boucle1 = coArete1->get_boucle();
3031  MG_FACE* Face1 = Boucle1->get_mg_face();
3033  int nb_face = mggeom->get_nb_mg_face();
3034  for (int f =0; f<nb_face;f++)
3035  {
3036  MG_FACE* F = mggeom->get_mg_face(f);
3037  if(faceso[f] == 1) num_faceid = num_faceid + 1;
3038  if(F == Face1 && faceso[f] == 1)
3039  {
3040  arete_a_projeter = 1;
3041  break;
3042  }
3043  }
3044  }
3045  }
3046  // Fin de la recherche Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
3047 
3048  for (int i =0; i<nb_seg;i++)
3049  {
3050  if(i==0)
3051  {
3052  if(arete_a_projeter == 1)
3053  {
3054 
3055  // Projeter sur num_faceid
3056  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid);
3057 
3059  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3060  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3061  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3062 
3063  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3064  nb++;
3065  }
3066  else
3067  {
3068  //******************* rechercher si il y a une arete au sommet qui est projetee
3069 
3070  int sommet_a_projeter = 0;
3071  int num_faceid_sommet1 = 0;
3072 
3073  int nb_cosommet = sommet1->get_nb_mg_cosommet();
3074  for (int ii =0; ii<nb_cosommet;ii++)
3075  {
3076  MG_COSOMMET* cosommet_sommet1 = sommet1->get_mg_cosommet(ii);
3077  MG_ARETE* arete_au_sommet1 = cosommet_sommet1->get_arete();
3078  int nb_coarete_sommet1 = arete_au_sommet1->get_nb_mg_coarete();
3079  for(int co =0; co<nb_coarete_sommet1;co++)
3080  {
3081  MG_COARETE* coArete_sommet1 = arete_au_sommet1->get_mg_coarete(co);
3082  if(coArete_sommet1 != coArete)
3083  {
3084  MG_BOUCLE* Boucle1 = coArete_sommet1->get_boucle();
3085  MG_FACE* Face1 = Boucle1->get_mg_face();
3087  int nb_face = mggeom->get_nb_mg_face();
3088 
3089  num_faceid_sommet1 = 0;
3090 
3091  for (int f =0; f<nb_face;f++)
3092  {
3093  MG_FACE* F = mggeom->get_mg_face(f);
3094  if(faceso[f] == 1) num_faceid_sommet1 = num_faceid_sommet1 + 1;
3095  if(F == Face1 && faceso[f] == 1)
3096  {
3097  sommet_a_projeter = 1;
3098  goto arete_sommet_projeteeCy100;
3099  }
3100  }
3101  }
3102  }
3103  }
3104  arete_sommet_projeteeCy100:
3105  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3106 
3107  if(sommet_a_projeter == 1)
3108  {
3109 
3110  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid_sommet1);
3111 
3113  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3114  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3115  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3116 
3117  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3118  nb++;
3119  }
3120  else
3121  {
3122  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
3123  nb++;
3124  }
3125  }
3126  }
3127 
3128 
3129  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
3130 
3131  for (int j =0; j<liste_element1s_arete.get_nb();j++)
3132  {
3133  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
3134 
3135  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
3136  {
3137  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
3138  if (fem_element1_arete==fem_element1_noeud)
3139  {
3140  liste_element1s_arete.supprimer(fem_element1_arete);
3141 
3142  // Si nombre de noeuds par segment == 2 *******************************************************************
3143  if (fem_element1_arete->get_nb_fem_noeud()==2)
3144  {
3145  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
3146  if(noeud0!=fem_noeud0)
3147  {
3148  //***************************************************************************************************************
3149  if(arete_a_projeter == 1)
3150  {
3151  // Projeter sur num_faceid
3152  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
3153 
3155  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3156  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3157  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3158 
3159  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3160 
3161  nb++;
3162  }
3163  else
3164  {
3165  if(i==(nb_seg-1))
3166  {
3167  //******************* rechercher si il y a une arete au sommet qui est projetee
3168  int num_faceid_sommet2 = 0;
3169  int sommet2_a_projeter = 0;
3170  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
3171  MG_SOMMET* sommet2 = cosommet2->get_sommet();
3172  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
3173  for (int ii =0; ii<nb_cosommet2;ii++)
3174  {
3175  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
3176  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
3177  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
3178  for(int co =0; co<nb_coarete_sommet2;co++)
3179  {
3180  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
3181  if(coArete_sommet2 != coArete)
3182  {
3183  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
3184  MG_FACE* Face2 = Boucle2->get_mg_face();
3186  int nb_face = mggeom->get_nb_mg_face();
3187 
3188  num_faceid_sommet2 = 0;
3189 
3190  for (int f =0; f<nb_face;f++)
3191  {
3192  MG_FACE* F = mggeom->get_mg_face(f);
3193  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
3194  if(F == Face2 && faceso[f] == 1)
3195  {
3196  sommet2_a_projeter = 1;
3197  goto arete_sommet2_projeteeCy1000;
3198  }
3199  }
3200  }
3201  }
3202  }
3203  arete_sommet2_projeteeCy1000:
3204  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3205 
3206  if(sommet2_a_projeter == 1)
3207  {
3208  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
3209 
3211  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3212  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3213  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3214 
3215  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3216 
3217  nb++;
3218  }
3219  else
3220  {
3221  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3222  nb++;
3223  }
3224  }
3225  else
3226  {
3227  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3228  nb++;
3229  }
3230  }
3231  fem_noeud0 = noeud0;
3232  }
3233  //** FIN if(noeud0!=fem_noeud0)
3234  //*************************************************************************************************************
3235  else
3236  {
3237  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3238 
3239  if(arete_a_projeter == 1)
3240  {
3241  // Projeter sur num_faceid
3242  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
3243 
3245  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3246  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3247  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3248 
3249  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3250  nb++;
3251  }
3252  else
3253  {
3254  if(i==(nb_seg-1))
3255  {
3256  //******************* rechercher si il y a une arete au sommet2 qui est projetee
3257  int num_faceid_sommet2 = 0;
3258  int sommet2_a_projeter = 0;
3259  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
3260  MG_SOMMET* sommet2 = cosommet2->get_sommet();
3261  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
3262  for (int ii =0; ii<nb_cosommet2;ii++)
3263  {
3264  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
3265  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
3266  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
3267  for(int co =0; co<nb_coarete_sommet2;co++)
3268  {
3269  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
3270  if(coArete_sommet2 != coArete)
3271  {
3272  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
3273  MG_FACE* Face2 = Boucle2->get_mg_face();
3275  int nb_face = mggeom->get_nb_mg_face();
3276 
3277  num_faceid_sommet2 = 0;
3278 
3279  for (int f =0; f<nb_face;f++)
3280  {
3281  MG_FACE* F = mggeom->get_mg_face(f);
3282  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
3283  if(F == Face2 && faceso[f] == 1)
3284  {
3285  sommet2_a_projeter = 1;
3286  goto arete_sommet20_projetee3;
3287  }
3288  }
3289 
3290  }
3291  }
3292  }
3293  arete_sommet20_projetee3:
3294  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3295 
3296  if(sommet2_a_projeter == 1)
3297  {
3298  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid_sommet2);
3299 
3301  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3302  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3303  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3304 
3305  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3306  nb++;
3307  }
3308 
3309  else
3310  {
3311  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3312  nb++;
3313  }
3314  }
3315  else
3316  {
3317  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3318  nb++;
3319  }
3320 
3321  }
3322  //*******************************************************************************************
3323  fem_noeud0 = noeud1;
3324  }
3325  }
3326  if (fem_element1_arete->get_nb_fem_noeud()==3)
3327  {
3328 
3329 
3330 
3331  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
3332  if(noeud0!=fem_noeud0)
3333  {
3334  //***************************************************************************************************************
3335  if(arete_a_projeter == 1)
3336  {
3337 
3338 
3339 
3340  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3341  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
3343  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3344  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3345  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3346 
3347  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3348  nb++;
3349  // Projeter sur num_faceid
3350  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
3355 
3356  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3357  nb++;
3358 
3359  }
3360  else
3361  {
3362  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3363  fonction.Ajouter_Point_Arete(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3364  nb++;
3365 
3366  if(i==(nb_seg-1))
3367  {
3368  //******************* rechercher si il y a une arete au sommet qui est projetee
3369  int num_faceid_sommet2 = 0;
3370  int sommet2_a_projeter = 0;
3371  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
3372  MG_SOMMET* sommet2 = cosommet2->get_sommet();
3373  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
3374  for (int ii =0; ii<nb_cosommet2;ii++)
3375  {
3376  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
3377  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
3378  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
3379  for(int co =0; co<nb_coarete_sommet2;co++)
3380  {
3381  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
3382  if(coArete_sommet2 != coArete)
3383  {
3384  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
3385  MG_FACE* Face2 = Boucle2->get_mg_face();
3387  int nb_face = mggeom->get_nb_mg_face();
3388 
3389  num_faceid_sommet2 = 0;
3390 
3391  for (int f =0; f<nb_face;f++)
3392  {
3393  MG_FACE* F = mggeom->get_mg_face(f);
3394  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
3395  if(F == Face2 && faceso[f] == 1)
3396  {
3397  sommet2_a_projeter = 1;
3398  goto arete_sommet2_projeteeCy110;
3399  }
3400  }
3401  }
3402  }
3403  }
3404  arete_sommet2_projeteeCy110:
3405  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3406 
3407  if(sommet2_a_projeter == 1)
3408  {
3409  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
3410 
3412  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3413  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3414  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3415 
3416  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3417 
3418  nb++;
3419  }
3420  else
3421  {
3422  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3423  nb++;
3424  }
3425  }
3426  else
3427  {
3428  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3429  nb++;
3430  }
3431  }
3432  fem_noeud0 = noeud0;
3433  }
3434  //** FIN if(noeud0!=fem_noeud0)
3435  //*************************************************************************************************************
3436 
3437  else
3438  {
3439  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
3440 
3441  if(arete_a_projeter == 1)
3442  {
3443 
3444  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3445  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
3447  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3448  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3449  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3450 
3451  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3452  nb++;
3453  // Projeter sur num_faceid
3454 
3455  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid);
3460 
3461  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3462  nb++;
3463 
3464  }
3465  else
3466  {
3467  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3468  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3469  nb++;
3470 
3471  if(i==(nb_seg-1))
3472  {
3473  //******************* rechercher si il y a une arete au sommet2 qui est projetee
3474  int num_faceid_sommet2 = 0;
3475  int sommet2_a_projeter = 0;
3476  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
3477  MG_SOMMET* sommet2 = cosommet2->get_sommet();
3478  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
3479  for (int ii =0; ii<nb_cosommet2;ii++)
3480  {
3481  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
3482  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
3483  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
3484  for(int co =0; co<nb_coarete_sommet2;co++)
3485  {
3486  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
3487  if(coArete_sommet2 != coArete)
3488  {
3489  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
3490  MG_FACE* Face2 = Boucle2->get_mg_face();
3492  int nb_face = mggeom->get_nb_mg_face();
3493 
3494  num_faceid_sommet2 = 0;
3495 
3496  for (int f =0; f<nb_face;f++)
3497  {
3498  MG_FACE* F = mggeom->get_mg_face(f);
3499  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
3500  if(F == Face2 && faceso[f] == 1)
3501  {
3502  sommet2_a_projeter = 1;
3503  goto arete_sommet20_projetee220;
3504  }
3505  }
3506 
3507  }
3508  }
3509  }
3510  arete_sommet20_projetee220:
3511  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3512 
3513  if(sommet2_a_projeter == 1)
3514  {
3515  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid_sommet2);
3516 
3518  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3519  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3520  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3521 
3522  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3523  nb++;
3524  }
3525 
3526  else
3527  {
3528  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
3529  nb++;
3530  }
3531  }
3532  else
3533  {
3534  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
3535  nb++;
3536  }
3537 
3538  }
3539  //*******************************************************************************************
3540  fem_noeud0 = noeud2;
3541  }
3542 
3543 
3544 
3545  /*
3546  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
3547  if(noeud0!=fem_noeud0)
3548  {
3549  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3550  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3551  nb++;
3552  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3553  nb++;
3554  fem_noeud0 = noeud0;
3555  }
3556  else
3557  {
3558  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3559  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3560  nb++;
3561  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
3562  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
3563  nb++;
3564  fem_noeud0 = noeud2;
3565  }
3566  */
3567 
3568  }// Fin Si le nombre de noeuds par segment == 3
3569 
3570  }//Fin si l'un des segments qui appartiennent aux noeuds == l'un des segments de l'arete
3571 
3572  }//Fin for k = 0 jusqu'au liste_element1s_noeud
3573 
3574  }// Fin for j = 0 jusqu'au liste_element1s_arete
3575 
3576  }// Fin for i = 0 jusqu'au nombre de segments (seg) appartenant � l'arete
3577 
3579  }
3580 
3581  if(nbarete==4)
3582  {
3584  }
3585  if(nbarete==3)
3586  {
3588  }
3589 
3591  }
3592 
3593 else
3594 
3595 {
3596 
3597 
3599 
3600 
3601  int nb_element2 = face->get_lien_fem_maillage()->get_nb();
3602  TPL_MAP_ENTITE<FEM_NOEUD*> liste_noeuds;
3603 
3604  for (int j =0; j<nb_element2;j++)
3605  {
3606  FEM_ELEMENT2* mgtri=(FEM_ELEMENT2*)face->get_lien_fem_maillage()->get(j);
3607  if (!fem_maillage->contient(mgtri)) continue;
3608  if (mgtri->get_nb_fem_noeud()==3)
3609  {
3610  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
3611  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
3612  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
3613  liste_noeuds.ajouter(noeud0);
3614  liste_noeuds.ajouter(noeud1);
3615  liste_noeuds.ajouter(noeud2);
3616  }
3617  if (mgtri->get_nb_fem_noeud()==6)
3618  {
3619  FEM_NOEUD* noeud0=mgtri->get_fem_noeud(0);
3620  FEM_NOEUD* noeud1=mgtri->get_fem_noeud(1);
3621  FEM_NOEUD* noeud2=mgtri->get_fem_noeud(2);
3622  FEM_NOEUD* noeud3=mgtri->get_fem_noeud(3);
3623  FEM_NOEUD* noeud4=mgtri->get_fem_noeud(4);
3624  FEM_NOEUD* noeud5=mgtri->get_fem_noeud(5);
3625  liste_noeuds.ajouter(noeud0);
3626  liste_noeuds.ajouter(noeud1);
3627  liste_noeuds.ajouter(noeud2);
3628  liste_noeuds.ajouter(noeud3);
3629  liste_noeuds.ajouter(noeud4);
3630  liste_noeuds.ajouter(noeud5);
3631  }
3632  }
3633 
3634 
3635  for (int v =0; v<face->get_nb_mg_boucle();v++)
3636  {
3637  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
3638  int nbarete = Boucle->get_nb_mg_coarete();
3639  for (int w =0; w<nbarete;w++)
3640  {
3641 
3642  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
3643  MG_ARETE* Arete = coArete->get_arete();
3644 
3645  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
3646  int nb=0;
3647 
3648  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_element1s_arete;
3649 
3650  for (int i =0; i<nb_element1;i++)
3651  {
3652  FEM_ELEMENT1* fem_element1=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
3653  if (!fem_maillage->contient(fem_element1)) continue;
3654  liste_element1s_arete.ajouter(fem_element1);
3655  }
3656 
3657  MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
3658  MG_SOMMET* sommet1 = cosommet1->get_sommet();
3659  int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
3660  FEM_NOEUD* fem_noeud0;
3661  for (int i =0; i<nb_noeud;i++)
3662  {
3663  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
3664  if (!fem_maillage->contient(noeud)) continue;
3665  fem_noeud0 = noeud;
3666  }
3667 
3668  int nb_seg = liste_element1s_arete.get_nb();
3669 
3670 
3672  //**Si la face est id�alis�e ce n'est pas la peine de chercher s'il y a une face sur la quelle la coarete doit etre projet�e
3674 
3675 
3676  if(testo == 1)
3677  {
3678  /*
3679  for (int i =0; i<nb_seg;i++)
3680  {
3681  if(i==0)
3682  {
3683  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
3684  nb++;
3685  }
3686 
3687  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
3688 
3689  for (int j =0; j<liste_element1s_arete.get_nb();j++)
3690  {
3691  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
3692 
3693  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
3694  {
3695  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
3696  if (fem_element1_arete==fem_element1_noeud)
3697  {
3698  liste_element1s_arete.supprimer(fem_element1_arete);
3699  if (fem_element1_arete->get_nb_fem_noeud()==2)
3700  {
3701  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
3702  if(noeud0!=fem_noeud0)
3703  {
3704  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3705  nb++;
3706  fem_noeud0 = noeud0;
3707  }
3708  else
3709  {
3710  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3711  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3712  nb++;
3713  fem_noeud0 = noeud1;
3714  }
3715  }
3716 
3717  if (fem_element1_arete->get_nb_fem_noeud()==3)
3718  {
3719  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
3720  if(noeud0!=fem_noeud0)
3721  {
3722  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3723  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3724  nb++;
3725  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3726  nb++;
3727  fem_noeud0 = noeud0;
3728  }
3729  else
3730  {
3731  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3732  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
3733  nb++;
3734  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
3735  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
3736  nb++;
3737  fem_noeud0 = noeud2;
3738  }
3739  }
3740  }
3741  }
3742  }
3743  }*/
3744  }
3745 
3746 
3747  //********* La face n'est pas idealisee
3748  else
3749  {
3750 
3751  //** Chercher Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
3752  int nb_coarete = Arete->get_nb_mg_coarete();
3753 
3754  int num_faceid = 0;
3755  int arete_a_projeter = 0;
3756 
3757  for(int co =0; co<nb_coarete;co++)
3758  {
3759  MG_COARETE* coArete1 = Arete->get_mg_coarete(co);
3760  if(coArete1 != coArete)
3761  {
3762  MG_BOUCLE* Boucle1 = coArete1->get_boucle();
3763  MG_FACE* Face1 = Boucle1->get_mg_face();
3765  int nb_face = mggeom->get_nb_mg_face();
3766  for (int f =0; f<nb_face;f++)
3767  {
3768  MG_FACE* F = mggeom->get_mg_face(f);
3769  if(faceso[f] == 1) num_faceid = num_faceid + 1;
3770  if(F == Face1 && faceso[f] == 1)
3771  {
3772  arete_a_projeter = 1;
3773  break;
3774  }
3775  }
3776  }
3777  }
3778  // Fin de la recherche Si l'arete est � projeter (appartient � une face d�ja id�alis�e) ou Non
3779 
3780 
3781 
3782  for (int i =0; i<nb_seg;i++)
3783  {
3784 
3785  if(i==0)
3786  {
3787  if(arete_a_projeter == 1)
3788  {
3789 
3790  // Projeter sur num_faceid
3791  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid);
3792 
3793 
3794 
3796  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3797  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3798  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3799 
3800 
3801 
3802  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3803  nb++;
3804  }
3805  else
3806  {
3807 
3808  //******************* rechercher si il y a une arete au sommet qui est projetee
3809 
3810  int sommet_a_projeter = 0;
3811  int num_faceid_sommet1 = 0;
3812 
3813  int nb_cosommet = sommet1->get_nb_mg_cosommet();
3814  for (int ii =0; ii<nb_cosommet;ii++)
3815  {
3816  MG_COSOMMET* cosommet_sommet1 = sommet1->get_mg_cosommet(ii);
3817  MG_ARETE* arete_au_sommet1 = cosommet_sommet1->get_arete();
3818  int nb_coarete_sommet1 = arete_au_sommet1->get_nb_mg_coarete();
3819  for(int co =0; co<nb_coarete_sommet1;co++)
3820  {
3821  MG_COARETE* coArete_sommet1 = arete_au_sommet1->get_mg_coarete(co);
3822  if(coArete_sommet1 != coArete)
3823  {
3824  MG_BOUCLE* Boucle1 = coArete_sommet1->get_boucle();
3825  MG_FACE* Face1 = Boucle1->get_mg_face();
3827  int nb_face = mggeom->get_nb_mg_face();
3828 
3829  num_faceid_sommet1 = 0;
3830 
3831  for (int f =0; f<nb_face;f++)
3832  {
3833  MG_FACE* F = mggeom->get_mg_face(f);
3834  if(faceso[f] == 1) num_faceid_sommet1 = num_faceid_sommet1 + 1;
3835  if(F == Face1 && faceso[f] == 1)
3836  {
3837  sommet_a_projeter = 1;
3838  goto arete_sommet_projeteeCyCone;
3839  }
3840  }
3841  }
3842  }
3843  }
3844  arete_sommet_projeteeCyCone:
3845  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3846 
3847  if(sommet_a_projeter == 1)
3848  {
3849 
3850  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid_sommet1);
3851 
3853  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3854  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3855  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3856 
3857  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3858  nb++;
3859  }
3860  else
3861  {
3862 
3863 
3864  fonction.Ajouter_Point_Courbe(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
3865  nb++;
3866  }
3867  }
3868  }
3869 
3870 
3871  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_element1s_noeud = fem_noeud0->get_lien_element1();
3872 
3873  for (int j =0; j<liste_element1s_arete.get_nb();j++)
3874  {
3875  FEM_ELEMENT1* fem_element1_arete = liste_element1s_arete.get(j);
3876 
3877  for (int k =0; k<liste_element1s_noeud->get_nb();k++)
3878  {
3879  FEM_ELEMENT1* fem_element1_noeud = liste_element1s_noeud->get(k);
3880  if (fem_element1_arete==fem_element1_noeud)
3881  {
3882  liste_element1s_arete.supprimer(fem_element1_arete);
3883 
3884  // Si nombre de noeuds par segment == 2 *******************************************************************
3885  if (fem_element1_arete->get_nb_fem_noeud()==2)
3886  {
3887  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
3888  if(noeud0!=fem_noeud0)
3889  {
3890  //***************************************************************************************************************
3891  if(arete_a_projeter == 1)
3892  {
3893  // Projeter sur num_faceid
3894  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
3895 
3897  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3898  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3899  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3900 
3901  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3902  nb++;
3903  }
3904  else
3905  {
3906  if(i==(nb_seg-1))
3907  {
3908  //******************* rechercher si il y a une arete au sommet qui est projetee
3909  int num_faceid_sommet2 = 0;
3910  int sommet2_a_projeter = 0;
3911  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
3912  MG_SOMMET* sommet2 = cosommet2->get_sommet();
3913  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
3914  for (int ii =0; ii<nb_cosommet2;ii++)
3915  {
3916  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
3917  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
3918  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
3919  for(int co =0; co<nb_coarete_sommet2;co++)
3920  {
3921  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
3922  if(coArete_sommet2 != coArete)
3923  {
3924  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
3925  MG_FACE* Face2 = Boucle2->get_mg_face();
3927  int nb_face = mggeom->get_nb_mg_face();
3928 
3929  num_faceid_sommet2 = 0;
3930 
3931  for (int f =0; f<nb_face;f++)
3932  {
3933  MG_FACE* F = mggeom->get_mg_face(f);
3934  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
3935  if(F == Face2 && faceso[f] == 1)
3936  {
3937  sommet2_a_projeter = 1;
3938  goto arete_sommet2_projeteeCy10;
3939  }
3940  }
3941  }
3942  }
3943  }
3944  arete_sommet2_projeteeCy10:
3945  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
3946 
3947  if(sommet2_a_projeter == 1)
3948  {
3949  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
3950 
3952  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3953  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3954  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3955 
3956  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3957 
3958  nb++;
3959  }
3960  else
3961  {
3962  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3963  nb++;
3964  }
3965  }
3966  else
3967  {
3968  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
3969  nb++;
3970  }
3971  }
3972  fem_noeud0 = noeud0;
3973  }
3974  //** FIN if(noeud0!=fem_noeud0)
3975  //*************************************************************************************************************
3976 
3977  else
3978  {
3979  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
3980 
3981  if(arete_a_projeter == 1)
3982  {
3983  // Projeter sur num_faceid
3984  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
3985 
3987  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
3988  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
3989  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
3990 
3991  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
3992  nb++;
3993  }
3994  else
3995  {
3996  if(i==(nb_seg-1))
3997  {
3998  //******************* rechercher si il y a une arete au sommet2 qui est projetee
3999  int num_faceid_sommet2 = 0;
4000  int sommet2_a_projeter = 0;
4001  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
4002  MG_SOMMET* sommet2 = cosommet2->get_sommet();
4003  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
4004  for (int ii =0; ii<nb_cosommet2;ii++)
4005  {
4006  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
4007  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
4008  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
4009  for(int co =0; co<nb_coarete_sommet2;co++)
4010  {
4011  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
4012  if(coArete_sommet2 != coArete)
4013  {
4014  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
4015  MG_FACE* Face2 = Boucle2->get_mg_face();
4017  int nb_face = mggeom->get_nb_mg_face();
4018 
4019  num_faceid_sommet2 = 0;
4020 
4021  for (int f =0; f<nb_face;f++)
4022  {
4023  MG_FACE* F = mggeom->get_mg_face(f);
4024  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
4025  if(F == Face2 && faceso[f] == 1)
4026  {
4027  sommet2_a_projeter = 1;
4028  goto arete_sommet20_projetee211;
4029  }
4030  }
4031 
4032  }
4033  }
4034  }
4035  arete_sommet20_projetee211:
4036  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
4037 
4038  if(sommet2_a_projeter == 1)
4039  {
4040  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid_sommet2);
4041 
4043  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
4044  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
4045  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
4046 
4047  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4048  nb++;
4049  }
4050 
4051  else
4052  {
4053  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
4054  nb++;
4055  }
4056  }
4057  else
4058  {
4059  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
4060  nb++;
4061  }
4062 
4063  }
4064  //*******************************************************************************************
4065  fem_noeud0 = noeud1;
4066  }
4067  }
4068  if (fem_element1_arete->get_nb_fem_noeud()==3)
4069  {
4070 
4071  FEM_NOEUD* noeud0 = fem_element1_arete->get_fem_noeud(0);
4072  if(noeud0!=fem_noeud0)
4073  {
4074  //***************************************************************************************************************
4075  if(arete_a_projeter == 1)
4076  {
4077 
4078 
4079 
4080  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
4081  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
4083  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
4084  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
4085  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
4086 
4087  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4088  nb++;
4089  // Projeter sur num_faceid
4090  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
4095 
4096  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4097  nb++;
4098 
4099  }
4100  else
4101  {
4102  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
4103  fonction.Ajouter_Point_Arete(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
4104  nb++;
4105 
4106  if(i==(nb_seg-1))
4107  {
4108  //******************* rechercher si il y a une arete au sommet qui est projetee
4109  int num_faceid_sommet2 = 0;
4110  int sommet2_a_projeter = 0;
4111  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
4112  MG_SOMMET* sommet2 = cosommet2->get_sommet();
4113  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
4114  for (int ii =0; ii<nb_cosommet2;ii++)
4115  {
4116  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
4117  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
4118  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
4119  for(int co =0; co<nb_coarete_sommet2;co++)
4120  {
4121  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
4122  if(coArete_sommet2 != coArete)
4123  {
4124  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
4125  MG_FACE* Face2 = Boucle2->get_mg_face();
4127  int nb_face = mggeom->get_nb_mg_face();
4128 
4129  num_faceid_sommet2 = 0;
4130 
4131  for (int f =0; f<nb_face;f++)
4132  {
4133  MG_FACE* F = mggeom->get_mg_face(f);
4134  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
4135  if(F == Face2 && faceso[f] == 1)
4136  {
4137  sommet2_a_projeter = 1;
4138  goto arete_sommet2_projeteeCy1111;
4139  }
4140  }
4141  }
4142  }
4143  }
4144  arete_sommet2_projeteeCy1111:
4145  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
4146 
4147  if(sommet2_a_projeter == 1)
4148  {
4149  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
4150 
4152  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
4153  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
4154  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
4155 
4156  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4157 
4158  nb++;
4159  }
4160  else
4161  {
4162  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
4163  nb++;
4164  }
4165  }
4166  else
4167  {
4168  fonction.Ajouter_Point_Courbe(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
4169  nb++;
4170  }
4171  }
4172  fem_noeud0 = noeud0;
4173  }
4174  //** FIN if(noeud0!=fem_noeud0)
4175  //*************************************************************************************************************
4176 
4177  else
4178  {
4179  FEM_NOEUD* noeud2 = fem_element1_arete->get_fem_noeud(2);
4180 
4181  if(arete_a_projeter == 1)
4182  {
4183 
4184  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
4185  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
4187  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
4188  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
4189  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
4190 
4191  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4192  nb++;
4193  // Projeter sur num_faceid
4194 
4195  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid);
4200 
4201  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4202  nb++;
4203 
4204  }
4205  else
4206  {
4207  FEM_NOEUD* noeud1 = fem_element1_arete->get_fem_noeud(1);
4208  fonction.Ajouter_Point_Courbe(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
4209  nb++;
4210 
4211  if(i==(nb_seg-1))
4212  {
4213  //******************* rechercher si il y a une arete au sommet2 qui est projetee
4214  int num_faceid_sommet2 = 0;
4215  int sommet2_a_projeter = 0;
4216  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
4217  MG_SOMMET* sommet2 = cosommet2->get_sommet();
4218  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
4219  for (int ii =0; ii<nb_cosommet2;ii++)
4220  {
4221  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
4222  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
4223  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
4224  for(int co =0; co<nb_coarete_sommet2;co++)
4225  {
4226  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
4227  if(coArete_sommet2 != coArete)
4228  {
4229  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
4230  MG_FACE* Face2 = Boucle2->get_mg_face();
4232  int nb_face = mggeom->get_nb_mg_face();
4233 
4234  num_faceid_sommet2 = 0;
4235 
4236  for (int f =0; f<nb_face;f++)
4237  {
4238  MG_FACE* F = mggeom->get_mg_face(f);
4239  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
4240  if(F == Face2 && faceso[f] == 1)
4241  {
4242  sommet2_a_projeter = 1;
4243  goto arete_sommet20_projetee22222;
4244  }
4245  }
4246 
4247  }
4248  }
4249  }
4250  arete_sommet20_projetee22222:
4251  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
4252 
4253  if(sommet2_a_projeter == 1)
4254  {
4255  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid_sommet2);
4256 
4258  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
4259  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
4260  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
4261 
4262  fonction.Ajouter_Point_Courbe(xx,yy,zz,nb+1);
4263  nb++;
4264  }
4265 
4266  else
4267  {
4268  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
4269  nb++;
4270  }
4271  }
4272  else
4273  {
4274  fonction.Ajouter_Point_Courbe(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
4275  nb++;
4276  }
4277 
4278  }
4279  //*******************************************************************************************
4280  fem_noeud0 = noeud2;
4281  }
4282 
4283  }// Fin Si le nombre de noeuds par segment == 3
4284 
4285  }//Fin si l'un des segments qui appartiennent aux noeuds == l'un des segments de l'arete
4286 
4287  }//Fin for k = 0 jusqu'au liste_element1s_noeud
4288 
4289  }// Fin for j = 0 jusqu'au liste_element1s_arete
4290 
4291  }// Fin for i = 0 jusqu'au nombre de segments (seg) appartenant � l'arete
4292 
4293  }//Fin else // // la face n'est pas idealisee
4294 
4296 
4297  }// Fin for w == 0 jusq'au nombre d'aretes
4298 
4299  }// Fin for v == 0 jusq'au nombre de contours
4300 
4302 
4303  for (int v =0; v<face->get_nb_mg_boucle();v++)
4304  {
4305  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
4306  int nbCoarete = Boucle->get_nb_mg_coarete();
4307  for (int w =0; w<nbCoarete;w++)
4308  {
4309  MG_COARETE* coArete = Boucle->get_mg_coarete(w);
4310  MG_ARETE* Arete = coArete->get_arete();
4311 
4312  int nb_element1 = Arete->get_lien_fem_maillage()->get_nb();
4313  for (int i =0; i<nb_element1;i++)
4314  {
4315  FEM_ELEMENT1* mgsegment=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
4316  if (!fem_maillage->contient(mgsegment)) continue;
4317  if (mgsegment->get_nb_fem_noeud()==2)
4318  {
4319  FEM_NOEUD* noeud0 = mgsegment->get_fem_noeud(0);
4320  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
4321  liste_noeuds.supprimer(noeud0);
4322  liste_noeuds.supprimer(noeud1);
4323  }
4324  if (mgsegment->get_nb_fem_noeud()==3)
4325  {
4326  FEM_NOEUD* noeud0 = mgsegment->get_fem_noeud(0);
4327  FEM_NOEUD* noeud1 = mgsegment->get_fem_noeud(1);
4328  FEM_NOEUD* noeud2 = mgsegment->get_fem_noeud(2);
4329  liste_noeuds.supprimer(noeud0);
4330  liste_noeuds.supprimer(noeud1);
4331  liste_noeuds.supprimer(noeud2);
4332  }
4333  }
4334  }
4335  }
4336 
4337 
4338  for (int k =0; k < liste_noeuds.get_nb();k++)
4339  {
4340  FEM_NOEUD* noeud=liste_noeuds.get(k);
4341  fonction.Rapprocher_Surface_Point(noeud->get_x(coef),noeud->get_y(coef),noeud->get_z(coef));
4342  }
4345 
4346  //fonction.Creer_Face_Surface();
4347 
4348  for (int v =0; v<face->get_nb_mg_boucle();v++)
4349  {
4350  MG_BOUCLE* Boucle = face->get_mg_boucle(v);
4352  Rec.Reconstruire(Boucle, coef);
4353 
4355  }
4356 
4357  }// fin else
4358 
4359 } //fin else plan et ( cylindre & Cone ) (n'est pas plan ni cylindre ni cone)
4360 
4361 }// fin else plan (n'est pas plan)
4362 
4363 
4364 }// fin if tto
4365 
4366 
4367 
4368 }// fin else ====>>>> Idealiser == 1
4369 
4370 
4371 
4372 
4373 }
4374 
4375 
4377 {
4378 }
4379 
4380 
4381 
4382 
4383 
4384 
4385 
4386 
4387 
4388 
4389 
4390 
4391 
4392 
4393 
4394 
4395 
4396 
TPL_MAP_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_map_entite.h:69
MG_SOMMET::get_mg_cosommet
virtual MG_COSOMMET * get_mg_cosommet(int num)
Definition: mg_sommet.cpp:88
FEM_ELEMENT1::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
MG_ARETE::get_cosommet2
virtual class MG_COSOMMET * get_cosommet2(void)
Definition: mg_arete.cpp:85
REC_BREP::fonction
OCC_FONCTION_RECONSTRUCTION & fonction
Definition: rec_brep.h:56
OCC_FONCTION_RECONSTRUCTION
Definition: occ_fonction_reconstruction.h:84
MG_BOUCLE
Definition: mg_boucle.h:35
gestionversion.h
MG_BOUCLE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_boucle.cpp:78
MG_SURFACE
Definition: mg_surface.h:31
rec_face_nurbs.h
OCC_FONCTION_RECONSTRUCTION::Ajouter_Point_Arete
int Ajouter_Point_Arete(double x, double y, double z, int i)
Definition: occ_fonction_reconstruction.cpp:382
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
MG_SURFACE::get_type_geometrique
virtual int get_type_geometrique(TPL_LISTE_ENTITE< double > &param)=0
REC_BREP::fem_maillage
FEM_MAILLAGE * fem_maillage
Definition: rec_brep.h:52
GEOMETRIE::CONST::Co_CONE
@ Co_CONE
Definition: constantegeo.h:32
REC_FACE::testo
int testo
Definition: rec_face.h:46
fem_maillage.h
MG_COSOMMET
Definition: mg_cosommet.h:31
REC_FACE_NURBS::Reconstruire
void Reconstruire(MG_FACE *face, double coef)
Definition: rec_face_nurbs.cpp:49
OCC_FONCTION_RECONSTRUCTION::Pt_Proj_Surface_Ideal
int Pt_Proj_Surface_Ideal()
Definition: occ_fonction_reconstruction.cpp:608
MG_COARETE
Definition: mg_coarete.h:31
OCC_FONCTION_RECONSTRUCTION::Ajouter_Contour_Face
int Ajouter_Contour_Face(int ii)
Definition: occ_fonction_reconstruction.cpp:71
FEM_NOEUD::get_lien_element1
TPL_LISTE_ENTITE< class FEM_ELEMENT1 * > * get_lien_element1(void)
Definition: fem_noeud.cpp:394
FEM_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: fem_maillage.cpp:88
MG_COARETE::get_boucle
virtual MG_BOUCLE * get_boucle(void)
Definition: mg_coarete.cpp:53
MG_FACE::get_nb_mg_boucle
virtual int get_nb_mg_boucle(void)
Definition: mg_face.cpp:67
MG_SOMMET::get_nb_mg_cosommet
virtual int get_nb_mg_cosommet(void)
Definition: mg_sommet.cpp:64
OCC_FONCTION_RECONSTRUCTION::Determiner_Surface
int Determiner_Surface()
Definition: occ_fonction_reconstruction.cpp:184
OCC_FONCTION_RECONSTRUCTION::Initialiser_Surface
int Initialiser_Surface()
Definition: occ_fonction_reconstruction.cpp:166
FEM_ELEMENT2
Definition: fem_element2.h:34
OCC_FONCTION_RECONSTRUCTION::Construire_Surface_Contour
int Construire_Surface_Contour(int nb_aretes_ext)
Definition: occ_fonction_reconstruction.cpp:230
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
OCC_FONCTION_RECONSTRUCTION::Rapprocher_Surface_Courbe_Spline
int Rapprocher_Surface_Courbe_Spline(int nb_pts)
Definition: occ_fonction_reconstruction.cpp:395
MG_ARETE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_arete.cpp:106
REC_CONTOUR
Definition: rec_contour.h:33
f
double f(double x, long nb, double *xfonc, double *fonc, double eng, double eni, double lambda, double nor, double *fonc2)
Definition: fct_generateur_calibrage.cpp:96
FEM_ELEMENT2::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
REC_FACE_NURBS::Enregistrer
void Enregistrer(char *path)
Definition: rec_face_nurbs.cpp:4376
REC_FACE
Definition: rec_face.h:34
REC_FACE_NURBS::~REC_FACE_NURBS
virtual ~REC_FACE_NURBS()
Definition: rec_face_nurbs.cpp:45
rec_contour.h
FEM_MAILLAGE
Definition: fem_maillage.h:66
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MG_COSOMMET::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_cosommet.cpp:88
constantegeo.h
FEM_ELEMENT1
Definition: fem_element1.h:34
REC_FACE::faceso
int * faceso
Definition: rec_face.h:47
tpl_map_entite.h
MG_BOUCLE::get_mg_face
virtual MG_FACE * get_mg_face(void)
Definition: mg_boucle.cpp:102
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
OCC_FONCTION_RECONSTRUCTION::Pnt_Proj_Surface_Ideal
double Pnt_Proj_Surface_Ideal(int ii)
Definition: occ_fonction_reconstruction.cpp:618
MG_GEOMETRIE::get_mg_face
MG_FACE * get_mg_face(unsigned int num)
Definition: mg_geometrie.cpp:1251
GEOMETRIE::CONST::Co_PLAN
@ Co_PLAN
Definition: constantegeo.h:32
MG_COSOMMET::get_sommet
virtual MG_SOMMET * get_sommet(void)
Definition: mg_cosommet.cpp:83
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
FEM_NOEUD
Definition: fem_noeud.h:35
REC_CONTOUR::Reconstruire
void Reconstruire(MG_BOUCLE *Boucle, double coef)
Definition: rec_contour.cpp:45
MG_GEOMETRIE::get_nb_mg_face
unsigned int get_nb_mg_face(void)
Definition: mg_geometrie.cpp:1264
OCC_FONCTION_RECONSTRUCTION::Ajouter_courbe_liste
int Ajouter_courbe_liste(int nb_pts, int num)
Definition: occ_fonction_reconstruction.cpp:213
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
MG_BOUCLE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_boucle.cpp:84
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
FEM_ELEMENT1::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
fem_segment2.h
FEM_MAILLAGE::contient
bool contient(MG_IDENTIFICATEUR *id)
Definition: fem_maillage.cpp:110
TPL_MAP_ENTITE::get
virtual X get(int num)
Definition: tpl_map_entite.h:89
GEOMETRIE::CONST::Co_TORE
@ Co_TORE
Definition: constantegeo.h:32
fem_triangle3.h
MG_ELEMENT_TOPOLOGIQUE::get_lien_fem_maillage
virtual TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * > * get_lien_fem_maillage(void)
Definition: mg_element_topologique.cpp:67
MG_GEOMETRIE
Definition: mg_geometrie.h:84
GEOMETRIE::CONST::Co_SPHERE
@ Co_SPHERE
Definition: constantegeo.h:32
OCC_FONCTION_RECONSTRUCTION::Rapprocher_Surface_Point
int Rapprocher_Surface_Point(double x, double y, double z)
Definition: occ_fonction_reconstruction.cpp:171
TPL_LISTE_ENTITE< double >
REC_BREP::Idealiser
int Idealiser
Definition: rec_brep.h:53
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
OCC_FONCTION_RECONSTRUCTION::Calculer_Surface
int Calculer_Surface()
Definition: occ_fonction_reconstruction.cpp:179
occ_fonction.h
MG_FACE::get_mg_boucle
virtual MG_BOUCLE * get_mg_boucle(int num)
Definition: mg_face.cpp:72
MG_ARETE::get_cosommet1
virtual class MG_COSOMMET * get_cosommet1(void)
Definition: mg_arete.cpp:81
OCC_FONCTION_RECONSTRUCTION::Ajouter_Point_Courbe
int Ajouter_Point_Courbe(double x, double y, double z, int i)
Definition: occ_fonction_reconstruction.cpp:203
MG_SOMMET
Definition: mg_sommet.h:35
MG_COARETE::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_coarete.cpp:58
REC_FACE_NURBS::REC_FACE_NURBS
REC_FACE_NURBS(FEM_MAILLAGE *fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION &fonc, int test, int *faces)
Definition: rec_face_nurbs.cpp:41
MG_FACE::get_surface
virtual MG_SURFACE * get_surface(void)
Definition: mg_face.cpp:109
OCC_FONCTION_RECONSTRUCTION::Projeter_Point_Surface_Idealisee
int Projeter_Point_Surface_Idealisee(double x, double y, double z, int num)
Definition: occ_fonction_reconstruction.cpp:597
GEOMETRIE::CONST::Co_CYLINDRE
@ Co_CYLINDRE
Definition: constantegeo.h:32
MG_ARETE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_arete.cpp:228
OCC_FONCTION_RECONSTRUCTION::Creer_Face_Surface
int Creer_Face_Surface()
Definition: occ_fonction_reconstruction.cpp:278