parameters.c
Go to the documentation of this file.
1 #include "parameters.h"
2 
3 #include "error.h"
4 #include "filename.h"
5 #include "defines.h"
6 
7 #include <stdlib.h>
8 #include <strings.h>
9 
31 boolean ReadParameters(char *file,Tparameters *p);
32 
33 /*
34  * Inits a parameter structure and defines all parameters equal to 0
35  */
37 {
38  unsigned int i;
39 
40  for(i=0;i<NPARAMETERS;i++)
41  {
42  (*p)[i].name=NULL;
43  (*p)[i].value=0.0;
44  (*p)[i].timesSet=0;
45  }
46 }
47 
48 /*
49  * Inits a parameter structure from the given file
50  */
52 {
53  Tfilename dp;
54  unsigned int i;
55  boolean ok;
56 
57  InitParameters(p);
58 
59  CreateFileName(_CUIK_SUITE_MAIN_DIR,DEFAULT_PARAMS,NULL,PARAM_EXT,&dp);
61  DeleteFileName(&dp);
62  if (!ok)
63  {
64  /* try to read from a system directory */
65  CreateFileName(_PARAM_PREFIX,DEFAULT_PARAMS,NULL,PARAM_EXT,&dp);
66  if (!ReadParameters(GetFileFullName(&dp),p))
67  Error("Can not find the default parameter file");
68  DeleteFileName(&dp);
69  }
70 
71  /* The default initialization does not count. Reset the 'timesSet' */
72  for(i=0;i<NPARAMETERS;i++)
73  (*p)[i].timesSet=0;
74 
75  /* The existence of the parameter file associated with the
76  problem is compulsatory */
77  if (!ReadParameters(file,p))
78  {
79  char ErrorText[500];
80 
81  sprintf(ErrorText,"File %s does not exists. Using the default parameters.",file);
82  Warning(ErrorText);
83 
84  /* fix the 'timeSet' */
85  for(i=0;i<NPARAMETERS;i++)
86  (*p)[i].timesSet=1;
87  }
88 }
89 
90 /*
91  * Returns the value of parameter number 'n'
92  */
93 double GetParameter(unsigned int n,Tparameters *p)
94 {
95  if (n<NPARAMETERS)
96  {
97  if ((*p)[n].name==NULL)
98  Error("Undefined parameter");
99  else
100  return((*p)[n].value);
101  }
102  else
103  Error("Number of parameter out of range");
104  return(0.0);
105 }
106 
107 /*
108  * Returns the parameter identifier given the parameter name.
109  */
110 unsigned int GetParameterID(char *name,Tparameters *p)
111 {
112  boolean found;
113  unsigned int i;
114 
115  found=FALSE;
116  i=0;
117  while((!found)&&(i<NPARAMETERS))
118  {
119  found=(((*p)[i].name!=NULL)&&(strcasecmp((*p)[i].name,name)==0));
120  if (!found) i++;
121  }
122  if (found)
123  return(i);
124  else
125  return(NO_UINT);
126 }
127 
128 /*
129  * Check is a parameter is already set.
130  */
131 boolean ParameterSet(unsigned int n,Tparameters *p)
132 {
133  return(((*p)[n].name!=NULL)&&((*p)[n].timesSet>0));
134 }
135 
136 /*
137  * Sets a new parameter with identifier 'n', with name 'name', and with value 'v'
138  */
139 void SetParameter(unsigned int n,char *name,double v,Tparameters *p)
140 {
141  if (n<NPARAMETERS)
142  {
143  if ((*p)[n].name!=NULL)
144  {
145  if ((*p)[n].timesSet>0)
146  Warning("Redefined parameter");
147  ChangeParameter(n,v,p);
148  (*p)[n].timesSet++;
149  }
150  else
151  {
152  (*p)[n].name=name;
153  (*p)[n].value=v;
154  (*p)[n].timesSet=1;
155  }
156  }
157  else
158  Error("Number of parameter out of range");
159 }
160 
161 /*
162  * Changes the value of parameter 'n'
163  */
164 void ChangeParameter(unsigned int n,double v,Tparameters *p)
165 {
166  if (n<NPARAMETERS)
167  {
168  if ((*p)[n].name==NULL)
169  Error("Changing a non-defined parameter");
170 
171  (*p)[n].value=v;
172  }
173  else
174  Error("Number of parameter out of range");
175 }
176 
177 /*
178  * Prints a set of parameters.
179  * Only those explicitly used are shown.
180  */
181 void PrintParameters(FILE *f,Tparameters *p)
182 {
183  unsigned int i;
184  unsigned int v;
185 
186  fprintf(f,"%% **************************************************\n");
187  fprintf(f,"%% COMPILATION FLAGS:\n");
188  fprintf(f,"%% SIMPLEX ENGINE: %s\n",(_SIMPLEX_ENGINE==_GLPK?"glpk":(_SIMPLEX_ENGINE==_CLP?"clp":"lp_solve")));
189  fprintf(f,"%% MPI: %u\n",_USE_MPI);
190  fprintf(f,"%% DEBUG: %u\n",_DEBUG);
191  fprintf(f,"%% KDTREE: %u\n",_KDTREE);
192  fprintf(f,"%%\n");
193  fprintf(f,"%% PARAMETERS:\n");
194  for(i=0;i<NPARAMETERS;i++)
195  {
196  if ((*p)[i].name!=NULL)
197  {
198  fprintf(f," %s = ",(*p)[i].name);
199  switch(i)
200  {
201  case CT_REPRESENTATION:
202  v=(unsigned int)(*p)[i].value;
203  switch (v)
204  {
205  case REP_LINKS:
206  fprintf(f,"LINKS");
207  break;
208  case REP_FLINKS:
209  fprintf(f,"FLINKS");
210  break;
211  case REP_QLINKS:
212  fprintf(f,"QLINKS");
213  break;
214  case REP_JOINTS:
215  fprintf(f,"JOINTS");
216  break;
217  default:
218  Error("Wrong value for parameter REPRESENTATION");
219  }
220  break;
221  case CT_SPLIT_TYPE:
222  v=(unsigned int)(*p)[i].value;
223  if (v)
224  fprintf(f,"TRUE");
225  else
226  fprintf(f,"FALSE");
227  break;
228  case CT_SAMPLING:
229  v=(unsigned int)(*p)[i].value;
230  switch (v)
231  {
232  case AMBIENT_SAMPLING:
233  fprintf(f,"AMBIENT_SAMPLING");
234  break;
235  case KDTREE_SAMPLING:
236  fprintf(f,"KDTREE_SAMPLING");
237  break;
238  case TANGENT_SAMPLING:
239  fprintf(f,"TANGENT_SAMPLING");
240  break;
241  default:
242  Error("Wrong value for parameter SAMPLING");
243  }
244  break;
245  case CT_CD_ENGINE:
246  v=(unsigned int)(*p)[i].value;
247  switch (v)
248  {
249  case SOLID:
250  fprintf(f,"SOLID");
251  break;
252  case VCOLLIDE:
253  fprintf(f,"VCOLLIDE");
254  break;
255  case PQP:
256  fprintf(f,"PQP");
257  break;
258  case FCL:
259  fprintf(f,"FCL");
260  break;
261  case C_FCL:
262  fprintf(f,"C_FCL");
263  break;
264  case RIGIDCLL:
265  fprintf(f,"RIGIDCLL");
266  break;
267  case NOCD:
268  fprintf(f,"NONE");
269  break;
270  default:
271  Error("Wrong value for parameter CD_ENGINE");
272  }
273  break;
274  case CT_CUT_X:
275  case CT_CUT_Y:
276  case CT_CUT_Z:
277  if ((*p)[i].value==INF)
278  fprintf(f,"+INF");
279  else
280  {
281  if ((*p)[i].value==-INF)
282  fprintf(f,"-INF");
283  else
284  fprintf(f,"%g",(*p)[i].value);
285  }
286  break;
287  default:
288  fprintf(f,"%g",(*p)[i].value);
289  }
290  fprintf(f,"\n");
291  }
292  }
293 }
294 
296 {
297 }
298 
void InitParametersFromFile(char *file, Tparameters *p)
Constructor from a file.
Definition: parameters.c:51
#define DEFAULT_PARAMS
Default file of parameters.
Definition: parameters.h:185
#define PQP
One of the possible collison detection engines.
Definition: parameters.h:87
#define TANGENT_SAMPLING
One of the possible sampling modes.
Definition: parameters.h:174
#define REP_JOINTS
One of the possible values of the REPRESENTATION parameter.
Definition: parameters.h:60
#define FALSE
FALSE.
Definition: boolean.h:30
#define REP_FLINKS
One of the possible values of the REPRESENTATION parameter.
Definition: parameters.h:37
void DeleteParameters(Tparameters *p)
Destructor.
Definition: parameters.c:295
#define REP_LINKS
One of the possible values of the REPRESENTATION parameter.
Definition: parameters.h:27
#define NOCD
One of the possible collison detection engines.
Definition: parameters.h:141
Data structure to hold the information about the name of a file.
Definition: filename.h:248
void ChangeParameter(unsigned int n, double v, Tparameters *p)
Sets the value for a particular parameter.
Definition: parameters.c:164
#define CT_SPLIT_TYPE
Split type.
Definition: parameters.h:346
void InitParameters(Tparameters *p)
Constructor.
Definition: parameters.c:36
#define CT_SAMPLING
Sampling mode.
Definition: parameters.h:563
Definition of the Tfilename type and the associated functions.
boolean ReadParameters(char *file, Tparameters *p)
Reads a parameter set from a file.
void Error(const char *s)
General error function.
Definition: error.c:80
#define RIGIDCLL
One of the possible collison detection engines.
Definition: parameters.h:132
#define PARAM_EXT
File extension for parameter files.
Definition: filename.h:131
void SetParameter(unsigned int n, char *name, double v, Tparameters *p)
Sets the name and value for a particular parameter.
Definition: parameters.c:139
double GetParameter(unsigned int n, Tparameters *p)
Gets the value for a particular parameter.
Definition: parameters.c:93
Error and warning functions.
void DeleteFileName(Tfilename *fn)
Destructor.
Definition: filename.c:205
#define CT_CUT_X
Limit of domain of the X dimension of 3d plots.
Definition: parameters.h:420
#define FCL
One of the possible collison detection engines.
Definition: parameters.h:96
#define NPARAMETERS
Total number of parameters.
Definition: parameters.h:570
#define CT_CUT_Z
Limit of domain of the Z dimension of 3d plots.
Definition: parameters.h:444
#define KDTREE_SAMPLING
One of the possible sampling modes.
Definition: parameters.h:162
Definitions of constants and macros used in several parts of the cuik library.
#define C_FCL
One of the possible collison detection engines.
Definition: parameters.h:105
#define CT_CD_ENGINE
Collision detection engine.
Definition: parameters.h:542
void Warning(const char *s)
General warning function.
Definition: error.c:116
A table of parameters.
void CreateFileName(char *path, char *name, char *suffix, char *ext, Tfilename *fn)
Constructor.
Definition: filename.c:22
#define VCOLLIDE
One of the possible collison detection engines.
Definition: parameters.h:78
char * GetFileFullName(Tfilename *fn)
Gets the file full name (paht+name+extension).
Definition: filename.c:151
#define CT_REPRESENTATION
Representation.
Definition: parameters.h:215
unsigned int GetParameterID(char *name, Tparameters *p)
Returns the parameter identifier given the paramete name.
Definition: parameters.c:110
#define NO_UINT
Used to denote an identifier that has not been initialized.
Definition: defines.h:435
#define AMBIENT_SAMPLING
One of the possible sampling modes.
Definition: parameters.h:151
#define CT_CUT_Y
Limit of domain of the Y dimension of 3d plots.
Definition: parameters.h:432
#define INF
Infinite.
Definition: defines.h:70
void PrintParameters(FILE *f, Tparameters *p)
Prints a parameter set.
Definition: parameters.c:181
Definition of the Tparameters type and the associated functions.
boolean ParameterSet(unsigned int n, Tparameters *p)
Checks if a parameter is already defined.
Definition: parameters.c:131
#define SOLID
One of the possible collison detection engines.
Definition: parameters.h:69
#define REP_QLINKS
One of the possible values of the REPRESENTATION parameter.
Definition: parameters.h:48