00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __MESHCUT_MAILLAGE_HXX__
00021 #define __MESHCUT_MAILLAGE_HXX__
00022
00023 #include "MeshCut_Utils.hxx"
00024
00025 #include <string>
00026 #include <vector>
00027 #include <map>
00028
00029 namespace MESHCUT
00030 {
00031 class Maillage
00032 {
00033 public:
00034
00035
00036
00037 std::map<int, std::vector<int> > FAMILLES;
00038 std::map<int, std::vector<TYPE_MAILLE> > FAM_TYPES;
00039
00040
00041 std::map<int, std::vector<int> > FAMILLES_NOEUDS;
00042
00043
00044 std::map<std::string, std::vector<int> > GROUPES_MAILLES;
00045 std::map<std::string, std::vector<int> > GROUPES_NOEUDS;
00046
00047
00048 std::map<int, int> tailleFAMILLES;
00049 std::map<std::string, int> tailleGROUPES;
00050
00051
00052 std::map<TYPE_MAILLE, std::vector<int> > RESIDU;
00053
00054 public:
00055 std::string ID;
00056 int nombreNoeudsMaillage;
00057 int nombreMaillesMaillage;
00058
00059 class Cube *enveloppeMaillage;
00060
00061 int dimensionMaillage;
00062 int dimensionEspace;
00063
00064 char axisname[3*MED_SNAME_SIZE+1];
00065 char unitname[3*MED_SNAME_SIZE+1];
00066
00067 float *XX;
00068 float *YY;
00069 float *ZZ;
00070
00071
00072 std::map<TYPE_MAILLE, int> EFFECTIFS_TYPES;
00073
00074
00075
00076
00077
00078 std::map<TYPE_MAILLE, int*> CNX;
00079
00080
00081 std::map<TYPE_MAILLE, float*> EC;
00082
00083
00084 std::map<std::string, std::map<TYPE_MAILLE, std::vector<int> > > GM;
00085 std::map<std::string, std::vector<int> > GN;
00086
00087
00088
00089
00090
00091
00092
00093 Maillage(std::string _ID);
00094 virtual ~Maillage();
00095
00096 void creationGMtype(TYPE_MAILLE tm, std::string nomGMtype);
00097 void afficheMailles(TYPE_MAILLE tm);
00098 void listeMaillesType(TYPE_MAILLE tm);
00099 void listeMaillesTousTypes();
00100 void listeMaillesParGM();
00101 void listeMaillesGM(std::string nomGM);
00102
00103 void listeNoeuds();
00104 void listeNoeudsGN(std::string nomGN);
00105 void listeNoeudsGNordonne(std::string nomGN);
00106 std::vector<float> G(int i, TYPE_MAILLE tm);
00107 float distanceNoeudMaille(int ngnoeud, int imaille, TYPE_MAILLE tm);
00108 int noeudVoisin(int ngnoeud, int imaille, TYPE_MAILLE tm);
00109 float distanceNoeudNoeud(int ng1, int ng2);
00110
00111
00112 void inputMED(std::string fichierMED);
00113 void outputMED(std::string fichierMED);
00114 void outputMEDold(std::string fichierMED);
00115
00116 void inputHL(std::string fichierHL );
00117 void outputHL(std::string fichierHL);
00118
00119 void outputVRML(std::string ficVRML, float rNoeuds, char *renduAretes, char *renduFaces, float transparence);
00120
00121
00122 int NGLOBAL(TYPE_MAILLE typeMaille, int nlocal);
00123 int NLOCAL(int nglobal, TYPE_MAILLE tm);
00124 TYPE_MAILLE TYPE(int nglobal);
00125 void eliminationMailles(TYPE_MAILLE typeMaille, std::vector<int> listeMaillesSuppr);
00126
00127
00128 void
00129 acquisitionTYPE_inputMED(TYPE_MAILLE TYPE, int nTYPE, med_idt fid, char maa[MED_NAME_SIZE + 1], med_int mdim);
00130
00131
00132
00133
00134 bool NoeudDansHEXA8(int n, int n0, int n1, int n2, int n3, int n4, int n5, int n6, int n7, float epsilon);
00135 bool NoeudDansPENTA6(int n, int n0, int n1, int n2, int n3, int n4, int n5, float epsilon);
00136 bool NoeudDansPYRAM5(int n, int n0, int n1, int n2, int n3, int n4, float epsilon);
00137 bool NoeudDansTETRA4(int n, int n1, int n2, int n3, int n4, float epsilon);
00138 bool NoeudDansQUAD4(int n, int n1, int n2, int n3, int n4, float epsilon);
00139 bool NoeudDansTRIA3(int n, int n1, int n2, int n3, float epsilon);
00140 double volumeTETRA(int n1, int n2, int n3, int n4);
00141 double aireTRIA(int n1, int n2, int n3);
00142 double DET3(int n1, int n2, int n3);
00143 double DET2(int n1, int n2);
00144 void * chargeEnveloppesCubiques(TYPE_MAILLE tm);
00145 void * chargeEnveloppesCarrees(TYPE_MAILLE tm);
00146 bool noeudDeMaille(int ngnoeud, int i, TYPE_MAILLE tm);
00147 bool NoeudDansMaille3D(int n, int i, TYPE_MAILLE tm, float epsilon);
00148 bool NoeudDansMaille2D(int n, int i, TYPE_MAILLE tm, float epsilon);
00149 bool NoeudDansEnveloppeMaille2D(int n, int i, TYPE_MAILLE tm, float epsilon);
00150 bool NoeudDansEnveloppeMaille3D(int n, int i, TYPE_MAILLE tm, float epsilon);
00151 void * afficheEnveloppesCubiques(TYPE_MAILLE tm);
00152 void * afficheEnveloppesCarrees(TYPE_MAILLE tm);
00153
00154 std::vector<int> noeudsGeomCommuns(int i1, TYPE_MAILLE tm1, int i2, TYPE_MAILLE tm2);
00155 void creationGMresidu();
00156
00157 float longueurMoyenne();
00158
00159
00160
00161
00162 };
00163 }
00164
00165 #endif