45 :
MAILLEUR(false),cadfilename(cadfilenametmp),scanfilename(scanfilenametmp),mergefilename(mergefilenametmp),cadmeshno(cadmeshnotmp),scnmeshno(scnmeshnotmp)
49 :
MAILLEUR(mdd),cadfilename(mdd.cadfilename),scanfilename(mdd.scanfilename),mergefilename(mdd.mergefilename),cadmeshno(mdd.cadmeshno),scnmeshno(mdd.scnmeshno)
58 affiche((
char*)
"merging started");
69 LISTE_MG_NOEUD::iterator itnds;
70 LISTE_MG_SEGMENT::iterator itSeg;
71 LISTE_MG_TRIANGLE::iterator itTri;
75 double x=cadnd->get_x();
76 double y=cadnd->get_y();
77 double z=cadnd->get_z();
103 double x=cadnd->get_x();
104 double y=cadnd->get_y();
105 double z=cadnd->get_z();
135 if(segment->get_noeud1()->get_nouveau_numero()==1 && segment->get_noeud2()->get_nouveau_numero()==1)
137 lst_ndcad.
ajouter(segment->get_noeud1());
138 lst_ndcad.
ajouter(segment->get_noeud2());
155 if(segmnt->get_lien_triangle()->get_nb()==1)
157 if(segmnt->get_noeud1()->get_nouveau_numero()==1 && segmnt->get_noeud2()->get_nouveau_numero()==1)
159 segmnt->get_noeud1()->change_nouveau_numero(3);
160 segmnt->get_noeud2()->change_nouveau_numero(3);
161 bndryseglstcad.
ajouter(segmnt);
163 bndryndlstcad.
ajouter(segmnt->get_noeud1());
164 bndryndlstcad.
ajouter(segmnt->get_noeud2());
165 edgndcad.
ajouter(segmnt->get_noeud1());
166 edgndcad.
ajouter(segmnt->get_noeud2());
168 if(segmnt->get_noeud1()->get_nouveau_numero()==2 && segmnt->get_noeud2()->get_nouveau_numero()==2)
170 segmnt->get_noeud1()->change_nouveau_numero(4);
171 segmnt->get_noeud2()->change_nouveau_numero(4);
172 bndryseglstscan.
ajouter(segmnt);
174 bndryndlstscan.
ajouter(segmnt->get_noeud1());
175 bndryndlstscan.
ajouter(segmnt->get_noeud2());
176 edgndscn.
ajouter(segmnt->get_noeud1());
177 edgndscn.
ajouter(segmnt->get_noeud2());
182 double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
184 LISTE_MG_NOEUD::iterator it;
187 if (no->get_x()<xmin) xmin=no->get_x();
188 if (no->get_y()<ymin) ymin=no->get_y();
189 if (no->get_z()<zmin) zmin=no->get_z();
190 if (no->get_x()>xmax) xmax=no->get_x();
191 if (no->get_y()>ymax) ymax=no->get_y();
192 if (no->get_z()>zmax) zmax=no->get_z();
199 double length=
sqrt(lengthvec*lengthvec);
double bxr=2.1;
200 xmin=average.
get_x()-(length*bxr);ymin=average.
get_y()-(length*bxr);zmin=average.
get_z()-(length*bxr);
201 xmax=average.
get_x()+(length*bxr);ymax=average.
get_y()+(length*bxr);zmax=average.
get_z()+(length*bxr);
210 LISTE_MG_SEGMENT::iterator itseg;
248 bndryndlstscan_afterprox.
ajouter(nd);
270 bndryndlstscan_afterproxseg.
ajouter(nd);
279 int lstndneinb=lstndnei.
get_nb();
284 lstndneinb=lstndnei.
get_nb();
294 double dist=
sqrt(pow(ndclosecad->get_x()-nd->
get_x(),2)+pow(ndclosecad->get_y()-nd->
get_y(),2)+pow(ndclosecad->get_z()-nd->
get_z(),2));
296 if(ndclosecad->get_nouveau_numero()!=3)
299 lstndneinb=lstndnei.
get_nb();
305 std::multimap<double,MG_NOEUD*,std::less<double> > closends;
311 if(ndclosecad->get_nouveau_numero()==3)
313 double dist=
sqrt(pow(ndclosecad->get_x()-nd->
get_x(),2)+pow(ndclosecad->get_y()-nd->
get_y(),2)+pow(ndclosecad->get_z()-nd->
get_z(),2));
314 closends.insert(std::pair<double,MG_NOEUD*> (dist,ndclosecad));
319 for(std::multimap<
double,
MG_NOEUD*,std::less<double> >::iterator itclosends=closends.begin();itclosends!=closends.end();itclosends++)
321 double distancenew=(*itclosends).first;
324 proxnds.
ajouter((*itclosends).second);
340 std::map<MG_SEGMENT*,MG_TRIANGLE*> lstseg_conestprox;
343 for(
int nbsg=0;nbsg<ndprx->get_lien_triangle()->get_nb();nbsg++)
348 MG_TRIANGLE* tripr=ndprx->get_lien_triangle()->get(nbsg);
349 lsttri_conestprox.
ajouter(tripr);
359 lstseg_conestprox.insert(std::pair< MG_SEGMENT*,MG_TRIANGLE* >((tripr->
get_segment1()),tripr));
371 lstseg_conestprox.insert(std::pair< MG_SEGMENT*,MG_TRIANGLE* >((tripr->
get_segment2()),tripr));
383 lstseg_conestprox.insert(std::pair< MG_SEGMENT*,MG_TRIANGLE* >((tripr->
get_segment3()),tripr));
390 for(std::map<MG_SEGMENT*,MG_TRIANGLE*>::iterator itlstseg_conestprox=lstseg_conestprox.begin();itlstseg_conestprox!=lstseg_conestprox.end();itlstseg_conestprox++)
392 MG_SEGMENT* segconctprx=(*itlstseg_conestprox).first;
399 MG_TRIANGLE* trioppose=(*itlstseg_conestprox).second;
417 else if(triorintation>0)
456 int lstneisgnb=lstneisg.
get_nb();
461 lstneisgnb=lstneisg.
get_nb();
469 if(clsgcad->get_noeud1()->get_nouveau_numero()!=3 && clsgcad->get_noeud2()->get_nouveau_numero()!=3)
470 lstasupprimer.
ajouter(clsgcad);
473 OT_VECTEUR_3D vec2(clsgcad->get_noeud1()->get_coord(),clsgcad->get_noeud2()->get_coord());
474 double val1=vec1*vec2;
475 double val2=vec2*vec2;
477 if(val1<0 || val1>val2)
481 lstasupprimer.
ajouter(clsgcad);
496 for (
int i=0;i<lstasupprimer.
get_nb();i++)
505 std::multimap<double,MG_SEGMENT*,std::less<double> > closesegscad;
509 if(clsgcad->get_noeud1()->get_nouveau_numero()!=2 || clsgcad->get_noeud2()->get_nouveau_numero()!=2)
518 OT_VECTEUR_3D vec2(clsgcad->get_noeud1()->get_coord(),clsgcad->get_noeud2()->get_coord());
519 double val1=vec1*vec2;
520 double val2=vec2*vec2;
524 closesegscad.insert(std::pair<double,MG_SEGMENT*>(distns,clsgcad));
528 std::multimap<double,MG_SEGMENT*,std::less<double> >::iterator itclosgs=closesegscad.begin();
558 else if(newtriorient>0)