42 :
MAILLEUR(false),fichierstlmagic(fichierstlmagictmp),fichierout(fichierouttmp),nummai(nummaitmp)
46 :
MAILLEUR(false),fichierstlmagic(fichierstlmagictmp),fichierout(fichierouttmp),fichiercarte(fichiercartetmp),nummai(nummaitmp)
50 :
MAILLEUR(false),fichierstlmagic(fichierstlmagictmp),fichierinspoint(fichierinspointtmp),fichierout(fichierouttmp),nummai(nummaitmp),qualswap(qualswaptmp)
54 :
MAILLEUR(mdd),fichierstlmagic(mdd.fichierstlmagic),fichierout(mdd.fichierout),nummai(mdd.nummai),fichiercarte(mdd.fichiercarte),fichierinspoint(mdd.fichierinspoint),qualswap(mdd.qualswap)
82 double edge_angle_threshold=45.;
83 double geo_angle_threshold=25.;
86 double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
88 LISTE_MG_NOEUD::iterator itn;
91 if (no->get_x()<xmin) xmin=no->get_x();
92 if (no->get_y()<ymin) ymin=no->get_y();
93 if (no->get_z()<zmin) zmin=no->get_z();
94 if (no->get_x()>xmax) xmax=no->get_x();
95 if (no->get_y()>ymax) ymax=no->get_y();
96 if (no->get_z()>zmax) zmax=no->get_z();
104 double search_radius=0.1*bounbox_diag;
106 sprintf(bboxdiag,
"the bounding box diagonal is: %lf , and the neighborhood search radius is: %lf ",vec.
get_longueur(),search_radius);
113 double length=
sqrt(lengthvec*lengthvec);
115 xmin=average.
get_x()-(length*bxr);ymin=average.
get_y()-(length*bxr);zmin=average.
get_z()-(length*bxr);
116 xmax=average.
get_x()+(length*bxr);ymax=average.
get_y()+(length*bxr);zmax=average.
get_z()+(length*bxr);
118 stloctree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
119 LISTE_MG_TRIANGLE::iterator itoctrins1;
123 octree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
124 LISTE_MG_TRIANGLE::iterator itoctrins;
129 LISTE_MG_SEGMENT::iterator ited;
133 else if (seged->get_lien_triangle()->get_nb()==2)
135 MG_TRIANGLE* tri1=seged->get_lien_triangle()->get(0);
136 MG_TRIANGLE* tri2=seged->get_lien_triangle()->get(1);
138 double teta=getangle.
get_angle(tri1,tri2);teta=teta*180./3.14159265;
139 if (teta<=(180.-edge_angle_threshold) || teta>=(edge_angle_threshold+180.))
176 LISTE_MG_SEGMENT::iterator itsegsz;
179 double* xyz1=sizseg->get_noeud1()->get_coord();
180 double* xyz2=sizseg->get_noeud2()->get_coord();
182 sizemapsorting.insert(std::pair<double,MG_SEGMENT*>(metriclength,sizseg));
186 while((*itm).first>1.35)
200 dxyz[0]=xyz2[0]-xyz1[0];
201 dxyz[1]=xyz2[1]-xyz1[1];
202 dxyz[2]=xyz2[2]-xyz1[2];
203 for (
int i=0;i<
pas;i++)
206 double tii=1.0*(i+1)/
pas;
207 double tgauss1=0.7886751345*tii+0.2113248654*ti;
209 xyz[0]=xyz1[0]+tgauss1*(xyz2[0]-xyz1[0]);
210 xyz[1]=xyz1[1]+tgauss1*(xyz2[1]-xyz1[1]);
211 xyz[2]=xyz1[2]+tgauss1*(xyz2[2]-xyz1[2]);
214 double val=
sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
215 longueur=longueur+0.5*(tii-ti)*val;
217 double tgauss2=0.7886751345*ti+0.2113248654*tii;
218 xyz[0]=xyz1[0]+tgauss2*(xyz2[0]-xyz1[0]);
219 xyz[1]=xyz1[1]+tgauss2*(xyz2[1]-xyz1[1]);
220 xyz[2]=xyz1[2]+tgauss2*(xyz2[2]-xyz1[2]);
222 val=
sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
223 longueur=longueur+0.5*(tii-ti)*val;
225 if (longueur<0.000001) std::cout<<
" dxyz[0]="<<dxyz[0]<<
" dxyz[1]="<<dxyz[1]<<
" dxyz[2]="<<dxyz[2]<<std::endl;
257 int counterclockwisetri=0;
265 counterclockwisetri++;
267 counterclockwisetri++;
269 counterclockwisetri++;
281 else if(counterclockwisetri>0)
302 deletingtis.
ajouter(trilienother);
314 else if(counterclockwisetri>0)
334 if ((*itdelsegbgsz).second==segbgsz)
345 for (
int noliensegmdnd=0;noliensegmdnd<midnd->
get_lien_segment()->get_nb();noliensegmdnd++)
353 for(
int nodeletingtis=0;nodeletingtis<deletingtis.
get_nb();nodeletingtis++)
361 int stltrinb=lststloctri.
get_nb();
362 int midndonstlorig=0;
368 stltrinb=lststloctri.
get_nb(); search_radius=1.2*search_radius;
378 if (outstl==1) midndonstlorig++;
380 if(midndonstlorig==0)
398 for(
int mdndsgsno=0;mdndsgsno<midnd->
get_lien_segment()->get_nb();mdndsgsno++)
404 sizemapsorting.insert(std::pair<double,MG_SEGMENT*>(mdndlnksgmetriclength,mdndlnksg));
408 for(
int notrilnkmidnd=0;notrilnkmidnd<midnd->
get_lien_triangle()->get_nb();notrilnkmidnd++)
415 lstsgtrilnkmidnd.
ajouter(trilnkmidnd->get_segment1());
416 lstsgtrilnkmidnd.
ajouter(trilnkmidnd->get_segment2());
417 lstsgtrilnkmidnd.
ajouter(trilnkmidnd->get_segment3());
421 for(
int nosglnkmdnd=0;nosglnkmdnd<midnd->
get_lien_segment()->get_nb();nosglnkmdnd++)
425 for(
MG_SEGMENT* sgtrilnkmidnd=lstsgtrilnkmidnd.
get_premier(itlstsgtrilnkmidnd);sgtrilnkmidnd!=NULL;sgtrilnkmidnd=lstsgtrilnkmidnd.
get_suivant(itlstsgtrilnkmidnd))
427 for(
int nolstsglnkmdnd=0;nolstsglnkmdnd<lstsglnkmdnd.
get_nb();nolstsglnkmdnd++)
429 if(sgtrilnkmidnd==lstsglnkmdnd.
get(nolstsglnkmdnd))
430 lstasupprimer.
ajouter(sgtrilnkmidnd);
433 for (
int i=0;i<lstasupprimer.
get_nb();i++)
439 for(
MG_SEGMENT* sgtrilnkmidndswchk=lstsgtrilnkmidnd.
get_premier(itlstsgtrilnkmidndswchk);sgtrilnkmidndswchk!=NULL;sgtrilnkmidndswchk=lstsgtrilnkmidnd.
get_suivant(itlstsgtrilnkmidndswchk))
468 double teta=getangle.
get_angle(trichk,dchktri);
469 teta=teta*180./3.14159265;
471 if (teta>180.-geo_angle_threshold && teta<geo_angle_threshold+180.)
488 for(
int irelatedseg2=0;irelatedseg2<othertrianglenode->
get_lien_triangle()->get_nb();irelatedseg2++)
495 int checkifswpdigisexist=0;
499 if(segtest->get_noeud1()==
insertnod && segtest->get_noeud2()==othertrianglenode) checkifswpdigisexist++;
500 if(segtest->get_noeud2()==
insertnod && segtest->get_noeud1()==othertrianglenode) checkifswpdigisexist++;
503 double anglestltiandswaptri1;
504 double anglestltiandswaptri2;
512 if (trichknd1!=segchknd1 && trichknd1!=segchknd2) trichknd=trichknd1;
513 if (trichknd2!=segchknd1 && trichknd2!=segchknd2) trichknd=trichknd2;
514 if (trichknd3!=segchknd1 && trichknd3!=segchknd2) trichknd=trichknd3;
519 centrnoid[0]=(segchknd1->
get_x()+segchknd2->
get_x())/2.;
520 centrnoid[1]=(segchknd1->
get_y()+segchknd2->
get_y())/2.;
521 centrnoid[2]=(segchknd1->
get_z()+segchknd2->
get_z())/2.;
524 int stltriswtest1nb=lststloctriswtest1.
get_nb();
525 double stl_rad_search_swdg=0.001;
526 while(stltriswtest1nb==0)
528 stloctree.
rechercher(centrnoid[0],centrnoid[1],centrnoid[2],stl_rad_search_swdg,lststloctriswtest1);
529 stltriswtest1nb=lststloctriswtest1.
get_nb(); stl_rad_search_swdg=1.1*stl_rad_search_swdg;
535 OT_VECTEUR_3D normavecstlclostri=(vecstlclostri1&vecstlclostri2);
536 OT_VECTEUR_3D uninormavecstlclostri=normavecstlclostri; uninormavecstlclostri.
norme();
538 int counterclockwise=0;
547 if (counterclockwise>0 && clockwise==0)
570 else if (clockwise>0 && counterclockwise==0)
597 if(checkifswpdigisexist==0 && anglestltiandswaptri1<3.14159265 && anglestltiandswaptri2<3.14159265)
599 double pinsphnbnewtri=
inshper_point(othertrianglenode,dchktri);
602 std::map<double,MG_NOEUD*,std::less<double> > beforeswap;
603 std::map<double,MG_NOEUD*,std::less<double> > afterswap;
606 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualnew,dchktri->
get_noeud1()));
608 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualchek,dchktri->
get_noeud2()));
610 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap1,
insertnod));
612 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap2,othertrianglenode));
613 std::map<double,MG_NOEUD*,std::less<double> >::iterator itbeforeswap=beforeswap.begin();
614 std::map<double,MG_NOEUD*,std::less<double> >::iterator itafterswap=afterswap.begin();
616 if (
qualswap>0 && (*itafterswap).first>(*itbeforeswap).first) qualchk=qualchk+1;
617 if (pinsphnbnewtri<=0.|| pinsphnbothertri<=0.)
627 int counterclockwise=0;
637 if (counterclockwise>0 && clockwise==0)
643 if (clockwise>0 && counterclockwise==0)
667 for(
int count1=0;count1<triad1segs.
get_nb();count1++)
670 for(
int count2=0;count2<triad2segs.
get_nb();count2++)
673 if (segcount1==segcount2)
675 sizsegment=segcount1;
687 sizemapsorting.insert(std::pair<double,MG_SEGMENT*>(metriclength1,sizsegment));
697 if ((*itdelsegchksz).second==segchk)
716 double edge_angle_threshold=45.;
717 double geo_angle_threshold=25.;
718 double targetsizecontrol=0.1;
722 double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
724 LISTE_MG_NOEUD::iterator itn;
727 if (no->get_x()<xmin) xmin=no->get_x();
728 if (no->get_y()<ymin) ymin=no->get_y();
729 if (no->get_z()<zmin) zmin=no->get_z();
730 if (no->get_x()>xmax) xmax=no->get_x();
731 if (no->get_y()>ymax) ymax=no->get_y();
732 if (no->get_z()>zmax) zmax=no->get_z();
739 double search_radius=0.1*bounbox_diag;
741 sprintf(bboxdiag,
"the bounding box diagonal is: %lf , and the neighborhood search radius is: %lf ",vec.
get_longueur(),search_radius);
748 double length=
sqrt(lengthvec*lengthvec);
750 xmin=average.
get_x()-(length*bxr);ymin=average.
get_y()-(length*bxr);zmin=average.
get_z()-(length*bxr);
751 xmax=average.
get_x()+(length*bxr);ymax=average.
get_y()+(length*bxr);zmax=average.
get_z()+(length*bxr);
753 stloctree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
754 LISTE_MG_TRIANGLE::iterator itoctrins1;
758 octree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
759 LISTE_MG_TRIANGLE::iterator itoctrins;
763 double targetsize=2.*targetsizecontrol*bounbox_diag;
766 LISTE_MG_SEGMENT::iterator ited;
770 else if (seged->get_lien_triangle()->get_nb()==2)
772 MG_TRIANGLE* tri1=seged->get_lien_triangle()->get(0);
773 MG_TRIANGLE* tri2=seged->get_lien_triangle()->get(1);
775 double teta=getangle.
get_angle(tri1,tri2);teta=teta*180./3.14159265;
776 if (teta<=(180.-edge_angle_threshold) || teta>=(edge_angle_threshold+180.))
lstedges.
ajouter(seged);
812 LISTE_MG_TRIANGLE::iterator it1;
816 stltrisorting.insert(std::pair<double,MG_TRIANGLE*>(trisz,tri));
818 STLSORTMMAP:: iterator itm = stltrisorting.begin();
820 while ((*itm).first>targetsize)
828 if (ls1>=ls2 && ls1>=ls3) longs1=s1;
829 else if (ls2>=ls1 && ls2>=ls3) longs1=s2;
830 else if (ls3>=ls1 && ls3>=ls2) longs1=s3;
841 if (lscktrinei!=lscktriold) lscktri=lscktrinei;
846 if (lscks1!=longsidold && lscks1len>longsidold->
get_longueur()) longsid=lscks1;
847 else if (lscks2!=longsidold && lscks2len>longsidold->
get_longueur()) longsid=lscks2;
848 else if (lscks3!=longsidold && lscks3len>longsidold->
get_longueur()) longsid=lscks3;
849 else longsid=longsidold;
850 if (longsid==longsidold) l++;
859 std::multimap< double, MG_SEGMENT*, std::greater<double> > mmifedge;
862 for(
int ilscktri=0;ilscktri<lstlscktri.
get_nb();ilscktri++)
870 if (seglscktri_length>(0.3*longsidold_length) && segedg==seglscktri)
872 mmifedge.insert(std::pair<double, MG_SEGMENT*>(seglscktri->
get_longueur(),seglscktri));
879 std::multimap< double, MG_SEGMENT*, std::greater<double> >::iterator itmmifedge=mmifedge.begin();
881 longsidold=(*itmmifedge).second;
890 itm = stltrisorting.begin();
901 int midndnotonedge=0;
913 if (segedg==lastlsseg)
928 int counterclockwisetri=0;
936 counterclockwisetri++;
938 counterclockwisetri++;
940 counterclockwisetri++;
952 else if(counterclockwisetri>0)
977 deletingtis.
ajouter(trilienother);
989 else if(counterclockwisetri>0)
1026 for(
int nodeletingtis=0;nodeletingtis<deletingtis.
get_nb();nodeletingtis++)
1031 STLSORTMMAP::iterator itdeloned1;
1032 for (itdeloned1=stltrisorting.find(deltriarea);itdeloned1!=stltrisorting.end();itdeloned1++)
1033 if ((*itdeloned1).second==deletingti) {stltrisorting.erase(itdeloned1);
break;}
1038 int stltrinb=lststloctri.
get_nb();
1039 int midndonstlorig=0;
1045 stltrinb=lststloctri.
get_nb(); search_radius=1.2*search_radius;
1055 if (outstl==1) midndonstlorig++;
1057 if(midndonstlorig==0)
1075 stltrisorting.insert(std::pair<double,MG_TRIANGLE*>(trisiz,mdndlnksg));
1079 for(
int notrilnkmidnd=0;notrilnkmidnd<midnd->
get_lien_triangle()->get_nb();notrilnkmidnd++)
1087 lstsgtrilnkmidnd.
ajouter(trilnkmidnd->get_segment1());
1088 lstsgtrilnkmidnd.
ajouter(trilnkmidnd->get_segment2());
1089 lstsgtrilnkmidnd.
ajouter(trilnkmidnd->get_segment3());
1093 for(
int nosglnkmdnd=0;nosglnkmdnd<midnd->
get_lien_segment()->get_nb();nosglnkmdnd++)
1097 for(
MG_SEGMENT* sgtrilnkmidnd=lstsgtrilnkmidnd.
get_premier(itlstsgtrilnkmidnd);sgtrilnkmidnd!=NULL;sgtrilnkmidnd=lstsgtrilnkmidnd.
get_suivant(itlstsgtrilnkmidnd))
1099 for(
int nolstsglnkmdnd=0;nolstsglnkmdnd<lstsglnkmdnd.
get_nb();nolstsglnkmdnd++)
1101 if(sgtrilnkmidnd==lstsglnkmdnd.
get(nolstsglnkmdnd))
1102 lstasupprimer.
ajouter(sgtrilnkmidnd);
1105 for (
int i=0;i<lstasupprimer.
get_nb();i++)
1111 for(
MG_SEGMENT* sgtrilnkmidndswchk=lstsgtrilnkmidnd.
get_premier(itlstsgtrilnkmidndswchk);sgtrilnkmidndswchk!=NULL;sgtrilnkmidndswchk=lstsgtrilnkmidnd.
get_suivant(itlstsgtrilnkmidndswchk))
1325 std::multimap<double,MG_TRIANGLE*,std::less<double> > lstlnktronqtrind1;
1333 lstlnktronqtrind1.insert(std::pair<double,MG_TRIANGLE*> (lnktriqual,lnkti));
1343 for(
int alpha=1;alpha<movstp;alpha++)
1350 int stltrinbsmnd1=lststloctrismnd1.
get_nb();
1351 int intristltribassmnd1=0;
1353 double radsmnd1=stl_rad_search;
1356 while(stltrinbsmnd1==0)
1359 stltrinbsmnd1=lststloctrismnd1.
get_nb(); radsmnd1=1.2*radsmnd1;
1369 if (intristltribassmnd1==1) { onstlsmnd1++;
break;}
1376 else projection1=smndstp;
1378 std::multimap<double,MG_TRIANGLE*,std::less<double> >::iterator ilnktri=lstlnktronqtrind1.begin();
1379 double quallast_step=(*ilnktri).first;
1380 std::multimap<double,MG_TRIANGLE*,std::less<double> > lstlnktronqtrind2;
1381 for(std::multimap<
double,
MG_TRIANGLE*,std::less<double> >::iterator ilnktri1=lstlnktronqtrind1.begin();ilnktri1!=lstlnktronqtrind1.end();ilnktri1++)
1384 double qualnktriqual;
1392 lstlnktronqtrind2.insert(std::pair<double,MG_TRIANGLE*> (qualnktriqual,qlnktrimod));
1395 lstlnktronqtrind1.clear();
1396 std::multimap<double,MG_TRIANGLE*,std::less<double> >::iterator itlnktri=lstlnktronqtrind2.begin();
1400 if ((*itlnktri).first>qualpri && (*itlnktri).first>quallast_step)
1404 qualpri=(*itlnktri).first;
1405 ndcoord=projection1;
1406 lstlnktronqtrind1.clear();
1407 for(std::multimap<
double,
MG_TRIANGLE*,std::less<double> >::iterator ilnktri2=lstlnktronqtrind2.begin();ilnktri2!=lstlnktronqtrind2.end();ilnktri2++)
1409 lstlnktronqtrind1.insert(std::pair<double,MG_TRIANGLE*> ((*ilnktri2).first,(*ilnktri2).second));
1450 for(
int ii=0;ii<lstlinknds.
get_nb();ii++)
1466 int stltrinb=lststloctri.
get_nb();
1467 int intristltribas=0;
int stltrisearchit=0;
int onstl=0;
1484 stloctree.
rechercher(midndx,midndy,midndz,stl_rad_search,lststloctri);
1485 stltrinb=lststloctri.
get_nb(); stl_rad_search=1.2*stl_rad_search;
1489 std::multimap<double,MG_TRIANGLE*,std::less<double> > lstprontri;
1490 std::multimap<double,OT_VECTEUR_3D,std::less<double> > lstprontriproj_origstl;
1493 MG_NOEUD* nd1=stltr1->get_noeud1();
1494 MG_NOEUD* nd2=stltr1->get_noeud2();
1495 MG_NOEUD* nd3=stltr1->get_noeud3();
1518 if (detd==0.) std::cout<<
"origstlprojection BAD BAD BAD BAD"<<std::endl;
1521 pproj[0]=midndx+t*normunivec.
get_x();
1522 pproj[1]=midndy+t*normunivec.
get_y();
1523 pproj[2]=midndz+t*normunivec.
get_z();
1525 int stltribasval=stltribas.
estdansletriangle(stltr1,pproj[0],pproj[1],pproj[2]);
1532 (lstprontri).insert(std::pair<double,MG_TRIANGLE*>(mdndtridistanc,stltr1));
1533 (lstprontriproj_origstl).insert(std::pair<double,OT_VECTEUR_3D>(mdndtridistanc,pprojvec));
1537 std::multimap<double,MG_TRIANGLE*,std::less<double> >::iterator it04=lstprontri.begin();
1538 std::multimap<double,OT_VECTEUR_3D,std::less<double> >::iterator it05=lstprontriproj_origstl.begin();
1540 if(lstprontri.size()==1)
1544 return prjonorigstl;
1546 else if (lstprontri.size()==2)
1548 double firstdist=(*it04).first;
1552 double scnddist=(*it04).first;
1554 if(firstdist<scnddist)
1558 return prjonorigstl;
1560 else if (firstdist==scnddist)
1571 if (sg1==sg11 || sg1==sg21 || sg1==sg31) {sgshare=sg1;besh++;}
1572 if (sg2==sg11 || sg2==sg21 || sg2==sg31) {sgshare=sg2;besh++;}
1573 if (sg3==sg11 || sg3==sg21 || sg3==sg31) {sgshare=sg3;besh++;}
1597 else if (lstprontri.size()>2)
1599 it04=lstprontri.begin();
1600 double firstdist=(*it04).first;
1604 double scnddist=(*it04).first;
1606 double trddist=(*it04).first;
1608 if(firstdist<scnddist)
1612 return prjonorigstl;
1615 else if (firstdist==scnddist && scnddist<trddist)
1626 if (sg1==sg11 || sg1==sg21 || sg1==sg31) {sgshare=sg1;besh++;}
1627 if (sg2==sg11 || sg2==sg21 || sg2==sg31) {sgshare=sg2;besh++;}
1628 if (sg3==sg11 || sg3==sg21 || sg3==sg31) {sgshare=sg3;besh++;}
1654 std::cout<<
"on original STL situation need to be chaked !!!!!"<<std::endl;
1656 for (std::multimap<
double,
MG_TRIANGLE*,std::less<double> >::iterator it04s=lstprontri.begin();it04s!=lstprontri.end();it04s++)
1672 tot_norm=tot_norm/normno;
1675 std::multimap<double,MG_TRIANGLE*,std::less<double> > lstprojtri1;
1676 std::multimap<double,OT_VECTEUR_3D,std::less<double> > lstinproj_origstl;
1678 stloctree.
rechercher(midndx,midndy,midndz,2.*stl_rad_search,lststloctri);
1700 if (detd==0.) std::cout<<
"origstlprojection BAD BAD BAD BAD"<<std::endl;
1703 pproj[0]=midndx+t*tot_norm.
get_x();
1704 pproj[1]=midndy+t*tot_norm.
get_y();
1705 pproj[2]=midndz+t*tot_norm.
get_z();
1707 int stltribasval=stltribas11.
estdansletriangle(tris,pproj[0],pproj[1],pproj[2]);
1715 (lstprojtri1).insert(std::pair<double,MG_TRIANGLE*>(mdndtridistanc,tris));
1716 (lstinproj_origstl).insert(std::pair<double,OT_VECTEUR_3D>(mdndtridistanc,pprojvec));
1721 std::multimap<double,MG_TRIANGLE*,std::less<double> >::iterator its1=lstprojtri1.begin();
1722 if((*its1).first<1.5*firstdist)
1724 std::multimap<double,OT_VECTEUR_3D,std::less<double> >::iterator it05l=lstinproj_origstl.begin();
1726 return prjonorigstl;
1731 return prjonorigstl;
1741 double norme_w_n_tot=0.;
1743 double norme_w2_n_tot=0.;
1745 for (
int i=0;i<nbtri;i++)
1761 w_n_tot=w_n_tot+w_n;
1762 norme_w_n_tot=norme_w_n_tot+norme_w_n;
1779 bisectp1[0]=(node1->
get_x()+node2->
get_x())/2.;
1780 bisectp1[1]=(node1->
get_y()+node2->
get_y())/2.;
1781 bisectp1[2]=(node1->
get_z()+node2->
get_z())/2.;
1782 bisectp2[0]=(node1->
get_x()+node3->
get_x())/2.;
1783 bisectp2[1]=(node1->
get_y()+node3->
get_y())/2.;
1784 bisectp2[2]=(node1->
get_z()+node3->
get_z())/2.;
1804 s=(bivec1.
get_x()*(bisectp2[1]-bisectp1[1])+bivec1.
get_y()*(bisectp1[0]-bisectp2[0]))/determinan1;
1805 t=(bivec2.
get_x()*(bisectp2[1]-bisectp1[1])+bivec2.
get_y()*(bisectp1[0]-bisectp2[0]))/determinan1;
1808 else if(determinan2!=0.)
1810 s=(bivec1.
get_x()*(bisectp2[2]-bisectp1[2])+bivec1.
get_z()*(bisectp1[0]-bisectp2[0]))/determinan2;
1811 t=(bivec2.
get_x()*(bisectp2[2]-bisectp1[2])+bivec2.
get_z()*(bisectp1[0]-bisectp2[0]))/determinan2;
1815 else if(determinan3!=0.)
1817 s=(bivec1.
get_y()*(bisectp2[2]-bisectp1[2])+bivec1.
get_z()*(bisectp1[1]-bisectp2[1]))/determinan3;
1818 t=(bivec2.
get_y()*(bisectp2[2]-bisectp1[2])+bivec2.
get_z()*(bisectp1[1]-bisectp2[1]))/determinan3;
1821 else std::cout<<
"probleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeem"<<std::endl;
1822 double bisetlinz1=bisectp1[2]+t*bivec1.
get_z();
1823 double bisetlinz2=bisectp2[2]+s*bivec2.
get_z();
1825 double cx=bisectp2[0]+s*bivec2.
get_x();
1826 double cy=bisectp2[1]+s*bivec2.
get_y();
1827 double cz=bisectp2[2]+s*bivec2.
get_z();
1828 double r=
sqrt(pow((cx-node1->
get_x()),2)+pow((cy-node1->
get_y()),2)+pow((cz-node1->
get_z()),2));
1830 pcircum[0]=(cx+r*norunivec.
get_x());
1831 pcircum[1]=(cy+r*norunivec.
get_y());
1832 pcircum[2]=(cz+r*norunivec.
get_z());
1835 pa[0]=node1->
get_x();
1836 pa[1]=node1->
get_y();
1837 pa[2]=node1->
get_z();
1839 pb[0]=node2->
get_x();
1840 pb[1]=node2->
get_y();
1841 pb[2]=node2->
get_z();
1843 pc[0]=node3->
get_x();
1844 pc[1]=node3->
get_y();
1845 pc[2]=node3->
get_z();
1847 pe[0]=insphp->
get_x();
1848 pe[1]=insphp->
get_y();
1849 pe[2]=insphp->
get_z();
1859 double avsegleng=(seg1leng+seg2leng+seg3leng)/3.;
1865 std::multimap<double,MG_TRIANGLE*,std::greater<double> > lstqualtri1st;
1866 LISTE_MG_TRIANGLE::iterator itqual1;
1870 double tqual=tq.
qualite_triangle(triqual1->get_noeud1()->get_coord(),triqual1->get_noeud2()->get_coord(),triqual1->get_noeud3()->get_coord());
1871 lstqualtri1st.insert(std::pair<double,MG_TRIANGLE*> (tqual,triqual1));
1874 std::multimap<double,MG_TRIANGLE*,std::less<double> >::iterator itqualtri1=lstqualtri1st.begin();
1875 while ((*itqualtri1).first<0.3)
1881 int onedgqtrind1=0;
int onedgqtrind2=0;
int onedgqtrind3=0;
1886 MG_NOEUD* ednd1=segedg->get_noeud1();
1887 MG_NOEUD* ednd2=segedg->get_noeud2();
1894 if (qtrind1==ednds) onedgqtrind1++;
1895 if (qtrind2==ednds) onedgqtrind2++;
1896 if (qtrind3==ednds) onedgqtrind3++;
1899 if (onedgqtrind1==0)
stl_optimize_nd(qtri,qtrind1,3.,search_radius,octree,stloctree);
1900 if (onedgqtrind2==0)
stl_optimize_nd(qtri,qtrind2,3.,search_radius,octree,stloctree);
1901 if (onedgqtrind3==0)
stl_optimize_nd(qtri,qtrind3,3.,search_radius,octree,stloctree);
1902 lstqualtri1st.erase(itqualtri1);
1903 itqualtri1=lstqualtri1st.begin();
1907 std::multimap<double,MG_TRIANGLE*,std::less<double> > lstqualtri2nd;
1908 LISTE_MG_TRIANGLE::iterator itqual2;
1912 double tqual=tq.
qualite_triangle(triqual2->get_noeud1()->get_coord(),triqual2->get_noeud2()->get_coord(),triqual2->get_noeud3()->get_coord());
1913 lstqualtri2nd.insert(std::pair<double,MG_TRIANGLE*> (tqual,triqual2));
1916 std::multimap<double,MG_TRIANGLE*,std::less<double> >::iterator itqualtri2=lstqualtri2nd.begin();
1917 while ((*itqualtri2).first<0.5)
1923 int onedgqtrind1=0;
int onedgqtrind2=0;
int onedgqtrind3=0;
1928 MG_NOEUD* ednd1=segedg->get_noeud1();
1929 MG_NOEUD* ednd2=segedg->get_noeud2();
1936 if (qtrind1==ednds) onedgqtrind1++;
1937 if (qtrind2==ednds) onedgqtrind2++;
1938 if (qtrind3==ednds) onedgqtrind3++;
1941 if (onedgqtrind1==0)
stl_optimize_nd(qtri,qtrind1,3.,search_radius,octree,stloctree);
1942 if (onedgqtrind2==0)
stl_optimize_nd(qtri,qtrind2,3.,search_radius,octree,stloctree);
1943 if (onedgqtrind3==0)
stl_optimize_nd(qtri,qtrind3,3.,search_radius,octree,stloctree);
1944 lstqualtri2nd.erase(itqualtri2);
1945 itqualtri2=lstqualtri2nd.begin();
1965 if (segchktrinb>2 || segchktrinb<1) std::cout<<
"PROBLEM IN TRIANGULATIONNNNNNNNNNNNNN"<<std::endl;
1973 if ((dchktri==NULL) || (trichk==NULL))
return;
1977 double teta=getangle.
get_angle(trichk,dchktri);
1978 teta=teta*180./3.14159265;
1980 if (teta>180.-geo_angle_threshold && teta<geo_angle_threshold+180.)
1997 for(
int irelatedseg2=0;irelatedseg2<othertrianglenode->
get_lien_triangle()->get_nb();irelatedseg2++)
2004 int checkifswpdigisexist=0;
2008 if(segtest->get_noeud1()==
insertnod && segtest->get_noeud2()==othertrianglenode) checkifswpdigisexist++;
2009 if(segtest->get_noeud2()==
insertnod && segtest->get_noeud1()==othertrianglenode) checkifswpdigisexist++;
2012 double anglestltiandswaptri1;
2013 double anglestltiandswaptri2;
2021 if (trichknd1!=segchknd1 && trichknd1!=segchknd2) trichknd=trichknd1;
2022 if (trichknd2!=segchknd1 && trichknd2!=segchknd2) trichknd=trichknd2;
2023 if (trichknd3!=segchknd1 && trichknd3!=segchknd2) trichknd=trichknd3;
2027 double centrnoid[3];
2028 centrnoid[0]=(segchknd1->
get_x()+segchknd2->
get_x())/2.;
2029 centrnoid[1]=(segchknd1->
get_y()+segchknd2->
get_y())/2.;
2030 centrnoid[2]=(segchknd1->
get_z()+segchknd2->
get_z())/2.;
2033 int stltriswtest1nb=lststloctriswtest1.
get_nb();
2034 double stl_rad_search_swdg=0.001;
2035 while(stltriswtest1nb==0)
2037 stloctree.
rechercher(centrnoid[0],centrnoid[1],centrnoid[2],stl_rad_search_swdg,lststloctriswtest1);
2038 stltriswtest1nb=lststloctriswtest1.
get_nb(); stl_rad_search_swdg=1.1*stl_rad_search_swdg;
2044 OT_VECTEUR_3D normavecstlclostri=(vecstlclostri1&vecstlclostri2);
2045 OT_VECTEUR_3D uninormavecstlclostri=normavecstlclostri; uninormavecstlclostri.
norme();
2047 int counterclockwise=0;
2056 if (counterclockwise>0 && clockwise==0)
2079 else if (clockwise>0 && counterclockwise==0)
2106 if(checkifswpdigisexist==0 && anglestltiandswaptri1<3.14159265 && anglestltiandswaptri2<3.14159265)
2108 double pinsphnbnewtri=
inshper_point(othertrianglenode,dchktri);
2111 std::map<double,MG_NOEUD*,std::less<double> > beforeswap;
2112 std::map<double,MG_NOEUD*,std::less<double> > afterswap;
2115 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualnew,dchktri->
get_noeud1()));
2117 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualchek,dchktri->
get_noeud2()));
2119 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap1,
insertnod));
2121 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap2,othertrianglenode));
2122 std::map<double,MG_NOEUD*,std::less<double> >::iterator itbeforeswap=beforeswap.begin();
2123 std::map<double,MG_NOEUD*,std::less<double> >::iterator itafterswap=afterswap.begin();
2125 if (
qualswap>0 && (*itafterswap).first>(*itbeforeswap).first) qualchk=qualchk+1;
2126 if (pinsphnbnewtri<=0.|| pinsphnbothertri<=0.)
2136 int counterclockwise=0;
2146 if (counterclockwise>0 && clockwise==0)
2152 if (clockwise>0 && counterclockwise==0)
2165 (stlsortings).insert(std::pair<double,MG_TRIANGLE*>(trisiz1,triad1));
2167 (stlsortings).insert(std::pair<double,MG_TRIANGLE*>(trisiz2,triad2));
2169 STLSORTMMAP::iterator ite1;
2170 for (ite1= (stlsortings).find(intriarea1);ite1!= (stlsortings).end();ite1++)
2172 if ((*ite1).second==dchktri)
2173 {(stlsortings).erase(ite1); ;
break;}
2176 STLSORTMMAP::iterator ite2;
2177 for (ite2= (stlsortings).find(intriarea2);ite2!= (stlsortings).end();ite2++)
2179 if ((*ite2).second==trichk)
2180 {(stlsortings).erase(ite2);
break;}
2377 double edge_angle_threshold=45.;
2378 double geo_angle_threshold=25.;
2385 if (in==NULL)
affiche((
char*)
"file is not available");
2389 char*
res=fgets(chaine,500,in);
2393 int nb=sscanf(chaine,
"%le %le %le",&x,&y,&z);
2394 if (nb!=-1 && nb!=3)
affiche((
char*)
"Wrong file format");
2395 else if (nb!=-1 && nb==3)
2403 double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
2405 LISTE_MG_NOEUD::iterator it;
2408 if (no->get_x()<xmin) xmin=no->get_x();
2409 if (no->get_y()<ymin) ymin=no->get_y();
2410 if (no->get_z()<zmin) zmin=no->get_z();
2411 if (no->get_x()>xmax) xmax=no->get_x();
2412 if (no->get_y()>ymax) ymax=no->get_y();
2413 if (no->get_z()>zmax) zmax=no->get_z();
2420 double search_radius=0.1*bounbox_diag;
2421 char bboxdiag[1000];
2422 sprintf(bboxdiag,
"the bounding box diagonal is: %lf , and the neighborhood search radius is: %lf ",vec.
get_longueur(),search_radius);
2429 double length=
sqrt(lengthvec*lengthvec);
2431 xmin=average.
get_x()-(length*bxr);ymin=average.
get_y()-(length*bxr);zmin=average.
get_z()-(length*bxr);
2432 xmax=average.
get_x()+(length*bxr);ymax=average.
get_y()+(length*bxr);zmax=average.
get_z()+(length*bxr);
2434 stloctree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
2437 octree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
2438 LISTE_MG_TRIANGLE::iterator itoctrins;
2443 LISTE_MG_SEGMENT::iterator ited;
2447 else if (seged->get_lien_triangle()->get_nb()==2)
2449 MG_TRIANGLE* tri1=seged->get_lien_triangle()->get(0);
2450 MG_TRIANGLE* tri2=seged->get_lien_triangle()->get(1);
2452 double teta=getangle.
get_angle(tri1,tri2);teta=teta*180./3.14159265;
2453 if (teta<=(180.-edge_angle_threshold) || teta>=(edge_angle_threshold+180.))
lstedges.
ajouter(seged);
2457 int pointinsnumber=0;
2458 for (
int ipins=0;ipins<pins.
get_nb();ipins++)
2461 std::cout<<
"insertedpoint NO= "<<pointinsnumber<<std::endl;
2462 int sameinsnd_meshnd=0;
2463 double proximityqual;
2464 double delaunyinsqual;
2465 std::multimap<double,MG_NOEUD*,std::greater<double> > lstqualprxndfinal;
2470 int neitrinb1=lstneitri1.
get_nb();
2474 neitrinb1=lstneitri1.
get_nb();
2475 search_radius=search_radius+0.1*search_radius;
2484 MG_NOEUD* dpnd1=tri01->get_noeud1();
2485 MG_NOEUD* dpnd2=tri01->get_noeud2();
2486 MG_NOEUD* dpnd3=tri01->get_noeud3();
2491 std::multimap< double, MG_NOEUD* , std::less<double> > lstdisproxnde;
2496 for(
int ilstprndelinksegs=0;ilstprndelinksegs<prnde->get_lien_petit_segment()->get_nb();ilstprndelinksegs++)
2497 lstprndelinksegs.
ajouter(prnde->get_lien_petit_segment()->get(ilstprndelinksegs));
2501 for(
MG_SEGMENT* prndelinksegs=lstprndelinksegs.
get_premier(itlstprndelinksegs);prndelinksegs!=NULL;prndelinksegs=lstprndelinksegs.
get_suivant(itlstprndelinksegs))
2505 if(edges==prndelinksegs)
2509 if (prnde->get_x()==p->
get_x() && prnde->get_y()==p->
get_y() && prnde->get_z()==p->
get_z() && prndonedge==0)
2513 sameinsnd_meshnd=sameinsnd_meshnd+1;
2514 std::cout<<
"the same node as insertion"<<std::endl;
2517 else if(prndonedge==0)
2519 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));
2520 lstdisproxnde.insert(std::pair<double, MG_NOEUD*> (dp,prnde));
2523 if( sameinsnd_meshnd==0 && lstdisproxnde.size()>0)
2525 std::multimap< double, MG_NOEUD* , std::less<double> >::iterator itlstdprnd=lstdisproxnde.begin();
2526 double mindis=(*itlstdprnd).first;
2528 double distelorance=1.1;
2530 for (itlstdprnd=lstdisproxnde.begin();itlstdprnd!=lstdisproxnde.end();itlstdprnd++)
2532 if ((*itlstdprnd).first<(distelorance*mindis))
2533 lstprnds.
ajouter((*itlstdprnd).second);
2536 std::multimap<double,MG_NOEUD*,std::less<double> > lstqualtri;
2540 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;
2542 int checkisinspoint=0;
2543 for(
int ipins1=0;ipins1<pins.
get_nb();ipins1++ )
2546 if (checknotinspoint==proxnd)
2547 checkisinspoint=checkisinspoint+1;
2549 if (checkisinspoint==0)
2553 for(
int iptr=0;iptr<proxnd->get_lien_triangle()->get_nb();iptr++)
2555 MG_TRIANGLE* prli=proxnd->get_lien_triangle()->get(iptr);
2563 if(proxnd!=prliseg1nd1 && proxnd!=prliseg1nd2) sgchk=prliseg1;
2564 if(proxnd!=prliseg2nd1 && proxnd!=prliseg2nd2) sgchk=prliseg2;
2565 if(proxnd!=prliseg3nd1 && proxnd!=prliseg3nd2) sgchk=prliseg3;
2568 double insph_swap_chk=1;
2583 if(insph_swap_chk<=0)
2587 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
2588 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
2593 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
2597 else if(prlind2==proxnd)
2599 if(insph_swap_chk<=0)
2603 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
2604 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
2609 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
2612 else if(prlind3==proxnd)
2614 if(insph_swap_chk<=0)
2618 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual1,proxnd));
2619 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual2,proxnd));
2624 lstqualtri.insert(std::pair<double,MG_NOEUD*>(tqual,proxnd));
2630 std::multimap<double,MG_NOEUD*,std::less<double> >::iterator itlstqualtri=lstqualtri.begin();
2631 lstqualprxndfinal.insert(std::pair<double,MG_NOEUD*>((*itlstqualtri).first,(*itlstqualtri).second));
2635 if (lstqualprxndfinal.size()==0)
2639 std::multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstqualprxndfinal=lstqualprxndfinal.begin();
2640 proximityqual=(*itlstqualprxndfinal).first;
2892 if (lstqualprxndfinal.size()>0 && proximityqual>delaunyinsqual)
2894 std::multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstqualprxndfinal=lstqualprxndfinal.begin();
2925 int delonnodiiadd=0;
2926 int removednodiadd=0;
2933 double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
2935 LISTE_MG_NOEUD::iterator it;
2938 if (no->get_x()<xmin) xmin=no->get_x();
2939 if (no->get_y()<ymin) ymin=no->get_y();
2940 if (no->get_z()<zmin) zmin=no->get_z();
2941 if (no->get_x()>xmax) xmax=no->get_x();
2942 if (no->get_y()>ymax) ymax=no->get_y();
2943 if (no->get_z()>zmax) zmax=no->get_z();
2954 double length=
sqrt(lengthvec*lengthvec);
2956 xmin=average.
get_x()-(length*bxr);ymin=average.
get_y()-(length*bxr);zmin=average.
get_z()-(length*bxr);
2957 xmax=average.
get_x()+(length*bxr);ymax=average.
get_y()+(length*bxr);zmax=average.
get_z()+(length*bxr);
2960 stloctree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
2962 octree.
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
2963 LISTE_MG_TRIANGLE::iterator itoctrins;
2971 std::map<MG_NOEUD*,double*> pins;
2973 if (in==NULL)
affiche((
char*)
"file is not available");
2977 char*
res=fgets(chaine,500,in);
2982 int nb=sscanf(chaine,
"%le %le %le %le %le %le",&x,&y,&z,&q1,&q2,&q3);
2986 if (nb!=-1 && nb!=6)
affiche((
char*)
"Wrong file format");
2991 int tstpexistnb=lstneitri_tstpexist.
get_nb();
2992 while(tstpexistnb==0)
2994 octree.
rechercher(x,y,z,3.*search_radius,lstneitri_tstpexist);
2995 tstpexistnb=lstneitri_tstpexist.
get_nb();
2996 search_radius=search_radius+0.1*search_radius;
3004 lstneinodins.
ajouter(tri_tstpexist->get_noeud1());
3005 lstneinodins.
ajouter(tri_tstpexist->get_noeud2());
3006 lstneinodins.
ajouter(tri_tstpexist->get_noeud3());
3013 for(
int igtls=0;igtls<ndaround->get_lien_segment()->get_nb();igtls++)
3014 ndgls.
ajouter(ndaround->get_lien_segment()->get(igtls));
3018 if(sgtls->get_lien_topologie()->get_dimension()<2)
3025 if(ndaround->get_lien_topologie()->get_dimension()<2 || sgltop>0)
3045 double* bc=
new double[3];
3046 bc[0]=q1; bc[1]=q2; bc[2]=q3;
3047 pins.insert(std::pair<MG_NOEUD*,double*> (p,bc));
3606 LISTE_MG_SEGMENT::iterator ited;
3608 {
if (segedg==segchk) edgechk++;
3616 if (trick!=newtri) trichk=trick;
3624 for(
int irelatedseg1=0;irelatedseg1<ndins->
get_lien_triangle()->get_nb();irelatedseg1++)
3631 for(
int irelatedseg2=0;irelatedseg2<othertrianglenode->
get_lien_triangle()->get_nb();irelatedseg2++)
3638 int checkifswpdigisexist=0;
3642 if(segtest->get_noeud1()==ndins && segtest->get_noeud2()==othertrianglenode) checkifswpdigisexist++;
3643 if(segtest->get_noeud2()==ndins && segtest->get_noeud1()==othertrianglenode) checkifswpdigisexist++;
3645 if(checkifswpdigisexist==0)
3647 double pinsphnbnewtri=
inshper_point(othertrianglenode,newtri);
3650 std::map<double,MG_NOEUD*,std::less<double> > beforeswap;
3651 std::map<double,MG_NOEUD*,std::less<double> > afterswap;
3654 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualnew,newtri->
get_noeud1()));
3656 beforeswap.insert(std::pair<double,MG_NOEUD*> (triqualchek,newtri->
get_noeud2()));
3658 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap1,ndins));
3660 afterswap.insert(std::pair<double,MG_NOEUD*>(afterswap2,othertrianglenode));
3661 std::map<double,MG_NOEUD*,std::less<double> >::iterator itbeforeswap=beforeswap.begin();
3662 std::map<double,MG_NOEUD*,std::less<double> >::iterator itafterswap=afterswap.begin();
3664 if (
qualswap>0 && (*itafterswap).first>(*itbeforeswap).first) qualchk=qualchk+1;
3665 if (pinsphnbnewtri<=0.|| pinsphnbothertri<=0. || qualchk>0)
3673 if (trichknd1!=segchknd1 && trichknd1!=segchknd2) trichknd=trichknd1;
3674 if (trichknd2!=segchknd1 && trichknd2!=segchknd2) trichknd=trichknd2;
3675 if (trichknd3!=segchknd1 && trichknd3!=segchknd2) trichknd=trichknd3;
3752 int neitrinb=lstneitri.
get_nb();
3756 neitrinb=lstneitri.
get_nb();
3757 search_radius=search_radius+0.01*search_radius;
3764 lstneighbornds.
ajouter(tri1->get_noeud1());
3765 lstneighbornds.
ajouter(tri1->get_noeud2());
3766 lstneighbornds.
ajouter(tri1->get_noeud3());
3777 norm=lengpnornd*norm;
3778 normale=normale+norm;
3784 std::map<MG_TRIANGLE*,int> ininsphertrilist;
3786 for (
int i=0;i<insphtri.
get_nb();i++)
3826 if (intri==1) ininsphertrilist.insert(std::pair<MG_TRIANGLE*,double>(insphtri.
get(i),tribasval));
3830 std::map<MG_TRIANGLE*,int>::iterator itininsphertrilist;
3831 for(itininsphertrilist=ininsphertrilist.begin();itininsphertrilist!=ininsphertrilist.end();itininsphertrilist++)
3833 int tribasval=(*itininsphertrilist).second;
3839 std::cout<<
"INSIDE INSIDE *********************the insertion point is inside triangleee"<<std::endl;
3885 std::cout<<
" tqual1= "<<tqual1<<
" tqual2= "<<tqual2<<
" tqual3= "<<tqual3<<std::endl;
3906 if (onvert1==1 || onvert2==1 || onvert3==1)
3907 {std::cout<<
"ON vertex ON vertex *********************the insertion point is on the verteces of triangleee"<<std::endl;
3910 if(onvert1==1)ond=ndo1;
3911 if(onvert2==1)ond=ndo2;
3912 if(onvert3==1)ond=ndo3;
3913 std::cout<<
" ond->get_x() "<<ond->
get_x()<<
" ond->get_y() "<<ond->
get_y()<<
" ond->get_z() "<<ond->
get_z()<<std::endl;
3914 std::cout<<
" dpins->get_x() "<<dpins->
get_x()<<
" dpins->get_y() "<<dpins->
get_y()<<
" dpins->get_z() "<<dpins->
get_z()<<std::endl;
3917 std::map<MG_TRIANGLE*,MG_SEGMENT*>addseglst;
3924 for (
int isegadlst=0;isegadlst<deltrilst.
get_nb();isegadlst++)
3930 if (ond!=seg1->
get_noeud1() && ond!=seg1->
get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg1));
3931 else if (ond!=seg2->
get_noeud1() && ond!=seg2->
get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg2));
3932 else if (ond!=seg3->
get_noeud1() && ond!=seg3->
get_noeud2()) addseglst.insert(std::pair<MG_TRIANGLE*,MG_SEGMENT*>(trid,seg3));
3934 std::map<MG_TRIANGLE*,MG_SEGMENT*>::iterator itaddseglst;
3935 for (itaddseglst=addseglst.begin();itaddseglst!=addseglst.end();itaddseglst++)
3957 for(
int itriadsegs=0;itriadsegs<triadsegs.
get_nb();itriadsegs++)
3960 if(triadseg!=segtrans)
3962 for(
int itrioldsegs=0;itrioldsegs<trioldsegs.
get_nb();itrioldsegs++)
3965 if(trioldseg!=segtrans)
3983 for (
int ideletriangle=0;ideletriangle<deltrilst.
get_nb();ideletriangle++)
3989 for (
int iadtris=0;iadtris<lstadtris.
get_nb();iadtris++)
3999 else if(onedge1==1 || onedge2==1 || onedge3==1)
4001 std::cout<<
"ON EDGE EDGE *********************the insertion point is on the verteces of triangleee"<<std::endl;
4007 std::map<MG_SEGMENT*,MG_TRIANGLE*>lstonedtriseg;
4014 if (onedtri1seg1!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg1,onedtri1));
4016 if (onedtri1seg2!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg2,onedtri1));
4018 if (onedtri1seg3!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg3,onedtri1));
4020 if (onedtri2seg1!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri2seg1,onedtri2));
4022 if (onedtri2seg2!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri2seg2,onedtri2));
4024 if (onedtri2seg3!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri2seg3,onedtri2));
4027 triswilldelete.
ajouter(onedtri1);
4028 triswilldelete.
ajouter(onedtri2);
4034 if (onedtri1seg1!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg1,onedtri1));
4036 if (onedtri1seg2!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg2,onedtri1));
4038 if (onedtri1seg3!=onseg) lstonedtriseg.insert(std::pair<MG_SEGMENT*,MG_TRIANGLE*>(onedtri1seg3,onedtri1));
4040 triswilldelete.
ajouter(onedtri1);
4044 std::map<MG_SEGMENT*,MG_TRIANGLE*>::iterator itlstonedtriseg;
4045 for (itlstonedtriseg=lstonedtriseg.begin();itlstonedtriseg!=lstonedtriseg.end();itlstonedtriseg++)
4047 MG_SEGMENT* segcommon=(*itlstonedtriseg).first;
4064 for(
int itriadsegs=0;itriadsegs<triadsegs.
get_nb();itriadsegs++)
4067 if(triadseg!=segcommon)
4080 for (
int itriswilldelete=0;itriswilldelete<triswilldelete.
get_nb();itriswilldelete++)
4085 for (
int iadtris=0;iadtris<lstadtris.
get_nb();iadtris++)
4183 for (
int iadtris=0;iadtris<lstadtris.
get_nb();iadtris++)