MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_arete_spline.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_arete_spline.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_arete_spline.h"
28 #include "fem_segment2.h"
29 #include "fem_noeud.h"
30 #include "fem_maillage.h"
31 #include "tpl_map_entite.h"
32 #include "math.h"
33 
34 
35 
36 
37 #pragma package(smart_init)
38 
39 
40 
41 
42 
43 REC_ARETE_SPLINE::REC_ARETE_SPLINE(FEM_MAILLAGE* fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION& fonc, int test, int* faces):REC_ARETE(fem_mai, Idealise, fonc, test, faces)
44 {
45 
46 }
47 
49 {
50 
51 }
52 
53 void REC_ARETE_SPLINE::Reconstruire(MG_COARETE* coArete, double coef)
54 {
55 
56 
57 
58 MG_ARETE* Arete = coArete->get_arete();
59 
60 /*
61 int Face_a_idealiser = 0;
62 for (int f =0; f<nb_face;f++)
63  {
64  MG_FACE* F = mggeometrie->get_mg_face(f);
65  if(F==Face)
66  {
67  Face_a_idealiser = faceso[f];
68  }
69  }
70 */
71 
72 int nb_segment = Arete->get_lien_fem_maillage()->get_nb();
73 int nb=0;
74 
75 if(testo == 1 || Idealiser == 0)
76 {
77 
78 
79 MG_BOUCLE* Boucle = coArete->get_boucle();
80 MG_FACE* Face = Boucle->get_mg_face();
81 MG_SURFACE* surface = Face->get_surface();
82 TPL_LISTE_ENTITE <double> Parametres;
83 int type_surface = surface->get_type_geometrique(Parametres);
84 
85 
86 
87 int testU = 0;
88 int testV = 0;
89 
90 if(testo == 1)
91 
92 {
93 if((type_surface == 2006)||(type_surface == 2003)||(type_surface == 2002))
94  {
95 
96  double Umax = 0.0;
97  double Vmax = 0.0;
98  double Umin = 2*M_PI;
99  double Vmin = 2*M_PI;
100 
101  int nb_aretes_boucle = Boucle->get_nb_mg_coarete();
102  for (int i =0; i<nb_aretes_boucle;i++)
103  {
104  MG_COARETE* coAret = Boucle->get_mg_coarete(i);
105  MG_ARETE* Aret = coAret->get_arete();
106 
107  TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_seg_Aret;
108  int nb_seg_Aret = Aret->get_lien_fem_maillage()->get_nb();
109  for (int j =0; j<nb_seg_Aret;j++)
110  {
111  FEM_ELEMENT1* fem_segm=(FEM_ELEMENT1*)Aret->get_lien_fem_maillage()->get(j);
112  if (!fem_maillage->contient(fem_segm)) continue;
113  liste_seg_Aret.ajouter(fem_segm);
114  }
115  double UU;
116  double VV;
117  for (int j =0; j<liste_seg_Aret.get_nb(); j++)
118  {
119  FEM_ELEMENT1* fem_segm=liste_seg_Aret.get(j);
120  if(j==0)
121  {
122  FEM_NOEUD* node1 = fem_segm->get_fem_noeud(0);
123  UU = fonction.Analyser_interval_AreteU(node1->get_x(coef),node1->get_y(coef),node1->get_z(coef));
124  VV = fonction.Analyser_interval_AreteV(node1->get_x(coef),node1->get_y(coef),node1->get_z(coef));
125  if(UU>Umax) Umax=UU;
126  if(UU<Umin) Umin=UU;
127  if(VV>Vmax) Vmax=VV;
128  if(VV<Vmin) Vmin=VV;
129  }
130 
131  FEM_NOEUD* node2 = fem_segm->get_fem_noeud(1);
132  UU = fonction.Analyser_interval_AreteU(node2->get_x(coef),node2->get_y(coef),node2->get_z(coef));
133  VV = fonction.Analyser_interval_AreteV(node2->get_x(coef),node2->get_y(coef),node2->get_z(coef));
134  if(UU>Umax) Umax=UU;
135  if(UU<Umin) Umin=UU;
136  if(VV>Vmax) Vmax=VV;
137  if(VV<Vmin) Vmin=VV;
138  }
139  }
140  if(Umax>= (7*M_PI )/4) testU = 1;
141  if(((type_surface == 2002)||(type_surface == 2001))&&(Vmax>= (7*M_PI )/4)) testV = 1;
142 
143  }
144 
145 }
146 
147 
148 TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_segments_arete;
149 
150 for (int i =0; i<nb_segment;i++)
151  {
152  FEM_ELEMENT1* fem_segment=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
153  if (!fem_maillage->contient(fem_segment)) continue;
154  liste_segments_arete.ajouter(fem_segment);
155  }
156 
157 MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
158 MG_SOMMET* sommet1 = cosommet1->get_sommet();
159 int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
160 FEM_NOEUD* fem_noeud0;
161 for (int i =0; i<nb_noeud;i++)
162  {
163  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
164  if (!fem_maillage->contient(noeud)) continue;
165  fem_noeud0 = noeud;
166  }
167 
168 int nb_seg = liste_segments_arete.get_nb();
169 
170 
171 
172 for (int i =0; i<nb_seg;i++)
173  {
174  if(i==0)
175  {
176  fonction.Ajouter_Point_AreteUV(testU,testV,fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
177  nb++;
178 
179  }
180 
181  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_segments_noeud = fem_noeud0->get_lien_element1();
182 
183  for (int j =0; j<liste_segments_arete.get_nb();j++)
184  {
185  FEM_ELEMENT1* fem_segment_arete = liste_segments_arete.get(j);
186 
187  for (int k =0; k<liste_segments_noeud->get_nb();k++)
188  {
189  FEM_ELEMENT1* fem_segment_noeud = liste_segments_noeud->get(k);
190  if (fem_segment_arete==fem_segment_noeud)
191  {
192  liste_segments_arete.supprimer(fem_segment_arete);
193  if (fem_segment_arete->get_nb_fem_noeud()==2)
194  {
195  FEM_NOEUD* noeud0 = fem_segment_arete->get_fem_noeud(0);
196  if(noeud0!=fem_noeud0)
197  {
198  fonction.Ajouter_Point_AreteUV(testU,testV,noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
199  nb++;
200  fem_noeud0 = noeud0;
201 
202  }
203  else
204  {
205  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
206  fonction.Ajouter_Point_AreteUV(testU,testV,noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
207  nb++;
208 
209 
210  fem_noeud0 = noeud1;
211  }
212  }
213  if (fem_segment_arete->get_nb_fem_noeud()==3)
214  {
215  FEM_NOEUD* noeud0 = fem_segment_arete->get_fem_noeud(0);
216  if(noeud0!=fem_noeud0)
217  {
218  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
219  fonction.Ajouter_Point_AreteUV(testU,testV,fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
220  nb++;
221  fonction.Ajouter_Point_AreteUV(testU,testV,fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
222  nb++;
223  fem_noeud0 = noeud0;
224  }
225  else
226  {
227  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
228  fonction.Ajouter_Point_AreteUV(testU,testV,fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
229  nb++;
230  FEM_NOEUD* noeud2 = fem_segment_arete->get_fem_noeud(2);
231  fonction.Ajouter_Point_AreteUV(testU,testV,fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
232  nb++;
233  fem_noeud0 = noeud2;
234  }
235  }
236  }
237  }
238  }
239  }
240 
241 
242 
243 
244 }
245 
246 else
247 {
248 
249 int nb_coarete = Arete->get_nb_mg_coarete();
250 
251 int num_faceid = 0;
252 int arete_a_projeter = 0;
253 
254 for(int co =0; co<nb_coarete;co++)
255  {
256  MG_COARETE* coArete1 = Arete->get_mg_coarete(co);
257  if(coArete1 != coArete)
258  {
259  MG_BOUCLE* Boucle1 = coArete1->get_boucle();
260  MG_FACE* Face1 = Boucle1->get_mg_face();
262  int nb_face = mggeom->get_nb_mg_face();
263  for (int f =0; f<nb_face;f++)
264  {
265  MG_FACE* F = mggeom->get_mg_face(f);
266  if(faceso[f] == 1) num_faceid = num_faceid + 1;
267  if(F == Face1 && faceso[f] == 1)
268  {
269  arete_a_projeter = 1;
270  break;
271  }
272  }
273  }
274  }
275 
276 
277 TPL_MAP_ENTITE<FEM_ELEMENT1*> liste_segments_arete;
278 
279 for (int i =0; i<nb_segment;i++)
280  {
281  FEM_ELEMENT1* fem_segment=(FEM_ELEMENT1*)Arete->get_lien_fem_maillage()->get(i);
282  if (!fem_maillage->contient(fem_segment)) continue;
283  liste_segments_arete.ajouter(fem_segment);
284  }
285 
286 MG_COSOMMET* cosommet1 = Arete->get_cosommet1();
287 MG_SOMMET* sommet1 = cosommet1->get_sommet();
288 int nb_noeud = sommet1->get_lien_fem_maillage()->get_nb();
289 FEM_NOEUD* fem_noeud0;
290 for (int i =0; i<nb_noeud;i++)
291  {
292  FEM_NOEUD* noeud =(FEM_NOEUD*)sommet1->get_lien_fem_maillage()->get(i);
293  if (!fem_maillage->contient(noeud)) continue;
294  fem_noeud0 = noeud;
295  }
296 
297 int nb_seg = liste_segments_arete.get_nb();
298 
299 
300 
301 
302 for (int i =0; i<nb_seg;i++)
303  {
304 
305  if(i==0)
306  {
307  if(arete_a_projeter == 1)
308  {
309 
310 
311 
312  // Projeter sur num_faceid
313  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid);
315  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
316  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
317  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
318 
319  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
320  nb++;
321  }
322  else
323  {
324 
325  //******************* rechercher si il y a une arete au sommet qui est projetee
326 
327  int sommet_a_projeter = 0;
328  int num_faceid_sommet1 = 0;
329 
330  int nb_cosommet = sommet1->get_nb_mg_cosommet();
331  for (int ii =0; ii<nb_cosommet;ii++)
332  {
333  MG_COSOMMET* cosommet_sommet1 = sommet1->get_mg_cosommet(ii);
334  MG_ARETE* arete_au_sommet1 = cosommet_sommet1->get_arete();
335  int nb_coarete_sommet1 = arete_au_sommet1->get_nb_mg_coarete();
336  for(int co =0; co<nb_coarete_sommet1;co++)
337  {
338  MG_COARETE* coArete_sommet1 = arete_au_sommet1->get_mg_coarete(co);
339  if(coArete_sommet1 != coArete)
340  {
341  MG_BOUCLE* Boucle1 = coArete_sommet1->get_boucle();
342  MG_FACE* Face1 = Boucle1->get_mg_face();
344  int nb_face = mggeom->get_nb_mg_face();
345 
346  num_faceid_sommet1 = 0;
347 
348  for (int f =0; f<nb_face;f++)
349  {
350  MG_FACE* F = mggeom->get_mg_face(f);
351  if(faceso[f] == 1) num_faceid_sommet1 = num_faceid_sommet1 + 1;
352  if(F == Face1 && faceso[f] == 1)
353  {
354  sommet_a_projeter = 1;
355  goto arete_sommet_projetee;
356  }
357  }
358  }
359  }
360  }
361  arete_sommet_projetee:
362  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
363 
364  if(sommet_a_projeter == 1)
365  {
366 
367 
368  fonction.Projeter_Point_Surface_Idealisee(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),num_faceid_sommet1);
370  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
371  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
372  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
373 
374  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
375  nb++;
376  }
377  else
378  {
379  fonction.Ajouter_Point_Arete(fem_noeud0->get_x(coef),fem_noeud0->get_y(coef),fem_noeud0->get_z(coef),nb+1);
380  nb++;
381  }
382  }
383  }
384  TPL_LISTE_ENTITE<FEM_ELEMENT1*>* liste_segments_noeud = fem_noeud0->get_lien_element1();
385 
386  for (int j =0; j<liste_segments_arete.get_nb();j++)
387  {
388  FEM_ELEMENT1* fem_segment_arete = liste_segments_arete.get(j);
389 
390  for (int k =0; k<liste_segments_noeud->get_nb();k++)
391  {
392  FEM_ELEMENT1* fem_segment_noeud = liste_segments_noeud->get(k);
393  if (fem_segment_arete==fem_segment_noeud)
394  {
395  liste_segments_arete.supprimer(fem_segment_arete);
396  if (fem_segment_arete->get_nb_fem_noeud()==2)
397  {
398  FEM_NOEUD* noeud0 = fem_segment_arete->get_fem_noeud(0);
399  if(noeud0!=fem_noeud0)
400  {
401  if(arete_a_projeter == 1)
402  {
403  // Projeter sur num_faceid
404  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
406  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
407  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
408  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
409 
410  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
411  nb++;
412  }
413  else
414  {
415  if(i==(nb_seg-1))
416  {
417  //******************* rechercher si il y a une arete au sommet qui est projetee
418  int num_faceid_sommet2 = 0;
419  int sommet2_a_projeter = 0;
420  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
421  MG_SOMMET* sommet2 = cosommet2->get_sommet();
422  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
423  for (int ii =0; ii<nb_cosommet2;ii++)
424  {
425  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
426  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
427  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
428  for(int co =0; co<nb_coarete_sommet2;co++)
429  {
430  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
431  if(coArete_sommet2 != coArete)
432  {
433  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
434  MG_FACE* Face2 = Boucle2->get_mg_face();
436  int nb_face = mggeom->get_nb_mg_face();
437 
438  num_faceid_sommet2 = 0;
439 
440  for (int f =0; f<nb_face;f++)
441  {
442  MG_FACE* F = mggeom->get_mg_face(f);
443  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
444  if(F == Face2 && faceso[f] == 1)
445  {
446  sommet2_a_projeter = 1;
447  goto arete_sommet2_projetee;
448  }
449  }
450 
451  }
452  }
453  }
454  arete_sommet2_projetee:
455  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
456 
457  if(sommet2_a_projeter == 1)
458  {
459  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
461  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
462  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
463  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
464 
465  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
466  nb++;
467  }
468  else
469  {
470  fonction.Ajouter_Point_Arete(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
471  nb++;
472  }
473  }
474 
475  else
476  {
477  fonction.Ajouter_Point_Arete(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
478  nb++;
479  }
480  }
481  fem_noeud0 = noeud0;
482 
483  }
484 
485 
486  else
487  {
488  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
489 
490  if(arete_a_projeter == 1)
491  {
492  // Projeter sur num_faceid
493  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
495  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
496  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
497  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
498 
499  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
500  nb++;
501  }
502  else
503  {
504  if(i==(nb_seg-1))
505  {
506  //******************* rechercher si il y a une arete au sommet qui est projetee
507  int num_faceid_sommet2 = 0;
508  int sommet2_a_projeter = 0;
509  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
510  MG_SOMMET* sommet2 = cosommet2->get_sommet();
511  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
512  for (int ii =0; ii<nb_cosommet2;ii++)
513  {
514  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
515  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
516  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
517  for(int co =0; co<nb_coarete_sommet2;co++)
518  {
519  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
520  if(coArete_sommet2 != coArete)
521  {
522  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
523  MG_FACE* Face2 = Boucle2->get_mg_face();
525  int nb_face = mggeom->get_nb_mg_face();
526 
527  num_faceid_sommet2 = 0;
528 
529  for (int f =0; f<nb_face;f++)
530  {
531  MG_FACE* F = mggeom->get_mg_face(f);
532  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
533  if(F == Face2 && faceso[f] == 1)
534  {
535  sommet2_a_projeter = 1;
536  goto arete_sommet20_projetee;
537  }
538  }
539 
540  }
541  }
542  }
543  arete_sommet20_projetee:
544  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
545 
546  if(sommet2_a_projeter == 1)
547  {
548  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid_sommet2);
550  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
551  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
552  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
553 
554  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
555  nb++;
556  }
557  else
558  {
559  fonction.Ajouter_Point_Arete(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
560  nb++;
561  }
562  }
563  else
564  {
565  fonction.Ajouter_Point_Arete(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
566  nb++;
567 
568  }
569  }
570 
571  fem_noeud0 = noeud1;
572  }
573  }
574  if (fem_segment_arete->get_nb_fem_noeud()==3)
575  {
576  FEM_NOEUD* noeud0 = fem_segment_arete->get_fem_noeud(0);
577  if(noeud0!=fem_noeud0)
578  {
579 
580  if(arete_a_projeter == 1)
581  {
582  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
583  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
585  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
586  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
587  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
588 
589  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
590  nb++;
591  // Projeter sur num_faceid
592  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid);
597 
598  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
599  nb++;
600  }
601  else
602  {
603  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
604  fonction.Ajouter_Point_Arete(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
605  nb++;
606 
607  if(i==(nb_seg-1))
608  {
609  //******************* rechercher si il y a une arete au sommet qui est projetee
610  int num_faceid_sommet2 = 0;
611  int sommet2_a_projeter = 0;
612  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
613  MG_SOMMET* sommet2 = cosommet2->get_sommet();
614  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
615  for (int ii =0; ii<nb_cosommet2;ii++)
616  {
617  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
618  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
619  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
620  for(int co =0; co<nb_coarete_sommet2;co++)
621  {
622  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
623  if(coArete_sommet2 != coArete)
624  {
625  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
626  MG_FACE* Face2 = Boucle2->get_mg_face();
628  int nb_face = mggeom->get_nb_mg_face();
629 
630  num_faceid_sommet2 = 0;
631 
632  for (int f =0; f<nb_face;f++)
633  {
634  MG_FACE* F = mggeom->get_mg_face(f);
635  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
636  if(F == Face2 && faceso[f] == 1)
637  {
638  sommet2_a_projeter = 1;
639  goto arete_sommet2_projetee_seg3;
640  }
641  }
642 
643  }
644  }
645  }
646  arete_sommet2_projetee_seg3:
647  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
648 
649  if(sommet2_a_projeter == 1)
650  {
651  fonction.Projeter_Point_Surface_Idealisee(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),num_faceid_sommet2);
653  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
654  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
655  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
656 
657  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
658  nb++;
659  }
660  else
661  {
662  fonction.Ajouter_Point_Arete(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
663  nb++;
664  }
665  }
666  else
667  {
668  fonction.Ajouter_Point_Arete(noeud0->get_x(coef),noeud0->get_y(coef),noeud0->get_z(coef),nb+1);
669  nb++;
670  }
671  }
672  fem_noeud0 = noeud0;
673 
674  /*
675  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
676  fonction.Ajouter_Point_Arete(noeud1->get_x(),noeud1->get_y(),noeud1->get_z(),nb+1);
677  nb++;
678  fonction.Ajouter_Point_Arete(noeud0->get_x(),noeud0->get_y(),noeud0->get_z(),nb+1);
679  nb++;
680  fem_noeud0 = noeud0;
681  */
682 
683 
684  }
685  else
686  {
687  FEM_NOEUD* noeud2 = fem_segment_arete->get_fem_noeud(2);
688  if(arete_a_projeter == 1)
689  {
690 
691  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
692  fonction.Projeter_Point_Surface_Idealisee(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),num_faceid);
694  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
695  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
696  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
697 
698  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
699  nb++;
700  // Projeter sur num_faceid
701 
702  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid);
707 
708  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
709  nb++;
710  }
711  else
712  {
713  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
714  fonction.Ajouter_Point_Arete(noeud1->get_x(coef),noeud1->get_y(coef),noeud1->get_z(coef),nb+1);
715  nb++;
716 
717  if(i==(nb_seg-1))
718  {
719  //******************* rechercher si il y a une arete au sommet qui est projetee
720  int num_faceid_sommet2 = 0;
721  int sommet2_a_projeter = 0;
722  MG_COSOMMET* cosommet2 = Arete->get_cosommet2();
723  MG_SOMMET* sommet2 = cosommet2->get_sommet();
724  int nb_cosommet2 = sommet2->get_nb_mg_cosommet();
725  for (int ii =0; ii<nb_cosommet2;ii++)
726  {
727  MG_COSOMMET* cosommet_sommet2 = sommet2->get_mg_cosommet(ii);
728  MG_ARETE* arete_au_sommet2 = cosommet_sommet2->get_arete();
729  int nb_coarete_sommet2 = arete_au_sommet2->get_nb_mg_coarete();
730  for(int co =0; co<nb_coarete_sommet2;co++)
731  {
732  MG_COARETE* coArete_sommet2 = arete_au_sommet2->get_mg_coarete(co);
733  if(coArete_sommet2 != coArete)
734  {
735  MG_BOUCLE* Boucle2 = coArete_sommet2->get_boucle();
736  MG_FACE* Face2 = Boucle2->get_mg_face();
738  int nb_face = mggeom->get_nb_mg_face();
739 
740  num_faceid_sommet2 = 0;
741 
742  for (int f =0; f<nb_face;f++)
743  {
744  MG_FACE* F = mggeom->get_mg_face(f);
745  if(faceso[f] == 1) num_faceid_sommet2 = num_faceid_sommet2 + 1;
746  if(F == Face2 && faceso[f] == 1)
747  {
748  sommet2_a_projeter = 1;
749  goto arete_sommet2_projetee_seg32;
750  }
751  }
752 
753  }
754  }
755  }
756  arete_sommet2_projetee_seg32:
757  //******************* Fin de recherche si il y a une arete au sommet qui est projetee
758 
759  if(sommet2_a_projeter == 1)
760  {
761  fonction.Projeter_Point_Surface_Idealisee(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),num_faceid_sommet2);
763  double xx = fonction.Pnt_Proj_Surface_Ideal(1);
764  double yy = fonction.Pnt_Proj_Surface_Ideal(2);
765  double zz = fonction.Pnt_Proj_Surface_Ideal(3);
766 
767  fonction.Ajouter_Point_Arete(xx,yy,zz,nb+1);
768  nb++;
769  }
770  else
771  {
772  fonction.Ajouter_Point_Arete(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
773  nb++;
774  }
775  }
776 
777  else
778  {
779  fonction.Ajouter_Point_Arete(noeud2->get_x(coef),noeud2->get_y(coef),noeud2->get_z(coef),nb+1);
780  nb++;
781  }
782  }
783  fem_noeud0 = noeud2;
784 
785  /*
786  FEM_NOEUD* noeud1 = fem_segment_arete->get_fem_noeud(1);
787  fonction.Ajouter_Point_Arete(noeud1->get_x(),noeud1->get_y(),noeud1->get_z(),nb+1);
788  nb++;
789  FEM_NOEUD* noeud2 = fem_segment_arete->get_fem_noeud(2);
790  fonction.Ajouter_Point_Arete(noeud2->get_x(),noeud2->get_y(),noeud2->get_z(),nb+1);
791  nb++;
792  fem_noeud0 = noeud2;
793  */
794  }
795  }
796  }
797  }
798  }
799  }
800 
801 
802 
803 }//fin else
804 
806 
807 
808 
809 }
810 
811 
813 {
814 }
815 
816 
817 
818 
819 
820 
821 
822 
823 
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
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
REC_FACE::testo
int testo
Definition: rec_face.h:46
fem_maillage.h
MG_COSOMMET
Definition: mg_cosommet.h:31
REC_ARETE_SPLINE::REC_ARETE_SPLINE
REC_ARETE_SPLINE(FEM_MAILLAGE *fem_mai, int Idealise, OCC_FONCTION_RECONSTRUCTION &fonc, int test, int *faces)
Definition: rec_arete_spline.cpp:43
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
fem_noeud.h
OCC_FONCTION_RECONSTRUCTION::Ajouter_Point_AreteUV
int Ajouter_Point_AreteUV(int testU, int testV, double x, double y, double z, int i)
Definition: occ_fonction_reconstruction.cpp:634
FEM_NOEUD::get_lien_element1
TPL_LISTE_ENTITE< class FEM_ELEMENT1 * > * get_lien_element1(void)
Definition: fem_noeud.cpp:394
REC_ARETE_SPLINE::Reconstruire
void Reconstruire(MG_COARETE *coArete, double coef)
Definition: rec_arete_spline.cpp:53
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_SOMMET::get_nb_mg_cosommet
virtual int get_nb_mg_cosommet(void)
Definition: mg_sommet.cpp:64
OCC_FONCTION_RECONSTRUCTION::Analyser_interval_AreteV
double Analyser_interval_AreteV(double x, double y, double z)
Definition: occ_fonction_reconstruction.cpp:661
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
rec_arete_spline.h
MG_ARETE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_arete.cpp:106
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
OCC_FONCTION_RECONSTRUCTION::Analyser_interval_AreteU
double Analyser_interval_AreteU(double x, double y, double z)
Definition: occ_fonction_reconstruction.cpp:653
FEM_MAILLAGE
Definition: fem_maillage.h:66
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
REC_ARETE_SPLINE::~REC_ARETE_SPLINE
virtual ~REC_ARETE_SPLINE()
Definition: rec_arete_spline.cpp:48
MG_COSOMMET::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_cosommet.cpp:88
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
MG_COSOMMET::get_sommet
virtual MG_SOMMET * get_sommet(void)
Definition: mg_cosommet.cpp:83
REC_ARETE_SPLINE::Enregistrer
void Enregistrer(char *fich)
Definition: rec_arete_spline.cpp:812
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
MG_GEOMETRIE::get_nb_mg_face
unsigned int get_nb_mg_face(void)
Definition: mg_geometrie.cpp:1264
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_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
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
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.h
REC_ARETE
Definition: rec_arete.h:33
MG_ARETE::get_cosommet1
virtual class MG_COSOMMET * get_cosommet1(void)
Definition: mg_arete.cpp:81
MG_SOMMET
Definition: mg_sommet.h:35
MG_COARETE::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_coarete.cpp:58
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
OCC_FONCTION_RECONSTRUCTION::Ajouter_Arete_Contour
int Ajouter_Arete_Contour(int nb)
Definition: occ_fonction_reconstruction.cpp:414
MG_ARETE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_arete.cpp:228