MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
ot_parametres.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// ot_parametres.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:54:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include <stdio.h>
23 #include <string.h>
24 #include <iostream>
25 #include "ot_parametres.h"
26 #include "ot_chaine.h"
27 #include "ot_tenseur.h"
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
41 {
42 }
43 
45 {
46  int taille=nom_param.size();
47  for (int i=0;i<taille;i++)
48  {
49  nom_param.insert(nom_param.end(),mdd.nom_param[i]);
50  valeur_param.insert(valeur_param.end(),mdd.valeur_param[i]);
51  aide_param.insert(aide_param.end(),mdd.aide_param[i]);
52  type_param.insert(type_param.end(),mdd.type_param[i]);
53  }
54 }
55 
56 
58 {
59 }
60 
61 
62 void OT_PARAMETRES::ajouter(std::string chaine,double valeur,int typep,std::string aide)
63 {
64  int res=get_num_param(chaine);
65  if (res==-1)
66  {
67  nom_param.insert(nom_param.end(),chaine);
68  char mess[255];
69  sprintf(mess,"%lf",valeur);
70  valeur_param.insert(valeur_param.end(),mess);
71  aide_param.insert(aide_param.end(),aide);
72  type_param.insert(type_param.end(),typep);
73  }
74  else
75  {
76  char mess[255];
77  sprintf(mess,"%lf",valeur);
78  valeur_param[res]=mess;
79  if (aide.length()>aide_param[res].length()) aide_param[res]=aide;
80  }
81 }
82 
83 void OT_PARAMETRES::ajouter(std::string chaine,OT_TENSEUR& tens, int typep, std::string aide)
84 {
85 int res=get_num_param(chaine);
86 if (res==-1)
87  {
88  nom_param.insert(nom_param.end(),chaine);
89  std::string chainetmp="";
90  int dim1=tens.Get_NbRows();
91  int dim2=tens.Get_NbCols();
92  char mess[255];
93  sprintf(mess,"%d;%d;",dim1,dim2);
94  chainetmp=chainetmp+mess+";";
95  for (int i=0;i<dim1;i++)
96  for (int j=0;j<dim2;j++)
97  {
98  char mess[255];
99  sprintf(mess,"%lf",tens(i,j).get_x());
100  chainetmp=chainetmp+mess+";";
101  }
102  valeur_param.insert(valeur_param.end(),chainetmp);
103  aide_param.insert(aide_param.end(),aide);
104  type_param.insert(type_param.end(),typep);
105  }
106  else
107  {
108  std::string chainetmp="";
109  int dim1=tens.Get_NbRows();
110  int dim2=tens.Get_NbCols();
111  char mess[255];
112  sprintf(mess,"%d;%d;",dim1,dim2);
113  chainetmp=chainetmp+mess+";";
114  for (int i=0;i<dim1;i++)
115  for (int j=0;j<dim2;j++)
116  {
117  char mess[255];
118  sprintf(mess,"%lf",tens(i,j).get_x());
119  chainetmp=chainetmp+mess+";";
120  }
121  if (aide.length()>aide_param[res].length()) aide_param[res]=aide;
122  }
123 }
124 
125 
126 
127 void OT_PARAMETRES::ajouter(std::string chaine,std::vector<double> &valeur,int typep,std::string aide)
128 {
129  int res=get_num_param(chaine);
130  if (res==-1)
131  {
132  nom_param.insert(nom_param.end(),chaine);
133  std::string chainetmp="";
134  for (int i=0;i<valeur.size();i++)
135  {
136  char mess[255];
137  sprintf(mess,"%lf",valeur[i]);
138  chainetmp=chainetmp+mess;
139  if (i!=valeur.size()-1) chainetmp=chainetmp+";" ;
140  }
141  valeur_param.insert(valeur_param.end(),chainetmp);
142  aide_param.insert(aide_param.end(),aide);
143  type_param.insert(type_param.end(),typep);
144  }
145  else
146  {
147  std::string chainetmp="";
148  for (int i=0;i<valeur.size();i++)
149  {
150  char mess[255];
151  sprintf(mess,"%lf",valeur[i]);
152  chainetmp=chainetmp+mess;
153  if (i!=valeur.size()-1) chainetmp=chainetmp+";" ;
154  }
155  valeur_param[res]=chainetmp;
156  if (aide.length()>aide_param[res].length()) aide_param[res]=aide;
157  }
158 }
159 
160 void OT_PARAMETRES::ajouter(std::string chaine,std::vector<std::string> &valeur,int typep,std::string aide)
161 {
162  int res=get_num_param(chaine);
163  if (res==-1)
164  {
165  nom_param.insert(nom_param.end(),chaine);
166  std::string chainetmp="";
167  for (int i=0;i<valeur.size();i++)
168  {
169  char mess[255];
170  sprintf(mess,"%s",valeur[i].c_str());
171  chainetmp=chainetmp+mess;
172  if (i!=valeur.size()-1) chainetmp=chainetmp+";" ;
173  }
174  valeur_param.insert(valeur_param.end(),chainetmp);
175  aide_param.insert(aide_param.end(),aide);
176  type_param.insert(type_param.end(),typep);
177  }
178  else
179  {
180  std::string chainetmp="";
181  for (int i=0;i<valeur.size();i++)
182  {
183  char mess[255];
184  sprintf(mess,"%s",valeur[i].c_str());
185  chainetmp=chainetmp+mess;
186  if (i!=valeur.size()-1) chainetmp=chainetmp+";" ;
187  }
188  valeur_param[res]=chainetmp;
189  if (aide.length()>aide_param[res].length()) aide_param[res]=aide;
190  }
191 }
192 
193 void OT_PARAMETRES::ajouter(std::string chaine,std::string valeurstring,int typep,std::string aide)
194 {
195  int res=get_num_param(chaine);
196  if (res==-1)
197  {
198  nom_param.insert(nom_param.end(),chaine);
199  valeur_param.insert(valeur_param.end(),valeurstring);
200  aide_param.insert(aide_param.end(),aide);
201  type_param.insert(type_param.end(),typep);
202  }
203  else
204  {
205  valeur_param[res]=valeurstring;
206  if (aide.length()>aide_param[res].length()) aide_param[res]=aide;
207  }
208 
209 }
210 
212 {
213  FILE* in=fopen(nom,"wt");
214  int taille=nom_param.size();
215  for (int i=0;i<taille;i++)
216  fprintf(in,"%s = %s //%s\n",nom_param[i].c_str(),valeur_param[i].c_str(),aide_param[i].c_str());
217  taille=params.size();
218  for (int i=0;i<taille;i++)
219  fprintf(in,"-> %s\n",params[i].c_str());
220  fclose(in);
221 }
222 
223 int OT_PARAMETRES::lire(char *nom)
224 {
225  FILE* in=fopen(nom,"rt");
226  if (in==NULL)
227  {
228  std::cerr << "*** OT_PARAMETRES::lire : Erreur de lecture du fichier (" << nom <<") ***" << std::endl;
229  return 0;
230  }
231  while (!feof(in))
232  {
233  char chaine[4000];
234  char* res=fgets(chaine,4000,in);
235  if (!feof(in))
236  {
237  char nom[255],c;
238  char nom2[255];
239  nom2[0]=0;
240  int nb=sscanf(chaine,"%s %s",nom,nom2);
241  if (nb==2)
242  if (strcmp(nom,"->")==0)
243  {
244  lire(nom2);
245  ajouter(nom2);
246  continue;
247  }
248  nb=sscanf(chaine,"%s %c %s",nom,&c,nom2);
249  if (nb!=3) continue;
250  double val;
251  char *aide=strstr(chaine,"//");
252  if (aide==NULL) aide=chaine+strlen(chaine)-1; else aide=aide+2;
253  for (int i=0;i<strlen(aide);i++)
254  if (aide[i]=='\n') aide[i]=0;
255  int num=sscanf(nom2,"%lf",&val);
256  if (num==1) ajouter(nom,nom2,DOUBLE,aide);
257  else ajouter(nom,nom2,STRING,aide);
258  }
259  }
260  fclose(in);
261  return 1; // return OK;
262 }
263 
264 void OT_PARAMETRES::ajouter(std::string chaine)
265 {
266 params.push_back(chaine);
267 }
268 
269 void OT_PARAMETRES::get_valeur(std::string chaine, class OT_TENSEUR& tens)
270 {
271  int taille=nom_param.size();
272  for (int i=0;i<taille;i++)
273  {
274  std::string valtmp=nom_param[i];
275  if (valtmp==chaine)
276  {
277  OT_CHAINE opc;
278  int dim1,dim2;
279  std::vector<std::string> tab=opc.split(valeur_param[i],';');
280  sscanf(tab[0].c_str(),"%d",&dim1);
281  sscanf(tab[1].c_str(),"%d",&dim2);
282  tens.reinit(dim1,dim2);
283  for (int i=0;i<dim1;i++)
284  for (int j=0;j<dim2;j++)
285  {
286  double val;
287  sscanf(tab[i*dim2+j+2].c_str(),"%lf",&val);
288  tens(i,j)=val;
289  }
290 
291  }
292 
293  }
294  return;
295 
296 
297 }
298 
299 
300 double OT_PARAMETRES::get_valeur(std::string chaine,int num)
301 {
302  int taille=nom_param.size();
303  for (int i=0;i<taille;i++)
304  {
305  std::string valtmp=nom_param[i];
306  if (valtmp==chaine)
307  {
308  OT_CHAINE opc;
309  std::vector<std::string> tab=opc.split(valeur_param[i],';');
310  double val;
311  sscanf(tab[num].c_str(),"%lf",&val);
312  return val;
313  }
314 
315  }
316  return 0.;
317 }
318 
319 void OT_PARAMETRES::change_valeur(std::string chaine,double val,int num)
320 {
321  int taille=nom_param.size();
322  for (int i=0;i<taille;i++)
323  {
324  std::string valtmp=nom_param[i];
325  if (valtmp==chaine)
326  {
327  OT_CHAINE opc;
328  std::vector<std::string> tab=opc.split(valeur_param[i],';');
329  char mess[255];
330  sprintf(mess,"%lf",val);
331  tab[num]=mess;
332  valeur_param[i]="";
333  for (int j=0;j<tab.size();j++)
334  {
335  valeur_param[i]=valeur_param[i]+tab[j];
336  if (i!=tab.size()-1)
337  valeur_param[i]=valeur_param[i]+";";
338 
339  }
340  }
341 
342  }
343 }
344 
345 void OT_PARAMETRES::change_valeur(std::string chaine,std::string val,int num)
346 {
347  int taille=nom_param.size();
348  for (int i=0;i<taille;i++)
349  {
350  std::string valtmp=nom_param[i];
351  if (valtmp==chaine)
352  {
353  OT_CHAINE opc;
354  std::vector<std::string> tab=opc.split(valeur_param[i],';');
355  tab[num]=val;
356  valeur_param[i]="";
357  for (int j=0;j<tab.size();j++)
358  {
359  valeur_param[i]=valeur_param[i]+tab[j];
360  if (i!=tab.size()-1)
361  valeur_param[i]=valeur_param[i]+";";
362 
363  }
364  }
365 
366  }
367 }
368 
369 int OT_PARAMETRES::get_num_param(std::string chaine)
370 {
371  int taille=nom_param.size();
372  for (int i=0;i<taille;i++)
373  {
374  std::string valtmp=nom_param[i];
375  if (valtmp==chaine)
376  {
377  return i;
378  }
379 
380  }
381  return -1;
382 }
383 
384 
385 std::string OT_PARAMETRES::get_nom(std::string chaine,int num)
386 {
387  int taille=nom_param.size();
388  for (int i=0;i<taille;i++)
389  {
390  std::string valtmp=nom_param[i];
391  if (valtmp==chaine)
392  {
393  OT_CHAINE opc;
394  std::vector<std::string> tab=opc.split(valeur_param[i],';');
395  return tab[num];
396  }
397 
398  }
399  return "";
400 }
401 
402 int OT_PARAMETRES::get_type(std::string chaine)
403 {
404  int taille=nom_param.size();
405  for (int i=0;i<taille;i++)
406  {
407  std::string valtmp=nom_param[i];
408  if (valtmp==chaine)
409  {
410  return type_param[i];
411  }
412 
413  }
414  return 0;
415 }
417 {
418  double val;
419  sscanf(valeur_param[num].c_str(),"%lf",&val);
420  return val;
421 }
422 
423 std::string OT_PARAMETRES::get_nom(int num)
424 {
425  return nom_param[num];
426 }
427 
429 {
430  return type_param[num];
431 }
433 {
434  return nom_param.size();
435 }
436 
437 
439 {
440  nom_param.clear();
441  valeur_param.clear();
442  aide_param.clear();
443  type_param.clear();
444  params.clear();
445 }
446 
std::vector< std::string > split(std::string chaine, char c)
Definition: ot_chaine.cpp:187
int get_num_param(std::string chaine)
void enregistrer(char *nom)
void change_valeur(std::string chaine, double val, int num=0)
int lire(char *nom)
std::vector< std::string > nom_param
Definition: ot_parametres.h:62
int get_nb(void)
std::string get_nom(std::string chaine, int num=0)
int get_type(std::string chaine)
std::vector< std::string > params
Definition: ot_parametres.h:65
std::vector< std::string > valeur_param
Definition: ot_parametres.h:63
std::vector< int > type_param
Definition: ot_parametres.h:66
void ajouter(std::string chaine, double valeur, int typep, std::string aide="")
void vide(void)
std::vector< std::string > aide_param
Definition: ot_parametres.h:64
double get_valeur(std::string chaine, int num=0)
void reinit(int n, int m)
Definition: ot_tenseur.cpp:141
int Get_NbRows() const
Definition: ot_tenseur.cpp:244
int Get_NbCols() const
Definition: ot_tenseur.cpp:251
#define res(i, j)