MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mailleur2d_ins_noeud.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 //####// mailleur2d_ins_noeud.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include "gestionversion.h"
24 #include "mg_gestionnaire.h"
25 #include "mg_maillage_outils.h"
26 #include <string.h>
27 #include <stdio.h>
28 #include "gestionversion.h"
29 #include "mailleur2d_ins_noeud.h"
30 #include "mg_gestionnaire.h"
31 #include "robustpredicates.hxx"
32 #include <math.h>
33 #include <map>
34 #include "mg_maillage_outils.h"
35 #include "mg_file.h"
36 #include "occ_import.h"
37 #include "fct_generateur_3d.h"
38 #include "mailleur0d.h"
39 #include "mailleur1d.h"
40 #include "mailleur2d.h"
41 #include "mailleur3d.h"
42 #include "mg_geometrie_outils.h"
43 #include "ot_mathematique.h"
45 #include "mg_sommet_noeud.h"
46 
47 MAILLEUR2D_INS_NOEUD::MAILLEUR2D_INS_NOEUD(char* magicfilenametmp,int meshnotmp,char* inspointfilenametmp,char* outputfilenametmp,int nivopttmp,int qualswaptmp,double proxvaltmp, double proxedgevaltmp)
48 :MAILLEUR(false),magicfilename(magicfilenametmp),meshno(meshnotmp),inspointfilename(inspointfilenametmp),outputfilename(outputfilenametmp),nivopt(nivopttmp),qualswap(qualswaptmp),proxval(proxvaltmp),proxedgeval(proxedgevaltmp)
49 {
50 }
52 :MAILLEUR(mdd),magicfilename(mdd.magicfilename),meshno(mdd.meshno),inspointfilename(mdd.inspointfilename),outputfilename(mdd.outputfilename),nivopt(mdd.nivopt),qualswap(mdd.qualswap),proxval(mdd.proxval),proxedgeval(mdd.proxedgeval)
53 {
54 }
56 {
57 }
59 {
65  FILE *in=fopen(inspointfilename,"rt");
66  if (in==NULL) affiche((char*) "file is not available");
67  while (!feof(in))
68  {
69  char chaine[500];
70  char* res=fgets(chaine,500,in);
71  if(res!=NULL)
72  {
73  double x,y,z;
74  int nb=sscanf(chaine,"%le %le %le",&x,&y,&z);
75  if (nb!=-1 && nb!=3) affiche((char*)"Wrong file format");
76 else if (nb!=-1 && nb==3)
77 {
79  pins.ajouter(p);
80 }
81  }
82  }
83  fclose(in);
84 double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
86  LISTE_MG_NOEUD::iterator it;
87  for (MG_NOEUD* no=mai->get_premier_noeud(it);no!=NULL;no=mai->get_suivant_noeud(it))
88  {
89  if (no->get_x()<xmin) xmin=no->get_x();
90  if (no->get_y()<ymin) ymin=no->get_y();
91  if (no->get_z()<zmin) zmin=no->get_z();
92  if (no->get_x()>xmax) xmax=no->get_x();
93  if (no->get_y()>ymax) ymax=no->get_y();
94  if (no->get_z()>zmax) zmax=no->get_z();
95  lstnoeud.ajouter(no);
96  }
97  OT_VECTEUR_3D vecmin(xmin,ymin,zmin);
98  OT_VECTEUR_3D vecmax(xmax,ymax,zmax);
99  OT_VECTEUR_3D lengthvec(vecmin,vecmax);
100  double search_radius=0.001*(lengthvec.get_longueur());
101  //char bboxdiag[1000];
102  //sprintf(bboxdiag,"the bounding box diagonal is: %lf , and the neighborhood search radius is: %lf ",vec.get_longueur(),search_radius);
103  //affiche((char*) bboxdiag);
104  OT_VECTEUR_3D average=(vecmin+vecmax)/2.;
105  double length=sqrt(lengthvec*lengthvec);
106  double bxr=1.1;
107  xmin=average.get_x()-(length*bxr);ymin=average.get_y()-(length*bxr);zmin=average.get_z()-(length*bxr);
108  xmax=average.get_x()+(length*bxr);ymax=average.get_y()+(length*bxr);zmax=average.get_z()+(length*bxr);
110  octree.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
111  LISTE_MG_TRIANGLE::iterator it9;
113  octree.inserer(tri);
115  octreends.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
116  for (MG_NOEUD* no=mai->get_premier_noeud(it);no!=NULL;no=mai->get_suivant_noeud(it))
117  octreends.inserer(no);
118 
119 for (int ipins=0;ipins<pins.get_nb();ipins++)
120 {
121 
122  int sameinsnd_meshnd=0;
123  double proximityqual;
124  double delaunyinsqual;
125  std::multimap<double,MG_NOEUD*,std::greater<double> > lstqualprxndfinal;
127  MG_NOEUD* p=pins.get(ipins);
129  TPL_MAP_ENTITE<MG_TRIANGLE*> lstneitri1;
130  int neitrinb1=lstneitri1.get_nb();
131  while(neitrinb1==0)
132 {
133  octree.rechercher(p->get_x(),p->get_y(),p->get_z(),search_radius,lstneitri1);
134  neitrinb1=lstneitri1.get_nb();
135  search_radius=search_radius+0.1*search_radius;
136 }
137  //check for the point proximity to any tri point
138 
139 TPL_MAP_ENTITE<MG_TRIANGLE*>::ITERATEUR it01; //can be merged with the delaunay insertion method
140 TPL_MAP_ENTITE<MG_NOEUD*> proxtrind;
141 for (MG_TRIANGLE* tri01=lstneitri1.get_premier(it01);tri01!=NULL;tri01=lstneitri1.get_suivant(it01))
142  {
143  top=tri01->get_lien_topologie();
144  MG_NOEUD* dpnd1=tri01->get_noeud1();
145  MG_NOEUD* dpnd2=tri01->get_noeud2();
146  MG_NOEUD* dpnd3=tri01->get_noeud3();
147  proxtrind.ajouter(dpnd1);
148  proxtrind.ajouter(dpnd2);
149  proxtrind.ajouter(dpnd3);
150  }
151 std::multimap< double, MG_NOEUD* , std::less<double> > lstdisproxnde;
153 for(MG_NOEUD* prnde=proxtrind.get_premier(itprnde);prnde!=NULL;prnde=proxtrind.get_suivant(itprnde))
154 {
155  if (prnde->get_x()==p->get_x() && prnde->get_y()==p->get_y() && prnde->get_z()==p->get_z())
156  {
157  top=prnde->get_lien_topologie();
158  prox_nd(prnde,p,mai,octreends,octree);
159  sameinsnd_meshnd=sameinsnd_meshnd+1;
160  //cout<<"the same node as insertion"<<endl;
161  break;
162  }
163  else
164  {
165  double dp=sqrt(pow((p->get_x()-prnde->get_x()),2)+pow((p->get_y()-prnde->get_y()),2)+pow((p->get_z()-prnde->get_z()),2));
166  lstdisproxnde.insert(std::pair<double, MG_NOEUD*> (dp,prnde));
167  }
168 }
169 if( sameinsnd_meshnd==0)
170  {
171 std::multimap< double, MG_NOEUD* , std::less<double> >::iterator itlstdprnd=lstdisproxnde.begin();
172 double mindis=(*itlstdprnd).first;
174 double distelorance=1.1;
175 
176 for (itlstdprnd=lstdisproxnde.begin();itlstdprnd!=lstdisproxnde.end();itlstdprnd++)
177 {
178  if ((*itlstdprnd).first<(distelorance*mindis)) lstprnds.ajouter((*itlstdprnd).second);
179 }
180 
181 std::multimap<double,MG_NOEUD*,std::less<double> > lstqualtri;
182 for(int ilpn=0;ilpn<lstprnds.get_nb();ilpn++)
183 {
184  MG_NOEUD* proxnd=lstprnds.get(ilpn);
185  if(proxnd->get_x()==p->get_x() && proxnd->get_y()==p->get_y() && proxnd->get_z()==p->get_z()) std::cout<<"proxinod is the same as insertion node"<<std::endl;
186 
187  int checkisinspoint=0;
188  for(int ipins1=0;ipins1<pins.get_nb();ipins1++ )
189  {
190  MG_NOEUD* checknotinspoint=pins.get(ipins1);
191  if (checknotinspoint==proxnd) checkisinspoint=checkisinspoint+1;
192  }
193  if (checkisinspoint==0)
194  {
195  int proxndtop=proxnd->get_lien_topologie()->get_dimension();
196  if (proxndtop>1) //prox node is not on edge
197  {
198  for(int iptr=0;iptr<proxnd->get_lien_triangle()->get_nb();iptr++)
199  {
200  MG_TRIANGLE* prli=proxnd->get_lien_triangle()->get(iptr);
201  MG_SEGMENT* prliseg1=prli->get_segment1(); MG_NOEUD* prliseg1nd1=prliseg1->get_noeud1(); MG_NOEUD* prliseg1nd2=prliseg1->get_noeud2();
202  MG_SEGMENT* prliseg2=prli->get_segment2(); MG_NOEUD* prliseg2nd1=prliseg2->get_noeud1(); MG_NOEUD* prliseg2nd2=prliseg2->get_noeud2();
203  MG_SEGMENT* prliseg3=prli->get_segment3(); MG_NOEUD* prliseg3nd1=prliseg3->get_noeud1(); MG_NOEUD* prliseg3nd2=prliseg3->get_noeud2();
204  MG_NOEUD* prlind1=prli->get_noeud1();
205  MG_NOEUD* prlind2=prli->get_noeud2();
206  MG_NOEUD* prlind3=prli->get_noeud3();
207  MG_SEGMENT* sgchk;
208  if(proxnd!=prliseg1nd1 && proxnd!=prliseg1nd2) sgchk=prliseg1;
209  if(proxnd!=prliseg2nd1 && proxnd!=prliseg2nd2) sgchk=prliseg2;
210  if(proxnd!=prliseg3nd1 && proxnd!=prliseg3nd2) sgchk=prliseg3;
211  MG_TRIANGLE* othertriangle;
212  if(sgchk->get_lien_triangle()->get(0)!=prli) othertriangle=sgchk->get_lien_triangle()->get(0);
213  else if(sgchk->get_lien_triangle()->get(1)!=prli) othertriangle=sgchk->get_lien_triangle()->get(1);
214  double insph_swap_chk=inshper_point(p,othertriangle);
215  MG_NOEUD* trimateothernd;
216  if(othertriangle->get_noeud1()!=sgchk->get_noeud1() && othertriangle->get_noeud1()!=sgchk->get_noeud2()) trimateothernd=othertriangle->get_noeud1();
217  else if(othertriangle->get_noeud2()!=sgchk->get_noeud1() && othertriangle->get_noeud2()!=sgchk->get_noeud2()) trimateothernd=othertriangle->get_noeud2();
218  else if(othertriangle->get_noeud3()!=sgchk->get_noeud1() && othertriangle->get_noeud3()!=sgchk->get_noeud2()) trimateothernd=othertriangle->get_noeud3();
219 
220  if(prlind1==proxnd)
221  {
222  if(insph_swap_chk<=0)
223  {
224  double tqual1=tq.qualite_triangle(p->get_coord(),prli->get_noeud2()->get_coord(),trimateothernd->get_coord());
225  double tqual2=tq.qualite_triangle(p->get_coord(),prli->get_noeud3()->get_coord(),trimateothernd->get_coord());
226  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
227  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
228  }
229  else
230  {
231  double tqual=tq.qualite_triangle(p->get_coord(),prli->get_noeud2()->get_coord(),prli->get_noeud3()->get_coord());
232  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
233  }
234  }
235 
236  else if(prlind2==proxnd)
237  {
238  if(insph_swap_chk<=0)
239  {
240  double tqual1=tq.qualite_triangle(p->get_coord(),prli->get_noeud1()->get_coord(),trimateothernd->get_coord());
241  double tqual2=tq.qualite_triangle(p->get_coord(),prli->get_noeud3()->get_coord(),trimateothernd->get_coord());
242  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
243  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
244  }
245  else
246  {
247  double tqual=tq.qualite_triangle(prli->get_noeud1()->get_coord(),p->get_coord(),prli->get_noeud3()->get_coord());
248  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
249  }
250  }
251  else if(prlind3==proxnd)
252  {
253  if(insph_swap_chk<=0)
254  {
255  double tqual1=tq.qualite_triangle(p->get_coord(),prli->get_noeud1()->get_coord(),trimateothernd->get_coord());
256  double tqual2=tq.qualite_triangle(p->get_coord(),prli->get_noeud2()->get_coord(),trimateothernd->get_coord());
257  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
258  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
259  }
260  else
261  {
262  double tqual=tq.qualite_triangle(prli->get_noeud1()->get_coord(),prli->get_noeud2()->get_coord(),p->get_coord());
263  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
264  }
265  }
266  }
267 
268  std::multimap<double,MG_NOEUD*,std::less<double> >::iterator itlstqualtri=lstqualtri.begin();
269  lstqualprxndfinal.insert(std::pair<double,MG_NOEUD*>((*itlstqualtri).first,(*itlstqualtri).second));
270  }
271 
272  }
273 }
274 if (lstqualprxndfinal.size()==0) proximityqual=0.;
275 else
276 {
277 std::multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstqualprxndfinal=lstqualprxndfinal.begin();
278  proximityqual=(*itlstqualprxndfinal).first;
279 }
280 
281 std::multimap<double,MG_TRIANGLE*,std::less<double> > delinsqualtri;
282 double normale[3];
283 int facenb=geo->get_nb_mg_face();
284  LISTE_MG_FACE::iterator itf;
285  for(MG_FACE* fac=geo->get_premier_face(itf);fac!=NULL;fac=geo->get_suivant_face(itf))
286  {
287  double uv[2];
288  double xyz[3];
289  xyz[0]=p->get_x();
290  xyz[1]=p->get_y();
291  xyz[2]=p->get_z();
292  double dis;
294  int ch=f1.calcule_distance_contour_face_xyz(xyz,fac,&dis);
295  if (ch==1 && dis>=0.)
296  {
297  fac->inverser(uv,xyz);
298  fac->calcul_normale_unitaire(uv,normale);
299  MG_COFACE *coface=fac->get_mg_coface(0);
300  int signe=coface->get_orientation();
301  }
302  }
304 int neitrinb=lstneitri.get_nb();
305 while(neitrinb==0)
306 {
307  octree.rechercher(p->get_x(),p->get_y(),p->get_z(),search_radius,lstneitri);
308  neitrinb=lstneitri.get_nb();
309  search_radius=search_radius+0.01*search_radius;
310 }
313 for (MG_TRIANGLE* tri1=lstneitri.get_premier(it1);tri1!=NULL;tri1=lstneitri.get_suivant(it1))
314  {
315  top=tri1->get_lien_topologie();
316  double insphchk=inshper_point(p,tri1);
317  if (insphchk<=0.) insphtri.ajouter(tri1);
318  }
319 
322 double pproj[3];
324 for (MG_TRIANGLE* insphertri=insphtri.get_premier(inspi);insphertri!=NULL;insphertri=insphtri.get_suivant(inspi))
325 {
326 MG_NOEUD* inspnd1=insphertri->get_noeud1();
327 MG_NOEUD* inspnd2=insphertri->get_noeud2();
328 MG_NOEUD* inspnd3=insphertri->get_noeud3();
329 OT_VECTEUR_3D norm=normale;
330 double a1=inspnd1->get_x()-p->get_x();double a2=inspnd1->get_x()-inspnd2->get_x();double a3=inspnd1->get_x()-inspnd3->get_x();
331 OT_VECTEUR_3D r1(a1,a2,a3);
332 double a11=inspnd1->get_y()-p->get_y();double a12=inspnd1->get_y()-inspnd2->get_y();double a13=inspnd1->get_y()-inspnd3->get_y();
333 OT_VECTEUR_3D r2(a11,a12,a13);
334 double a21=inspnd1->get_z()-p->get_z();double a22=inspnd1->get_z()-inspnd2->get_z();double a23=inspnd1->get_z()-inspnd3->get_z();
335 OT_VECTEUR_3D r3(a21,a22,a23);
336 double a31=norm.get_x();double a32=inspnd1->get_x()-inspnd2->get_x();double a33=inspnd1->get_x()-inspnd3->get_x();
337 OT_VECTEUR_3D d1(a31,a32,a33);
338 OT_VECTEUR_3D d2((norm.get_y()),(inspnd1->get_y()-inspnd2->get_y()),(inspnd1->get_y()-inspnd3->get_y()));
339 OT_VECTEUR_3D d3((norm.get_z()),(inspnd1->get_z()-inspnd2->get_z()),(inspnd1->get_z()-inspnd3->get_z()));
340 
341 OT_MATRICE_3D tr(r1,r2,r3);
342 OT_MATRICE_3D td(d1,d2,d3);
343 double detd=td.get_determinant();
344 double detr=tr.get_determinant();
345 double t=detr/detd;
346 if (detd==0. || detr==0.) affiche((char*)"wrong ins point projection on the mesh");
347 pproj[0]=p->get_x()+t*norm.get_x();
348 pproj[1]=p->get_y()+t*norm.get_y();
349 pproj[2]=p->get_z()+t*norm.get_z();
350 MG_MAILLAGE_OUTILS tribas;
351 int tribasval=tribas.estdansletriangle(insphertri,pproj[0],pproj[1],pproj[2]);
352 int intri=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::INTERIEUR);
353 int insidtri=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::STRICTINTERIEUR);
354 int onedge=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SUR_ARETE);
355 
356 
357 
358 
359 if (insidtri==1)
360 {
362  MG_TRIANGLE* ndintri=insphertri;
363  MG_SEGMENT* seg1=ndintri->get_segment1();
364  MG_SEGMENT* seg2=ndintri->get_segment2();
365  MG_SEGMENT* seg3=ndintri->get_segment3();
366  MG_NOEUD* nd1=ndintri->get_noeud1();
367  MG_NOEUD* nd2=ndintri->get_noeud2();
368  MG_NOEUD* nd3=ndintri->get_noeud3();
369 
370  MG_TRIANGLE* trioth1;
371  if (seg1->get_lien_triangle()->get(0)!=ndintri) trioth1=seg1->get_lien_triangle()->get(0);
372  else if (seg1->get_lien_triangle()->get(1)!=ndintri) trioth1=seg1->get_lien_triangle()->get(1);
373  double pinsphnb1=inshper_point(p,trioth1);
374  if (pinsphnb1<=0.)
375  {
376  MG_NOEUD* othnd;
377  if (trioth1->get_noeud1()!=seg1->get_noeud1() && trioth1->get_noeud1()!=seg1->get_noeud2()) othnd=trioth1->get_noeud1();
378  else if (trioth1->get_noeud2()!=seg1->get_noeud1() && trioth1->get_noeud2()!=seg1->get_noeud2()) othnd=trioth1->get_noeud2();
379  else if (trioth1->get_noeud3()!=seg1->get_noeud1() && trioth1->get_noeud3()!=seg1->get_noeud2()) othnd=trioth1->get_noeud3();
380  double qual1=tq.qualite_triangle(p->get_coord(),seg1->get_noeud1()->get_coord(),othnd->get_coord());
381  double qual2=tq.qualite_triangle(p->get_coord(),seg1->get_noeud2()->get_coord(),othnd->get_coord());
382  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
383  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndintri));
384  }
385  else
386  {
387  double qual1=tq.qualite_triangle(p->get_coord(),seg1->get_noeud1()->get_coord(),seg1->get_noeud2()->get_coord());
388  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
389  }
390 
391  MG_TRIANGLE* trioth2;
392  if (seg2->get_lien_triangle()->get(0)!=ndintri) trioth2=seg2->get_lien_triangle()->get(0);
393  else if (seg2->get_lien_triangle()->get(1)!=ndintri) trioth2=seg2->get_lien_triangle()->get(1);
394  double pinsphnb2=inshper_point(p,trioth2);
395  if (pinsphnb2<=0.)
396  {
397  MG_NOEUD* othnd;
398  if (trioth2->get_noeud1()!=seg2->get_noeud1() && trioth2->get_noeud1()!=seg2->get_noeud2()) othnd=trioth2->get_noeud1();
399  else if (trioth2->get_noeud2()!=seg2->get_noeud1() && trioth2->get_noeud2()!=seg2->get_noeud2()) othnd=trioth2->get_noeud2();
400  else if (trioth2->get_noeud3()!=seg2->get_noeud1() && trioth2->get_noeud3()!=seg2->get_noeud2()) othnd=trioth2->get_noeud3();
401  double qual1=tq.qualite_triangle(p->get_coord(),seg2->get_noeud1()->get_coord(),othnd->get_coord());
402  double qual2=tq.qualite_triangle(p->get_coord(),seg2->get_noeud2()->get_coord(),othnd->get_coord());
403  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
404  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndintri));
405  }
406  else
407  {
408  double qual1=tq.qualite_triangle(p->get_coord(),seg2->get_noeud1()->get_coord(),seg2->get_noeud2()->get_coord());
409  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
410  }
411 
412  MG_TRIANGLE* trioth3;
413  if (seg3->get_lien_triangle()->get(0)!=ndintri) trioth3=seg3->get_lien_triangle()->get(0);
414  else if (seg3->get_lien_triangle()->get(1)!=ndintri) trioth3=seg3->get_lien_triangle()->get(1);
415  double pinsphnb3=inshper_point(p,trioth3);
416  if (pinsphnb3<=0.)
417  {
418  MG_NOEUD* othnd;
419  if (trioth3->get_noeud1()!=seg3->get_noeud1() && trioth3->get_noeud1()!=seg3->get_noeud2()) othnd=trioth3->get_noeud1();
420  else if (trioth3->get_noeud2()!=seg3->get_noeud1() && trioth3->get_noeud2()!=seg3->get_noeud2()) othnd=trioth3->get_noeud2();
421  else if (trioth3->get_noeud3()!=seg3->get_noeud1() && trioth3->get_noeud3()!=seg3->get_noeud2()) othnd=trioth3->get_noeud3();
422  double qual1=tq.qualite_triangle(p->get_coord(),seg3->get_noeud1()->get_coord(),othnd->get_coord());
423  double qual2=tq.qualite_triangle(p->get_coord(),seg3->get_noeud2()->get_coord(),othnd->get_coord());
424  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
425  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndintri));
426  }
427  else
428  {
429  double qual1=tq.qualite_triangle(p->get_coord(),seg3->get_noeud1()->get_coord(),seg3->get_noeud2()->get_coord());
430  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
431  }
432 
433 }
434 
435 if (onedge==1)
436 {
437  MG_TRIANGLE* ndontri=insphertri;
438  MG_NOEUD* ndo1=ndontri->get_noeud1();
439  MG_NOEUD* ndo2=ndontri->get_noeud2();
440  MG_NOEUD* ndo3=ndontri->get_noeud3();
441  int onvert1=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET1);
442  int onvert2=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET2);
443  int onvert3=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET3);
444  int onedge1=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE1);
445  int onedge2=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE2);
446  int onedge3=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE3);
447  if (onvert1==1 || onvert2==1 || onvert3==1)
448  {
449  MG_NOEUD* ond;
450  if(onvert1==1)ond=ndo1;
451  if(onvert2==1)ond=ndo2;
452  if(onvert3==1)ond=ndo3;
453  for(int iind=0;iind<ond->get_lien_triangle()->get_nb();iind++)
454  {
455  MG_TRIANGLE* trlie=ond->get_lien_triangle()->get(iind);
456  MG_SEGMENT* trlieseg1=trlie->get_segment1();
457  MG_SEGMENT* trlieseg2=trlie->get_segment2();
458  MG_SEGMENT* trlieseg3=trlie->get_segment3();
459  MG_SEGMENT* segchkk;
460  if (trlieseg1->get_noeud1()!=ond && trlieseg1->get_noeud2()!=ond) segchkk=trlieseg1;
461  else if (trlieseg2->get_noeud1()!=ond && trlieseg2->get_noeud2()!=ond) segchkk=trlieseg2;
462  else if (trlieseg3->get_noeud1()!=ond && trlieseg3->get_noeud2()!=ond) segchkk=trlieseg3;
463  MG_TRIANGLE* trioth;
464  if(segchkk->get_lien_triangle()->get(0)!=trlie) trioth=segchkk->get_lien_triangle()->get(0);
465  else if(segchkk->get_lien_triangle()->get(1)!=trlie) trioth=segchkk->get_lien_triangle()->get(1);
466 
467  double pinsphnb=inshper_point(p,trioth);
468  if (pinsphnb<=0.)
469  {
470  MG_NOEUD* othnd;
471  if (trioth->get_noeud1()!=segchkk->get_noeud1() && trioth->get_noeud1()!=segchkk->get_noeud2()) othnd=trioth->get_noeud1();
472  else if (trioth->get_noeud2()!=segchkk->get_noeud1() && trioth->get_noeud2()!=segchkk->get_noeud2()) othnd=trioth->get_noeud2();
473  else if (trioth->get_noeud3()!=segchkk->get_noeud1() && trioth->get_noeud3()!=segchkk->get_noeud2()) othnd=trioth->get_noeud3();
474  double qual1=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud1()->get_coord(),othnd->get_coord());
475  double qual2=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud2()->get_coord(),othnd->get_coord());
476  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,trlie));
477  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,trlie));
478  }
479  else
480  {
481  double qual1=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud1()->get_coord(),segchkk->get_noeud2()->get_coord());
482  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,trlie));
483  }
484  }
485  }
486 
487  else if(onedge1==1 || onedge2==1 || onedge3==1)
488  {
489  MG_TRIANGLE* ndontri=insphertri;
490  MG_SEGMENT* onseg;
491  if (onedge1==1)onseg=ndontri->get_segment1();
492  if (onedge2==1)onseg=ndontri->get_segment2();
493  if (onedge3==1)onseg=ndontri->get_segment3();
495  for(int ifr=0;ifr<onseg->get_lien_triangle()->get_nb();ifr++)
496  {
497  MG_TRIANGLE* trfr=onseg->get_lien_triangle()->get(ifr);
498  if (trfr->get_segment1()!=onseg) freesegs.ajouter(trfr->get_segment1());
499  if (trfr->get_segment2()!=onseg) freesegs.ajouter(trfr->get_segment2());
500  if (trfr->get_segment3()!=onseg) freesegs.ajouter(trfr->get_segment3());
501  }
503  for (MG_SEGMENT* segfre=freesegs.get_premier(itfr);segfre!=NULL;segfre=freesegs.get_suivant(itfr))
504  {
505  MG_TRIANGLE* trioth;
506  if(segfre->get_lien_triangle()->get(0)==onseg->get_lien_triangle()->get(0) || segfre->get_lien_triangle()->get(0)==onseg->get_lien_triangle()->get(1))
507  trioth=segfre->get_lien_triangle()->get(1);
508  else if(segfre->get_lien_triangle()->get(1)==onseg->get_lien_triangle()->get(0) || segfre->get_lien_triangle()->get(1)==onseg->get_lien_triangle()->get(1))
509  trioth=segfre->get_lien_triangle()->get(0);
510  double pinsphnb=inshper_point(p,trioth);
511  if (pinsphnb<=0.)
512  {
513  MG_NOEUD* othnd;
514  if (trioth->get_noeud1()!=segfre->get_noeud1() && trioth->get_noeud1()!=segfre->get_noeud2()) othnd=trioth->get_noeud1();
515  else if (trioth->get_noeud2()!=segfre->get_noeud1() && trioth->get_noeud2()!=segfre->get_noeud2()) othnd=trioth->get_noeud2();
516  else if (trioth->get_noeud3()!=segfre->get_noeud1() && trioth->get_noeud3()!=segfre->get_noeud2()) othnd=trioth->get_noeud3();
517  double qual1=tq.qualite_triangle(p->get_coord(),segfre->get_noeud1()->get_coord(),othnd->get_coord());
518  double qual2=tq.qualite_triangle(p->get_coord(),segfre->get_noeud2()->get_coord(),othnd->get_coord());
519  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndontri));
520  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndontri));
521  }
522  else
523  {
524  double qual1=tq.qualite_triangle(p->get_coord(),segfre->get_noeud1()->get_coord(),segfre->get_noeud2()->get_coord());
525  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndontri));
526  }
527 
528  }
529 
530  }
531 }
532 
533 }
534 
535 std::multimap<double,MG_TRIANGLE*,std::less<double> > :: iterator itdelinsqualtri=delinsqualtri.begin();
536 delaunyinsqual=(*itdelinsqualtri).first;
538 if (lstqualprxndfinal.size()>0 && proximityqual>delaunyinsqual)
539 {
540  std::multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstqualprxndfinal=lstqualprxndfinal.begin();
541  prox_nd((*itlstqualprxndfinal).second,p,mai,octreends,octree);
542 }
543 
544 else
545 {
546  delaunay_ndinsert(p,mai,search_radius,octree,geo,octreends);
547 }
548  }
549 }
550 
551 int mgvolnb=geo->get_nb_mg_volume();
552 MG_VOLUME* mgvol;
553 for (int iv=0;iv<mai->get_mg_geometrie()->get_nb_mg_volume();iv++)
554 {
556  MG_FACE *fac=(MG_FACE*)top1;
557 
559  mgvol=mai->get_mg_geometrie()->get_mg_volume(iv);
560 }
562 opt.optimise(mgvol);
563 
565 
566 }
567 void MAILLEUR2D_INS_NOEUD::ins_point_withbc(double gentriqual, double mesh_size, char* gnifoutputfilename, int insremtyp)
568 {
569  std::vector<double*> lstgnifread;
570  std::vector<double*> lstgnifwrite;
571  int verycloseee=0;
572  int proxndiiadd=0;
573  int delonnodiiadd=0;
574  int removednodiadd=0;
577  MG_MAILLAGE* mai;
579 
580  double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
581  TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
582  LISTE_MG_NOEUD::iterator it;
583  for (MG_NOEUD* no=mai->get_premier_noeud(it);no!=NULL;no=mai->get_suivant_noeud(it))
584  {
585  if (no->get_x()<xmin) xmin=no->get_x();
586  if (no->get_y()<ymin) ymin=no->get_y();
587  if (no->get_z()<zmin) zmin=no->get_z();
588  if (no->get_x()>xmax) xmax=no->get_x();
589  if (no->get_y()>ymax) ymax=no->get_y();
590  if (no->get_z()>zmax) zmax=no->get_z();
591  lstnoeud.ajouter(no);
592  }
593  OT_VECTEUR_3D vecmin(xmin,ymin,zmin);
594  OT_VECTEUR_3D vecmax(xmax,ymax,zmax);
595  OT_VECTEUR_3D lengthvec(vecmin,vecmax);
596  double search_radius=0.001*(lengthvec.get_longueur());
597  //char bboxdiag[1000];
598  //sprintf(bboxdiag,"the bounding box diagonal is: %lf , and the neighborhood search radius is: %lf ",vec.get_longueur(),search_radius);
599  //affiche((char*) bboxdiag);
600  OT_VECTEUR_3D average=(vecmin+vecmax)/2.;
601  double length=sqrt(lengthvec*lengthvec);
602  double bxr=1.1;
603  xmin=average.get_x()-(length*bxr);ymin=average.get_y()-(length*bxr);zmin=average.get_z()-(length*bxr);
604  xmax=average.get_x()+(length*bxr);ymax=average.get_y()+(length*bxr);zmax=average.get_z()+(length*bxr);
606  octree.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
607  LISTE_MG_TRIANGLE::iterator it9;
609  octree.inserer(tri);
611  octreends.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
612  for (MG_NOEUD* no=mai->get_premier_noeud(it);no!=NULL;no=mai->get_suivant_noeud(it))
613  octreends.inserer(no);
614 double prop=0.001;
615 std::map<MG_NOEUD*,double*> pins;
616 FILE *in=fopen(inspointfilename,"rt");
617 if (in==NULL) affiche((char*) "file is not available");
618 while(!feof(in))
619 {
620  char chaine[500];
621  char* res=fgets(chaine,500,in);
622  if(res!=NULL)
623  {
624  double x,y,z;
625  double q1,q2,q3;
626  double ins_rem_type;
627  double* pcoordbc=new double[6];
628 
629  if(insremtyp==0)
630  {
631  int nb=sscanf(chaine,"%le %le %le %le %le %le",&x,&y,&z,&q1,&q2,&q3);
632  q1=prop*q1;
633  q2=prop*q2;
634  q3=prop*q3;
635  if (nb!=-1 && nb!=6) affiche((char*)"Wrong file format");
636  else if (nb==6)
637  {
638  ins_rem_type=1;
639  pcoordbc[0]=x; pcoordbc[1]=y; pcoordbc[2]=z; pcoordbc[3]=q1; pcoordbc[4]=q2; pcoordbc[5]=q3;
640  lstgnifread.push_back(pcoordbc);
641  }
642  }
643  else if(insremtyp>0)
644  {
645  int nb=sscanf(chaine,"%le %le %le %le %le %le %le",&ins_rem_type,&x,&y,&z,&q1,&q2,&q3);
646  q1=prop*q1;
647  q2=prop*q2;
648  q3=prop*q3;
649  if (nb!=-1 && nb!=7) affiche((char*)"Wrong file format");
650  else if (nb==7)
651  {
652  pcoordbc[0]=x; pcoordbc[1]=y; pcoordbc[2]=z; pcoordbc[3]=q1; pcoordbc[4]=q2; pcoordbc[5]=q3;
653  lstgnifread.push_back(pcoordbc);
654  }
655  }
656 
657  int insp_exist=0;
658  TPL_MAP_ENTITE<MG_NOEUD*> lstneinds_tstpexist;
659  int tstpexistnb=lstneinds_tstpexist.get_nb();
660  double search_radius1=search_radius;
661  while(tstpexistnb==0)
662 {
663  octreends.rechercher(x,y,z,search_radius1,lstneinds_tstpexist);
664  tstpexistnb=lstneinds_tstpexist.get_nb();
665  search_radius1=search_radius1+0.1*search_radius1;
666 }
667 
668 std::map<double,MG_NOEUD*,std::less<double> > lstneinodins;
669 std::map<double,MG_NOEUD*,std::less<double> > lstneinodinsedge;
671 for (MG_NOEUD* nds_tstpexist=lstneinds_tstpexist.get_premier(itst_pexist);nds_tstpexist!=NULL;nds_tstpexist=lstneinds_tstpexist.get_suivant(itst_pexist))
672 {
673  double dis1=sqrt(pow((nds_tstpexist->get_x()-x),2.)+pow((nds_tstpexist->get_y()-y),2.)+pow((nds_tstpexist->get_z()-z),2.));
674  lstneinodins.insert(std::pair<double,MG_NOEUD*>(dis1,nds_tstpexist));
675  if(nds_tstpexist->get_lien_topologie()->get_dimension()<2)
676  {
677  lstneinodinsedge.insert(std::pair<double,MG_NOEUD*>(dis1,nds_tstpexist));
678  }
679 }
680 std::map<double,MG_NOEUD*,std::less<double> >::iterator itlstneinodins;
681 if(lstneinodins.size()>0)
682  {
683  itlstneinodins=lstneinodins.begin();
684  MG_NOEUD* ndaround=(*itlstneinodins).second;
685  int sgltop=0;
687  for(int igtls=0;igtls<ndaround->get_lien_segment()->get_nb();igtls++)
688  ndgls.ajouter(ndaround->get_lien_segment()->get(igtls));
690  for(MG_SEGMENT* sgtls=ndgls.get_premier(itndgls);sgtls!=NULL;sgtls=ndgls.get_suivant(itndgls))
691  {
692  if(sgtls->get_lien_topologie()->get_dimension()<3)
693  sgltop++;
694  }
695 
696  if(ndaround->get_x()<x+proxval && ndaround->get_x()>x-proxval)
697  if(ndaround->get_y()<y+proxval && ndaround->get_y()>y-proxval)
698  if(ndaround->get_z()<z+proxval && ndaround->get_z()>z-proxval)
699  if(ndaround->get_lien_topologie()->get_dimension()<3 || sgltop>0)
700  {
701 
702  insp_exist++;
703  class MG_SOMMET_NOEUD* somno=geo->ajouter_mg_sommet_noeud(ndaround);
704  q1=(0.001*(x-ndaround->get_x()))+q1;
705  q2=(0.001*(y-ndaround->get_y()))+q2;
706  q3=(0.001*(z-ndaround->get_z()))+q3;
707  somno->ajouter_ccf((char*)"Dx",q1);
708  somno->ajouter_ccf((char*)"Dy",q2);
709  somno->ajouter_ccf((char*)"Dz",q3);
711  double* pcoordbc=new double[6];
712  pcoordbc[0]=x; pcoordbc[1]=y; pcoordbc[2]=z; pcoordbc[3]=q1; pcoordbc[4]=q2; pcoordbc[5]=q3;
713  lstgnifwrite.push_back(pcoordbc);
714  for(int itri=0;itri<ndaround->get_lien_triangle()->get_nb();itri++)
715  {
716  MG_TRIANGLE* tricha=ndaround->get_lien_triangle()->get(itri);
717  if(ins_rem_type<1)
719  else if(ins_rem_type>0)
721  }
722 
723  if(lstneinodinsedge.size()>0 )
724  {
725  for(std::map<double,MG_NOEUD*,std::less<double> >::iterator itlstneinodinsedgechk=lstneinodinsedge.begin();itlstneinodinsedgechk!=lstneinodinsedge.end();itlstneinodinsedgechk++)
726  {
727  if (ndaround==(*itlstneinodinsedgechk).second)
728  lstneinodinsedge.erase(itlstneinodinsedgechk);
729  }
730  }
731  verycloseee++;
732  std::cout<<"VERY VERY VERY CLOSE"<<std::endl;
733  }
734  }
735  std::map<double,MG_NOEUD*,std::less<double> >::iterator itlstneinodinsedge;
736  if(lstneinodinsedge.size()>0 && proxedgeval>0.)
737  {
738  itlstneinodinsedge=lstneinodinsedge.begin();
739  MG_NOEUD* ndaround=(*itlstneinodinsedge).second;
740  double distp=(*itlstneinodinsedge).first;
741  if(distp<proxedgeval)
742  {
743  insp_exist++;
744  class MG_SOMMET_NOEUD* somno=geo->ajouter_mg_sommet_noeud(ndaround);
745  q1=(0.001*(x-ndaround->get_x()))+q1;
746  q2=(0.001*(y-ndaround->get_y()))+q2;
747  q3=(0.001*(z-ndaround->get_z()))+q3;
748  somno->ajouter_ccf((char*)"Dx",q1);
749  somno->ajouter_ccf((char*)"Dy",q2);
750  somno->ajouter_ccf((char*)"Dz",q3);
752  double* pcoordbc=new double[6];
753  pcoordbc[0]=x; pcoordbc[1]=y; pcoordbc[2]=z; pcoordbc[3]=q1; pcoordbc[4]=q2; pcoordbc[5]=q3;
754  lstgnifwrite.push_back(pcoordbc);
755  for(int itri=0;itri<ndaround->get_lien_triangle()->get_nb();itri++)
756  {
757  MG_TRIANGLE* tricha=ndaround->get_lien_triangle()->get(itri);
758  if(ins_rem_type<1)
760  else if(ins_rem_type>0)
762  }
763  verycloseee++;
764  std::cout<<"VERY CLOSE to edges"<<std::endl;
765  }
766  }
767 
768  lstneinodinsedge.clear();;
769  lstneinodins.clear();;
770  if (insp_exist==0)
771 {
772  MG_NOEUD* p=mai->ajouter_mg_noeud(NULL,x,y,z,MAGIC::ORIGINE::IMPOSE); // geometry is NULL no need to add topology later???????
773  double* bc=new double[4];
774  bc[0]=q1; bc[1]=q2; bc[2]=q3; bc[3]=ins_rem_type;
775  pins.insert(std::pair<MG_NOEUD*,double*> (p,bc));
776 }
777  }
778 }
779 fclose(in);
780 double tri_return_angl=3.1415/3.;
781 std::map<MG_NOEUD*,double*> pins_prox_Delaunay;
782 int pins_count=0;
783  for(std::map<MG_NOEUD*,double*>::iterator itpins=pins.begin();itpins!=pins.end();itpins++)
784  {
785  pins_count++;
786  //cout<<"POINT INSERT NO.= "<<pins_count<<endl;
787  int sameinsnd_meshnd=0;
788  double proximityqual=-1.;
789  double delaunyinsqual=-1;
790  std::multimap<double,MG_NOEUD*,std::greater<double> > lstqualprxndfinal;
792  MG_NOEUD* p=(*itpins).first;
794  TPL_MAP_ENTITE<MG_NOEUD*> proxtrind;
795  int neindsnb=proxtrind.get_nb();
796  while(neindsnb==0)
797 {
798  octreends.rechercher(p->get_x(),p->get_y(),p->get_z(),search_radius,proxtrind);
799  neindsnb=proxtrind.get_nb();
800  search_radius=search_radius+0.1*search_radius;
801 }
802 std::multimap< double, MG_NOEUD* , std::less<double> > lstdisproxnde;
804 for(MG_NOEUD* prnde=proxtrind.get_premier(itprnde);prnde!=NULL;prnde=proxtrind.get_suivant(itprnde))
805 {
806  if (prnde->get_x()==p->get_x() && prnde->get_y()==p->get_y() && prnde->get_z()==p->get_z())
807  {
808  sameinsnd_meshnd=sameinsnd_meshnd+1;
809  std::cout<<"the same node as insertion"<<std::endl;
810  break;
811  }
812  else if(prnde->get_lien_topologie()->get_dimension()>1 && prnde->get_origine()!=MAGIC::ORIGINE::IMPOSE)
813  {
814  double dp=sqrt(pow((p->get_x()-prnde->get_x()),2)+pow((p->get_y()-prnde->get_y()),2)+pow((p->get_z()-prnde->get_z()),2));
815  lstdisproxnde.insert(std::pair<double, MG_NOEUD*> (dp,prnde));
816  }
817 }
818 if( sameinsnd_meshnd==0)
819  {
820  std::multimap< double, MG_NOEUD* , std::less<double> >::iterator itlstdprnd=lstdisproxnde.begin();
821 double mindis=(*itlstdprnd).first;
823 double distelorance=1.1;
824 for (itlstdprnd=lstdisproxnde.begin();itlstdprnd!=lstdisproxnde.end();itlstdprnd++)
825 {
826  if ((*itlstdprnd).first<=(distelorance*mindis) && (*itlstdprnd).first<0.8*mesh_size )
827  lstprnds.ajouter((*itlstdprnd).second);
828 }
829 for(int ilpn=0;ilpn<lstprnds.get_nb();ilpn++)
830 {
831  MG_NOEUD* proxnd=lstprnds.get(ilpn);
832  if(proxnd->get_x()==p->get_x() && proxnd->get_y()==p->get_y() && proxnd->get_z()==p->get_z())
833  std::cout<<"proxinod is the same as insertion node"<<std::endl;
834 
835  int proxndtop=proxnd->get_lien_topologie()->get_dimension();
836  if (proxndtop>1) //prox node is not on edge
837  {
838  std::multimap<double,MG_NOEUD*,std::less<double> > lstqualtri;
839 for(int iptr=0;iptr<proxnd->get_lien_triangle()->get_nb();iptr++)
840 {
841  MG_TRIANGLE* prli=proxnd->get_lien_triangle()->get(iptr);
842  MG_SEGMENT* prliseg1=prli->get_segment1();
843  MG_SEGMENT* prliseg2=prli->get_segment2();
844  MG_SEGMENT* prliseg3=prli->get_segment3();
845  MG_NOEUD* prlind1=prli->get_noeud1();
846  MG_NOEUD* prlind2=prli->get_noeud2();
847  MG_NOEUD* prlind3=prli->get_noeud3();
848  OT_VECTEUR_3D vpt1(prlind1->get_coord(),prlind2->get_coord());
849  OT_VECTEUR_3D vpt2(prlind1->get_coord(),prlind3->get_coord());
850  OT_VECTEUR_3D normvpt=(vpt1&vpt2); normvpt.norme();
851  double tqualvpt=tq.qualite_triangle(prli->get_noeud1()->get_coord(),prli->get_noeud2()->get_coord(),prli->get_noeud3()->get_coord());
852  MG_SEGMENT* sgchk;
853  if(proxnd!=prliseg1->get_noeud1() && proxnd!=prliseg1->get_noeud2()) sgchk=prliseg1;
854  if(proxnd!=prliseg2->get_noeud1() && proxnd!=prliseg2->get_noeud2()) sgchk=prliseg2;
855  if(proxnd!=prliseg3->get_noeud1() && proxnd!=prliseg3->get_noeud2()) sgchk=prliseg3;
856  if(sgchk->get_lien_triangle()->get_nb()>1 )
857  {
858  MG_TRIANGLE* othertriangle;
859 
860  if(sgchk->get_lien_triangle()->get(0)!=prli) othertriangle=sgchk->get_lien_triangle()->get(0);
861  else if(sgchk->get_lien_triangle()->get(1)!=prli) othertriangle=sgchk->get_lien_triangle()->get(1);
862  OT_VECTEUR_3D vpto1(othertriangle->get_noeud1()->get_coord(),othertriangle->get_noeud2()->get_coord());
863  OT_VECTEUR_3D vpto2(othertriangle->get_noeud1()->get_coord(),othertriangle->get_noeud3()->get_coord());
864  OT_VECTEUR_3D normvpto=(vpto1&vpto2); normvpto.norme();
865  double tqualvpto=tq.qualite_triangle(othertriangle->get_noeud1()->get_coord(),othertriangle->get_noeud2()->get_coord(),othertriangle->get_noeud3()->get_coord());
866  double insph_swap_chk1=inshper_point(p,othertriangle);
867  MG_NOEUD* trimateothernd;
868  if(othertriangle->get_noeud1()!=sgchk->get_noeud1() && othertriangle->get_noeud1()!=sgchk->get_noeud2()) trimateothernd=othertriangle->get_noeud1();
869  else if(othertriangle->get_noeud2()!=sgchk->get_noeud1() && othertriangle->get_noeud2()!=sgchk->get_noeud2()) trimateothernd=othertriangle->get_noeud2();
870  else if(othertriangle->get_noeud3()!=sgchk->get_noeud1() && othertriangle->get_noeud3()!=sgchk->get_noeud2()) trimateothernd=othertriangle->get_noeud3();
871  double insph_swap_chk2=1.;//inshper_point(trimateothernd,prli);
872  int insph_swap_chk=0;
873  if (insph_swap_chk1<=0. ||insph_swap_chk2<=0.)
874  insph_swap_chk++;
875 
876 
877  if (sgchk->get_noeud1()==prli->get_noeud1() && sgchk->get_noeud2()==prli->get_noeud2())
878  {
879  if(insph_swap_chk>0 && qualswap>0)
880  {
881  double tqual1=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),trimateothernd->get_coord());
882  double tqual2=tq.qualite_triangle(p->get_coord(),trimateothernd->get_coord(),sgchk->get_noeud2()->get_coord());
883  OT_VECTEUR_3D vpr11(p->get_coord(),sgchk->get_noeud1()->get_coord());
884  OT_VECTEUR_3D vpr12(p->get_coord(),trimateothernd->get_coord());
885  OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
886  if(normvpr1*normvpt<cos(tri_return_angl) || normvpr1*normvpto<cos(tri_return_angl))
887  tqual1=-1.;
888  OT_VECTEUR_3D vpr21(p->get_coord(),trimateothernd->get_coord());
889  OT_VECTEUR_3D vpr22(p->get_coord(),sgchk->get_noeud2()->get_coord());
890  OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
891  if(normvpr2*normvpt<cos(tri_return_angl)|| normvpr2*normvpto<cos(tri_return_angl))
892  tqual2=-1.;
893  if(tqual1<=tqual2)
894  {
895  if(tqual1<tqualvpt || tqual1<tqualvpto)
896  tqual1=-1.;
897  }
898  else if (tqual2<tqual1)
899  {
900  if(tqual2<tqualvpt || tqual2<tqualvpto)
901  tqual2=-1.;
902  }
903  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
904  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
905  }
906  else
907  {
908  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),sgchk->get_noeud2()->get_coord());
909  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud1()->get_coord());
910  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud2()->get_coord());
911  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
912  if(normvpr*normvpt<cos(tri_return_angl) || normvpr*normvpto<cos(tri_return_angl))
913  tqual=-1.;
914  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
915  }
916  }
917  if (sgchk->get_noeud1()==prli->get_noeud2() && sgchk->get_noeud2()==prli->get_noeud3())
918  {
919  if(insph_swap_chk>0 && qualswap>0)
920  {
921  double tqual1=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),trimateothernd->get_coord());
922  double tqual2=tq.qualite_triangle(p->get_coord(),trimateothernd->get_coord(),sgchk->get_noeud1()->get_coord());
923  OT_VECTEUR_3D vpr11(p->get_coord(),sgchk->get_noeud1()->get_coord());
924  OT_VECTEUR_3D vpr12(p->get_coord(),trimateothernd->get_coord());
925  OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
926  if(normvpr1*normvpt<cos(tri_return_angl) || normvpr1*normvpto<cos(tri_return_angl))
927  tqual1=-1.;
928  OT_VECTEUR_3D vpr21(p->get_coord(),trimateothernd->get_coord());
929  OT_VECTEUR_3D vpr22(p->get_coord(),sgchk->get_noeud1()->get_coord());
930  OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
931  if(normvpr2*normvpt<cos(tri_return_angl)|| normvpr2*normvpto<cos(tri_return_angl))
932  tqual2=-1.;
933  if(tqual1<=tqual2)
934  {
935  if(tqual1<tqualvpt || tqual1<tqualvpto)
936  tqual1=-1.;
937  }
938  else if (tqual2<tqual1)
939  {
940  if(tqual2<tqualvpt || tqual2<tqualvpto)
941  tqual2=-1.;
942  }
943  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
944  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
945  }
946  else
947  {
948  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),sgchk->get_noeud2()->get_coord());
949  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud1()->get_coord());
950  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud2()->get_coord());
951  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
952  if(normvpr*normvpt<cos(tri_return_angl) || normvpr*normvpto<cos(tri_return_angl))
953  tqual=-1.;
954  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
955  }
956  }
957  if (sgchk->get_noeud1()==prli->get_noeud3() && sgchk->get_noeud2()==prli->get_noeud1())
958  {
959  if(insph_swap_chk>0 && qualswap>0)
960  {
961  double tqual1=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),trimateothernd->get_coord());
962  double tqual2=tq.qualite_triangle(p->get_coord(),trimateothernd->get_coord(),sgchk->get_noeud1()->get_coord());
963  OT_VECTEUR_3D vpr11(p->get_coord(),sgchk->get_noeud1()->get_coord());
964  OT_VECTEUR_3D vpr12(p->get_coord(),trimateothernd->get_coord());
965  OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
966  if(normvpr1*normvpt<cos(tri_return_angl) || normvpr1*normvpto<cos(tri_return_angl))
967  tqual1=-1.;
968  OT_VECTEUR_3D vpr21(p->get_coord(),trimateothernd->get_coord());
969  OT_VECTEUR_3D vpr22(p->get_coord(),sgchk->get_noeud1()->get_coord());
970  OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
971  if(normvpr2*normvpt<cos(tri_return_angl)|| normvpr2*normvpto<cos(tri_return_angl))
972  tqual2=-1.;
973  if(tqual1<=tqual2)
974  {
975  if(tqual1<tqualvpt || tqual1<tqualvpto)
976  tqual1=-1.;
977  }
978  else if (tqual2<tqual1)
979  {
980  if(tqual2<tqualvpt || tqual2<tqualvpto)
981  tqual2=-1.;
982  }
983  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
984  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
985  }
986  else
987  {
988  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),sgchk->get_noeud2()->get_coord());
989  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud1()->get_coord());
990  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud2()->get_coord());
991  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
992  if(normvpr*normvpt<cos(tri_return_angl) || normvpr*normvpto<cos(tri_return_angl))
993  tqual=-1.;
994  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
995  }
996  }
997  if (sgchk->get_noeud1()==prli->get_noeud2() && sgchk->get_noeud2()==prli->get_noeud1())
998  {
999  if(insph_swap_chk>0 && qualswap>0)
1000  {
1001  double tqual1=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),trimateothernd->get_coord());
1002  double tqual2=tq.qualite_triangle(p->get_coord(),trimateothernd->get_coord(),sgchk->get_noeud1()->get_coord());
1003  OT_VECTEUR_3D vpr11(p->get_coord(),sgchk->get_noeud2()->get_coord());
1004  OT_VECTEUR_3D vpr12(p->get_coord(),trimateothernd->get_coord());
1005  OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
1006  if(normvpr1*normvpt<cos(tri_return_angl) || normvpr1*normvpto<cos(tri_return_angl))
1007  tqual1=-1.;
1008  OT_VECTEUR_3D vpr21(p->get_coord(),trimateothernd->get_coord());
1009  OT_VECTEUR_3D vpr22(p->get_coord(),sgchk->get_noeud1()->get_coord());
1010  OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
1011  if(normvpr2*normvpt<cos(tri_return_angl)|| normvpr2*normvpto<cos(tri_return_angl))
1012  tqual2=-1.;
1013  if(tqual1<=tqual2)
1014  {
1015  if(tqual1<tqualvpt || tqual1<tqualvpto)
1016  tqual1=-1.;
1017  }
1018  else if (tqual2<tqual1)
1019  {
1020  if(tqual2<tqualvpt || tqual2<tqualvpto)
1021  tqual2=-1.;
1022  }
1023  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
1024  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
1025  }
1026  else
1027  {
1028  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),sgchk->get_noeud1()->get_coord());
1029  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud2()->get_coord());
1030  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud1()->get_coord());
1031  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1032  if(normvpr*normvpt<cos(tri_return_angl) || normvpr*normvpto<cos(tri_return_angl))
1033  tqual=-1.;
1034  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1035  }
1036  }
1037  if (sgchk->get_noeud1()==prli->get_noeud3() && sgchk->get_noeud2()==prli->get_noeud2())
1038  {
1039  if(insph_swap_chk>0 && qualswap>0)
1040  {
1041  double tqual1=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),trimateothernd->get_coord());
1042  double tqual2=tq.qualite_triangle(p->get_coord(),trimateothernd->get_coord(),sgchk->get_noeud1()->get_coord());
1043  OT_VECTEUR_3D vpr11(p->get_coord(),sgchk->get_noeud2()->get_coord());
1044  OT_VECTEUR_3D vpr12(p->get_coord(),trimateothernd->get_coord());
1045  OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
1046  if(normvpr1*normvpt<cos(tri_return_angl) || normvpr1*normvpto<cos(tri_return_angl))
1047  tqual1=-1.;
1048  OT_VECTEUR_3D vpr21(p->get_coord(),trimateothernd->get_coord());
1049  OT_VECTEUR_3D vpr22(p->get_coord(),sgchk->get_noeud1()->get_coord());
1050  OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
1051  if(normvpr2*normvpt<cos(tri_return_angl)|| normvpr2*normvpto<cos(tri_return_angl))
1052  tqual2=-1.;
1053  if(tqual1<=tqual2)
1054  {
1055  if(tqual1<tqualvpt || tqual1<tqualvpto)
1056  tqual1=-1.;
1057  }
1058  else if (tqual2<tqual1)
1059  {
1060  if(tqual2<tqualvpt || tqual2<tqualvpto)
1061  tqual2=-1.;
1062  }
1063  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
1064  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
1065  }
1066  else
1067  {
1068  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),sgchk->get_noeud1()->get_coord());
1069  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud2()->get_coord());
1070  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud1()->get_coord());
1071  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1072  if(normvpr*normvpt<cos(tri_return_angl) || normvpr*normvpto<cos(tri_return_angl))
1073  tqual=-1.;
1074  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1075  }
1076  }
1077  if (sgchk->get_noeud1()==prli->get_noeud1() && sgchk->get_noeud2()==prli->get_noeud3())
1078  {
1079  if(insph_swap_chk>0 && qualswap>0)
1080  {
1081  double tqual1=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),trimateothernd->get_coord());
1082  double tqual2=tq.qualite_triangle(p->get_coord(),trimateothernd->get_coord(),sgchk->get_noeud1()->get_coord());
1083  OT_VECTEUR_3D vpr11(p->get_coord(),sgchk->get_noeud2()->get_coord());
1084  OT_VECTEUR_3D vpr12(p->get_coord(),trimateothernd->get_coord());
1085  OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
1086  if(normvpr1*normvpt<cos(tri_return_angl) || normvpr1*normvpto<cos(tri_return_angl))
1087  tqual1=-1.;
1088  OT_VECTEUR_3D vpr21(p->get_coord(),trimateothernd->get_coord());
1089  OT_VECTEUR_3D vpr22(p->get_coord(),sgchk->get_noeud1()->get_coord());
1090  OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
1091  if(normvpr2*normvpt<cos(tri_return_angl)|| normvpr2*normvpto<cos(tri_return_angl))
1092  tqual2=-1.;
1093  if(tqual1<=tqual2)
1094  {
1095  if(tqual1<tqualvpt || tqual1<tqualvpto)
1096  tqual1=-1.;
1097  }
1098  else if (tqual2<tqual1)
1099  {
1100  if(tqual2<tqualvpt || tqual2<tqualvpto)
1101  tqual2=-1.;
1102  }
1103  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
1104  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
1105  }
1106  else
1107  {
1108  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),sgchk->get_noeud1()->get_coord());
1109  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud2()->get_coord());
1110  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud1()->get_coord());
1111  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1112  if(normvpr*normvpt<cos(tri_return_angl) || normvpr*normvpto<cos(tri_return_angl))
1113  tqual=-1.;
1114  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1115  }
1116  }
1117  }
1118  else
1119  {
1120  if (sgchk->get_noeud1()==prli->get_noeud1() && sgchk->get_noeud2()==prli->get_noeud2())
1121  {
1122  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),sgchk->get_noeud2()->get_coord());
1123  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud1()->get_coord());
1124  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud2()->get_coord());
1125  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1126  if(normvpr*normvpt<cos(tri_return_angl))
1127  tqual=-1.;
1128  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1129  }
1130  if (sgchk->get_noeud1()==prli->get_noeud2() && sgchk->get_noeud2()==prli->get_noeud3())
1131  {
1132  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),sgchk->get_noeud2()->get_coord());
1133  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud1()->get_coord());
1134  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud2()->get_coord());
1135  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1136  if(normvpr*normvpt<cos(tri_return_angl))
1137  tqual=-1.;
1138  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1139  }
1140  if (sgchk->get_noeud1()==prli->get_noeud3() && sgchk->get_noeud2()==prli->get_noeud1())
1141  {
1142  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud1()->get_coord(),sgchk->get_noeud2()->get_coord());
1143  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud1()->get_coord());
1144  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud2()->get_coord());
1145  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1146  if(normvpr*normvpt<cos(tri_return_angl))
1147  tqual=-1.;
1148  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1149  }
1150  if (sgchk->get_noeud1()==prli->get_noeud2() && sgchk->get_noeud2()==prli->get_noeud1())
1151  {
1152  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),sgchk->get_noeud1()->get_coord());
1153  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud2()->get_coord());
1154  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud1()->get_coord());
1155  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1156  if(normvpr*normvpt<cos(tri_return_angl))
1157  tqual=-1.;
1158  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1159  }
1160  if (sgchk->get_noeud1()==prli->get_noeud3() && sgchk->get_noeud2()==prli->get_noeud2())
1161  {
1162  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),sgchk->get_noeud1()->get_coord());
1163  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud2()->get_coord());
1164  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud1()->get_coord());
1165  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1166  if(normvpr*normvpt<cos(tri_return_angl))
1167  tqual=-1.;
1168  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1169  }
1170  if (sgchk->get_noeud1()==prli->get_noeud1() && sgchk->get_noeud2()==prli->get_noeud3())
1171  {
1172  double tqual=tq.qualite_triangle(p->get_coord(),sgchk->get_noeud2()->get_coord(),sgchk->get_noeud1()->get_coord());
1173  OT_VECTEUR_3D vpr1(p->get_coord(),sgchk->get_noeud2()->get_coord());
1174  OT_VECTEUR_3D vpr2(p->get_coord(),sgchk->get_noeud1()->get_coord());
1175  OT_VECTEUR_3D normvpr=(vpr1&vpr2); normvpr.norme();
1176  if(normvpr*normvpt<cos(tri_return_angl))
1177  tqual=-1.;
1178  lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
1179 
1180  }
1181  }
1182 
1183 }
1184  std::multimap<double,MG_NOEUD*,std::less<double> >::iterator itlstqualtri=lstqualtri.begin();
1185  lstqualprxndfinal.insert(std::pair<double,MG_NOEUD*>((*itlstqualtri).first,(*itlstqualtri).second));
1186 
1187  }
1188 }
1189 
1190 if (lstqualprxndfinal.size()>0)
1191 {
1192 std::multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstqualprxndfinal=lstqualprxndfinal.begin();
1193  proximityqual=(*itlstqualprxndfinal).first;
1194 }
1195 std::multimap<double,MG_TRIANGLE*,std::less<double> > delinsqualtri;
1196 double normale[3];
1197 int insideface=0;
1198 std::multimap<double,MG_FACE*,std::less<double> > lstfacepointdist;
1199 int facenb=geo->get_nb_mg_face();
1200  LISTE_MG_FACE::iterator itf;
1201  double xyz[3];
1202  xyz[0]=p->get_x();
1203  xyz[1]=p->get_y();
1204  xyz[2]=p->get_z();
1205  for(MG_FACE* fac=geo->get_premier_face(itf);fac!=NULL;fac=geo->get_suivant_face(itf))
1206  {
1207  double uv[2];
1208  fac->inverser(uv,xyz);
1209  double xyz2[3];
1210  fac->evaluer(uv,xyz2);
1211  OT_VECTEUR_3D vechk(xyz,xyz2);
1212  lstfacepointdist.insert(std::pair<double,MG_FACE*> (vechk.get_longueur(),fac));
1213  //double dis;
1214  //MG_GEOMETRIE_OUTILS f1;
1215  //int ch=f1.calcule_distance_contour_face_xyz(xyz,fac,&dis);
1217  //cout<<"dis= "<<dis<<" vechk.get_longueur()= "<<vechk.get_longueur()<<endl;
1218  //if (ch==1 && dis>=0.)
1219  // if (vechk.get_longueur()<5e-3)
1220  }
1221 std::multimap<double,MG_FACE*,std::less<double> >::iterator itlstfacepointdist=lstfacepointdist.begin();
1222 if (lstfacepointdist.size()>0)
1223 {
1224  //cout<<"(*itlstfacepointdist).first= "<<(*itlstfacepointdist).first<<endl;
1225  MG_FACE* face=(*itlstfacepointdist).second;
1226  double uv[2];
1227  face->inverser(uv,xyz);
1228  face->calcul_normale_unitaire(uv,normale);
1229  MG_COFACE *coface=face->get_mg_coface(0);
1230  int signe=coface->get_orientation();
1231 
1232  TPL_MAP_ENTITE<MG_TRIANGLE*> lstneitri;
1233  int neitrinb=lstneitri.get_nb();
1234  while(neitrinb==0)
1235 {
1236  octree.rechercher(p->get_x(),p->get_y(),p->get_z(),search_radius,lstneitri);
1237  neitrinb=lstneitri.get_nb();
1238  search_radius=search_radius+0.01*search_radius;
1239 }
1241 OT_VECTEUR_3D normale_discrete(0.,0.,0.);
1242 for (MG_TRIANGLE* tri1=lstneitri.get_premier(itnormtst);tri1!=NULL;tri1=lstneitri.get_suivant(itnormtst))
1243  {
1244  OT_VECTEUR_3D vec1(tri1->get_noeud1()->get_coord(),tri1->get_noeud2()->get_coord());
1245  OT_VECTEUR_3D vec2(tri1->get_noeud1()->get_coord(),tri1->get_noeud3()->get_coord());
1246  OT_VECTEUR_3D normtst=(vec1&vec2); normtst.norme();
1247  normale_discrete=normtst+normale_discrete;
1248  }
1249 normale_discrete.norme();
1250 double n_ps=normale_discrete*normale;
1251 n_ps=n_ps*-1;
1252 if (n_ps>1.) n_ps=1.;
1253 if (n_ps<-1.) n_ps=-1.;
1254 double n_angle=acos(n_ps);
1255 if(n_angle<(0.5*3.14159265358979323846) || n_angle>-(0.5*3.14159265358979323846))
1256  insideface++;
1257 }
1258 if(insideface>0)
1259 {
1261 int neitrinb=lstneitri.get_nb();
1262 while(neitrinb==0)
1263 {
1264  octree.rechercher(p->get_x(),p->get_y(),p->get_z(),search_radius,lstneitri);
1265  neitrinb=lstneitri.get_nb();
1266  search_radius=search_radius+0.01*search_radius;
1267 }
1270 for (MG_TRIANGLE* tri1=lstneitri.get_premier(it1);tri1!=NULL;tri1=lstneitri.get_suivant(it1))
1271  {
1272  double insphchk=inshper_point(p,tri1);
1273  //cout<<"insphchk= "<<insphchk<<endl;
1274  if (insphchk<=0.)
1275  insphtri.ajouter(tri1);
1276  }
1279 double pproj[3];
1281 for (MG_TRIANGLE* insphertri=insphtri.get_premier(inspi);insphertri!=NULL;insphertri=insphtri.get_suivant(inspi))
1282 {
1283 MG_NOEUD* inspnd1=insphertri->get_noeud1();
1284 MG_NOEUD* inspnd2=insphertri->get_noeud2();
1285 MG_NOEUD* inspnd3=insphertri->get_noeud3();
1286 OT_VECTEUR_3D tvec1(inspnd1->get_coord(),inspnd2->get_coord());
1287 OT_VECTEUR_3D tvec2(inspnd1->get_coord(),inspnd3->get_coord());
1288 OT_VECTEUR_3D tnorm=(tvec1&tvec2); tnorm.norme();
1289 OT_VECTEUR_3D norm=normale;
1290 
1291 double parallel=norm*tnorm;
1292 /*cramer method
1293 OT_VECTEUR_3D r1((-p->get_x()),(inspnd2->get_x()-inspnd1->get_x()),(inspnd3->get_x()-inspnd1->get_x()));
1294 OT_VECTEUR_3D r2((-p->get_y()),(inspnd2->get_y()-inspnd1->get_y()),(inspnd3->get_y()-inspnd1->get_y()));
1295 OT_VECTEUR_3D r3((-p->get_z()),(inspnd2->get_z()-inspnd1->get_z()),(inspnd3->get_z()-inspnd1->get_z()));
1296 OT_VECTEUR_3D d1((norm.get_x()),(inspnd2->get_x()-inspnd1->get_x()),(inspnd3->get_x()-inspnd1->get_x()));
1297 OT_VECTEUR_3D d2((norm.get_y()),(inspnd2->get_y()-inspnd1->get_y()),(inspnd3->get_y()-inspnd1->get_y()));
1298 OT_VECTEUR_3D d3((norm.get_z()),(inspnd2->get_z()-inspnd1->get_z()),(inspnd3->get_z()-inspnd1->get_z()));
1299 
1300 OT_MATRICE_3D tr(r1,r2,r3);
1301 OT_MATRICE_3D td(d1,d2,d3);
1302 double detd=td.get_determinant();
1303 double detr=tr.get_determinant();
1304 if (detd==0.)// || detr==0.)
1305  cout<<"wrong ins point projection on the mesh"<<endl;
1306 if (detd!=0.)
1307  */
1308 if (parallel>0.7 || parallel<-0.7)
1309 {
1310  //cout<<"normale[0]= "<<normale[0]<<" normale[1]= "<<normale[1]<<" normale[2]= "<<normale[2]<<endl;
1311 OT_VECTEUR_3D vvec(inspnd1->get_coord(),p->get_coord());
1312 double t= (tnorm*vvec)/parallel;
1313 t=-t;
1314 pproj[0]=p->get_x()+t*norm.get_x();
1315 pproj[1]=p->get_y()+t*norm.get_y();
1316 pproj[2]=p->get_z()+t*norm.get_z();
1317 MG_MAILLAGE_OUTILS tribas;
1318 int tribasval=tribas.estdansletriangle(insphertri,pproj[0],pproj[1],pproj[2]);
1319 int intri=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::INTERIEUR);
1320 int insidtri=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::STRICTINTERIEUR);
1321 int onedge=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SUR_ARETE);
1322 if (insidtri==1)
1323 {
1324  MG_TRIANGLE* ndintri=insphertri;
1325  MG_SEGMENT* seg1=ndintri->get_segment1();
1326  MG_SEGMENT* seg2=ndintri->get_segment2();
1327  MG_SEGMENT* seg3=ndintri->get_segment3();
1328 
1329  if(seg1->get_lien_triangle()->get_nb()>1)
1330  {
1331  MG_TRIANGLE* trioth1;
1332  if (seg1->get_lien_triangle()->get(0)!=ndintri) trioth1=seg1->get_lien_triangle()->get(0);
1333  else if (seg1->get_lien_triangle()->get(1)!=ndintri) trioth1=seg1->get_lien_triangle()->get(1);
1334  double pinsphnb1=inshper_point(p,trioth1);
1335  if (pinsphnb1<=0. && seg1->get_lien_topologie()->get_dimension()>1 && qualswap>0)
1336  {
1337  MG_NOEUD* othnd;
1338  if (trioth1->get_noeud1()!=seg1->get_noeud1() && trioth1->get_noeud1()!=seg1->get_noeud2()) othnd=trioth1->get_noeud1();
1339  else if (trioth1->get_noeud2()!=seg1->get_noeud1() && trioth1->get_noeud2()!=seg1->get_noeud2()) othnd=trioth1->get_noeud2();
1340  else if (trioth1->get_noeud3()!=seg1->get_noeud1() && trioth1->get_noeud3()!=seg1->get_noeud2()) othnd=trioth1->get_noeud3();
1341  double qual1=tq.qualite_triangle(p->get_coord(),seg1->get_noeud1()->get_coord(),othnd->get_coord());
1342  double qual2=tq.qualite_triangle(p->get_coord(),seg1->get_noeud2()->get_coord(),othnd->get_coord());
1343  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1344  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndintri));
1345  }
1346  else
1347  {
1348  double qual1=tq.qualite_triangle(p->get_coord(),seg1->get_noeud1()->get_coord(),seg1->get_noeud2()->get_coord());
1349  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1350  }
1351  }
1352 else
1353 {
1354  double qual1=tq.qualite_triangle(p->get_coord(),seg1->get_noeud1()->get_coord(),seg1->get_noeud2()->get_coord());
1355  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1356 }
1357 
1358  if(seg2->get_lien_triangle()->get_nb()>1)
1359  {
1360  MG_TRIANGLE* trioth2;
1361  if (seg2->get_lien_triangle()->get(0)!=ndintri) trioth2=seg2->get_lien_triangle()->get(0);
1362  else if (seg2->get_lien_triangle()->get(1)!=ndintri) trioth2=seg2->get_lien_triangle()->get(1);
1363  double pinsphnb2=inshper_point(p,trioth2);
1364  if (pinsphnb2<=0. && seg2->get_lien_topologie()->get_dimension()>1 && qualswap>0)
1365  {
1366  MG_NOEUD* othnd;
1367  if (trioth2->get_noeud1()!=seg2->get_noeud1() && trioth2->get_noeud1()!=seg2->get_noeud2()) othnd=trioth2->get_noeud1();
1368  else if (trioth2->get_noeud2()!=seg2->get_noeud1() && trioth2->get_noeud2()!=seg2->get_noeud2()) othnd=trioth2->get_noeud2();
1369  else if (trioth2->get_noeud3()!=seg2->get_noeud1() && trioth2->get_noeud3()!=seg2->get_noeud2()) othnd=trioth2->get_noeud3();
1370  double qual1=tq.qualite_triangle(p->get_coord(),seg2->get_noeud1()->get_coord(),othnd->get_coord());
1371  double qual2=tq.qualite_triangle(p->get_coord(),seg2->get_noeud2()->get_coord(),othnd->get_coord());
1372  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1373  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndintri));
1374  }
1375  else
1376  {
1377  double qual1=tq.qualite_triangle(p->get_coord(),seg2->get_noeud1()->get_coord(),seg2->get_noeud2()->get_coord());
1378  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1379  }
1380  }
1381  else
1382  {
1383  double qual1=tq.qualite_triangle(p->get_coord(),seg2->get_noeud1()->get_coord(),seg2->get_noeud2()->get_coord());
1384  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1385  }
1386 
1387  if(seg3->get_lien_triangle()->get_nb()>1)
1388  {
1389  MG_TRIANGLE* trioth3;
1390  if (seg3->get_lien_triangle()->get(0)!=ndintri) trioth3=seg3->get_lien_triangle()->get(0);
1391  else if (seg3->get_lien_triangle()->get(1)!=ndintri) trioth3=seg3->get_lien_triangle()->get(1);
1392  double pinsphnb3=inshper_point(p,trioth3);
1393  if (pinsphnb3<=0. && seg3->get_lien_topologie()->get_dimension()>1 && qualswap>0)
1394  {
1395  MG_NOEUD* othnd;
1396  if (trioth3->get_noeud1()!=seg3->get_noeud1() && trioth3->get_noeud1()!=seg3->get_noeud2()) othnd=trioth3->get_noeud1();
1397  else if (trioth3->get_noeud2()!=seg3->get_noeud1() && trioth3->get_noeud2()!=seg3->get_noeud2()) othnd=trioth3->get_noeud2();
1398  else if (trioth3->get_noeud3()!=seg3->get_noeud1() && trioth3->get_noeud3()!=seg3->get_noeud2()) othnd=trioth3->get_noeud3();
1399  double qual1=tq.qualite_triangle(p->get_coord(),seg3->get_noeud1()->get_coord(),othnd->get_coord());
1400  double qual2=tq.qualite_triangle(p->get_coord(),seg3->get_noeud2()->get_coord(),othnd->get_coord());
1401  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1402  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndintri));
1403  }
1404  else
1405  {
1406  double qual1=tq.qualite_triangle(p->get_coord(),seg3->get_noeud1()->get_coord(),seg3->get_noeud2()->get_coord());
1407  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1408  }
1409  }
1410  else
1411  {
1412  double qual1=tq.qualite_triangle(p->get_coord(),seg3->get_noeud1()->get_coord(),seg3->get_noeud2()->get_coord());
1413  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndintri));
1414  }
1415  break;
1416 }
1417 else if (onedge==1)
1418 {
1419  MG_TRIANGLE* ndontri=insphertri;
1420  MG_NOEUD* ndo1=ndontri->get_noeud1();
1421  MG_NOEUD* ndo2=ndontri->get_noeud2();
1422  MG_NOEUD* ndo3=ndontri->get_noeud3();
1423  int onvert1=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET1);
1424  int onvert2=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET2);
1425  int onvert3=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET3);
1426  int onedge1=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE1);
1427  int onedge2=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE2);
1428  int onedge3=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE3);
1429  if (onvert1==1 || onvert2==1 || onvert3==1)
1430  {
1431  MG_NOEUD* ond;
1432  if(onvert1==1)ond=ndo1;
1433  if(onvert2==1)ond=ndo2;
1434  if(onvert3==1)ond=ndo3;
1435  for(int iind=0;iind<ond->get_lien_triangle()->get_nb();iind++)
1436  {
1437  MG_TRIANGLE* trlie=ond->get_lien_triangle()->get(iind);
1438  MG_SEGMENT* trlieseg1=trlie->get_segment1();
1439  MG_SEGMENT* trlieseg2=trlie->get_segment2();
1440  MG_SEGMENT* trlieseg3=trlie->get_segment3();
1441  MG_SEGMENT* segchkk;
1442  if (trlieseg1->get_noeud1()!=ond && trlieseg1->get_noeud2()!=ond) segchkk=trlieseg1;
1443  else if (trlieseg2->get_noeud1()!=ond && trlieseg2->get_noeud2()!=ond) segchkk=trlieseg2;
1444  else if (trlieseg3->get_noeud1()!=ond && trlieseg3->get_noeud2()!=ond) segchkk=trlieseg3;
1445 
1446  if(segchkk->get_lien_triangle()->get_nb()>1)
1447  {
1448  MG_TRIANGLE* trioth;
1449  if(segchkk->get_lien_triangle()->get(0)!=trlie) trioth=segchkk->get_lien_triangle()->get(0);
1450  else if(segchkk->get_lien_triangle()->get(1)!=trlie) trioth=segchkk->get_lien_triangle()->get(1);
1451 
1452  double pinsphnb=inshper_point(p,trioth);
1453  if (pinsphnb<=0. && qualswap>0)
1454  {
1455  MG_NOEUD* othnd;
1456  if (trioth->get_noeud1()!=segchkk->get_noeud1() && trioth->get_noeud1()!=segchkk->get_noeud2()) othnd=trioth->get_noeud1();
1457  else if (trioth->get_noeud2()!=segchkk->get_noeud1() && trioth->get_noeud2()!=segchkk->get_noeud2()) othnd=trioth->get_noeud2();
1458  else if (trioth->get_noeud3()!=segchkk->get_noeud1() && trioth->get_noeud3()!=segchkk->get_noeud2()) othnd=trioth->get_noeud3();
1459  double qual1=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud1()->get_coord(),othnd->get_coord());
1460  double qual2=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud2()->get_coord(),othnd->get_coord());
1461  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,trlie));
1462  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,trlie));
1463  }
1464  else
1465  {
1466  double qual1=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud1()->get_coord(),segchkk->get_noeud2()->get_coord());
1467  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,trlie));
1468  }
1469 
1470  }
1471  else if(segchkk->get_lien_triangle()->get_nb()==1)
1472  {
1473  double qual1=tq.qualite_triangle(p->get_coord(),segchkk->get_noeud1()->get_coord(),segchkk->get_noeud2()->get_coord());
1474  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,trlie));
1475  }
1476 
1477  }
1478  break;
1479  }
1480 
1481  else if(onedge1==1 || onedge2==1 || onedge3==1)
1482  {
1483  MG_TRIANGLE* ndontri=insphertri;
1484  MG_SEGMENT* onseg;
1485  if (onedge1==1) onseg=ndontri->get_segment1();
1486  if (onedge2==1) onseg=ndontri->get_segment2();
1487  if (onedge3==1) onseg=ndontri->get_segment3();
1488  TPL_MAP_ENTITE<MG_SEGMENT*> freesegs;
1489  for(int ifr=0;ifr<onseg->get_lien_triangle()->get_nb();ifr++)
1490  {
1491  MG_TRIANGLE* trfr=onseg->get_lien_triangle()->get(ifr);
1492  if (trfr->get_segment1()!=onseg) freesegs.ajouter(trfr->get_segment1());
1493  if (trfr->get_segment2()!=onseg) freesegs.ajouter(trfr->get_segment2());
1494  if (trfr->get_segment3()!=onseg) freesegs.ajouter(trfr->get_segment3());
1495  }
1497  for (MG_SEGMENT* segfre=freesegs.get_premier(itfr);segfre!=NULL;segfre=freesegs.get_suivant(itfr))
1498  {
1499  if(segfre->get_lien_triangle()->get_nb()>1)
1500  {
1501  MG_TRIANGLE* trioth;
1502  if(segfre->get_lien_triangle()->get(0)==onseg->get_lien_triangle()->get(0) || segfre->get_lien_triangle()->get(0)==onseg->get_lien_triangle()->get(1))
1503  trioth=segfre->get_lien_triangle()->get(1);
1504  else if(segfre->get_lien_triangle()->get(1)==onseg->get_lien_triangle()->get(0) || segfre->get_lien_triangle()->get(1)==onseg->get_lien_triangle()->get(1))
1505  trioth=segfre->get_lien_triangle()->get(0);
1506  double pinsphnb=inshper_point(p,trioth);
1507  if (pinsphnb<=0. && segfre->get_lien_topologie()->get_dimension()>1 && qualswap>0)
1508  {
1509  MG_NOEUD* othnd;
1510  if (trioth->get_noeud1()!=segfre->get_noeud1() && trioth->get_noeud1()!=segfre->get_noeud2()) othnd=trioth->get_noeud1();
1511  else if (trioth->get_noeud2()!=segfre->get_noeud1() && trioth->get_noeud2()!=segfre->get_noeud2()) othnd=trioth->get_noeud2();
1512  else if (trioth->get_noeud3()!=segfre->get_noeud1() && trioth->get_noeud3()!=segfre->get_noeud2()) othnd=trioth->get_noeud3();
1513  double qual1=tq.qualite_triangle(p->get_coord(),segfre->get_noeud1()->get_coord(),othnd->get_coord());
1514  double qual2=tq.qualite_triangle(p->get_coord(),segfre->get_noeud2()->get_coord(),othnd->get_coord());
1515  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndontri));
1516  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual2,ndontri));
1517  }
1518  else
1519  {
1520  double qual1=tq.qualite_triangle(p->get_coord(),segfre->get_noeud1()->get_coord(),segfre->get_noeud2()->get_coord());
1521  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndontri));
1522  }
1523  }
1524  else
1525  {
1526  double qual1=tq.qualite_triangle(p->get_coord(),segfre->get_noeud1()->get_coord(),segfre->get_noeud2()->get_coord());
1527  delinsqualtri.insert(std::pair<double,MG_TRIANGLE*>(qual1,ndontri));
1528  }
1529 
1530  }
1531  break;
1532  }
1533 }
1534 }
1535 }
1536  }
1537 
1538  //cout<<"delinsqualtri.size()= "<<delinsqualtri.size()<<endl;
1539 if(delinsqualtri.size()>0)
1540 {
1541  std::multimap<double,MG_TRIANGLE*,std::less<double> > :: iterator itdelinsqualtri=delinsqualtri.begin();
1542  delaunyinsqual=(*itdelinsqualtri).first;
1543 }
1545 
1546  if (lstqualprxndfinal.size()>0 && proximityqual>delaunyinsqual && proximityqual>gentriqual)
1547 {
1549  somno->ajouter_ccf((char*)"Dx",((*itpins).second)[0]);
1550  somno->ajouter_ccf((char*)"Dy",((*itpins).second)[1]);
1551  somno->ajouter_ccf((char*)"Dz",((*itpins).second)[2]);
1552  std::multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstqualprxndfinal=lstqualprxndfinal.begin();
1553  prox_nd((*itlstqualprxndfinal).second,p,mai,octreends,octree);
1554  double* pcoordbc=new double[6];
1555  pcoordbc[0]=p->get_x(); pcoordbc[1]=p->get_y(); pcoordbc[2]=p->get_z(); pcoordbc[3]=((*itpins).second)[0]; pcoordbc[4]=((*itpins).second)[1]; pcoordbc[5]=((*itpins).second)[2];
1556  lstgnifwrite.push_back(pcoordbc);
1557  pins_prox_Delaunay.insert(std::pair<MG_NOEUD*,double*> ((*itpins).first,(*itpins).second));
1558  proxndiiadd++;
1559  //cout<<"nds ins by proximity= "<<proxndiiadd<<endl;
1560 }
1561  else if (delaunyinsqual>gentriqual && delinsqualtri.size()>0)
1562 {
1564  somno->ajouter_ccf((char*)"Dx",((*itpins).second)[0]);
1565  somno->ajouter_ccf((char*)"Dy",((*itpins).second)[1]);
1566  somno->ajouter_ccf((char*)"Dz",((*itpins).second)[2]);
1567 
1568  delaunay_ndinsert(p,mai,search_radius,octree,geo,octreends);
1569  double* pcoordbc=new double[6];
1570  pcoordbc[0]=p->get_x(); pcoordbc[1]=p->get_y(); pcoordbc[2]=p->get_z(); pcoordbc[3]=((*itpins).second)[0]; pcoordbc[4]=((*itpins).second)[1]; pcoordbc[5]=((*itpins).second)[2];
1571  lstgnifwrite.push_back(pcoordbc);
1572  pins_prox_Delaunay.insert(std::pair<MG_NOEUD*,double*> ((*itpins).first,(*itpins).second));
1573  delonnodiiadd++;
1574  //cout<<" nds ins by delaunay= "<<delonnodiiadd<<endl;
1575 }
1576 else
1577 {
1578  std::cout<<"DELITED POINT: p->get_x()= "<<p->get_x()<<"p->get_y()"<<p->get_y()<<std::endl;
1580  removednodiadd++;
1581 }
1582 
1583  }
1584  }
1585 std::cout<<"nds ins by proximity= "<<proxndiiadd<<" nds ins by delaunay= "<<delonnodiiadd<<" nds removed= "<<removednodiadd<<" verycloseee= "<<verycloseee<<std::endl;
1586 /*
1587 int mgvolnb=geo->get_nb_mg_volume();
1588 MG_VOLUME* mgvol;
1589 for (int iv=0;iv<mgvolnb;iv++)
1590 {
1591  MG_ELEMENT_TOPOLOGIQUE *top1=mai->get_mg_triangle(0)->get_lien_topologie();
1592  MG_FACE *fac=(MG_FACE*)top1;
1593 
1594 if (fac->get_mg_coface(0)->get_coquille()->get_mg_volume()==mai->get_mg_geometrie()->get_mg_volume(iv))
1595  mgvol=mai->get_mg_geometrie()->get_mg_volume(iv);
1596 }
1597 MAILLEUR2D_OPTIMISATION opt(mai,nivopt);
1598 opt.optimise(mgvol);*/
1599 int mgcouqenb=geo->get_nb_mg_coque();
1600 std::cout<<"mgcouqenb= "<<mgcouqenb<<std::endl;
1602 for(int couqenb=0;couqenb<mgcouqenb;couqenb++)
1603 {
1604  MG_COQUE* mgcouqe=geo->get_mg_coque(couqenb);
1605  opt.optimise(mgcouqe);
1606 }
1607 
1608 if(insremtyp>0)
1609 {
1610  for(std::map<MG_NOEUD*,double*>::iterator itpins_prox_Delaunay=pins_prox_Delaunay.begin();itpins_prox_Delaunay!=pins_prox_Delaunay.end();itpins_prox_Delaunay++)
1611  {
1612 
1613  if((*itpins_prox_Delaunay).second[3]<1)
1614  {
1615  for(int ippd=0; ippd<((*itpins_prox_Delaunay).first)->get_lien_triangle()->get_nb();ippd++)
1616  {
1617  MG_TRIANGLE* tricha=((*itpins_prox_Delaunay).first)->get_lien_triangle()->get(ippd);
1619  }
1620  }
1621  }
1622 }
1623 
1624 
1626 
1627 std::ostringstream oss;
1628 oss << "GNIFout" <<gnifoutputfilename ;
1629 std::string namefic = oss.str();
1630 std::string namefic1=namefic + "_insremovtypsort.txt";
1631 std::cout<<"namefic1= "<<namefic1<<std::endl;
1632 FILE* in1=fopen(namefic1.c_str(),"wt");
1633 for(std::vector<double*>::iterator itlstpinsert=lstgnifread.begin();itlstpinsert!=lstgnifread.end();itlstpinsert++)
1634  {
1635  int gnigcount=0;
1636  double* xyzpins1;
1637  xyzpins1=(*itlstpinsert);
1638  for(std::vector<double*>::iterator itlstpinserted=lstgnifwrite.begin();itlstpinserted!=lstgnifwrite.end();itlstpinserted++)
1639  {
1640  double* xyzpins2;
1641  xyzpins2=(*itlstpinserted);
1642  if(xyzpins1[0]==xyzpins2[0] && xyzpins1[1]==xyzpins2[1] && xyzpins1[2]==xyzpins2[2] && xyzpins1[3]==xyzpins2[3] && xyzpins1[4]==xyzpins2[4] && xyzpins1[5]==xyzpins2[5])
1643  {
1644  fprintf(in1,"1 %le %le %le %le %le %le\n",xyzpins1[0],xyzpins1[1],xyzpins1[2],xyzpins1[3]*1000.,xyzpins1[4]*1000.,xyzpins1[5]*1000.);
1645  gnigcount++;
1646  }
1647 
1648  }
1649  if(gnigcount==0)
1650  fprintf(in1,"0 %le %le %le %le %le %le\n",xyzpins1[0],xyzpins1[1],xyzpins1[2],xyzpins1[3]*1000.,xyzpins1[4]*1000.,xyzpins1[5]*1000.);
1651  }
1652 fclose(in1);
1653 std::string namefic2=namefic + "_insertedpoints.txt";
1654 std::cout<<"namefic2= "<<namefic2<<std::endl;
1655 FILE* in2=fopen(namefic2.c_str(),"wt");
1656 for(std::vector<double*>::iterator itlstpinsert=lstgnifwrite.begin();itlstpinsert!=lstgnifwrite.end();itlstpinsert++)
1657  {
1658  double* xyzpins1;
1659  xyzpins1=(*itlstpinsert);
1660  fprintf(in2,"%le %le %le %le %le %le\n",xyzpins1[0],xyzpins1[1],xyzpins1[2],xyzpins1[3]*1000.,xyzpins1[4]*1000.,xyzpins1[5]*1000.);
1661  }
1662 fclose(in2);
1663 
1664 
1665 }
1667 {
1668 
1669  pinrt->change_lien_topologie(prxnd->get_lien_topologie());
1671  std::map<MG_TRIANGLE*,MG_SEGMENT*>addseglst;
1673  for (int ili=0;ili<prxnd->get_lien_triangle()->get_nb();ili++)
1674  {
1675  MG_TRIANGLE* deltri=prxnd->get_lien_triangle()->get(ili);
1676  deltrilst.ajouter(deltri);
1677  }
1678  for (int isegadlst=0;isegadlst<deltrilst.get_nb();isegadlst++)
1679  {
1680  MG_TRIANGLE* trid=deltrilst.get(isegadlst);
1681  MG_SEGMENT* seg1=trid->get_segment1();
1682  MG_SEGMENT* seg2=trid->get_segment2();
1683  MG_SEGMENT* seg3=trid->get_segment3();
1684  if (prxnd!=seg1->get_noeud1() && prxnd!=seg1->get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg1));
1685  else if (prxnd!=seg2->get_noeud1() && prxnd!=seg2->get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg2));
1686  else if (prxnd!=seg3->get_noeud1() && prxnd!=seg3->get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg3));
1687  }
1688  std::map<MG_TRIANGLE*,MG_SEGMENT*>::iterator itaddseglst;
1689  for (itaddseglst=addseglst.begin();itaddseglst!=addseglst.end();itaddseglst++)
1690  {
1691  MG_SEGMENT* segcomm=(*itaddseglst).second;
1692  MG_TRIANGLE* triold=(*itaddseglst).first;
1693  MG_ELEMENT_TOPOLOGIQUE* toptriloc=triold->get_lien_topologie();
1694  MG_NOEUD* sgcommnd1=segcomm->get_noeud1();
1695  MG_NOEUD* sgcommnd2=segcomm->get_noeud2();
1696  MG_TRIANGLE* triad;
1697  if (sgcommnd1==triold->get_noeud1() && sgcommnd2==triold->get_noeud2()) triad=mai->ajouter_mg_triangle(toptriloc,sgcommnd1,sgcommnd2,pinrt,MAGIC::ORIGINE::IMPOSE);
1698  else if (sgcommnd1==triold->get_noeud2() && sgcommnd2==triold->get_noeud1()) triad=mai->ajouter_mg_triangle(toptriloc,sgcommnd2,sgcommnd1,pinrt,MAGIC::ORIGINE::IMPOSE);
1699  else if (sgcommnd1==triold->get_noeud2() && sgcommnd2==triold->get_noeud3()) triad=mai->ajouter_mg_triangle(toptriloc,pinrt,sgcommnd1,sgcommnd2,MAGIC::ORIGINE::IMPOSE);
1700  else if (sgcommnd1==triold->get_noeud3() && sgcommnd2==triold->get_noeud2()) triad=mai->ajouter_mg_triangle(toptriloc,pinrt,sgcommnd2,sgcommnd1,MAGIC::ORIGINE::IMPOSE);
1701  else if (sgcommnd1==triold->get_noeud3() && sgcommnd2==triold->get_noeud1()) triad=mai->ajouter_mg_triangle(toptriloc,sgcommnd2,pinrt,sgcommnd1,MAGIC::ORIGINE::IMPOSE);
1702  else if (sgcommnd1==triold->get_noeud1() && sgcommnd2==triold->get_noeud3()) triad=mai->ajouter_mg_triangle(toptriloc,sgcommnd1,pinrt,sgcommnd2,MAGIC::ORIGINE::IMPOSE);
1704 triadsegs.ajouter(triad->get_segment1());
1705 triadsegs.ajouter(triad->get_segment2());
1706 triadsegs.ajouter(triad->get_segment3());
1708 trioldsegs.ajouter(triold->get_segment1());
1709 trioldsegs.ajouter(triold->get_segment2());
1710 trioldsegs.ajouter(triold->get_segment3());
1711 for(int itriadsegs=0;itriadsegs<triadsegs.get_nb();itriadsegs++)
1712  {
1713  MG_SEGMENT* triadseg=triadsegs.get(itriadsegs);
1714  if(triadseg==segcomm)
1715  {
1716  triadseg->change_lien_topologie(segcomm->get_lien_topologie());
1717  }
1718  if(triadseg!=segcomm)
1719  {
1720  for(int itrioldsegs=0;itrioldsegs<trioldsegs.get_nb();itrioldsegs++)
1721  {
1722  MG_SEGMENT* trioldseg=trioldsegs.get(itrioldsegs);
1723  if(trioldseg!=segcomm)
1724  {
1725  if(trioldseg->get_noeud1()==sgcommnd1 || trioldseg->get_noeud2()==sgcommnd1)
1726  {
1727  if(triadseg->get_noeud1()==sgcommnd1 || triadseg->get_noeud2()==sgcommnd1) triadseg->change_lien_topologie(trioldseg->get_lien_topologie());
1728  }
1729  else if(trioldseg->get_noeud1()==sgcommnd2 || trioldseg->get_noeud2()==sgcommnd2)
1730  {
1731  if(triadseg->get_noeud1()==sgcommnd2 || triadseg->get_noeud2()==sgcommnd2) triadseg->change_lien_topologie(trioldseg->get_lien_topologie());
1732  }
1733  }
1734  }
1735  }
1736  }
1737 octree.inserer(triad);
1738 lstadtris.ajouter(triad);
1739  }
1740  octreends.inserer(pinrt);
1741  octreends.supprimer(prxnd);
1742 
1743 
1744  for (int ideletriangle=0;ideletriangle<deltrilst.get_nb();ideletriangle++)
1745  {
1746  MG_TRIANGLE* deletingtri=deltrilst.get(ideletriangle);
1747  octree.supprimer(deletingtri);
1748  mai->supprimer_mg_triangleid(deletingtri->get_id());
1749  }
1751  for (int iadtris=0;iadtris<lstadtris.get_nb();iadtris++)
1752  {
1753  MG_TRIANGLE* swchktr=lstadtris.get(iadtris);
1754  lstsgad.ajouter(swchktr->get_segment1());
1755  lstsgad.ajouter(swchktr->get_segment2());
1756  lstsgad.ajouter(swchktr->get_segment3());
1757  del_swap(pinrt,swchktr,mai,octree);
1758  }
1759 
1760 }
1762 {
1763  MG_MAILLAGE_OUTILS tq;
1764 double normale[3];
1765 int insideface=0;
1766 std::multimap<double,MG_FACE*,std::less<double> > lstfacepointdist;
1767 int facenb=geo->get_nb_mg_face();
1768  LISTE_MG_FACE::iterator itf;
1769  double xyz[3];
1770  xyz[0]=dpins->get_x();
1771  xyz[1]=dpins->get_y();
1772  xyz[2]=dpins->get_z();
1773  for(MG_FACE* fac=geo->get_premier_face(itf);fac!=NULL;fac=geo->get_suivant_face(itf))
1774  {
1775  double uv[2];
1776  fac->inverser(uv,xyz);
1777  double xyz2[3];
1778  fac->evaluer(uv,xyz2);
1779  OT_VECTEUR_3D vechk(xyz,xyz2);
1780  lstfacepointdist.insert(std::pair<double,MG_FACE*> (vechk.get_longueur(),fac));
1781  //double dis;
1782  //MG_GEOMETRIE_OUTILS f1;
1783  //int ch=f1.calcule_distance_contour_face_xyz(xyz,fac,&dis);
1784  //cout<<"xyz= "<<xyz[0]<<" xyz= "<<xyz[1]<<" xyz= "<<xyz[2]<<" xyz2= "<<xyz2[0]<<" xyz2= "<<xyz2[1]<<" xyz2= "<<xyz2[2]<<endl;
1785  //cout<<"dis= "<<dis<<" vechk.get_longueur()= "<<vechk.get_longueur()<<endl;
1786  //if (ch==1 && dis>=0.)
1787  // if (vechk.get_longueur()<5e-3)
1788  }
1789 std::multimap<double,MG_FACE*,std::less<double> >::iterator itlstfacepointdist=lstfacepointdist.begin();
1790 if (lstfacepointdist.size()>0)
1791 {
1792  //cout<<"(*itlstfacepointdist).first= "<<(*itlstfacepointdist).first<<endl;
1793  MG_FACE* face=(*itlstfacepointdist).second;
1794  double uv[2];
1795  face->inverser(uv,xyz);
1796  face->calcul_normale_unitaire(uv,normale);
1797  MG_COFACE *coface=face->get_mg_coface(0);
1798  int signe=coface->get_orientation();
1799 
1800  TPL_MAP_ENTITE<MG_TRIANGLE*> lstneitri;
1801  int neitrinb=lstneitri.get_nb();
1802  while(neitrinb==0)
1803 {
1804  octree.rechercher(dpins->get_x(),dpins->get_y(),dpins->get_z(),search_radius,lstneitri);
1805  neitrinb=lstneitri.get_nb();
1806  search_radius=search_radius+0.01*search_radius;
1807 }
1809 OT_VECTEUR_3D normale_discrete(0.,0.,0.);
1810 for (MG_TRIANGLE* tri1=lstneitri.get_premier(itnormtst);tri1!=NULL;tri1=lstneitri.get_suivant(itnormtst))
1811  {
1812  OT_VECTEUR_3D vec1(tri1->get_noeud1()->get_coord(),tri1->get_noeud2()->get_coord());
1813  OT_VECTEUR_3D vec2(tri1->get_noeud1()->get_coord(),tri1->get_noeud3()->get_coord());
1814  OT_VECTEUR_3D normtst=(vec1&vec2); normtst.norme();
1815  normale_discrete=normtst+normale_discrete;
1816  }
1817 normale_discrete.norme();
1818 double n_ps=normale_discrete*normale;
1819 n_ps=n_ps*-1;
1820 if (n_ps>1.) n_ps=1.;
1821 if (n_ps<-1.) n_ps=-1.;
1822 double n_angle=acos(n_ps);
1823 if(n_angle<(0.5*3.14159265358979323846) || n_angle>-(0.5*3.14159265358979323846))
1824  insideface++;
1825 }
1826 if(insideface>0)
1827 {
1829 int neitrinb=lstneitri.get_nb();
1830 while(neitrinb==0)
1831 {
1832  octree.rechercher(dpins->get_x(),dpins->get_y(),dpins->get_z(),search_radius,lstneitri);
1833  neitrinb=lstneitri.get_nb();
1834  search_radius=search_radius+0.01*search_radius;
1835 }
1836 
1839 for (MG_TRIANGLE* tri1=lstneitri.get_premier(it1);tri1!=NULL;tri1=lstneitri.get_suivant(it1))
1840 {
1841  double insphchk=inshper_point(dpins,tri1);
1842  if (insphchk<=0.)
1843  insphtri.ajouter(tri1);
1844 }
1847 double pproj[3];
1849 for (MG_TRIANGLE* insphertri=insphtri.get_premier(inspi);insphertri!=NULL;insphertri=insphtri.get_suivant(inspi))
1850 {
1851 MG_NOEUD* inspnd1=insphertri->get_noeud1();
1852 MG_NOEUD* inspnd2=insphertri->get_noeud2();
1853 MG_NOEUD* inspnd3=insphertri->get_noeud3();
1854 OT_VECTEUR_3D tvec1(inspnd1->get_coord(),inspnd2->get_coord());
1855 OT_VECTEUR_3D tvec2(inspnd1->get_coord(),inspnd3->get_coord());
1856 OT_VECTEUR_3D tnorm=(tvec1&tvec2); tnorm.norme();
1857 OT_VECTEUR_3D norm=normale;
1858 double parallel=norm*tnorm;
1859 if (parallel<0.7 && parallel>-0.7) std::cout<<"the line and plane are parallel inside DELAUNAY"<<std::endl;
1860 
1861 if (parallel>0.7 || parallel<-0.7)
1862 {
1863 OT_VECTEUR_3D vvec(inspnd1->get_coord(),dpins->get_coord());
1864 double t= (tnorm*vvec)/parallel;
1865 t=-t;
1866 pproj[0]=dpins->get_x()+t*norm.get_x();
1867 pproj[1]=dpins->get_y()+t*norm.get_y();
1868 pproj[2]=dpins->get_z()+t*norm.get_z();
1869 MG_MAILLAGE_OUTILS tribas;
1870 int tribasval=tribas.estdansletriangle(insphertri,pproj[0],pproj[1],pproj[2]);
1871 int intri=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::INTERIEUR);
1872 int insidtri=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::STRICTINTERIEUR);
1873 int onedge=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SUR_ARETE);
1874 
1875 if (insidtri==1) //connect p to 3nds of tri
1876 {
1877  MG_TRIANGLE* ndintri=insphertri;
1878  MG_SEGMENT* seg1=ndintri->get_segment1();
1879  MG_SEGMENT* seg2=ndintri->get_segment2();
1880  MG_SEGMENT* seg3=ndintri->get_segment3();
1881  MG_ELEMENT_TOPOLOGIQUE* top1=ndintri->get_lien_topologie();
1882  MG_NOEUD* sg1nd1=seg1->get_noeud1();
1883  MG_NOEUD* sg1nd2=seg1->get_noeud2();
1884  MG_TRIANGLE* triad1;
1885  if (sg1nd1==ndintri->get_noeud1() && sg1nd2==ndintri->get_noeud2()) triad1=mai->ajouter_mg_triangle(top1,dpins,sg1nd1,sg1nd2,MAGIC::ORIGINE::IMPOSE);
1886  else if (sg1nd1==ndintri->get_noeud2() && sg1nd2==ndintri->get_noeud1()) triad1=mai->ajouter_mg_triangle(top1,dpins,sg1nd2,sg1nd1,MAGIC::ORIGINE::IMPOSE);
1887  if (sg1nd1==ndintri->get_noeud2() && sg1nd2==ndintri->get_noeud3()) triad1=mai->ajouter_mg_triangle(top1,dpins,sg1nd1,sg1nd2,MAGIC::ORIGINE::IMPOSE);
1888  else if (sg1nd1==ndintri->get_noeud3() && sg1nd2==ndintri->get_noeud2()) triad1=mai->ajouter_mg_triangle(top1,dpins,sg1nd2,sg1nd1,MAGIC::ORIGINE::IMPOSE);
1889  if (sg1nd1==ndintri->get_noeud3() && sg1nd2==ndintri->get_noeud1()) triad1=mai->ajouter_mg_triangle(top1,dpins,sg1nd1,sg1nd2,MAGIC::ORIGINE::IMPOSE);
1890  else if (sg1nd1==ndintri->get_noeud1() && sg1nd2==ndintri->get_noeud3()) triad1=mai->ajouter_mg_triangle(top1,dpins,sg1nd2,sg1nd1,MAGIC::ORIGINE::IMPOSE);
1891  MG_NOEUD* sg2nd1=seg2->get_noeud1();
1892  MG_NOEUD* sg2nd2=seg2->get_noeud2();
1893  MG_TRIANGLE* triad2;
1894  if (sg2nd1==ndintri->get_noeud1() && sg2nd2==ndintri->get_noeud2()) triad2=mai->ajouter_mg_triangle(top1,dpins,sg2nd1,sg2nd2,MAGIC::ORIGINE::IMPOSE);
1895  else if (sg2nd1==ndintri->get_noeud2() && sg2nd2==ndintri->get_noeud1()) triad2=mai->ajouter_mg_triangle(top1,dpins,sg2nd2,sg2nd1,MAGIC::ORIGINE::IMPOSE);
1896  if (sg2nd1==ndintri->get_noeud2() && sg2nd2==ndintri->get_noeud3()) triad2=mai->ajouter_mg_triangle(top1,dpins,sg2nd1,sg2nd2,MAGIC::ORIGINE::IMPOSE);
1897  else if (sg2nd1==ndintri->get_noeud3() && sg2nd2==ndintri->get_noeud2()) triad2=mai->ajouter_mg_triangle(top1,dpins,sg2nd2,sg2nd1,MAGIC::ORIGINE::IMPOSE);
1898  if (sg2nd1==ndintri->get_noeud3() && sg2nd2==ndintri->get_noeud1()) triad2=mai->ajouter_mg_triangle(top1,dpins,sg2nd1,sg2nd2,MAGIC::ORIGINE::IMPOSE);
1899  else if (sg2nd1==ndintri->get_noeud1() && sg2nd2==ndintri->get_noeud3()) triad2=mai->ajouter_mg_triangle(top1,dpins,sg2nd2,sg2nd1,MAGIC::ORIGINE::IMPOSE);
1900  MG_NOEUD* sg3nd1=seg3->get_noeud1();
1901  MG_NOEUD* sg3nd2=seg3->get_noeud2();
1902  MG_TRIANGLE* triad3;
1903  if (sg3nd1==ndintri->get_noeud1() && sg3nd2==ndintri->get_noeud2()) triad3=mai->ajouter_mg_triangle(top1,dpins,sg3nd1,sg3nd2,MAGIC::ORIGINE::IMPOSE);
1904  else if (sg3nd1==ndintri->get_noeud2() && sg3nd2==ndintri->get_noeud1()) triad3=mai->ajouter_mg_triangle(top1,dpins,sg3nd2,sg3nd1,MAGIC::ORIGINE::IMPOSE);
1905  if (sg3nd1==ndintri->get_noeud2() && sg3nd2==ndintri->get_noeud3()) triad3=mai->ajouter_mg_triangle(top1,dpins,sg3nd1,sg3nd2,MAGIC::ORIGINE::IMPOSE);
1906  else if (sg3nd1==ndintri->get_noeud3() && sg3nd2==ndintri->get_noeud2()) triad3=mai->ajouter_mg_triangle(top1,dpins,sg3nd2,sg3nd1,MAGIC::ORIGINE::IMPOSE);
1907  if (sg3nd1==ndintri->get_noeud3() && sg3nd2==ndintri->get_noeud1()) triad3=mai->ajouter_mg_triangle(top1,dpins,sg3nd1,sg3nd2,MAGIC::ORIGINE::IMPOSE);
1908  else if (sg3nd1==ndintri->get_noeud1() && sg3nd2==ndintri->get_noeud3()) triad3=mai->ajouter_mg_triangle(top1,dpins,sg3nd2,sg3nd1,MAGIC::ORIGINE::IMPOSE);
1909  dpins->change_lien_topologie(top1);
1910  octree.inserer(triad1);
1911  octree.inserer(triad2);
1912  octree.inserer(triad3);
1913  octree.supprimer(ndintri);
1914  octreends.inserer(dpins);
1915  mai->supprimer_mg_triangleid(ndintri->get_id());
1916  int delswap1=0;
1917  int delswap2=0;
1918  int delswap3=0;
1919  double tqual1=tq.qualite_triangle(triad1->get_noeud1()->get_coord(),triad1->get_noeud2()->get_coord(),triad1->get_noeud3()->get_coord());
1920  double tqual2=tq.qualite_triangle(triad2->get_noeud1()->get_coord(),triad2->get_noeud2()->get_coord(),triad2->get_noeud3()->get_coord());
1921  double tqual3=tq.qualite_triangle(triad3->get_noeud1()->get_coord(),triad3->get_noeud2()->get_coord(),triad3->get_noeud3()->get_coord());
1922  del_swap(dpins,triad1,mai,octree);
1923  del_swap(dpins,triad2,mai,octree);
1924  del_swap(dpins,triad3,mai,octree);
1925  break ;
1926 }
1927 
1928 if (onedge==1) //if on segment: connect p to 6nds of 2 adjacent tries, if on tri vertex: connect to
1929 {
1930  MG_TRIANGLE* ndontri=insphertri;
1931  MG_NOEUD* ndo1=ndontri->get_noeud1();
1932  MG_NOEUD* ndo2=ndontri->get_noeud2();
1933  MG_NOEUD* ndo3=ndontri->get_noeud3();
1934  int onvert1=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET1);
1935  int onvert2=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET2);
1936  int onvert3=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::SOMMET3);
1937  int onedge1=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE1);
1938  int onedge2=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE2);
1939  int onedge3=tribas.compare_etat_triangle(tribasval,MG_MAILLAGE_OUTILS::ARETE3);
1940 
1941  if (onvert1==1 || onvert2==1 || onvert3==1)
1942  {
1943  MG_NOEUD* ond;
1944  if(onvert1==1)ond=ndo1;
1945  if(onvert2==1)ond=ndo2;
1946  if(onvert3==1)ond=ndo3;
1949  std::map<MG_TRIANGLE*,MG_SEGMENT*>addseglst;
1951  for (int ili=0;ili<ond->get_lien_triangle()->get_nb();ili++)
1952  {
1953  MG_TRIANGLE* deltri=ond->get_lien_triangle()->get(ili);
1954  deltrilst.ajouter(deltri);
1955  }
1956  for (int isegadlst=0;isegadlst<deltrilst.get_nb();isegadlst++)
1957  {
1958  MG_TRIANGLE* trid=deltrilst.get(isegadlst);
1959  MG_SEGMENT* seg1=trid->get_segment1();
1960  MG_SEGMENT* seg2=trid->get_segment2();
1961  MG_SEGMENT* seg3=trid->get_segment3();
1962  if (ond!=seg1->get_noeud1() && ond!=seg1->get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg1));
1963  else if (ond!=seg2->get_noeud1() && ond!=seg2->get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg2));
1964  else if (ond!=seg3->get_noeud1() && ond!=seg3->get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg3));
1965  }
1966  std::map<MG_TRIANGLE*,MG_SEGMENT*>::iterator itaddseglst;
1967  for (itaddseglst=addseglst.begin();itaddseglst!=addseglst.end();itaddseglst++)
1968  {
1969  MG_SEGMENT* segtrans=(*itaddseglst).second;
1970  MG_TRIANGLE* triold=(*itaddseglst).first;
1971  MG_ELEMENT_TOPOLOGIQUE* toptriloc=triold->get_lien_topologie();
1972  MG_NOEUD* sgnd1=segtrans->get_noeud1();
1973  MG_NOEUD* sgnd2=segtrans->get_noeud2();
1974  MG_TRIANGLE* triad;
1975  if (sgnd1==triold->get_noeud1() && sgnd2==triold->get_noeud2()) triad=mai->ajouter_mg_triangle(toptriloc,sgnd1,sgnd2,dpins,MAGIC::ORIGINE::IMPOSE);
1976  else if (sgnd1==triold->get_noeud2() && sgnd2==triold->get_noeud1()) triad=mai->ajouter_mg_triangle(toptriloc,sgnd2,sgnd1,dpins,MAGIC::ORIGINE::IMPOSE);
1977  else if (sgnd1==triold->get_noeud2() && sgnd2==triold->get_noeud3()) triad=mai->ajouter_mg_triangle(toptriloc,dpins,sgnd1,sgnd2,MAGIC::ORIGINE::IMPOSE);
1978  else if (sgnd1==triold->get_noeud3() && sgnd2==triold->get_noeud2()) triad=mai->ajouter_mg_triangle(toptriloc,dpins,sgnd2,sgnd1,MAGIC::ORIGINE::IMPOSE);
1979  else if (sgnd1==triold->get_noeud3() && sgnd2==triold->get_noeud1()) triad=mai->ajouter_mg_triangle(toptriloc,sgnd2,dpins,sgnd1,MAGIC::ORIGINE::IMPOSE);
1980  else if (sgnd1==triold->get_noeud1() && sgnd2==triold->get_noeud3()) triad=mai->ajouter_mg_triangle(toptriloc,sgnd1,dpins,sgnd2,MAGIC::ORIGINE::IMPOSE);
1981  dpins->change_lien_topologie(toptriloc);
1983 triadsegs.ajouter(triad->get_segment1());
1984 triadsegs.ajouter(triad->get_segment2());
1985 triadsegs.ajouter(triad->get_segment3());
1987 trioldsegs.ajouter(triold->get_segment1());
1988 trioldsegs.ajouter(triold->get_segment2());
1989 trioldsegs.ajouter(triold->get_segment3());
1990 for(int itriadsegs=0;itriadsegs<triadsegs.get_nb();itriadsegs++)
1991 {
1992  MG_SEGMENT* triadseg=triadsegs.get(itriadsegs);
1993  if(triadseg!=segtrans)
1994  {
1995  for(int itrioldsegs=0;itrioldsegs<trioldsegs.get_nb();itrioldsegs++)
1996  {
1997  MG_SEGMENT* trioldseg=trioldsegs.get(itrioldsegs);
1998  if(trioldseg!=segtrans)
1999  {
2000  if(trioldseg->get_noeud1()==sgnd1 || trioldseg->get_noeud2()==sgnd1)
2001  {
2002  if(triadseg->get_noeud1()==sgnd1 || triadseg->get_noeud2()==sgnd1) triadseg->change_lien_topologie(trioldseg->get_lien_topologie());
2003  }
2004  else if(trioldseg->get_noeud1()==sgnd2 || trioldseg->get_noeud2()==sgnd2)
2005  {
2006  if(triadseg->get_noeud1()==sgnd2 || triadseg->get_noeud2()==sgnd2) triadseg->change_lien_topologie(trioldseg->get_lien_topologie());
2007  }
2008  }
2009  }
2010  }
2011 }
2012 octree.inserer(triad);
2013 lstadtris.ajouter(triad);
2014  }
2015 
2016  for (int ideletriangle=0;ideletriangle<deltrilst.get_nb();ideletriangle++)
2017  {
2018  MG_TRIANGLE* deletingtri=deltrilst.get(ideletriangle);
2019  octree.supprimer(deletingtri);
2020  mai->supprimer_mg_triangleid(deletingtri->get_id());
2021  }
2022  for (int iadtris=0;iadtris<lstadtris.get_nb();iadtris++)
2023  {
2024  MG_TRIANGLE* swchktr=lstadtris.get(iadtris);
2025  del_swap(dpins,swchktr,mai,octree);
2026  }
2027 
2028  break;
2029  }
2030 
2031  else if(onedge1==1 || onedge2==1 || onedge3==1)
2032  {
2033  MG_SEGMENT* onseg;
2034  if (onedge1==1) onseg=ndontri->get_segment1();
2035  else if (onedge2==1) onseg=ndontri->get_segment2();
2036  else if (onedge3==1) onseg=ndontri->get_segment3();
2037  dpins->change_lien_topologie(onseg->get_lien_topologie());
2038  std::map<MG_SEGMENT*,MG_TRIANGLE*>lstonedtriseg;
2039  TPL_LISTE_ENTITE<MG_TRIANGLE*> triswilldelete;
2040  if(onseg->get_lien_triangle()->get_nb()==2)
2041 {
2042  MG_TRIANGLE* onedtri1=onseg->get_lien_triangle()->get(0);
2043  MG_TRIANGLE* onedtri2=onseg->get_lien_triangle()->get(1);
2044  MG_SEGMENT* onedtri1seg1=onedtri1->get_segment1();
2045  if (onedtri1seg1!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg1,onedtri1));
2046  MG_SEGMENT* onedtri1seg2=onedtri1->get_segment2();
2047  if (onedtri1seg2!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg2,onedtri1));
2048  MG_SEGMENT* onedtri1seg3=onedtri1->get_segment3();
2049  if (onedtri1seg3!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg3,onedtri1));
2050  MG_SEGMENT* onedtri2seg1=onedtri2->get_segment1();
2051  if (onedtri2seg1!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri2seg1,onedtri2));
2052  MG_SEGMENT* onedtri2seg2=onedtri2->get_segment2();
2053  if (onedtri2seg2!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri2seg2,onedtri2));
2054  MG_SEGMENT* onedtri2seg3=onedtri2->get_segment3();
2055  if (onedtri2seg3!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri2seg3,onedtri2));
2056  octree.supprimer(onedtri1);
2057  octree.supprimer(onedtri2);
2058  triswilldelete.ajouter(onedtri1);
2059  triswilldelete.ajouter(onedtri2);
2060 }
2061 else if(onseg->get_lien_triangle()->get_nb()==1)
2062 {
2063  MG_TRIANGLE* onedtri1=onseg->get_lien_triangle()->get(0);
2064  MG_SEGMENT* onedtri1seg1=onedtri1->get_segment1();
2065  if (onedtri1seg1!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg1,onedtri1));
2066  MG_SEGMENT* onedtri1seg2=onedtri1->get_segment2();
2067  if (onedtri1seg2!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg2,onedtri1));
2068  MG_SEGMENT* onedtri1seg3=onedtri1->get_segment3();
2069  if (onedtri1seg3!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg3,onedtri1));
2070  octree.supprimer(onedtri1);
2071  triswilldelete.ajouter(onedtri1);
2072 }
2073 
2075  std::map<MG_SEGMENT*,MG_TRIANGLE*>::iterator itlstonedtriseg;
2076  for (itlstonedtriseg=lstonedtriseg.begin();itlstonedtriseg!=lstonedtriseg.end();itlstonedtriseg++)
2077  {
2078  MG_SEGMENT* segcommon=(*itlstonedtriseg).first;
2079  MG_TRIANGLE* triold=(*itlstonedtriseg).second;
2080  MG_ELEMENT_TOPOLOGIQUE* toponseg=triold->get_lien_topologie();
2081  //cout<<"toponseg->get_dimension()= "<<toponseg->get_id()<<endl;
2082  MG_NOEUD* sgnd1=segcommon->get_noeud1();
2083  MG_NOEUD* sgnd2=segcommon->get_noeud2();
2084  MG_TRIANGLE* triad;
2085  if (sgnd1==triold->get_noeud1() && sgnd2==triold->get_noeud2()) triad=mai->ajouter_mg_triangle(toponseg,sgnd1,sgnd2,dpins,MAGIC::ORIGINE::IMPOSE);
2086  else if (sgnd1==triold->get_noeud2() && sgnd2==triold->get_noeud1()) triad=mai->ajouter_mg_triangle(toponseg,sgnd2,sgnd1,dpins,MAGIC::ORIGINE::IMPOSE);
2087  else if (sgnd1==triold->get_noeud2() && sgnd2==triold->get_noeud3()) triad=mai->ajouter_mg_triangle(toponseg,dpins,sgnd1,sgnd2,MAGIC::ORIGINE::IMPOSE);
2088  else if (sgnd1==triold->get_noeud3() && sgnd2==triold->get_noeud2()) triad=mai->ajouter_mg_triangle(toponseg,dpins,sgnd2,sgnd1,MAGIC::ORIGINE::IMPOSE);
2089  else if (sgnd1==triold->get_noeud3() && sgnd2==triold->get_noeud1()) triad=mai->ajouter_mg_triangle(toponseg,sgnd2,dpins,sgnd1,MAGIC::ORIGINE::IMPOSE);
2090  else if (sgnd1==triold->get_noeud1() && sgnd2==triold->get_noeud3()) triad=mai->ajouter_mg_triangle(toponseg,sgnd1,dpins,sgnd2,MAGIC::ORIGINE::IMPOSE);
2091  dpins->change_lien_topologie(toponseg);
2092  // unify the topology of the segments, keep the edges
2094 triadsegs.ajouter(triad->get_segment1());
2095 triadsegs.ajouter(triad->get_segment2());
2096 triadsegs.ajouter(triad->get_segment3());
2097 for(int itriadsegs=0;itriadsegs<triadsegs.get_nb();itriadsegs++)
2098 {
2099  MG_SEGMENT* triadseg=triadsegs.get(itriadsegs);
2100  if(triadseg!=segcommon)
2101  {
2102  if(triadseg->get_noeud1()==onseg->get_noeud1() || triadseg->get_noeud2()==onseg->get_noeud2()
2103  || triadseg->get_noeud2()==onseg->get_noeud1() || triadseg->get_noeud1()==onseg->get_noeud2())
2104  {
2105  triadseg->change_lien_topologie(onseg->get_lien_topologie());
2106  }
2107 
2108  }
2109 }
2110  octree.inserer(triad);
2111  octreends.inserer(dpins);
2112  lstadtris.ajouter(triad);
2113  }
2114  for (int itriswilldelete=0;itriswilldelete<triswilldelete.get_nb();itriswilldelete++)
2115  {
2116  mai->supprimer_mg_triangleid(triswilldelete.get(itriswilldelete)->get_id());
2117  }
2118 
2119  for (int iadtris=0;iadtris<lstadtris.get_nb();iadtris++)
2120  {
2121  MG_TRIANGLE* swchktr=lstadtris.get(iadtris);
2122  del_swap(dpins,swchktr,mai,octree);
2123  }
2124 
2125  break;
2126  }
2127 }
2128 
2129 }
2130 }
2131 }
2132 }
2134 {
2135  MG_MAILLAGE_OUTILS tq;
2137  MG_SEGMENT* segchk;
2138  MG_SEGMENT* segad1=newtri->get_segment1();
2139  MG_SEGMENT* segad2=newtri->get_segment2();
2140  MG_SEGMENT* segad3=newtri->get_segment3();
2141  if (segad1->get_noeud1()!=ndins && segad1->get_noeud2()!=ndins) segchk=segad1;
2142  else if (segad2->get_noeud1()!=ndins && segad2->get_noeud2()!=ndins) segchk=segad2;
2143  else if (segad3->get_noeud1()!=ndins && segad3->get_noeud2()!=ndins) segchk=segad3;
2144 int segtopdim=segchk->get_lien_topologie()->get_dimension();
2145  // int segtopdim=1; //it should be modified !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2146 if(segchk->get_lien_triangle()->get_nb()>1)
2147 {
2148  //cout<<"hereee segchk->get_lien_triangle()->get_nb()= "<<segchk->get_lien_triangle()->get_nb()<<endl;
2149  MG_TRIANGLE* trichk;
2150  for (int isct=0;isct<segchk->get_lien_triangle()->get_nb();isct++)
2151  {
2152  MG_TRIANGLE* trick=segchk->get_lien_triangle()->get(isct);
2153  if (trick!=newtri) trichk=trick;
2154  }
2155 
2156  MG_NOEUD* othertrianglenode;
2157  if(trichk->get_noeud1()!=segchk->get_noeud1() && trichk->get_noeud1()!=segchk->get_noeud2()) othertrianglenode=trichk->get_noeud1();
2158  else if(trichk->get_noeud2()!=segchk->get_noeud1() && trichk->get_noeud2()!=segchk->get_noeud2()) othertrianglenode=trichk->get_noeud2();
2159  else if(trichk->get_noeud3()!=segchk->get_noeud1() && trichk->get_noeud3()!=segchk->get_noeud2()) othertrianglenode=trichk->get_noeud3();
2160 TPL_MAP_ENTITE<MG_SEGMENT*> relatedseg;
2161 for(int irelatedseg1=0;irelatedseg1<ndins->get_lien_triangle()->get_nb();irelatedseg1++)
2162 {
2163  MG_TRIANGLE* trirel1=ndins->get_lien_triangle()->get(irelatedseg1);
2164  relatedseg.ajouter(trirel1->get_segment1());
2165  relatedseg.ajouter(trirel1->get_segment2());
2166  relatedseg.ajouter(trirel1->get_segment3());
2167 }
2168 for(int irelatedseg2=0;irelatedseg2<othertrianglenode->get_lien_triangle()->get_nb();irelatedseg2++)
2169 {
2170  MG_TRIANGLE* trirel2=othertrianglenode->get_lien_triangle()->get(irelatedseg2);
2171  relatedseg.ajouter(trirel2->get_segment1());
2172  relatedseg.ajouter(trirel2->get_segment2());
2173  relatedseg.ajouter(trirel2->get_segment3());
2174 }
2175 int checkifswpdigisexist=0;
2177 for(MG_SEGMENT* segtest=relatedseg.get_premier(itrelatedseg);segtest!=NULL;segtest=relatedseg.get_suivant(itrelatedseg))
2178 {
2179  if(segtest->get_noeud1()==ndins && segtest->get_noeud2()==othertrianglenode) checkifswpdigisexist++;
2180  if(segtest->get_noeud2()==ndins && segtest->get_noeud1()==othertrianglenode) checkifswpdigisexist++;
2181 }
2182 if(checkifswpdigisexist==0)
2183 {
2184  double pinsphnbnewtri=1.;//=inshper_point(othertrianglenode,newtri);
2185  double pinsphnbothertri=inshper_point(ndins,trichk);
2186 int qualchk=0;
2187 std::map<double,MG_NOEUD*,std::less<double> > beforeswap;
2188 std::map<double,MG_NOEUD*,std::less<double> > afterswap;
2189 MG_MAILLAGE_OUTILS triquality;
2190 double triqualnew=triquality.qualite_triangle(newtri->get_noeud1()->get_coord(),newtri->get_noeud2()->get_coord(),newtri->get_noeud3()->get_coord());
2191 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualnew,newtri->get_noeud1()));
2192 double triqualchek=triquality.qualite_triangle(trichk->get_noeud1()->get_coord(),trichk->get_noeud2()->get_coord(),trichk->get_noeud3()->get_coord());
2193 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualchek,newtri->get_noeud2()));
2194 double afterswap1=triquality.qualite_triangle(ndins->get_coord(),othertrianglenode->get_coord(),segchk->get_noeud1()->get_coord());
2195 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap1,ndins));
2196 double afterswap2=triquality.qualite_triangle(ndins->get_coord(),othertrianglenode->get_coord(),segchk->get_noeud2()->get_coord());
2197 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap2,othertrianglenode));
2198 std::map<double,MG_NOEUD*,std::less<double> >::iterator itbeforeswap=beforeswap.begin();
2199 std::map<double,MG_NOEUD*,std::less<double> >::iterator itafterswap=afterswap.begin();
2200 
2201 if (qualswap>0 && (*itafterswap).first>(*itbeforeswap).first) qualchk=qualchk+1;
2202 if (pinsphnbnewtri<=0.|| pinsphnbothertri<=0.)
2203  if(qualchk>0)//inside sphere
2204 {
2205  MG_NOEUD* segchknd1=segchk->get_noeud1();
2206  MG_NOEUD* segchknd2=segchk->get_noeud2();
2207  MG_NOEUD* trichknd;
2208  MG_NOEUD* trichknd1=trichk->get_noeud1();
2209  MG_NOEUD* trichknd2=trichk->get_noeud2();
2210  MG_NOEUD* trichknd3=trichk->get_noeud3();
2211  if (trichknd1!=segchknd1 && trichknd1!=segchknd2) trichknd=trichknd1;
2212  if (trichknd2!=segchknd1 && trichknd2!=segchknd2) trichknd=trichknd2;
2213  if (trichknd3!=segchknd1 && trichknd3!=segchknd2) trichknd=trichknd3;
2214  MG_TRIANGLE* triad1;
2215  MG_TRIANGLE* triad2;
2216  if (segchknd1==newtri->get_noeud1() && segchknd2==newtri->get_noeud2())
2217  {
2218  triad1=mai->ajouter_mg_triangle(top1,ndins,segchknd1,trichknd,MAGIC::ORIGINE::IMPOSE);
2219  triad2=mai->ajouter_mg_triangle(top1,ndins,trichknd,segchknd2,MAGIC::ORIGINE::IMPOSE);
2220  }
2221  else if (segchknd1==newtri->get_noeud2() && segchknd2==newtri->get_noeud3())
2222  {
2223  triad1=mai->ajouter_mg_triangle(top1,ndins,segchknd1,trichknd,MAGIC::ORIGINE::IMPOSE);
2224  triad2=mai->ajouter_mg_triangle(top1,ndins,trichknd,segchknd2,MAGIC::ORIGINE::IMPOSE);
2225  }
2226  else if (segchknd1==newtri->get_noeud3() && segchknd2==newtri->get_noeud1())
2227  {
2228  triad1=mai->ajouter_mg_triangle(top1,ndins,segchknd1,trichknd,MAGIC::ORIGINE::IMPOSE);
2229  triad2=mai->ajouter_mg_triangle(top1,ndins,trichknd,segchknd2,MAGIC::ORIGINE::IMPOSE);
2230  }
2231  else if (segchknd1==newtri->get_noeud2() && segchknd2==newtri->get_noeud1())
2232  {
2233  triad1=mai->ajouter_mg_triangle(top1,ndins,segchknd2,trichknd,MAGIC::ORIGINE::IMPOSE);
2234  triad2=mai->ajouter_mg_triangle(top1,ndins,trichknd,segchknd1,MAGIC::ORIGINE::IMPOSE);
2235  }
2236  else if (segchknd1==newtri->get_noeud3() && segchknd2==newtri->get_noeud2())
2237  {
2238  triad1=mai->ajouter_mg_triangle(top1,ndins,segchknd2,trichknd,MAGIC::ORIGINE::IMPOSE);
2239  triad2=mai->ajouter_mg_triangle(top1,ndins,trichknd,segchknd1,MAGIC::ORIGINE::IMPOSE);
2240  }
2241  else if (segchknd1==newtri->get_noeud1() && segchknd2==newtri->get_noeud3())
2242  {
2243  triad1=mai->ajouter_mg_triangle(top1,ndins,segchknd2,trichknd,MAGIC::ORIGINE::IMPOSE);
2244  triad2=mai->ajouter_mg_triangle(top1,ndins,trichknd,segchknd1,MAGIC::ORIGINE::IMPOSE);
2245  }
2246 /* double qual1=tq.qualite_triangle(triad1->get_noeud1()->get_coord(),triad1->get_noeud2()->get_coord(),triad1->get_noeud3()->get_coord());
2247  double qual2=tq.qualite_triangle(triad2->get_noeud1()->get_coord(),triad2->get_noeud2()->get_coord(),triad2->get_noeud3()->get_coord());
2248 OT_VECTEUR_3D vpr11(triad1->get_noeud1()->get_coord(),triad1->get_noeud2()->get_coord());
2249 OT_VECTEUR_3D vpr12(triad1->get_noeud1()->get_coord(),triad1->get_noeud3()->get_coord());
2250 OT_VECTEUR_3D normvpr1=(vpr11&vpr12); normvpr1.norme();
2251 OT_VECTEUR_3D vpr21(triad2->get_noeud1()->get_coord(),triad2->get_noeud2()->get_coord());
2252 OT_VECTEUR_3D vpr22(triad2->get_noeud1()->get_coord(),triad2->get_noeud3()->get_coord());
2253 OT_VECTEUR_3D normvpr2=(vpr21&vpr22); normvpr2.norme();
2254 OT_VECTEUR_3D vpto1(trichk->get_noeud1()->get_coord(),trichk->get_noeud2()->get_coord());
2255 OT_VECTEUR_3D vpto2(trichk->get_noeud1()->get_coord(),trichk->get_noeud3()->get_coord());
2256 OT_VECTEUR_3D normvpto=(vpto1&vpto2); normvpto.norme();
2257 OT_VECTEUR_3D vpt1(newtri->get_noeud1()->get_coord(),newtri->get_noeud2()->get_coord());
2258 OT_VECTEUR_3D vpt2(newtri->get_noeud1()->get_coord(),newtri->get_noeud3()->get_coord());
2259 OT_VECTEUR_3D normvpt=(vpt1&vpt2); normvpt.norme();
2260 cout<<"normvpr1= "<<normvpr1<<" normvpr2= "<<normvpr2<<endl;
2261 cout<<"normvpt= "<<normvpt<<" normvpto= "<<normvpto<<endl;*/
2262  octree.inserer(triad1);
2263  octree.inserer(triad2);
2264  octree.supprimer(newtri);
2265  octree.supprimer(trichk);
2266  mai->supprimer_mg_triangleid(newtri->get_id());
2267  mai->supprimer_mg_triangleid(trichk->get_id());
2268  }
2269 }
2270  }
2271 }
2273 {
2274  MG_NOEUD* node1=insphtri->get_noeud1();
2275  MG_NOEUD* node2=insphtri->get_noeud2();
2276  MG_NOEUD* node3=insphtri->get_noeud3();
2277  double bisectp1[3];
2278  double bisectp2[3];
2279  bisectp1[0]=(node1->get_x()+node2->get_x())/2.;
2280  bisectp1[1]=(node1->get_y()+node2->get_y())/2.;
2281  bisectp1[2]=(node1->get_z()+node2->get_z())/2.;
2282  bisectp2[0]=(node1->get_x()+node3->get_x())/2.;
2283  bisectp2[1]=(node1->get_y()+node3->get_y())/2.;
2284  bisectp2[2]=(node1->get_z()+node3->get_z())/2.;
2285 
2286  OT_VECTEUR_3D vec1(node1->get_coord(),node2->get_coord());
2287  OT_VECTEUR_3D vec2(node1->get_coord(),node3->get_coord());
2288  OT_VECTEUR_3D norvec=(vec1&vec2);
2289  OT_VECTEUR_3D norunivec=norvec; norunivec.norme();
2290 
2291  OT_VECTEUR_3D bivec1=(vec1&norunivec); //D1
2292  OT_VECTEUR_3D bivec2=(vec2&norunivec); //D2
2293 
2294  double determinan1=bivec2.get_x()*bivec1.get_y()-bivec1.get_x()*bivec2.get_y();
2295  double determinan2=bivec2.get_x()*bivec1.get_z()-bivec1.get_x()*bivec2.get_z();
2296  double determinan3=bivec2.get_y()*bivec1.get_z()-bivec1.get_y()*bivec2.get_z();
2297 
2298  double s,t;
2299  if(determinan1!=0.)
2300  {
2301  s=(bivec1.get_x()*(bisectp2[1]-bisectp1[1])+bivec1.get_y()*(bisectp1[0]-bisectp2[0]))/determinan1;
2302  t=(bivec2.get_x()*(bisectp2[1]-bisectp1[1])+bivec2.get_y()*(bisectp1[0]-bisectp2[0]))/determinan1;
2303  }
2304  else if(determinan2!=0.)
2305  {
2306  s=(bivec1.get_x()*(bisectp2[2]-bisectp1[2])+bivec1.get_z()*(bisectp1[0]-bisectp2[0]))/determinan2;
2307  t=(bivec2.get_x()*(bisectp2[2]-bisectp1[2])+bivec2.get_z()*(bisectp1[0]-bisectp2[0]))/determinan2;
2308  }
2309  else if(determinan3!=0.)
2310  {
2311  s=(bivec1.get_y()*(bisectp2[2]-bisectp1[2])+bivec1.get_z()*(bisectp1[1]-bisectp2[1]))/determinan3;
2312  t=(bivec2.get_y()*(bisectp2[2]-bisectp1[2])+bivec2.get_z()*(bisectp1[1]-bisectp2[1]))/determinan3;
2313  }
2314  else //cout<<"probleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeem"<<endl;
2315  double bisetlinz1=bisectp1[2]+t*bivec1.get_z();
2316  double bisetlinz2=bisectp2[2]+s*bivec2.get_z();
2317 
2318  double cx=bisectp2[0]+s*bivec2.get_x();
2319  double cy=bisectp2[1]+s*bivec2.get_y();
2320  double cz=bisectp2[2]+s*bivec2.get_z();
2321 double r=sqrt(pow((cx-node1->get_x()),2)+pow((cy-node1->get_y()),2)+pow((cz-node1->get_z()),2));
2322 double pcircum[3];
2323  pcircum[0]=(cx+r*norunivec.get_x());
2324  pcircum[1]=(cy+r*norunivec.get_y());
2325  pcircum[2]=(cz+r*norunivec.get_z());
2326 
2327  double pa[3];
2328  pa[0]=node1->get_x();
2329  pa[1]=node1->get_y();
2330  pa[2]=node1->get_z();
2331  double pb[3];
2332  pb[0]=node2->get_x();
2333  pb[1]=node2->get_y();
2334  pb[2]=node2->get_z();
2335  double pc[3];
2336  pc[0]=node3->get_x();
2337  pc[1]=node3->get_y();
2338  pc[2]=node3->get_z();
2339  double pe[3];
2340  pe[0]=insphp->get_x();
2341  pe[1]=insphp->get_y();
2342  pe[2]=insphp->get_z();
2343  double isphnb = robustPredicates::insphere(pa,pb,pc,pcircum,pe);
2344  return isphnb;
2345  }
MG_GESTIONNAIRE::enregistrer
virtual void enregistrer(std::ostream &o, double version=MAGIC_VERSION_FICHIER_DOUBLE)
Definition: mg_gestionnaire.cpp:1070
MAILLEUR2D_INS_NOEUD::prox_nd
virtual void prox_nd(MG_NOEUD *prxnd, MG_NOEUD *pinrt, MG_MAILLAGE *mai, TPL_OCTREE< MG_NOEUD *, MG_NOEUD * > &octreends, TPL_OCTREE< MG_TRIANGLE *, MG_NOEUD * > &octree)
Definition: mailleur2d_ins_noeud.cpp:1666
fct_generateur_3d.h
TPL_MAP_ENTITE::get_premier
virtual X get_premier(ITERATEUR &it)
Definition: tpl_map_entite.h:112
MG_TRIANGLE::get_segment1
virtual MG_SEGMENT * get_segment1(void)
Definition: mg_triangle.cpp:142
MG_COQUILLE::get_mg_volume
virtual MG_VOLUME * get_mg_volume(void)
Definition: mg_coquille.cpp:81
MG_SEGMENT
Definition: mg_segment.h:38
OT_MATRICE_3D::get_determinant
double get_determinant()
Definition: ot_mathematique.cpp:735
MG_ELEMENT_TOPOLOGIQUE::ajouter_ccf
virtual void ajouter_ccf(char *nom, double val, std::string suiv="NS")
Definition: mg_element_topologique.cpp:159
MG_MAILLAGE::get_premier_noeud
MG_NOEUD * get_premier_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:548
gestionversion.h
MAILLEUR2D_INS_NOEUD::meshno
int meshno
Definition: mailleur2d_ins_noeud.h:53
MAILLEUR2D_OPTIMISATION::optimise
virtual void optimise(MG_FACE *mgface)
Definition: mailleur2d_optimisation.cpp:183
MG_GEOMETRIE::ajouter_mg_sommet_noeud
virtual class MG_SOMMET_NOEUD * ajouter_mg_sommet_noeud(MG_NOEUD *noeud)
Definition: mg_geometrie.cpp:481
MAILLEUR2D_INS_NOEUD::p
MG_NOEUD * p
Definition: mailleur2d_ins_noeud.h:57
TPL_MAP_ENTITE< MG_NOEUD * >
MAILLEUR2D_OPTIMISATION
Definition: mailleur2d_optimisation.h:48
MAILLEUR2D_INS_NOEUD::gest
MG_GESTIONNAIRE * gest
Definition: mailleur2d_ins_noeud.h:60
mg_gestionnaire.h
robustpredicates.hxx
MG_SEGMENT::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_segment.cpp:113
mailleur2d.h
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MG_NOEUD::get_lien_triangle
TPL_LISTE_ENTITE< class MG_TRIANGLE * > * get_lien_triangle(void)
Definition: mg_noeud.cpp:153
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MAILLEUR2D_INS_NOEUD::mesh_size
double mesh_size
Definition: mailleur2d_ins_noeud.h:68
MAILLEUR2D_INS_NOEUD::mai
MG_MAILLAGE * mai
Definition: mailleur2d_ins_noeud.h:58
MG_GEOMETRIE::get_premier_face
MG_FACE * get_premier_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1338
MG_TRIANGLE::get_segment2
virtual MG_SEGMENT * get_segment2(void)
Definition: mg_triangle.cpp:147
MAILLEUR2D_INS_NOEUD::inshper_point
virtual double inshper_point(MG_NOEUD *insphp, MG_TRIANGLE *insphtri)
Definition: mailleur2d_ins_noeud.cpp:2272
mg_file.h
TPL_OCTREE::supprimer
virtual void supprimer(BOITE_3D &boite, A a, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
Definition: tpl_octree.h:918
mailleur2d_ins_noeud.h
OPERATEUR::ARETE2
@ ARETE2
Definition: ot_mathematique.h:435
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
MAGIC_AFFICHE::affiche
virtual void affiche(char *mess)
Definition: magic_affiche.cpp:43
MAILLEUR2D_INS_NOEUD::qualswap
int qualswap
Definition: mailleur2d_ins_noeud.h:64
MG_COFACE::get_orientation
virtual int get_orientation(void)
Definition: mg_coface.cpp:69
MG_ELEMENT_MAILLAGE::change_lien_topologie
void change_lien_topologie(MG_ELEMENT_TOPOLOGIQUE *topo)
Definition: mg_element_maillage.cpp:56
MAGIC::ORIGINE::MODIFICATION
@ MODIFICATION
Definition: mg_definition.h:79
MG_TRIANGLE
Definition: mg_triangle.h:38
OPERATEUR::ARETE1
@ ARETE1
Definition: ot_mathematique.h:435
MAILLEUR2D_INS_NOEUD::del_swap
virtual void del_swap(MG_NOEUD *ndins, MG_TRIANGLE *newtri, MG_MAILLAGE *mai, TPL_OCTREE< MG_TRIANGLE *, MG_NOEUD * > &octree)
Definition: mailleur2d_ins_noeud.cpp:2133
MG_VOLUME
Definition: mg_volume.h:33
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
MG_TRIANGLE::get_segment3
virtual MG_SEGMENT * get_segment3(void)
Definition: mg_triangle.cpp:152
MG_COFACE
Definition: mg_coface.h:33
MAILLEUR2D_INS_NOEUD::top
MG_ELEMENT_TOPOLOGIQUE * top
Definition: mailleur2d_ins_noeud.h:62
MAILLEUR2D_INS_NOEUD::~MAILLEUR2D_INS_NOEUD
virtual ~MAILLEUR2D_INS_NOEUD()
Definition: mailleur2d_ins_noeud.cpp:55
MAILLEUR2D_INS_NOEUD::gentriqual
double gentriqual
Definition: mailleur2d_ins_noeud.h:65
occ_import.h
OPERATEUR::STRICTINTERIEUR
@ STRICTINTERIEUR
Definition: ot_mathematique.h:435
MAILLEUR2D_INS_NOEUD::proxval
double proxval
Definition: mailleur2d_ins_noeud.h:66
MG_MAILLAGE_OUTILS
Definition: mg_maillage_outils.h:47
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_FACE::inverser
virtual void inverser(double *uv, double *xyz, double precision=1e-6)
Definition: mg_face.cpp:228
MAILLEUR2D_INS_NOEUD::proxedgeval
double proxedgeval
Definition: mailleur2d_ins_noeud.h:67
TPL_OCTREE::inserer
virtual void inserer(BOITE_3D &boite, A a, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
Definition: tpl_octree.h:897
MAILLEUR2D_INS_NOEUD::ins_point_withbc
virtual void ins_point_withbc(double gentriqual, double mesh_size, char *gnifoutputfilename, int insremtyp)
Definition: mailleur2d_ins_noeud.cpp:567
MAILLEUR2D_INS_NOEUD::magicfilename
char * magicfilename
Definition: mailleur2d_ins_noeud.h:52
MAILLEUR2D_INS_NOEUD::delaunay_ndinsert
virtual void delaunay_ndinsert(MG_NOEUD *dpins, MG_MAILLAGE *mai, double search_radius, TPL_OCTREE< MG_TRIANGLE *, MG_NOEUD * > &octree, MG_GEOMETRIE *geo, TPL_OCTREE< MG_NOEUD *, MG_NOEUD * > &octreends)
Definition: mailleur2d_ins_noeud.cpp:1761
mg_maillage_outils.h
mailleur2d_optimisation.h
MG_MAILLAGE::get_premier_triangle
MG_TRIANGLE * get_premier_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:912
MG_MAILLAGE::ajouter_mg_triangle
MG_TRIANGLE * ajouter_mg_triangle(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:731
MG_SEGMENT::get_lien_triangle
TPL_LISTE_ENTITE< class MG_TRIANGLE * > * get_lien_triangle(void)
Definition: mg_segment.cpp:243
MG_SEGMENT::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_segment.cpp:108
MG_COFACE::get_coquille
virtual MG_COQUILLE * get_coquille(void)
Definition: mg_coface.cpp:53
MG_NOEUD::get_lien_segment
TPL_LISTE_ENTITE< class MG_SEGMENT * > * get_lien_segment(void)
Definition: mg_noeud.cpp:141
MG_MAILLAGE::supprimer_mg_triangleid
int supprimer_mg_triangleid(unsigned long num)
Definition: mg_maillage.cpp:820
MG_FACE::get_mg_coface
virtual MG_COFACE * get_mg_coface(int num)
Definition: mg_face.cpp:104
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MG_NOEUD
Definition: mg_noeud.h:41
MAILLEUR2D_INS_NOEUD::nivopt
int nivopt
Definition: mailleur2d_ins_noeud.h:63
OT_MATRICE_3D
Definition: ot_mathematique.h:160
robustPredicates::insphere
REAL insphere(REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
Definition: robustpredicates.cc:4167
MAGIC::ORIGINE::IMPOSE
@ IMPOSE
Definition: mg_definition.h:79
TPL_OCTREE::rechercher
virtual void rechercher(BOITE_3D &boite, TPL_MAP_ENTITE< A > &liste_entite_trouve, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
Definition: tpl_octree.h:606
mailleur1d.h
MAILLEUR2D_INS_NOEUD::MAILLEUR2D_INS_NOEUD
MAILLEUR2D_INS_NOEUD(char *magicfilename, int meshno, char *inspointfilename, char *outputfilename, int nivopt, int qualswap, double proxval, double proxedgeval)
Definition: mailleur2d_ins_noeud.cpp:47
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
TPL_MAP_ENTITE::ITERATEUR
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
Definition: tpl_map_entite.h:38
MG_ELEMENT_MAILLAGE::change_origine
virtual void change_origine(int)
Definition: mg_element_maillage.cpp:86
MG_GESTIONNAIRE::get_mg_maillage
MG_MAILLAGE * get_mg_maillage(unsigned int num)
Definition: mg_gestionnaire.cpp:550
mg_sommet_noeud.h
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
MG_GEOMETRIE::get_nb_mg_coque
unsigned int get_nb_mg_coque(void)
Definition: mg_geometrie.cpp:1847
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
MG_TRIANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_triangle.cpp:131
MG_FILE
Definition: mg_file.h:31
MAILLEUR2D_INS_NOEUD::geo
MG_GEOMETRIE * geo
Definition: mailleur2d_ins_noeud.h:59
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
ot_mathematique.h
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
OPERATEUR::SUR_ARETE
@ SUR_ARETE
Definition: ot_mathematique.h:435
MG_GEOMETRIE::get_nb_mg_face
unsigned int get_nb_mg_face(void)
Definition: mg_geometrie.cpp:1264
OPERATEUR::SOMMET1
@ SOMMET1
Definition: ot_mathematique.h:435
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
acos
double2 acos(double2 &val)
Definition: ot_doubleprecision.cpp:224
MAILLEUR2D_INS_NOEUD::ins_points
virtual void ins_points(void)
Definition: mailleur2d_ins_noeud.cpp:58
OPERATEUR::INTERIEUR
@ INTERIEUR
Definition: ot_mathematique.h:435
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
MG_GEOMETRIE::get_nb_mg_volume
unsigned int get_nb_mg_volume(void)
Definition: mg_geometrie.cpp:1712
OPERATEUR::SOMMET2
@ SOMMET2
Definition: ot_mathematique.h:435
MAILLEUR2D_INS_NOEUD::outputfilename
char * outputfilename
Definition: mailleur2d_ins_noeud.h:56
MG_TRIANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_triangle.cpp:126
MAILLEUR2D_INS_NOEUD
Definition: mailleur2d_ins_noeud.h:34
MG_MAILLAGE::get_mg_triangle
MG_TRIANGLE * get_mg_triangle(unsigned int num)
Definition: mg_maillage.cpp:784
mailleur3d.h
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
MG_FACE::calcul_normale_unitaire
virtual void calcul_normale_unitaire(double *uv, double *normale)
Definition: mg_face.cpp:248
MG_MAILLAGE::supprimer_mg_noeudid
int supprimer_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:482
MG_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_maillage.cpp:410
OPERATEUR::SOMMET3
@ SOMMET3
Definition: ot_mathematique.h:435
MG_GESTIONNAIRE::get_mg_maillageid
MG_MAILLAGE * get_mg_maillageid(unsigned long num)
Definition: mg_gestionnaire.cpp:538
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
mg_geometrie_outils.h
OPERATEUR::qualite_triangle
static double qualite_triangle(double *noeud1, double *noeud2, double *noeud3)
Definition: ot_mathematique.cpp:1647
MG_TRIANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_triangle.cpp:137
MAILLEUR
Definition: mailleur.h:33
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_GEOMETRIE_OUTILS::calcule_distance_contour_face_xyz
int calcule_distance_contour_face_xyz(double *xyz, class MG_FACE *face, double *dis, int avecverif=1)
Definition: mg_geometrie_outils.cpp:67
MG_MAILLAGE::get_suivant_triangle
MG_TRIANGLE * get_suivant_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:920
MG_SOMMET::get_dimension
virtual int get_dimension(void)
Definition: mg_sommet.cpp:93
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_GEOMETRIE::get_mg_coque
MG_COQUE * get_mg_coque(unsigned int num)
Definition: mg_geometrie.cpp:1818
TPL_LISTE_ENTITE< MG_NOEUD * >
OPERATEUR::ARETE3
@ ARETE3
Definition: ot_mathematique.h:435
res
#define res(i, j)
MAILLEUR2D_INS_NOEUD::inspointfilename
char * inspointfilename
Definition: mailleur2d_ins_noeud.h:55
MG_FACE
Definition: mg_face.h:34
MG_COQUE
Definition: mg_coque.h:33
TPL_MAP_ENTITE::get_suivant
virtual X get_suivant(ITERATEUR &it)
Definition: tpl_map_entite.h:120
cos
double2 cos(double2 &val)
Definition: ot_doubleprecision.cpp:206
MG_SOMMET_NOEUD
Definition: mg_sommet_noeud.h:33
MG_GEOMETRIE_OUTILS
Definition: mg_geometrie_outils.h:37
MG_GEOMETRIE::get_suivant_face
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1346
MG_GESTIONNAIRE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(unsigned int num)
Definition: mg_gestionnaire.cpp:331
TPL_OCTREE::initialiser
virtual void initialiser(TPL_LISTE_ENTITE< CONDITION > *lst_entite, int nombre, double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
Definition: tpl_octree.h:366
TPL_OCTREE< MG_TRIANGLE *, MG_NOEUD * >
MG_MAILLAGE::get_suivant_noeud
MG_NOEUD * get_suivant_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:556
MG_GEOMETRIE::get_mg_volume
MG_VOLUME * get_mg_volume(unsigned int num)
Definition: mg_geometrie.cpp:1683
MG_MAILLAGE_OUTILS::compare_etat_triangle
int compare_etat_triangle(int etat, int valeur)
Definition: mg_maillage_outils.cpp:87
mailleur0d.h
MG_MAILLAGE_OUTILS::estdansletriangle
int estdansletriangle(MG_TRIANGLE *tri, double x, double y, double z)
Definition: mg_maillage_outils.cpp:53
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82
MG_MAILLAGE::ajouter_mg_noeud
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:421
MAILLEUR2D_INS_NOEUD::tri
MG_TRIANGLE * tri
Definition: mailleur2d_ins_noeud.h:61