57 for (
int i=0;i<
tabtri.size();i++)
59 for (
int i=0;i<
tabtet.size();i++)
65 affiche((
char*)
"Initialisation Delaunay");
73 affiche((
char*)
"Création du maillage final");
78 affiche((
char*)
"Optimisation de maillage");
104 std::vector<DLY_TETRA*> tetdetruit;
105 std::vector<DLY_TETRA*> tetcree;
106 std::vector<DLY_TRIANGLE*> basetri;
108 for (
int i=0;i<tetdetruit.size();i++)
113 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin1());
114 if (itv2==tetdetruit.end())
120 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin2());
121 if (itv2==tetdetruit.end())
127 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin3());
128 if (itv2==tetdetruit.end())
134 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin4());
135 if (itv2==tetdetruit.end())
140 int nbtetrabase=tetdetruit.size();
141 for (
int i=0;i<tetdetruit.size();i++)
146 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin1());
147 if (itv2==tetdetruit.end())
153 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin2());
154 if (itv2==tetdetruit.end())
160 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin3());
161 if (itv2==tetdetruit.end())
167 std::vector<DLY_TETRA*>::iterator itv2=find(tetdetruit.begin(),tetdetruit.end(),tettmp->
get_voisin4());
168 if (itv2==tetdetruit.end())
185 for (
int i=0;i<tetdetruit.size();i++)
201 for (
int i=0;i<basetri.size();i++)
203 int frontiere=basetri[i]->est_frontiere();
204 int coplanaire=basetri[i]->est_coplanaire(no->
get_x(),no->
get_y(),no->
get_z());
205 if ((frontiere==0) || ((frontiere==1) && (coplanaire==0)))
207 DLY_TETRA* tetnv=
cree_tetra(basetri[i]->get_noeud1(),basetri[i]->get_noeud2(),basetri[i]->get_noeud3(),no);
208 tetcree.push_back(tetnv);
211 for (
int i=0;i<tetdetruit.size();i++)
212 tetdetruit[i]->ajoute_fils(tetcree);
213 for (
int i=0;i<tetcree.size();i++)
230 std::multimap<double, DLY_SEGMENT*, std::greater<double> >::iterator it=
front_trie.begin();
234 std::vector<double> lstptdecoup;
236 int nbptdecoup=lstptdecoup.size()/3;
237 for (
int j=0;j<nbptdecoup;j++)
239 double x=lstptdecoup[3*j];
240 double y=lstptdecoup[3*j+1];
241 double z=lstptdecoup[3*j+2];
295 for (
int i=0;i<
xnoeud.size();i++)
303 std::pair<const unsigned long long,DLY_SEGMENT*> tmp((
const unsigned long long)seg,seg);
304 std::pair<std::map<const unsigned long long,DLY_SEGMENT*>::iterator,
bool>
res=
front.insert(tmp);
305 if (
res.second==
true)
307 seg->change_critere(crit);
308 std::pair<double,DLY_SEGMENT*> tmp2(crit,seg);
315 std::map<const unsigned long long,DLY_SEGMENT*>::iterator it=
front.find((
const unsigned long long)seg);
316 if (it==
front.end())
return;
318 std::multimap<double,DLY_SEGMENT*,std::greater<double> >::iterator it2=
front_trie.find(seg->get_critere());
319 while ((*it2).second!=seg)
325 std::map<unsigned long long,DLY_TETRA*> tetasupprimercavite;
326 for (
int i=0;i<basetri.size();i++)
336 std::vector<DLY_TETRA*>::iterator it=find(cavite.begin(),cavite.end(),tet);
337 if (it==cavite.end()) exte=tet;
343 for (
int j=0;j<nbbase;j++)
344 if (inte==cavite[j]) base=1;
345 if (base==1)
continue;
358 double ps=vecdir*normal;
363 unsigned long long adresse=(
unsigned long long)inte;
364 tetasupprimercavite.insert(std::pair<unsigned long long,DLY_TETRA*>(adresse,inte));
368 int nbtetasupprimer=tetasupprimercavite.size();
369 if (nbtetasupprimer==0)
return 1;
370 for (std::map<unsigned long long,DLY_TETRA*>::iterator it=tetasupprimercavite.begin();it!=tetasupprimercavite.end();it++)
379 std::vector<DLY_TETRA*>::iterator it=find(cavite.begin(),cavite.end(),tet);
381 std::vector<DLY_TRIANGLE*>::iterator itv=find(basetri.begin(),basetri.end(),tet->
get_triangle1());
382 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle1());
383 else basetri.erase(itv);
384 itv=find(basetri.begin(),basetri.end(),tet->
get_triangle2());
385 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle2());
386 else basetri.erase(itv);
387 itv=find(basetri.begin(),basetri.end(),tet->
get_triangle3());
388 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle3());
389 else basetri.erase(itv);
390 itv=find(basetri.begin(),basetri.end(),tet->
get_triangle4());
391 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle4());
392 else basetri.erase(itv);
397 cavite.push_back(tet);
398 std::vector<DLY_TRIANGLE*>::iterator itv=find(basetri.begin(),basetri.end(),tet->
get_triangle1());
399 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle1());
400 else basetri.erase(itv);
401 itv=find(basetri.begin(),basetri.end(),tet->
get_triangle2());
402 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle2());
403 else basetri.erase(itv);
404 itv=find(basetri.begin(),basetri.end(),tet->
get_triangle3());
405 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle3());
406 else basetri.erase(itv);
407 itv=find(basetri.begin(),basetri.end(),tet->
get_triangle4());
408 if (itv==basetri.end()) basetri.push_back(tet->
get_triangle4());
409 else basetri.erase(itv);
459 sprintf(message,
" Volume espace : %lf",(xmax-xmin)*(ymax-ymin)*(zmax-zmin));
465 for (
int i=0;i<nb;i++)
472 for (
int i=0;i<nb;i++)
479 for (
int i=0;i<nb;i++)
486 for (
int i=0;i<nb;i++)
497 double xyz1[3],xyz2[3],xyz3[3],xyz4[3];
510 tet=
new DLY_TETRA(n1,n2,n3,n4,fabs(qual));
571 if (tet!=NULL)
return tet;
573 if (tet!=NULL)
return tet;
575 if (tet!=NULL)
return tet;
577 if (tet!=NULL)
return tet;
579 if (tet!=NULL)
return tet;
581 if (tet!=NULL)
return tet;
592 for (
int i=0;i<nb;i++)
595 if (tetrep!=NULL)
return tetrep;
604 for (
int i=0;i<tabn->size();i++)
614 for (
int i=0;i<tabe2d->size();i++)
625 for (
int i=0;i<tabe3d->size();i++)
654 LISTE_MG_SEGMENT::iterator it;
659 seg->change_dimension_topo_null(3);
668 if (fabs(vecx*vec)<1e-10) seg->change_dimension_topo_null(2);
669 else if (fabs(vecy*vec)<1e-10) seg->change_dimension_topo_null(2);
670 else if (fabs(vecz*vec)<1e-10) seg->change_dimension_topo_null(2);
675 sprintf(message,
" Volume maille : %lf",vol);
677 nbmaitheo=12.*nbmaitheo/
sqrt(2);
680 sprintf(message,
" Nombre de maille theorique : %d, Nombre de maille pratique %d, erreur %.2lf%%",(
int)nbmaitheo,
mai->
get_nb_mg_tetra(),erreur);
689 for (
int i=0;i<
tabtet.size();i++)