MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mailleur3d_optimisation_geometrie_virtuelle.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mailleur3d_optimisation_geometrie_virtuelle.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
23 #include "m3d_tetra.h"
24 
25 
26 
27 
28 
30 {
31 }
32 
33 
34 
36 {
37 }
38 
39 int MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE::bouge_point(MG_VOLUME* mgvol, class MG_NOEUD* noeud, double& crit, double& x, double& y, double& z)
40 {
41 if (noeud->get_origine()!=MAGIC::ORIGINE::MAILLEUR_AUTO) return 0;
42  // if (noeud->get_type_entite()!=IDM3D_NOEUD) return 0;
43 
44  if( noeud->get_lien_topologie()->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
45  {
46  // printf("On face\n\n");
47 
48  double x_point=noeud->get_lien_topologie()->get_contrainte(0);
49  double y_point=noeud->get_lien_topologie()->get_contrainte(1);
50  double z_point=noeud->get_lien_topologie()->get_contrainte(2);
51 
52  double x_norm1=noeud->get_lien_topologie()->get_contrainte(3);
53  double y_norm1=noeud->get_lien_topologie()->get_contrainte(4);
54  double z_norm1=noeud->get_lien_topologie()->get_contrainte(5);
55 
56  double x_norm2=noeud->get_lien_topologie()->get_contrainte(6);
57  double y_norm2=noeud->get_lien_topologie()->get_contrainte(7);
58  double z_norm2=noeud->get_lien_topologie()->get_contrainte(8);
59 
60  OT_VECTEUR_3D n1(x_norm1,y_norm1,z_norm1);
61  OT_VECTEUR_3D n2(x_norm2,y_norm2,z_norm2);
62 
63 
64  double P1[3]={x_point,y_point,z_point};
65 
66  OT_VECTEUR_3D normal_plane=n1&n2;
67 
68  double xopt=0.;
69  double yopt=0.;
70  double zopt=0.;
71  double qual_dep=1.;
72  int nb_tet=noeud->get_lien_tetra()->get_nb();
73  double tab_coord[3000];
74  double gamma=0;
75 
76  for (int i=0;i<nb_tet;i++)
77  {
78  M3D_TETRA* tet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
79  qual_dep=std::min(qual_dep,OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord()));
80 
81  // if(tet->get_id()==109676)
82  // {
83  // int ggg=0;
84  // }
85 
86  MG_NOEUD* no1=tet->get_noeud1();
87  MG_NOEUD* no2=tet->get_noeud2();
88  MG_NOEUD* no3=tet->get_noeud3();
89  MG_NOEUD* no4=tet->get_noeud4();
90  MG_NOEUD *noeud1,*noeud2,*noeud3;
91  if (no1==noeud)
92  {
93  noeud1=no2;
94  noeud2=no4;
95  noeud3=no3;
96  }
97  if (no2==noeud)
98  {
99  noeud1=no1;
100  noeud2=no3;
101  noeud3=no4;
102  }
103  if (no3==noeud)
104  {
105  noeud1=no1;
106  noeud2=no4;
107  noeud3=no2;
108  }
109  if (no4==noeud)
110  {
111  noeud1=no1;
112  noeud2=no2;
113  noeud3=no3;
114  }
115  double xyzi[3];
116  double *xyz1=noeud1->get_coord();
117  double *xyz2=noeud2->get_coord();
118  double *xyz3=noeud3->get_coord();
119  xyzi[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
120  xyzi[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
121  xyzi[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
122  OT_VECTEUR_3D v12(xyz1,xyz2);
123  OT_VECTEUR_3D v13(xyz1,xyz3);
124  OT_VECTEUR_3D v23(xyz2,xyz3);
125  OT_VECTEUR_3D normal=v12&v13;
126  double perimetre=v12.get_longueur()+v13.get_longueur()+v23.get_longueur();
127  double hauteur = (perimetre/3.) * 0.8 ;
128  normal.norme();
129 
130  tab_coord[3*i]=xyzi[0]+normal.get_x()*hauteur;
131  tab_coord[3*i+1]=xyzi[1]+normal.get_y()*hauteur;
132  tab_coord[3*i+2]=xyzi[2]+normal.get_z()*hauteur;
133 
135  }
136 
137 
138  gamma=1./gamma;
139  for (int i=0;i<nb_tet;i++)
140  {
141  M3D_TETRA* tet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
142  if (OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord())> 1e-10)
143  {
145 
146  xopt=xopt+alpha*tab_coord[3*i];
147  yopt=yopt+alpha*tab_coord[3*i+1];
148  zopt=zopt+alpha*tab_coord[3*i+2];
149 
150 
151  }
152 
153  }
154 
155  //----------------Ghazal Added--------------
156 
157  double x_popt_ori=xopt-noeud->get_x();
158  double y_popt_ori=yopt-noeud->get_y();
159  double z_popt_ori=zopt-noeud->get_z();
160 
161  double dist=x_popt_ori*normal_plane(0)+y_popt_ori*normal_plane(1)+z_popt_ori*normal_plane(2);
162 
163  double xopt_planar=xopt-dist*normal_plane(0);
164  double yopt_planar=yopt-dist*normal_plane(1);
165  double zopt_planar=zopt-dist*normal_plane(2);
166 
167  xopt=xopt_planar;
168  yopt=yopt_planar;
169  zopt=zopt_planar;
170 
171 
172  double delta[3]={xopt-noeud->get_x(),yopt-noeud->get_y(),zopt-noeud->get_z()};
173  double bmin=0.,bmax=1.;
174  double vieuxx=noeud->get_x();
175  double vieuxy=noeud->get_y();
176  double vieuxz=noeud->get_z();
177  double qualini=0.;
178 
179  for (int iteration=0;iteration<5;iteration++)
180  {
181  double alpha=(bmin+bmax)*0.5;
182  noeud->change_x(vieuxx+alpha*delta[0]);
183  noeud->change_y(vieuxy+alpha*delta[1]);
184  noeud->change_z(vieuxz+alpha*delta[2]);
185  double qualcour=1.;
186  for (int i=0;i<nb_tet;i++)
187  {
188  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
189  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
190  qualcour=std::min(qualcour,qual);
191  }
192 
193 
194 
195  double alpha_eps=(bmin+bmax)*0.5-(bmax-bmin)/50.;
196  noeud->change_x(vieuxx+alpha_eps*delta[0]);
197  noeud->change_y(vieuxy+alpha_eps*delta[1]);
198  noeud->change_z(vieuxz+alpha_eps*delta[2]);
199  double qualcour_eps=1.;
200  for (int i=0;i<nb_tet;i++)
201  {
202  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
203  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
204  qualcour_eps=std::min(qualcour_eps,qual);
205  }
206 
207 
208  if (qualcour>qualcour_eps) bmin =alpha;
209  else if(qualcour<qualcour_eps) bmax=alpha;
210  else
211  {
212  bmax=alpha/2;
213  }
214  qualini=std::max(qualini,qualcour);
215  }
216 
217  noeud->change_x(vieuxx);
218  noeud->change_y(vieuxy);
219  noeud->change_z(vieuxz);
220 
221  if (qualini>qual_dep)
222  {
223  x=vieuxx+(bmin+bmax)*0.5*delta[0];
224  y=vieuxy+(bmin+bmax)*0.5*delta[1];
225  z=vieuxz+(bmin+bmax)*0.5*delta[2];
226  crit=qualini;
227  return 1;
228  }
229 
230 
231 
232  }
233  else if( noeud->get_lien_topologie()->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE)
234  {
235  // printf("On edge\n\n");
236 
237  double x_norm1=noeud->get_lien_topologie()->get_contrainte(3);
238  double y_norm1=noeud->get_lien_topologie()->get_contrainte(4);
239  double z_norm1=noeud->get_lien_topologie()->get_contrainte(5);
240 
241 
242  int nb_seg=noeud->get_lien_segment()->get_nb();
243 
244 
245  double dist_nodes;
246  double dist_nodes_max=0.0;
247  for (int i=0;i<nb_seg;i++)
248  {
249  MG_SEGMENT* segg=noeud->get_lien_segment()->get(i);
250 
251  dist_nodes=segg->get_longueur();
252 
253  dist_nodes_max=std::max(dist_nodes_max,dist_nodes);
254 
255  }
256 
257  double qual_dep=1.;
258  int nb_tet=noeud->get_lien_tetra()->get_nb();
259 
260 
261 
262 for (int i=0;i<nb_tet;i++)
263  {
264  M3D_TETRA* tet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
265  qual_dep=std::min(qual_dep,OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord()));
266 
267  }
268 
269 
270  double bmin=0.,bmax=1.;
271  double bmin2=0.,bmax2=1.;
272  double vieuxx=noeud->get_x();
273  double vieuxy=noeud->get_y();
274  double vieuxz=noeud->get_z();
275  double qualini1=0.;
276  double qualini2=0.;
277 
278 
279  for (int iteration=0;iteration<5;iteration++)
280  {
281  double alpha=(bmin+bmax)*0.5;
282  noeud->change_x(vieuxx+alpha*dist_nodes_max*x_norm1);
283  noeud->change_y(vieuxy+alpha*dist_nodes_max*y_norm1);
284  noeud->change_z(vieuxz+alpha*dist_nodes_max*z_norm1);
285  double qualcour=1.;
286  for (int i=0;i<nb_tet;i++)
287  {
288  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
289  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
290  qualcour=std::min(qualcour,qual);
291  }
292 
293 
294 
295  double alpha_eps=(bmin+bmax)*0.5-(bmax-bmin)/50.;
296  noeud->change_x(vieuxx+alpha_eps*dist_nodes_max*x_norm1);
297  noeud->change_y(vieuxy+alpha_eps*dist_nodes_max*y_norm1);
298  noeud->change_z(vieuxz+alpha_eps*dist_nodes_max*z_norm1);
299  double qualcour_eps=1.;
300  for (int i=0;i<nb_tet;i++)
301  {
302  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
303  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
304  qualcour_eps=std::min(qualcour_eps,qual);
305  }
306 
307 
308  if (qualcour>qualcour_eps) bmin =alpha;
309  else if(qualcour<qualcour_eps) bmax=alpha;
310  else
311  {
312  bmax=alpha/2;
313  }
314  qualini1=std::max(qualini1,qualcour);
315  }
316 
317  for (int iteration2=0;iteration2<5;iteration2++)
318  {
319  double alpha2=(bmin2+bmax2)*0.5;
320  noeud->change_x(vieuxx-alpha2*dist_nodes_max*x_norm1);
321  noeud->change_y(vieuxy-alpha2*dist_nodes_max*y_norm1);
322  noeud->change_z(vieuxz-alpha2*dist_nodes_max*z_norm1);
323  double qualcour=1.;
324  for (int i=0;i<nb_tet;i++)
325  {
326  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
327  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
328  qualcour=std::min(qualcour,qual);
329  }
330 
331 
332 
333  double alpha_eps=(bmin2+bmax2)*0.5-(bmax2-bmin2)/50.;
334  noeud->change_x(vieuxx-alpha_eps*dist_nodes_max*x_norm1);
335  noeud->change_y(vieuxy-alpha_eps*dist_nodes_max*y_norm1);
336  noeud->change_z(vieuxz-alpha_eps*dist_nodes_max*z_norm1);
337  double qualcour_eps=1.;
338  for (int i=0;i<nb_tet;i++)
339  {
340  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
341  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
342  qualcour_eps=std::min(qualcour_eps,qual);
343  }
344 
345 
346  if (qualcour>qualcour_eps) bmin2 =alpha2;
347  else if(qualcour<qualcour_eps) bmax2=alpha2;
348  else
349  {
350  bmax2=alpha2/2;
351  }
352  qualini2=std::max(qualini2,qualcour);
353  }
354 
355  noeud->change_x(vieuxx);
356  noeud->change_y(vieuxy);
357  noeud->change_z(vieuxz);
358 
359 
360 
361  if ((qualini1>qual_dep)&&(qualini1>qualini2))
362  {
363  x=vieuxx+(bmin+bmax)*0.5*dist_nodes_max*x_norm1;
364  y=vieuxy+(bmin+bmax)*0.5*dist_nodes_max*y_norm1;
365  z=vieuxz+(bmin+bmax)*0.5*dist_nodes_max*z_norm1;
366  crit=qualini1;
367  return 1;
368  }
369  else if ((qualini2>qual_dep)&&(qualini2>qualini1))
370  {
371  x=vieuxx-(bmin2+bmax2)*0.5*dist_nodes_max*x_norm1;
372  y=vieuxy-(bmin2+bmax2)*0.5*dist_nodes_max*y_norm1;
373  z=vieuxz-(bmin2+bmax2)*0.5*dist_nodes_max*z_norm1;
374  crit=qualini2;
375  return 1;
376  }
377 
378  }
379  else if( noeud->get_lien_topologie()->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME)
380  {
381 
382  double xopt=0.;
383  double yopt=0.;
384  double zopt=0.;
385  double qual_dep=1.;
386  int nb_tet=noeud->get_lien_tetra()->get_nb();
387  double tab_coord[3000];
388  double gamma=0;
389 
390  for (int i=0;i<nb_tet;i++)
391  {
392  M3D_TETRA* tet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
393  qual_dep=std::min(qual_dep,OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord()));
394 
395 
396  MG_NOEUD* no1=tet->get_noeud1();
397  MG_NOEUD* no2=tet->get_noeud2();
398  MG_NOEUD* no3=tet->get_noeud3();
399  MG_NOEUD* no4=tet->get_noeud4();
400  MG_NOEUD *noeud1,*noeud2,*noeud3;
401  if (no1==noeud)
402  {
403  noeud1=no2;
404  noeud2=no4;
405  noeud3=no3;
406  }
407  if (no2==noeud)
408  {
409  noeud1=no1;
410  noeud2=no3;
411  noeud3=no4;
412  }
413  if (no3==noeud)
414  {
415  noeud1=no1;
416  noeud2=no4;
417  noeud3=no2;
418  }
419  if (no4==noeud)
420  {
421  noeud1=no1;
422  noeud2=no2;
423  noeud3=no3;
424  }
425  double xyzi[3];
426  double *xyz1=noeud1->get_coord();
427  double *xyz2=noeud2->get_coord();
428  double *xyz3=noeud3->get_coord();
429  xyzi[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
430  xyzi[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
431  xyzi[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
432  OT_VECTEUR_3D v12(xyz1,xyz2);
433  OT_VECTEUR_3D v13(xyz1,xyz3);
434  OT_VECTEUR_3D v23(xyz2,xyz3);
435  OT_VECTEUR_3D normal=v12&v13;
436  double perimetre=v12.get_longueur()+v13.get_longueur()+v23.get_longueur();
437  double hauteur = (perimetre/3.) * 0.8 ;
438  normal.norme();
439 
440  tab_coord[3*i]=xyzi[0]+normal.get_x()*hauteur;
441  tab_coord[3*i+1]=xyzi[1]+normal.get_y()*hauteur;
442  tab_coord[3*i+2]=xyzi[2]+normal.get_z()*hauteur;
443 
445  }
446 
447 
448 
449 
450 
451 
452 
453 
454  gamma=1./gamma;
455  for (int i=0;i<nb_tet;i++)
456  {
457  M3D_TETRA* tet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
458  if (OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord())> 1e-10)
459  {
461 
462  xopt=xopt+alpha*tab_coord[3*i];
463  yopt=yopt+alpha*tab_coord[3*i+1];
464  zopt=zopt+alpha*tab_coord[3*i+2];
465  }
466 
467  }
468 
469 
470 
471 
472 
473 
474  double delta[3]={xopt-noeud->get_x(),yopt-noeud->get_y(),zopt-noeud->get_z()};
475  double bmin=0.,bmax=1.;
476  double vieuxx=noeud->get_x();
477  double vieuxy=noeud->get_y();
478  double vieuxz=noeud->get_z();
479  double qualini=0.;
480 
481  for (int iteration=0;iteration<5;iteration++)
482  {
483  double alpha=(bmin+bmax)*0.5;
484  noeud->change_x(vieuxx+alpha*delta[0]);
485  noeud->change_y(vieuxy+alpha*delta[1]);
486  noeud->change_z(vieuxz+alpha*delta[2]);
487  double qualcour=1.;
488  for (int i=0;i<nb_tet;i++)
489  {
490  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
491  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
492  qualcour=std::min(qualcour,qual);
493  }
494  double alpha_eps=(bmin+bmax)*0.5-(bmax-bmin)/50.;
495  noeud->change_x(vieuxx+alpha_eps*delta[0]);
496  noeud->change_y(vieuxy+alpha_eps*delta[1]);
497  noeud->change_z(vieuxz+alpha_eps*delta[2]);
498  double qualcour_eps=1.;
499  for (int i=0;i<nb_tet;i++)
500  {
501  M3D_TETRA* mtet=(M3D_TETRA*)noeud->get_lien_tetra()->get(i);
502  double qual=OPERATEUR::qualite_tetra(mtet->get_noeud1()->get_coord(),mtet->get_noeud2()->get_coord(),mtet->get_noeud3()->get_coord(),mtet->get_noeud4()->get_coord());
503  qualcour_eps=std::min(qualcour_eps,qual);
504  }
505  if (qualcour>qualcour_eps) bmin =alpha;
506  else if(qualcour<qualcour_eps) bmax=alpha;
507  else
508  {
509  bmax=alpha/2;
510  }
511  qualini=std::max(qualini,qualcour);
512  }
513 
514 
515 
516 
517 
518  noeud->change_x(vieuxx);
519  noeud->change_y(vieuxy);
520  noeud->change_z(vieuxz);
521 
522 
523 
524 
525 
526 
527  if (qualini>qual_dep)
528  {
529  x=vieuxx+(bmin+bmax)*0.5*delta[0];
530  y=vieuxy+(bmin+bmax)*0.5*delta[1];
531  z=vieuxz+(bmin+bmax)*0.5*delta[2];
532  crit=qualini;
533  return 1;
534  }
535 
536 
537  }
538 
539 
540  return 0;
541 
542 }
MG_SEGMENT
Definition: mg_segment.h:38
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MAILLEUR3D_OPTIMISATION
Definition: mailleur3d_optimisation.h:43
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
MG_VOLUME
Definition: mg_volume.h:33
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
MG_NOEUD::change_z
virtual void change_z(double zz)
Definition: mg_noeud.cpp:128
MG_ELEMENT_TOPOLOGIQUE::get_type
virtual int get_type(void)=0
MG_ELEMENT_TOPOLOGIQUE::get_contrainte
virtual double get_contrainte(int i)
Definition: mg_element_topologique.cpp:454
MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE::~MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE
virtual ~MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE()
Definition: mailleur3d_optimisation_geometrie_virtuelle.cpp:35
MG_NOEUD::change_y
virtual void change_y(double yy)
Definition: mg_noeud.cpp:123
MG_NOEUD::change_x
virtual void change_x(double xx)
Definition: mg_noeud.cpp:118
MG_NOEUD::get_lien_segment
TPL_LISTE_ENTITE< class MG_SEGMENT * > * get_lien_segment(void)
Definition: mg_noeud.cpp:141
MG_NOEUD
Definition: mg_noeud.h:41
M3D_TETRA
Definition: m3d_tetra.h:31
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
MG_NOEUD::get_lien_tetra
TPL_LISTE_ENTITE< class MG_TETRA * > * get_lien_tetra(void)
Definition: mg_noeud.cpp:175
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
OPERATEUR::qualite_tetra
static double qualite_tetra(double *noeud1, double *noeud2, double *noeud3, double *noeud4)
Definition: ot_mathematique.cpp:1673
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE::bouge_point
virtual int bouge_point(MG_VOLUME *mgvol, class MG_NOEUD *noeud, double &crit, double &x, double &y, double &z)
Definition: mailleur3d_optimisation_geometrie_virtuelle.cpp:39
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
m3d_tetra.h
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE::MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE
MAILLEUR3D_OPTIMISATION_GEOMETRIE_VIRTUELLE(MG_MAILLAGE *mgmai, int niv)
Definition: mailleur3d_optimisation_geometrie_virtuelle.cpp:29
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
mailleur3d_optimisation_geometrie_virtuelle.h
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_SEGMENT::get_longueur
virtual double get_longueur(void)
Definition: mg_segment.cpp:125
MG_ELEMENT_MAILLAGE::get_origine
virtual int get_origine(void)
Definition: mg_element_maillage.cpp:91
MAGIC::ORIGINE::MAILLEUR_AUTO
@ MAILLEUR_AUTO
Definition: mg_definition.h:79
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82