ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mecanique/src/mc_gestionnaire.cpp
Revision: 296
Committed: Fri Nov 11 21:55:11 2011 UTC (13 years, 6 months ago) by francois
File size: 6528 byte(s)
Log Message:
Ajout une gestion des materiaux sans reference à un catalogue externe

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mt_gestionnaire.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H23
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #pragma hdrstop
28    
29 francois 296 #include "mc_gestionnaire.h"
30     #include "mc_materiau.h"
31 francois 283 #include "parse.h"
32     #include "pars_argument.h"
33     #include <string.h>
34     //---------------------------------------------------------------------------
35 francois 296 MC_GESTIONNAIRE::MC_GESTIONNAIRE(char* path)
36 francois 283 {
37     chemin=path;
38     lire();
39     }
40    
41 francois 296
42     MC_GESTIONNAIRE::MC_GESTIONNAIRE()
43 francois 283 {
44 francois 296 std::pair<std::string,std::string> tmp("Dx","Déplacement en X");
45     mecaliste.insert(tmp);
46     std::pair<std::string,std::string> tmp2("Dy","Déplacement en Y");
47     mecaliste.insert(tmp2);
48     std::pair<std::string,std::string> tmp3("Dz","Déplacement en z");
49     mecaliste.insert(tmp3);
50     std::pair<std::string,std::string> tmp4("Da","Tous les déplacements");
51     mecaliste.insert(tmp4);
52     std::pair<std::string,std::string> tmp5("Fx","Force concentrée en X");
53     mecaliste.insert(tmp5);
54     std::pair<std::string,std::string> tmp6("Fy","Force concentrée en Y");
55     mecaliste.insert(tmp6);
56     std::pair<std::string,std::string> tmp7("Fz","Force concentrée en Z");
57     mecaliste.insert(tmp7);
58     std::pair<std::string,std::string> tmp8("Px","Pression en x");
59     mecaliste.insert(tmp8);
60     std::pair<std::string,std::string> tmp9("Py","Pression en y");
61     mecaliste.insert(tmp9);
62     std::pair<std::string,std::string> tmp10("Pz","Pression en z");
63     mecaliste.insert(tmp10);
64     std::pair<std::string,std::string> tmp11("Pn","Pression normale");
65     mecaliste.insert(tmp11);
66     std::pair<std::string,std::string> tmp12("Tp","Temperature de reference");
67     mecaliste.insert(tmp12);
68     std::pair<std::string,std::string> tmp13("Cc","Couleur pour algorithme de comparaison");
69     mecaliste.insert(tmp13);
70     std::pair<std::string,std::string> tmp14("Em","Modele d'Young isotrope");
71     mecaliste.insert(tmp14);
72     std::pair<std::string,std::string> tmp15("nu","Coefficient de poisson isotrope");
73     mecaliste.insert(tmp15);
74     std::pair<std::string,std::string> tmp16("Ro","Densité du matériau");
75     mecaliste.insert(tmp16);
76     }
77    
78    
79    
80     int MC_GESTIONNAIRE::existe(std::string code)
81     {
82     std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
83     if (it==mecaliste.end()) return 0;
84     return 1;
85     }
86    
87    
88     std::string MC_GESTIONNAIRE::get_description(std::string code)
89     {
90     std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
91     if (it==mecaliste.end()) return "";
92     return (*it).second;
93     }
94    
95     int MC_GESTIONNAIRE::get_description(std::string &code,std::string &description,int init)
96     {
97     static std::map<std::string,std::string,std::less<std::string> >::iterator it;
98     static int passe=0;
99     if (passe==0) {init=1;passe=1;}
100     if (it==mecaliste.end()) init=1;
101     if (init==1) it=mecaliste.begin();
102     if (init==0) it++;
103     if (it!=mecaliste.end())
104     {
105     code=(*it).first;
106     description=(*it).second;
107     return 1;
108     }
109     return 0;
110     }
111    
112    
113     MC_GESTIONNAIRE::~MC_GESTIONNAIRE()
114     {
115 francois 283 int nb=lst_mat.get_nb();
116     while (nb!=0)
117     {
118 francois 296 MC_MATERIAU* mat=lst_mat.get(0);
119 francois 283 lst_mat.supprimer(mat);
120     delete mat;
121     nb=lst_mat.get_nb();
122     }
123     }
124    
125 francois 296 class MC_MATERIAU* MC_GESTIONNAIRE::ajouter_materiau(std::string nom,std::string descrip)
126 francois 283 {
127 francois 296 MC_MATERIAU* mat=new MC_MATERIAU((char*)nom.c_str(),(char*)descrip.c_str());
128 francois 283 lst_mat.ajouter(mat);
129     return mat;
130     }
131    
132 francois 296 int MC_GESTIONNAIRE::get_nb_materiau()
133 francois 283 {
134     return lst_mat.get_nb();
135     }
136    
137 francois 296 class MC_MATERIAU* MC_GESTIONNAIRE::get_materiau(int num)
138 francois 283 {
139     return lst_mat.get(num);
140     }
141    
142 francois 296 char* MC_GESTIONNAIRE::get_chemin()
143 francois 283 {
144     return (char*)chemin.c_str();
145     }
146    
147    
148 francois 296 void MC_GESTIONNAIRE::lire(void)
149 francois 283 {
150     FILE *in=fopen(chemin.c_str(),"rt");
151     if (in==NULL) return ;
152     PARS_ARGUMENT param[20];
153     PARSE parse;
154     char motcle[255];
155     do
156     {
157     char mess[255];
158     char* res=fgets(mess,255,in);
159     std::string ligne=mess;
160     parse.decode(ligne.c_str(),(char*)"@\n",param);
161     sscanf(param[0].argument[0].c_str(),"%s",motcle);
162     if (strcmp(motcle,"END")!=0)
163     {
164     parse.decode(ligne.c_str(),(char*)"@:@\n",param);
165     sscanf(param[0].argument[0].c_str(),"%s",motcle);
166     if (strcmp(motcle,"MATL")==0)
167     {
168     parse.decode(ligne.c_str(),(char*)"@:@:@:@\n",param);
169 francois 296 MC_MATERIAU* mate=ajouter_materiau(param[1].argument[0],param[3].argument[0].c_str());
170 francois 283 do
171     {
172     char mess[255];
173     char *res=fgets(mess,255,in);
174     std::string ligne=mess;
175     parse.decode(ligne.c_str(),(char*)"@\n",param);
176     sscanf(param[0].argument[0].c_str(),"%s",motcle);
177     if (strcmp(motcle,"ENDMATL")!=0)
178     {
179     char nom[20],uni1[50],uni2[50],uni3[50];
180     double val1,val2,val3;
181     int nb=sscanf(ligne.c_str(),"%s %lf %s %lf %s %lf %s",nom,&val1,uni1,&val2,uni2,&val3,uni3);
182     if (nb==7)
183     mate->ajouter_propriete(nom,val1,uni1,val2,uni2,val3,uni3);
184     else
185     {
186     sscanf(ligne.c_str(),"%s %lf %lf %lf",nom,&val1,&val2,&val3);
187     mate->ajouter_propriete(nom,val1,(char*)"",val2,(char*)"",val3,(char*)"");
188     }
189    
190     }
191     sscanf(param[0].argument[0].c_str(),"%s",motcle);
192     }
193     while (strcmp(motcle,"ENDMATL")!=0);
194     }
195     }
196     sscanf(param[0].argument[0].c_str(),"%s",motcle);
197     }
198     while (strcmp(motcle,"END")!=0);
199     fclose(in);
200     }
201    
202