 |
MAGiC
V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
|
Aller à la documentation de ce fichier.
36 #pragma package(smart_init)
80 affiche((
char*)
" MAILLAGE 0D du modele entier");
83 if (etape<2)
return OK;
85 for (
int i=0;i<nbnoeudentier;i++)
113 if (etape<3)
return OK;
114 affiche((
char*)
" MAILLAGE 0D du modele bloc");
118 if (etape<4)
return OK;
122 for (
int i=0;i<nbnouveaunoeudbloc;i++)
131 noeud_add.
noeud=noeud;
133 std::pair<double,MG_NOEUD_ADDITIONNEL_ARETE > tmp(t,noeud_add);
134 lst_noeuds_entier[num].insert(tmp);
137 if (etape<5)
return OK;
138 affiche((
char*)
" MAILLAGE 1D du modele entier");
139 for (
int i=0;i<nbareteentier;i++)
142 int nbnoeudcontraint=lst_noeuds_entier[i].size();
145 for (
int j=0;j<numsom;j++)
149 for (
int j=0;j<numsom;j++)
154 for (
int j=0;j<nbnoeudcontraint+1;j++)
158 if (j==0) {n1=noeuddepart;t1=are->
get_tmin();}
else {n1=navant;t1=tavant;}
159 if (j==nbnoeudcontraint) {n2=noeudarrivee;t2=are->
get_tmax();}
162 double *xyz=(*it).second.noeud->get_coord();
170 m1d.
maille(are,t1,n1,t2,n2);
175 delete [] lst_noeuds_entier;
179 for (
int i=0;i<nbnoeudtmp;i++)
182 for (
int i=0;i<nbnoeudtmp;i++)
184 if (etape<6)
return OK;
186 for (
int i=0;i<nbsegment;i++)
204 if (are1ref==NULL) dim1=2;
else dim1=1;
214 if (are2ref==NULL) dim2=2;
else dim2=1;
221 if ((dim1==1) || (dim2==1))
223 if (dim1>1)
continue;
224 if (dim2>1)
continue;
226 if (dim1==1) ref=are1ref;
else ref=are2ref;
255 else if ((dim1==0) && (dim2==0))
261 for (
int i=0 ; i < nb_are ; i++)
287 if (etape<7)
return OK;
288 affiche((
char*)
" MAILLAGE 1D du modele bloc");
291 for (
int i=0;i<nbaretebloc;i++)
297 if (etape<8)
return OK;
301 for (
int i=nbsegmentblocavant;i<nbsegmentbloc;i++)
307 lstsegcontraint[num].
ajouter(seg);
340 if (etape<9)
return OK;
341 affiche((
char*)
" MAILLAGE 2D du modele entier");
342 for (
int i=0;i<nbfaceentier;i++)
348 sprintf(mess,
" Face %i identificateur %lu",i,face->
get_id());
350 m2d.
maille(face,&(lstsegcontraint[i]));
352 delete [] lstsegcontraint;
353 if (etape<10)
return OK;
357 for (
int i=0;i<nbtrientier;i++)
363 lsttricontraint[num].
ajouter(tri);
365 if (etape<11)
return OK;
366 affiche((
char*)
" MAILLAGE 2D du modele bloc");
367 for (
int i=0;i<nbfacebloc;i++)
373 sprintf(mess,
" Face %i identificateur %lu",i,face->
get_id());
375 m2d.
maille(face,NULL,&(lsttricontraint[i]));
377 delete [] lsttricontraint;
378 if (etape<12)
return OK;
379 affiche((
char*)
" MAILLAGE 3D du modele bloc");
381 for (
int i=0;i<nbvolumebloc;i++)
389 if (etape<13)
return OK;
391 LISTE_MG_TETRA::iterator it;
394 if (etape<14)
return OK;
395 affiche((
char*)
" MAILLAGE 3D du modele entier");
401 m3d.
maille(vol,NULL,&lsttetra);
408 octree.
rechercher(xyz[0],xyz[1],xyz[2],1e-5,lst);
410 for (
int i=0;i<nb;i++)
415 double eps=(1./
sqrt(metrique[0])*1e-10);
425 for (
int i=0;i<nbsom;i++)
432 double eps=(1./
sqrt(metrique[0])*1e-6);
443 for (
int i=0 ; i < nb_are ; i++)
453 double eps=(1./
sqrt(metrique[0])*1e-6);
456 if ((*t>arete->
get_tmin()) && (*t<arete->get_tmax()))
470 for (
int i=0;i<nbface;i++)
475 double eps=(1./
sqrt(metrique[0])*1e-6);
476 double uv1[2],xyz1bis[3];
482 double uv2[2],xyz2bis[3];
489 xyz[0]=0.5*(xyz1[0]+xyz2[0]);
490 xyz[1]=0.5*(xyz1[1]+xyz2[1]);
491 xyz[2]=0.5*(xyz1[2]+xyz2[2]);
495 if (dist>0.) {*num=i;
return face;}
508 for (
int i=0;i<nbface;i++)
513 double eps=(1./
sqrt(metrique[0])*1e-6);
514 double uv1[2],xyz1bis[3];
520 double uv2[2],xyz2bis[3];
526 double uv3[2],xyz3bis[3];
543 if (dist>0.) {*num=i;
return face;}
554 double xmin=1e300,ymin=1e300,zmin=1e300;
555 double xmax=-1e300,ymax=-1e300,zmax=-1e300;
558 for (
int i=0;i<nb_noeud;i++)
562 xmin=std::min(xmin,mgnoeud->
get_x());
563 ymin=std::min(ymin,mgnoeud->
get_y());
564 zmin=std::min(zmin,mgnoeud->
get_z());
565 xmax=std::max(xmax,mgnoeud->
get_x());
566 ymax=std::max(ymax,mgnoeud->
get_y());
567 zmax=std::max(zmax,mgnoeud->
get_z());
569 double xdiff=xmax-xmin;
570 double ydiff=ymax-ymin;
571 double zdiff=zmax-zmin;
572 xmin=xmin-0.125*xdiff;
573 xmax=xmax+0.125*xdiff;
574 ymin=ymin-0.125*ydiff;
575 ymax=ymax+0.125*ydiff;
576 zmin=zmin-0.125*zdiff;
577 zmax=zmax+0.125*zdiff;
579 (*octree)->
initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
virtual class MG_COSOMMET * get_cosommet2(void)
virtual int est_periodique(void)=0
virtual void active_affichage(fonction_affiche *fonc)
virtual double get_periode_u(void)=0
MG_SEGMENT * ajouter_mg_segment(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, int origine, double longue=0.0, unsigned long num=0)
virtual void evaluer(double t, double *xyz)
virtual MG_NOEUD * get_noeud2(void)
virtual double get_z(void)
unsigned int get_nb_mg_triangle(void)
class MG_NOEUD * chercher(double *xyz, TPL_OCTREE< MG_NOEUD *, MG_NOEUD * > &octree)
unsigned int get_nb_mg_arete(void)
MG_TETRA * get_premier_tetra(LISTE_MG_TETRA::iterator &it)
class MG_GESTIONNAIRE * gestbloc
class MG_MAILLAGE * maientier
MG_GEOMETRIE_OUTILS otentier
virtual int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual int get_dimension(void)=0
virtual void affiche(char *mess)
MG_SOMMET * get_mg_sommet(unsigned int num)
fonction_affiche * affiche2
class TPL_OCTREE< class MG_NOEUD *, class MG_NOEUD * > * octreebloc
virtual double get_tmin(void)
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
MG_TETRA * get_suivant_tetra(LISTE_MG_TETRA::iterator &it)
virtual void inverser(double *uv, double *xyz, double precision=1e-6)
virtual void inverser(double &t, double *xyz, double precision=1e-6)
class MG_SOMMET * verif_noeud_sur_sommet(double *xyz, class MG_GEOMETRIE *geo)
virtual void inserer(BOITE_3D &boite, A a, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
virtual void change_nom_fichierdbg(char *nom)
class MG_GESTIONNAIRE * gestentier
MG_NOEUD * get_mg_noeud(unsigned int num)
int ajouter_mg_maillage(MG_MAILLAGE *mgmai)
virtual void evaluer(double *uv, double *xyz)
virtual MG_NOEUD * get_noeud1(void)
MG_ARETE * get_mg_arete(unsigned int num)
class MG_GEOMETRIE * geoentier
virtual void rechercher(BOITE_3D &boite, TPL_MAP_ENTITE< A > &liste_entite_trouve, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
class MG_GEOMETRIE * geobloc
virtual void ajouter(X x)
virtual double * get_coord(void)
std::map< double, MG_NOEUD_ADDITIONNEL_ARETE, std::less< double > >::iterator IT_LISTE_NOEUD_ADD_ARETE
MG_GEOMETRIE_OUTILS otbloc
void change_pas_integration(int val)
virtual MG_POINT * get_point(void)
std::map< double, MG_NOEUD_ADDITIONNEL_ARETE, std::less< double > > LISTE_NOEUD_ADD_ARETE
unsigned int get_nb_mg_segment(void)
virtual MG_NOEUD * get_noeud2(void)
MG_FACE * get_mg_face(unsigned int num)
virtual MG_SOMMET * get_sommet(void)
double calcule_distance_contour_face_uv(double *uv, class MG_FACE *face)
double decalage_parametre_u(double par, double dpar)
MG_NOEUD * get_mg_noeudid(unsigned long num)
unsigned int get_nb_mg_face(void)
virtual double get_x(void)
MG_SEGMENT * get_mg_segment(unsigned int num)
virtual void ajouter(X x)
unsigned int get_nb_mg_volume(void)
virtual MG_NOEUD * get_noeud1(void)
MG_TRIANGLE * get_mg_triangle(unsigned int num)
double2 sqrt(double2 &val)
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
MAILLEUR_BLOC(class MG_GESTIONNAIRE *gentier, MG_GESTIONNAIRE *gbloc, int numgeoentier, int numgeobloc, class FCT_TAILLE *fct_taille, bool save)
double calcul_decalage_parametre_v(double par)
virtual double get_periode_v(void)=0
void cree_octree(class MG_MAILLAGE *mai, TPL_OCTREE< class MG_NOEUD *, MG_NOEUD * > **octree)
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual class MG_COURBE * get_courbe(void)
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
virtual MG_NOEUD * get_noeud3(void)
unsigned int get_nb_mg_noeud(void)
double calcul_decalage_parametre_u(double par)
virtual double get_longueur(void) const
virtual double get_periode(void)=0
double decalage_parametre_v(double par, double dpar)
class MG_ARETE * verif_noeud_sur_arete(double *xyz, MG_GEOMETRIE *geo, int *num, double *t)
virtual void deriver(double t, double *xyz)
virtual class MG_COSOMMET * get_cosommet1(void)
MG_GEOMETRIE * get_mg_geometrie(unsigned int num)
MG_FACE * tri_sur_face(class MG_TRIANGLE *tri, MG_GEOMETRIE *geo, int *num)
virtual void initialiser(TPL_LISTE_ENTITE< CONDITION > *lst_entite, int nombre, double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
class TPL_OCTREE< class MG_NOEUD *, class MG_NOEUD * > * octreeentier
virtual double get_tmax(void)
MG_GEOMETRIE * get_mg_geometrieid(unsigned long num)
MG_VOLUME * get_mg_volume(unsigned int num)
class MG_FACE * seg_sur_face(class MG_SEGMENT *seg, MG_GEOMETRIE *geo, int *num)
class MG_MAILLAGE * maibloc
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual void evaluer(double *xyz)=0
virtual MG_SURFACE * get_surface(void)
virtual void evaluer(double *param, double *resultat)=0
unsigned int get_nb_mg_sommet(void)
virtual double get_y(void)
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)