link.h
Go to the documentation of this file.
1 #ifndef LINKH
2 #define LINKH
3 
4 #include "vector.h"
5 #include "interval.h"
6 #include "equation.h"
7 #include "cuiksystem.h"
8 #include "box.h"
9 #include "polyhedron.h"
10 #include "plot3d.h"
11 #include "color.h"
12 #include "htransform.h"
13 #include "parameters.h"
14 
15 #include <stdlib.h>
16 
35 #define ROT_REDUNDANCY 0
36 
37 /************************************************************************************/
45 #define INIT_NUM_SHAPES 2
46 
47 /****************************************************************************/
54 #define DLC_R 0.5
55 
62 #define DLC_G 0.5
63 
70 #define DLC_B 0
71 
76 #define LINK_FullRot 0
77 
89 #define LINK_AxisX 1
90 
95 #define LINK_DeformX 2
96 
102 #define LINK_PrismaticX 3
103 
110 #define LINK_NoRot 4
111 
112 /************************************************************************************/
113 
121 #define NO_FORCE 0
122 
138 #define VAR_FORCE 1
139 
157 #define LINEAR_FORCE 2
158 
159 /************************************************************************************/
160 
167 #define IsGroundLink(id) (id==0)
168 
169 
178 typedef struct {
179  char *name;
181  unsigned int type;
183  double s;
187  double c;
218  boolean allSpheres;
223  unsigned int axisID[3];
229  double maxCoord;
236  unsigned int *vID;
237  unsigned int nvID;
240  double extForce[3];
248  double fixedDim[3];
253  boolean varLength;
255  unsigned int forceModel;
261  double stiffness;
265 } Tlink;
266 
267 
276 typedef struct {
277  Tlink *l;
278  unsigned int ndp;
279  double *p;
280 } TLinkConf;
281 
294 boolean EmptyLinkConf(TLinkConf *ld);
295 
307 void GetLinkConfTransform(unsigned int bID,THTransform *t,TLinkConf *ld);
308 
316 void DeleteLinkConf(TLinkConf *ld);
317 
326 void InitLink(char *name,Tlink *l);
327 
345 void InitNoRotLink(char *name,Tlink *l);
346 
368 void InitAxisXLink(char *name,unsigned int forceModel,
369  Tinterval *length,Tinterval *force,Tlink *l);
370 
391 void InitDeformXLink(char *name,unsigned int forceModel,
392  Tinterval *length,double stiffness,
393  Tinterval *rest,Tinterval *force,Tlink *l);
394 
416 void InitPrismaticXLink(char *name,unsigned int forceModel,
417  Tinterval *length,double stiffness,
418  Tinterval *rest,Tinterval *force,Tlink *l);
419 
428 void CopyLink(Tlink *l_dst,Tlink *l_src);
429 
438 void AddBody2Link(Tpolyhedron *b,Tlink *l);
439 
456 void AddForce2Link(double fx,double fy,double fz,Tlink *l);
457 
472 double GetForceOnLink(unsigned int dim,Tlink *l);
473 
484 
498 boolean IsForceEquilibriumLink(Tlink *l);
499 
512 void SetLinkTrans(unsigned int dim,double t,Tlink *l);
513 
528 double GetLinkTrans(unsigned int dim,Tlink *l);
529 
540 
550 double GetLinkStiffness(Tlink *l);
551 
565 
577 
610 void ChangeLinkReferenceFrame(unsigned int r,double **p1,double **p2,Tlink *l);
611 
621 unsigned int LinkNBodies(Tlink *l);
622 
632 unsigned int LinkNAtoms(Tlink *l);
633 
647 Tpolyhedron *GetLinkBody(unsigned int i,Tlink *l);
648 
663 unsigned int GetLinkBodyStatus(unsigned int i,Tlink *l);
664 
673 char *GetLinkName(Tlink *l);
674 
683 unsigned int GetLinkType(Tlink *l);
684 
695 boolean IsVariableLengthLink(Tlink *l);
696 
707 unsigned int GetLinkForceModel(Tlink *l);
708 
724 void GetLinkForceVars(unsigned int r,
725  unsigned int *xID,unsigned int *yID,unsigned int *zID,
726  unsigned int *le,
727  unsigned int *re,unsigned int *f,
728  TCuikSystem *cs,
729  Tlink *l);
730 
759 double LinkPotentialEnergy(unsigned int r,TCuikSystem *cs,double *p,Tlink *l);
760 
776 void LinkForceField(unsigned int r,TCuikSystem *cs,double *p,
777  double *g,Tlink *l);
778 
797 
813 void GetLinkTransform(double *dof,THTransform *t,Tlink *l);
814 
827 
842 void GetLinkConfFromSolution(unsigned int r,TCuikSystem *cs,double *sol,TLinkConf *def,Tlink *l);
843 
857 void GetLinkConfFromDOF(double *dof,TLinkConf *def,Tlink *l);
858 
873 void GenerateSolutionFromLinkConf(unsigned int r,TCuikSystem *cs,TLinkConf *def,double *sol,Tlink *l);
874 
887 void GenerateDOFFromLinkConf(TLinkConf *def,double *dof,Tlink *l);
888 
896 unsigned int NumLinkDOF(Tlink *l);
897 
908 Tinterval *GetLinkDOFRange(unsigned int i,Tlink *l);
909 
923 void GetLinkDOFLabel(unsigned int i,char **n,Tlink *l);
924 
940 boolean IsLinkAllSpheres(Tlink *l);
941 
942 
954 void SetPoseVars(unsigned int r,boolean *vars,TCuikSystem *cs,Tlink *l);
955 
971 unsigned int SetForceVars(unsigned int r,boolean *vars,TCuikSystem *cs,Tlink *l);
972 
989 unsigned int SetForceRelatedVars(unsigned int r,boolean *vars,TCuikSystem *cs,Tlink *l);
990 
1005 void GetLinkPoseSimpVars(Tparameters *p,boolean *sv,TCuikSystem *cs,Tlink *l);
1006 
1031 void GenerateLinkRot(Tparameters *p,unsigned int lID,
1032  TCuikSystem *cs,Tlink *l);
1033 
1046 void FixLinkZToZero(Tparameters *p,unsigned int lID,TCuikSystem *cs,Tlink *l);
1047 
1077 void ApplyLinkRot(Tparameters *pr,double sf,unsigned int sv,double *p,Tequation *eq,
1078  TCuikSystem *cs,boolean groundLink,Tlink *l);
1079 
1110  double sf,unsigned int sv,double *p,Tequation *eq,
1111  TCuikSystem *cs,boolean groundLink,Tlink *l);
1134 void ApplyLinkRotVar(Tparameters *pr,double sf,unsigned int *vID,Tequation *eq,
1135  TCuikSystem *cs,boolean groundLink,Tlink *l);
1136 
1160 void RegenerateLinkSolution(Tparameters *p,TCuikSystem *cs,double *sol,
1161  boolean groundLink,Tlink *l);
1162 
1184  boolean groundLink,Tlink *l);
1185 
1209 void GetTransform2Link(Tparameters *p,TCuikSystem *cs,double *sol,boolean groundLink,
1210  double *trans,THTransform *t,TLinkConf *def,Tlink *l);
1211 
1227  double *sol,boolean groundLink,Tlink *l);
1238 boolean VisibleLink(Tlink *l);
1239 
1254 double GetLinkMaxCoordinate(Tlink *l);
1255 
1268 void LinkPrintAtoms(FILE *f,THTransform *tl,Tlink *l);
1269 
1282 void LinkStoreAtoms(FILE *f,THTransform *tl,Tlink *l);
1283 
1298 void PlotLink(Tplot3d *pt,double axesLength,Tlink *l);
1299 
1300 
1317 
1330 void PrintLink(FILE *f,char *path,char *prefix,Tlink *l);
1331 
1339 void DeleteLink(Tlink *l);
1340 
1341 #endif
Definition of the Tequation type and the associated functions.
A homgeneous transform in R^3.
unsigned int ndp
Definition: link.h:278
Definition of the Tplot3d type and the associated functions.
A polyhedron.
Definition: polyhedron.h:134
A 3D plot.
Definition: plot3d.h:54
An equation.
Definition: equation.h:237
Definition of the Tbox type and the associated functions.
Tlink * l
Definition: link.h:277
A table of parameters.
Definition of the TCuikSystem type and the associated functions.
Definition of the THTransform type and the associated functions.
A sequence of transforms.
Definition: trans_seq.h:319
A generic vector.
Definition: vector.h:227
A box.
Definition: box.h:83
Definition of the Tpolyhedron type and the associated functions.
A cuiksystem, i.e., a set of variables and equations defining a position analysis problem...
Definition: cuiksystem.h:181
Definition of the Tcolor type and the associated functions.
Definition of the Tvector type and the associated functions.
double * p
Definition: link.h:279
Defines a interval.
Definition: interval.h:33
Definition of the Tparameters type and the associated functions.
Link configuration.
Definition: link.h:276
Definition of the Tinterval type and the associated functions.