wcs.h
Go to the documentation of this file.
1 #ifndef WCSH
2 #define WCSH
3 
4 #include "boolean.h"
5 #include "parameters.h"
6 
7 #include "cuiksystem.h"
8 #include "world.h"
9 
10 #ifdef _OPENMP
11  #include <omp.h>
12 #endif
13 
30 typedef struct {
31  boolean isCS;
34  Tworld *w;
36 } TAtlasBase;
37 
38 
48 #define CS_WD_EXT "world/cuik"
49 
50 
75 void InitCSWDFromFile(Tparameters *pr,char *name,TAtlasBase *wcs);
76 
89 #define CS_WD_INIT(pr,name,wcs) InitCSWDFromFile(pr,name,wcs)
90 
108 #define CS_WD_FROM_WORLD(ptr,wcs) { (wcs)->isCS=FALSE; (wcs)->cs=NULL; (wcs)->w=ptr; }
109 
127 #define CS_WD_FROM_CUIKSYSTEM(ptr,wcs) { (wcs)->isCS=TRUE; (wcs)->cs=ptr; (wcs)->w=NULL; }
128 
139 #define ON_CUIKSYSTEM(wcs) (wcs)->isCS
140 
141 
150 #define GET_WORLD(wcs) (wcs)->w
151 
160 #define GET_CUIKSYSTEM(wcs) (wcs)->cs
161 
162 
176 #define CS_WD_EVALUATE_SIMP_EQUATIONS(pr,p,r,wcs) if ((wcs)->isCS) EvaluateSimpCSEquations(pr,p,r,(wcs)->cs); else WorldEvaluateSimpEquations(pr,p,r,(wcs)->w);
177 
192 #define CS_WD_EVALUATE_SUBSET_SIMP_EQUATIONS(pr,st,p,r,wcs) if ((wcs)->isCS) EvaluateSubSetSimpCSEquations(pr,st,p,r,(wcs)->cs); else WorldEvaluateSubSetSimpEquations(pr,st,p,r,(wcs)->w);
193 
207 #define CS_WD_SIMP_INEQUALITIES_HOLD(pr,p,wcs) ((wcs)->isCS ? SimpInequalitiesHoldOnPoint(pr,p,(wcs)->cs) : WorldSimpInequalitiesHold(pr,p,(wcs)->w))
208 
209 
223 #define CS_WD_SIMP_INEQUALITIES_ERROR(pr,p,wcs) ((wcs)->isCS ? ErrorInSimpInequalitiesOnPoint(pr,p,(wcs)->cs) : WorldErrorInSimpInequalities(pr,p,(wcs)->w))
224 
238 #define CS_WD_GET_SYSTEM_VARS(sv,wcs) ((wcs)->isCS ? GetCSSystemVars(sv,(wcs)->cs) : GetWorldSystemVars(sv,(wcs)->w))
239 
252 #define CS_WD_GET_SYSTEM_VAR_NAME(id,wcs) ((wcs)->isCS ? GetCSSystemVariableName(id,(wcs)->cs) : GetWorldSystemVarName(id,(wcs)->w))
253 
264 #define CS_WD_GET_NUM_SYSTEM_VARS(wcs) ((wcs)->isCS ? GetCSNumSystemVariables((wcs)->cs) : GetWorldNumSystemVariables((wcs)->w))
265 
277 #define CS_WD_GET_VAR_TOPOLOGY(varID,wcs) ((wcs)->isCS ? GetCSVarTopology(varID,(wcs)->cs) : GetWorldVarTopology(varID,(wcs)->w))
278 
293 #define CS_WD_REGENERATE_ORIGINAL_POINT(pr,p,o,wcs) ((wcs)->isCS ? RegenerateOriginalPoint(pr,p,o,(wcs)->cs) : RegenerateWorldOriginalPoint(pr,p,o,(wcs)->w))
294 
308 #define CS_WD_INIT_CD(pr,mt,wcs) { if (!(wcs)->isCS) InitWorldCD(pr,mt,(wcs)->w); }
309 
326 #ifdef _OPENMP
327 #define CS_WD_TEST_COLLISION(f,pr,all,s,sPrev,wcs) { if (((wcs)->isCS)||(!WorldCanCollide((wcs)->w))) f=FALSE; else { double *oPrev=NULL,*o; \
328  RegenerateWorldOriginalPoint(pr,s,&o,(wcs)->w);if ((sPrev!=NULL)&&(WorldContinuousCD((wcs)->w))) RegenerateWorldOriginalPoint(pr,sPrev,&oPrev,(wcs)->w); \
329  f=MoveAndCheckCD(pr,all,omp_get_thread_num(),o,oPrev,(wcs)->w); \
330  free(o);if (oPrev!=NULL) free(oPrev);} \
331  }
332 #else
333 #define CS_WD_TEST_COLLISION(f,pr,all,s,sPrev,wcs) { if (((wcs)->isCS)||(!WorldCanCollide((wcs)->w))) f=FALSE; else { double *oPrev=NULL,*o; \
334  RegenerateWorldOriginalPoint(pr,s,&o,(wcs)->w);if ((sPrev!=NULL)&&(WorldContinuousCD((wcs)->w))) RegenerateWorldOriginalPoint(pr,sPrev,&oPrev,(wcs)->w); \
335  f=MoveAndCheckCD(pr,all,0,o,oPrev,(wcs)->w); \
336  free(o);if (oPrev!=NULL) free(oPrev);} \
337  }
338 #endif
339 
355 #define CS_WD_IN_COLLISION(f,pr,s,sPrev,wcs) CS_WD_TEST_COLLISION(f,pr,FALSE,s,sPrev,wcs)
356 
357 
373 #define CS_WD_ALL_COLLISIONS(f,pr,s,sPrev,wcs) CS_WD_TEST_COLLISION(f,pr,TRUE,s,sPrev,wcs)
374 
394 #ifdef _OPENMP
395  #define CS_WD_ORIGINAL_IN_COLLISION(pr,o,oPrev,wcs) (((wcs)->isCS)||(!WorldCanCollide((wcs)->w)) ? FALSE : MoveAndCheckCD(pr,FALSE,omp_get_thread_num(),o,oPrev,(wcs)->w))
396 #else
397  #define CS_WD_ORIGINAL_IN_COLLISION(pr,o,oPrev,wcs) (((wcs)->isCS)||(!WorldCanCollide((wcs)->w)) ? FALSE : MoveAndCheckCD(pr,FALSE,0,o,oPrev,(wcs)->w))
398 #endif
399 
408 #define CS_WD_COST_PTR(wcs) ((wcs)->isCS ? (void *)((wcs)->cs) : (void *)((wcs)->w))
409 
418 #define CS_WD_COST_FN(wcs) ((wcs)->isCS ? EvaluateCSCost : EvaluateWorldCost)
419 
436 #define CS_WD_COST(pr,simp,p,wcs) ((wcs)->isCS ? EvaluateCSCost(pr,simp,p,(void *)((wcs)->cs)) : EvaluateWorldCost(pr,simp,p,(void *)((wcs)->w)))
437 
450 #define CS_WD_GET_SIMP_TOPOLOGY(pr,tp,wcs) ((wcs)->isCS ? GetSimpCSTopology(pr,tp,(wcs)->cs) : GetWorldSimpTopology(pr,tp,(wcs)->w))
451 
464 #define CS_WD_GET_TOPOLOGY(pr,tp,wcs) ((wcs)->isCS ? GetCSTopology(pr,tp,(wcs)->cs) : GetWorldTopology(pr,tp,(wcs)->w))
465 
480 #define CS_WD_REGENERATE_SOLUTION_POINT(pr,p,r,wcs) ((wcs)->isCS ? RegenerateSolutionPoint(pr,p,r,(wcs)->cs) : RegenerateWorldSolutionPoint(pr,p,r,(wcs)->w))
481 
495 #define CS_WD_GENERATE_SIMPLIFIED_POINT(pr,p,r,wcs) ((wcs)->isCS ? GenerateSimplifiedPoint(pr,p,r,(wcs)->cs) : WorldGenerateSimplifiedPoint(pr,p,r,(wcs)->w))
496 
509 #define CS_WD_ERROR_IN_SIMP_EQUATIONS(pr,p,wcs) ((wcs)->isCS ? ErrorInSimpCSEquations(pr,p,(wcs)->cs) : WorldErrorInSimpEquations(pr,p,(wcs)->w))
510 
525 #define CS_WD_ERROR_IN_EQUATIONS(p,wcs) ((wcs)->isCS ? ErrorInCSEquations(p,(wcs)->cs) : WorldErrorInEquations(p,(wcs)->w))
526 
539 #define CS_WD_GENERATE_SIMP_INITIAL_BOX(pr,b,wcs) { if ((wcs)->isCS) GenerateSimpInitialBox(pr,b,(wcs)->cs); else GetWorldSimpInitialBox(pr,b,(wcs)->w); }
540 
553 #define CS_WD_GET_SIMP_JACOBIAN(pr,J,wcs) { if ((wcs)->isCS) GetSimpCSJacobian(pr,J,(wcs)->cs); else GetWorldSimpJacobian(pr,J,(wcs)->w); }
554 
565 #define CS_WD_MANIFOLD_DIMENSION(pr,p,wcs) ((wcs)->isCS ? ManifoldDimension(pr,p,(wcs)->cs) : WorldManifoldDimension(pr,p,(wcs)->w))
566 
567 
580 #define CS_WD_NEWTON_IN_SIMP(pr,p,wcs) ((wcs)->isCS ? CuikNewtonSimp(pr,p,(wcs)->cs) : WorldSimpCuikNewton(pr,p,(wcs)->w))
581 
592 #define CS_WD_DELETE(wcs) { if ((wcs)->isCS) { DeleteCuikSystem((wcs)->cs); free((wcs)->cs); } else { DeleteWorld((wcs)->w); free((wcs)->w); } }
593 
594 #endif
Definition of the boolean type.
boolean isCS
Definition: wcs.h:31
void InitCSWDFromFile(Tparameters *pr, char *name, TAtlasBase *wcs)
Initializes a world or a CuikSystem structre.
Definition: chart.c:618
All the necessary information to generate equations for mechanisms.
Definition: world.h:229
Definition of the Tworld type and the associated functions.
TCuikSystem * cs
Definition: wcs.h:32
Tworld * w
Definition: wcs.h:34
A table of parameters.
Definition of the TCuikSystem type and the associated functions.
Type defining the equations on which the atlas is defined.
Definition: wcs.h:30
A cuiksystem, i.e., a set of variables and equations defining a position analysis problem...
Definition: cuiksystem.h:181
Definition of the Tparameters type and the associated functions.