--- trunk/OOPSE/libmdtools/ConstraintElement.hpp 2004/06/21 18:52:21 1284 +++ trunk/OOPSE/libmdtools/ConstraintElement.hpp 2004/08/23 15:11:36 1452 @@ -3,8 +3,18 @@ #include "RigidBody.hpp" #include "Atom.hpp" +#include "Vector3d.hpp" +class Vector3dData : public GenericData{ + public: + Vector3d getData() {return vec;} + void setData(const Vector3d& rhs) { vec = rhs;} + private: + Vector3d vec; + +}; + //class ConstraintElement is designed to not only provide the interface of StuntDouble, but also //neccessary functionality to retrieve old position, old velocity and etc. //First of all, those old data should be stored inside StuntDouble. We decide to store it on StuntDouble's @@ -76,6 +86,28 @@ class ConstraintElement{ bool getMoving() {return movingData->getData();} void setMoving(bool status) {movingData->setData(status);} + //constraint force + void addConsForce(const Vector3d& frc){ + Vector3d tempFrc; + tempFrc = consForceData->getData(); + tempFrc += frc; + consForceData->setData(tempFrc); + } + Vector3d getConsForce() { return consForceData->getData();} + void setConsTorque(const Vector3d& frc) {consForceData->setData(frc);} + + + //constraint torque + void addConsTorque(const Vector3d& trq){ + Vector3d tempTrq; + tempTrq = consTorqueData->getData(); + tempTrq += trq; + consTorqueData->setData(tempTrq); + } + Vector3d getConsTorque() { return consTorqueData->getData();} + void setConsForce(const Vector3d& trq) {consTorqueData->setData(trq);} + + virtual void saveOldState() = 0; protected: @@ -86,7 +118,8 @@ class ConstraintElement{ private: BoolData* movedData; BoolData* movingData; - + Vector3dData* consForceData; + Vector3dData* consTorqueData; }; @@ -99,6 +132,8 @@ struct ConsAtomInfo{ double a[3][3]; double j[3]; double q[4]; + double frc[3]; + double trq[3]; }; class ConsAtomData : public GenericData{ @@ -189,9 +224,13 @@ class ConstraintRigidBody : public ConstraintElement{ RigidBody* getRigidBody() { return dynamic_cast(refSd);} virtual void saveOldState(); + + void restoreUnconsStatus(); + private: int consAtomIndex; RigidBody* oldRb; + }; #endif // endif _CONSTRAINTELEMENT_H_