|
4 | 4 | #include "Common/Common.h" |
5 | 5 | #define _USE_MATH_DEFINES |
6 | 6 | #include "math.h" |
| 7 | +#include <vector> |
7 | 8 |
|
8 | 9 | namespace PBD |
9 | 10 | { |
@@ -103,77 +104,85 @@ namespace PBD |
103 | 104 | virtual bool solvePositionConstraint(SimulationModel &model); |
104 | 105 | }; |
105 | 106 |
|
106 | | - class TargetPositionMotorSliderJoint : public Constraint |
| 107 | + class MotorJoint: public Constraint |
| 108 | + { |
| 109 | + public: |
| 110 | + Real m_target; |
| 111 | + std::vector<Real> m_targetSequence; |
| 112 | + MotorJoint() : Constraint(2) { m_target = 0.0; } |
| 113 | + |
| 114 | + virtual Real getTarget() const { return m_target; } |
| 115 | + virtual void setTarget(const Real val) { m_target = val; } |
| 116 | + |
| 117 | + virtual std::vector<Real> &getTargetSequence() { return m_targetSequence; } |
| 118 | + virtual void setTargetSequence(const std::vector<Real> &val) { m_targetSequence = val; } |
| 119 | + |
| 120 | + bool getRepeatSequence() const { return m_repeatSequence; } |
| 121 | + void setRepeatSequence(bool val) { m_repeatSequence = val; } |
| 122 | + |
| 123 | + private: |
| 124 | + bool m_repeatSequence; |
| 125 | + }; |
| 126 | + |
| 127 | + class TargetPositionMotorSliderJoint : public MotorJoint |
107 | 128 | { |
108 | 129 | public: |
109 | 130 | static int TYPE_ID; |
110 | 131 | Eigen::Matrix<Real, 3, 14> m_jointInfo; |
111 | | - Real m_targetPosition; |
112 | 132 |
|
113 | | - TargetPositionMotorSliderJoint() : Constraint(2) { m_targetPosition = 0.0; } |
| 133 | + TargetPositionMotorSliderJoint() : MotorJoint() {} |
114 | 134 | virtual int &getTypeId() const { return TYPE_ID; } |
115 | 135 |
|
116 | | - Real getTargetPosition() const { return m_targetPosition; } |
117 | | - void setTargetPosition(const Real val) { m_targetPosition = val; } |
118 | | - |
119 | 136 | bool initConstraint(SimulationModel &model, const unsigned int rbIndex1, const unsigned int rbIndex2, const Vector3r &pos, const Vector3r &axis); |
120 | 137 | virtual bool updateConstraint(SimulationModel &model); |
121 | 138 | virtual bool solvePositionConstraint(SimulationModel &model); |
122 | 139 | }; |
123 | 140 |
|
124 | | - class TargetVelocityMotorSliderJoint : public Constraint |
| 141 | + class TargetVelocityMotorSliderJoint : public MotorJoint |
125 | 142 | { |
126 | 143 | public: |
127 | 144 | static int TYPE_ID; |
128 | 145 | Eigen::Matrix<Real, 3, 14> m_jointInfo; |
129 | | - Real m_targetVelocity; |
130 | 146 |
|
131 | | - TargetVelocityMotorSliderJoint() : Constraint(2) { m_targetVelocity = 0.0; } |
| 147 | + TargetVelocityMotorSliderJoint() : MotorJoint() {} |
132 | 148 | virtual int &getTypeId() const { return TYPE_ID; } |
133 | 149 |
|
134 | | - Real getTargetVelocity() const { return m_targetVelocity; } |
135 | | - void setTargetVelocity(const Real val) { m_targetVelocity = val; } |
136 | | - |
137 | 150 | bool initConstraint(SimulationModel &model, const unsigned int rbIndex1, const unsigned int rbIndex2, const Vector3r &pos, const Vector3r &axis); |
138 | 151 | virtual bool updateConstraint(SimulationModel &model); |
139 | 152 | virtual bool solvePositionConstraint(SimulationModel &model); |
140 | 153 | virtual bool solveVelocityConstraint(SimulationModel &model); |
141 | 154 | }; |
142 | 155 |
|
143 | | - class TargetAngleMotorHingeJoint : public Constraint |
| 156 | + class TargetAngleMotorHingeJoint : public MotorJoint |
144 | 157 | { |
145 | 158 | public: |
146 | 159 | static int TYPE_ID; |
147 | 160 | Eigen::Matrix<Real, 3, 14> m_jointInfo; |
148 | | - Real m_targetAngle; |
149 | | - TargetAngleMotorHingeJoint() : Constraint(2) { m_targetAngle = 0.0; } |
| 161 | + TargetAngleMotorHingeJoint() : MotorJoint() {} |
150 | 162 | virtual int &getTypeId() const { return TYPE_ID; } |
151 | 163 |
|
152 | | - Real getTargetAngle() const { return m_targetAngle; } |
153 | | - void setTargetAngle(const Real val) |
| 164 | + virtual void setTarget(const Real val) |
154 | 165 | { |
155 | 166 | const Real pi = (Real)M_PI; |
156 | | - m_targetAngle = std::max(val, -pi); |
157 | | - m_targetAngle = std::min(m_targetAngle, pi); |
| 167 | + m_target = std::max(val, -pi); |
| 168 | + m_target = std::min(m_target, pi); |
158 | 169 | } |
159 | 170 |
|
160 | 171 | bool initConstraint(SimulationModel &model, const unsigned int rbIndex1, const unsigned int rbIndex2, const Vector3r &pos, const Vector3r &axis); |
161 | 172 | virtual bool updateConstraint(SimulationModel &model); |
162 | 173 | virtual bool solvePositionConstraint(SimulationModel &model); |
| 174 | + private: |
| 175 | + std::vector<Real> m_targetSequence; |
163 | 176 | }; |
164 | 177 |
|
165 | | - class TargetVelocityMotorHingeJoint : public Constraint |
| 178 | + class TargetVelocityMotorHingeJoint : public MotorJoint |
166 | 179 | { |
167 | 180 | public: |
168 | 181 | static int TYPE_ID; |
169 | 182 | Eigen::Matrix<Real, 3, 14> m_jointInfo; |
170 | | - Real m_targetAngularVelocity; |
171 | | - TargetVelocityMotorHingeJoint() : Constraint(2) { m_targetAngularVelocity = 0.0; } |
| 183 | + TargetVelocityMotorHingeJoint() : MotorJoint() {} |
172 | 184 | virtual int &getTypeId() const { return TYPE_ID; } |
173 | 185 |
|
174 | | - Real getTargetAngularVelocity() const { return m_targetAngularVelocity; } |
175 | | - void setTargetAngularVelocity(const Real val) { m_targetAngularVelocity = val; } |
176 | | - |
177 | 186 | bool initConstraint(SimulationModel &model, const unsigned int rbIndex1, const unsigned int rbIndex2, const Vector3r &pos, const Vector3r &axis); |
178 | 187 | virtual bool updateConstraint(SimulationModel &model); |
179 | 188 | virtual bool solvePositionConstraint(SimulationModel &model); |
|
0 commit comments