Robot Simulator of the Robotics Group for Self-Organization of Control  0.8.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
passivecapsule.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2011 LpzRobots development team *
3  * Georg Martius <georg dot martius at web dot de> *
4  * Frank Guettler <guettler at informatik dot uni-leipzig dot de *
5  * Frank Hesse <frank at nld dot ds dot mpg dot de> *
6  * Ralf Der <ralfder at mis dot mpg dot de> *
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this program; if not, write to the *
20  * Free Software Foundation, Inc., *
21  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
22  * *
23  ***************************************************************************/
24 #ifndef __PASSIVECAPSULE_H
25 #define __PASSIVECAPSULE_H
26 
27 #include <stdio.h>
28 #include <cmath>
29 
30 #include "primitive.h"
31 #include "abstractobstacle.h"
32 
33 namespace lpzrobots {
34 
35 /**
36  * (Passive) capsule as obstacle
37  */
39  float radius;
40  float height;
41  double mass;
42 
43  Capsule* capsule;
44 
45 
46  public:
47 
48  /**
49  * Constructor
50  */
52  float radius=1.0, float height=1.0, double mass = 1.0):
53  AbstractObstacle::AbstractObstacle(odeHandle, osgHandle), radius(radius), height(height), mass(mass) {
54  capsule = new Capsule(radius,height);
55  obst.push_back(capsule);
56  obstacle_exists=false;
57  };
58 
60  }
61 
62  /**
63  * update position of box
64  */
65  virtual void update(){
66  if(capsule) capsule->update();
67  };
68 
69  virtual void setTexture(const std::string& filename){
70  if(capsule) capsule->getOSGPrimitive()->setTexture(filename);
71  }
72 
73  virtual void setPose(const osg::Matrix& pose){
74  this->pose = osg::Matrix::translate(0,0,height*0.5f+radius) * pose;
75  if (!obstacle_exists) {
76  create();
77  }
78  capsule->setPose(pose);
79  };
80 
81  virtual Primitive* getMainPrimitive() const { return capsule; }
82 
83  protected:
84  virtual void create(){
85  capsule->setTextures(getTextures(0));
86  if (mass==0.0) {
88  } else {
89  capsule->init(odeHandle, mass, osgHandle);
90  }
91  obstacle_exists=true;
92  };
93 
94 };
95 
96 }
97 
98 #endif
99 
virtual void setTexture(const std::string &filename)
assigns a texture to the all primitives of this obstactle with repeat -1,-1
Definition: passivecapsule.h:69
Capsule primitive.
Definition: primitive.h:308
Data structure for accessing the ODE.
Definition: odehandle.h:44
OsgHandle osgHandle
Definition: abstractobstacle.h:174
virtual std::vector< TextureDescr > getTextures(int primitive) const
returns the textures of the given primitive
Definition: abstractobstacle.cpp:147
virtual void update()
Updates the OSG nodes with ODE coordinates.
Definition: primitive.cpp:542
Abstract class (interface) for obstacles.
Definition: abstractobstacle.h:46
virtual Primitive * getMainPrimitive() const
return the "main" primitive of the obtactle. The meaning of "main" is arbitrary
Definition: passivecapsule.h:81
Matrixd Matrix
Definition: osgforwarddecl.h:47
virtual void create()
overload this function to create the obstactle. All primitives should go into the list "obst" ...
Definition: passivecapsule.h:84
bool obstacle_exists
Definition: abstractobstacle.h:171
OdeHandle odeHandle
Definition: abstractobstacle.h:173
Data structure for accessing the OpenSceneGraph.
Definition: osghandle.h:79
PassiveCapsule(const OdeHandle &odeHandle, const OsgHandle &osgHandle, float radius=1.0, float height=1.0, double mass=1.0)
Constructor.
Definition: passivecapsule.h:51
Definition: primitive.h:89
virtual void update()
update position of box
Definition: passivecapsule.h:65
~PassiveCapsule()
Definition: passivecapsule.h:59
Definition: primitive.h:89
Interface class for primitives represented in the physical and graphical world.
Definition: primitive.h:80
std::vector< Primitive * > obst
primitives which belong to this obstacle
Definition: abstractobstacle.h:166
virtual void setTextures(const std::vector< TextureDescr > &textures)
assign a set of texture to the surfaces of the primitive
Definition: primitive.cpp:142
osg::Matrix pose
Definition: abstractobstacle.h:170
virtual void setPose(const osg::Matrix &pose)
sets position of the obstacle and creates/recreates obstacle if necessary
Definition: passivecapsule.h:73
virtual void setTexture(const std::string &filename)
assigns a texture to the primitive
Definition: osgprimitive.cpp:101
virtual void setPose(const Pose &pose)
set the pose of the primitive
Definition: primitive.cpp:156
virtual void init(const OdeHandle &odeHandle, double mass, const OsgHandle &osgHandle, char mode=Body|Geom|Draw)
registers primitive in ODE and OSG.
Definition: primitive.cpp:521
(Passive) capsule as obstacle
Definition: passivecapsule.h:38
virtual OSGPrimitive * getOSGPrimitive()
returns the assoziated osg primitive if there or 0
Definition: primitive.cpp:519