Program listing for file mechanics/src/joints/NewtonEulerJointR.hpp

Program listing for file mechanics/src/joints/NewtonEulerJointR.hpp#

  1#ifndef NewtonEulerJointRELATION_H
  2#define NewtonEulerJointRELATION_H
  3
  4#include <MechanicsFwd.hpp>
  5#include <SiconosFwd.hpp>
  6#include <NewtonEulerR.hpp>
  7
  8
  9class NewtonEulerJointR : public NewtonEulerR
 10{
 11protected:
 12
 13  ACCEPT_SERIALIZATION(NewtonEulerJointR);
 14
 15
 16  bool _allowSelfCollide;
 17
 18
 19  VectorOfVectors _points;
 20
 21
 22  VectorOfVectors _axes;
 23
 24
 25  bool _absoluteRef;
 26
 27
 28  virtual void _normalDoF(SiconosVector& ans, const BlockVector& q0, int axis,
 29                          bool absoluteRef=true) {}
 30
 31public:
 32
 33
 34  NewtonEulerJointR(): NewtonEulerR()
 35                     , _allowSelfCollide(false)
 36                     , _absoluteRef(true) {};
 37
 38
 39  void setPoint(unsigned int index, SP::SiconosVector point)
 40    { _points[index] = point; }
 41
 42
 43  SP::SiconosVector point(unsigned int index)
 44    { return _points[index]; }
 45
 46
 47  VectorOfVectors& points()
 48    { return _points; }
 49
 50
 51  void setAxis(unsigned int index, SP::SiconosVector axis)
 52    { _axes[index] = axis; }
 53
 54
 55  SP::SiconosVector axis(unsigned int index)
 56    { return _axes[index]; }
 57
 58
 59  VectorOfVectors& axes()
 60    { return _axes; }
 61
 62
 63  void setAbsolute(bool absoluteRef)
 64    { _absoluteRef = absoluteRef; }
 65
 66
 67  bool absolute()
 68    { return _absoluteRef; }
 69
 70
 71  virtual void setBasePositions(SP::SiconosVector q1,
 72                                SP::SiconosVector q2=SP::SiconosVector()) = 0;
 73
 74
 75  virtual void computehDoF(double time, const BlockVector& q0, SiconosVector& y,
 76                           unsigned int axis=0) {}
 77
 78
 79  virtual void computeJachqDoF(double time, Interaction& inter,
 80                               SP::BlockVector q0, SimpleMatrix& jachq,
 81                               unsigned int axis=0) {}
 82
 83
 84  void projectVectorDoF(const SiconosVector& v, const BlockVector& q0,
 85                        SiconosVector& ans, int axis,
 86                        bool absoluteRef=true);
 87
 88  SP::SiconosVector projectVectorDoF(const SiconosVector& v,
 89                                     const BlockVector& q0, int axis,
 90                                     bool absoluteRef=true);
 91
 92
 93  void normalDoF(SiconosVector& ans, const BlockVector& q0, int axis,
 94                 bool absoluteRef=true);
 95
 96  SP::SiconosVector normalDoF(const BlockVector& q0, int axis,
 97                              bool absoluteRef=true);
 98
 99
100  bool allowSelfCollide() { return _allowSelfCollide; }
101
102
103  void setAllowSelfCollide(bool x) { _allowSelfCollide = x; }
104
105
106  virtual unsigned int numberOfConstraints() = 0;
107
108
109  virtual unsigned int numberOfDoF() = 0;
110
111  typedef enum {
112    DOF_TYPE_INVALID=0,
113    DOF_TYPE_LINEAR=1,
114    DOF_TYPE_ANGULAR=2,
115  } DoF_Type;
116
117
118  virtual DoF_Type typeOfDoF(unsigned int axis) = 0;
119
120  virtual ~NewtonEulerJointR() {};
121};
122#endif