7 #ifndef DYNAMICS2D_ENGINE_H
8 #define DYNAMICS2D_ENGINE_H
11 class CDynamics2DEngine;
12 class CDynamics2DModel;
13 class CGripperEquippedEntity;
14 class CEmbodiedEntity;
17 #include <argos3/core/simulator/entity/controllable_entity.h>
18 #include <argos3/core/simulator/physics_engine/physics_engine.h>
19 #include <argos3/plugins/simulator/physics_engines/dynamics2d/chipmunk-physics/include/chipmunk.h>
71 const CRay3& c_ray)
const;
74 return m_fBoxLinearFriction;
78 return m_fBoxAngularFriction;
82 return m_fCylinderLinearFriction;
86 return m_fCylinderAngularFriction;
98 return m_ptGroundBody;
106 return cpSpaceGetDamping(m_ptSpace);
110 cpSpaceSetDamping(m_ptSpace, f_damping);
114 return CVector2(m_ptSpace->gravity.x, m_ptSpace->gravity.y);
118 m_ptSpace->gravity = cpv(c_gravity.
GetX(), c_gravity.
GetY());
123 const cpBody* pt_body);
134 cpFloat m_fBoxLinearFriction;
135 cpFloat m_fBoxAngularFriction;
136 cpFloat m_fCylinderLinearFriction;
137 cpFloat m_fCylinderAngularFriction;
139 cpBody* m_ptGroundBody;
143 std::map<std::string, CDynamics2DModel*> m_tPhysicsModels;
150 template <
typename ACTION>
166 #define REGISTER_DYNAMICS2D_OPERATION(ACTION, OPERATION, ENTITY) \
167 REGISTER_ENTITY_OPERATION(ACTION, CDynamics2DEngine, OPERATION, SOperationOutcome, ENTITY);
169 #define REGISTER_STANDARD_DYNAMICS2D_OPERATION_ADD_ENTITY(SPACE_ENTITY, DYN2D_MODEL) \
170 class CDynamics2DOperationAdd ## SPACE_ENTITY : public CDynamics2DOperationAddEntity { \
172 CDynamics2DOperationAdd ## SPACE_ENTITY() {} \
173 virtual ~CDynamics2DOperationAdd ## SPACE_ENTITY() {} \
174 SOperationOutcome ApplyTo(CDynamics2DEngine& c_engine, \
175 SPACE_ENTITY& c_entity) { \
176 DYN2D_MODEL* pcPhysModel = new DYN2D_MODEL(c_engine, \
178 c_engine.AddPhysicsModel(c_entity.GetId(), \
181 GetComponent<CEmbodiedEntity>("body"). \
182 AddPhysicsModel(c_engine.GetId(), *pcPhysModel); \
183 return SOperationOutcome(true); \
186 REGISTER_DYNAMICS2D_OPERATION(CDynamics2DOperationAddEntity, \
187 CDynamics2DOperationAdd ## SPACE_ENTITY, \
190 #define REGISTER_STANDARD_DYNAMICS2D_OPERATION_REMOVE_ENTITY(SPACE_ENTITY) \
191 class CDynamics2DOperationRemove ## SPACE_ENTITY : public CDynamics2DOperationRemoveEntity { \
193 CDynamics2DOperationRemove ## SPACE_ENTITY() {} \
194 virtual ~CDynamics2DOperationRemove ## SPACE_ENTITY() {} \
195 SOperationOutcome ApplyTo(CDynamics2DEngine& c_engine, \
196 SPACE_ENTITY& c_entity) { \
197 c_engine.RemovePhysicsModel(c_entity.GetId()); \
199 GetComponent<CEmbodiedEntity>("body"). \
200 RemovePhysicsModel(c_engine.GetId()); \
201 return SOperationOutcome(true); \
204 REGISTER_DYNAMICS2D_OPERATION(CDynamics2DOperationRemoveEntity, \
205 CDynamics2DOperationRemove ## SPACE_ENTITY, \
208 #define REGISTER_STANDARD_DYNAMICS2D_OPERATIONS_ON_ENTITY(SPACE_ENTITY, DYN2D_ENTITY) \
209 REGISTER_STANDARD_DYNAMICS2D_OPERATION_ADD_ENTITY(SPACE_ENTITY, DYN2D_ENTITY) \
210 REGISTER_STANDARD_DYNAMICS2D_OPERATION_REMOVE_ENTITY(SPACE_ENTITY)
CGripperEquippedEntity & GripperEntity
float Real
Collects all ARGoS code.
virtual ~CDynamics2DOperation()
Real GetX() const
Returns the x coordinate of this vector.
virtual ~CDynamics2DOperationRemoveEntity()
virtual ~CDynamics2DOperationAddEntity()
cpConstraint * GripConstraint
virtual void CheckIntersectionWithRay(TEmbodiedEntityIntersectionData &t_data, const CRay3 &c_ray) const
Check which objects in this engine intersect the given ray.
ticpp::Element TConfigurationNode
The ARGoS configuration XML node.
cpFloat GetBoxLinearFriction() const
Real GetY() const
Returns the y coordinate of this vector.
cpFloat GetCylinderAngularFriction() const
virtual void Destroy()
Undoes whatever was done by Init().
std::vector< SEmbodiedEntityIntersectionItem > TEmbodiedEntityIntersectionData
virtual size_t GetNumPhysicsModels()
CVector2 GetGravity() const
void SetDamping(Real f_damping)
virtual ~CDynamics2DEngine()
cpSpace * GetPhysicsSpace()
cpFloat GetCylinderLinearFriction() const
void RemovePhysicsModel(const std::string &str_id)
The base class for models in the dynamics 2D engine.
const cpSpace * GetPhysicsSpace() const
void OrientationPhysicsToSpace(CQuaternion &c_new_orient, cpBody *pt_body)
~SDynamics2DEngineGripperData()
SDynamics2DEngineGripperData(CDynamics2DEngine &c_engine, CGripperEquippedEntity &c_entity, cpVect t_anchor)
The basic operation to be stored in the vtable.
virtual void Reset()
Resets the resource.
Real GetElevation() const
void SetGravity(const CVector2 &c_gravity)
virtual bool RemoveEntity(CEntity &c_entity)
Removes an entity from the physics engine.
The namespace containing all the ARGoS related code.
std::map< std::string, CControllableEntity * > TMap
A map of controllable entities, indexed by id.
virtual void Init(TConfigurationNode &t_tree)
Initializes the resource.
cpFloat GetBoxAngularFriction() const
void AddPhysicsModel(const std::string &str_id, CDynamics2DModel &c_model)
An entity that stores the state of a robot gripper.
virtual bool AddEntity(CEntity &c_entity)
Adds an entity to the physics engine.
CDynamics2DEngine & Engine
void PositionPhysicsToSpace(CVector3 &c_new_pos, const CVector3 &c_original_pos, const cpBody *pt_body)