3 |
|
|
4 |
|
#include "RigidBody.hpp" |
5 |
|
#include "Atom.hpp" |
6 |
+ |
#include "Vector3d.hpp" |
7 |
|
|
8 |
|
|
9 |
+ |
class Vector3dData : public GenericData{ |
10 |
+ |
public: |
11 |
+ |
Vector3d getData() {return vec;} |
12 |
+ |
void setData(const Vector3d& rhs) { vec = rhs;} |
13 |
+ |
private: |
14 |
+ |
Vector3d vec; |
15 |
+ |
|
16 |
+ |
}; |
17 |
+ |
|
18 |
|
//class ConstraintElement is designed to not only provide the interface of StuntDouble, but also |
19 |
|
//neccessary functionality to retrieve old position, old velocity and etc. |
20 |
|
//First of all, those old data should be stored inside StuntDouble. We decide to store it on StuntDouble's |
86 |
|
bool getMoving() {return movingData->getData();} |
87 |
|
void setMoving(bool status) {movingData->setData(status);} |
88 |
|
|
89 |
+ |
//constraint force |
90 |
+ |
void addConsForce(const Vector3d& frc){ |
91 |
+ |
Vector3d tempFrc; |
92 |
+ |
tempFrc = consForceData->getData(); |
93 |
+ |
tempFrc += frc; |
94 |
+ |
consForceData->setData(tempFrc); |
95 |
+ |
} |
96 |
+ |
Vector3d getConsForce() { return consForceData->getData();} |
97 |
+ |
void setConsTorque(const Vector3d& frc) {consForceData->setData(frc);} |
98 |
+ |
|
99 |
+ |
|
100 |
+ |
//constraint torque |
101 |
+ |
void addConsTorque(const Vector3d& trq){ |
102 |
+ |
Vector3d tempTrq; |
103 |
+ |
tempTrq = consTorqueData->getData(); |
104 |
+ |
tempTrq += trq; |
105 |
+ |
consTorqueData->setData(tempTrq); |
106 |
+ |
} |
107 |
+ |
Vector3d getConsTorque() { return consTorqueData->getData();} |
108 |
+ |
void setConsForce(const Vector3d& trq) {consTorqueData->setData(trq);} |
109 |
+ |
|
110 |
+ |
|
111 |
|
virtual void saveOldState() = 0; |
112 |
|
|
113 |
|
protected: |
118 |
|
private: |
119 |
|
BoolData* movedData; |
120 |
|
BoolData* movingData; |
121 |
< |
|
121 |
> |
Vector3dData* consForceData; |
122 |
> |
Vector3dData* consTorqueData; |
123 |
|
}; |
124 |
|
|
125 |
|
|
132 |
|
double a[3][3]; |
133 |
|
double j[3]; |
134 |
|
double q[4]; |
135 |
+ |
double frc[3]; |
136 |
+ |
double trq[3]; |
137 |
|
}; |
138 |
|
|
139 |
|
class ConsAtomData : public GenericData{ |
224 |
|
RigidBody* getRigidBody() { return dynamic_cast<RigidBody*>(refSd);} |
225 |
|
|
226 |
|
virtual void saveOldState(); |
227 |
+ |
|
228 |
+ |
void restoreUnconsStatus(); |
229 |
+ |
|
230 |
|
|
231 |
|
private: |
232 |
|
int consAtomIndex; |
233 |
|
RigidBody* oldRb; |
234 |
+ |
|
235 |
|
}; |
236 |
|
#endif // endif _CONSTRAINTELEMENT_H_ |