00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
#ifndef __PASSIVEBOX_H
00051
#define __PASSIVEBOX_H
00052
00053
#include <stdio.h>
00054
#include <math.h>
00055
00056
#include "primitive.h"
00057
#include "abstractobstacle.h"
00058
00059
namespace lpzrobots {
00060
00061
00062
00063
00064 class PassiveBox :
public AbstractObstacle{
00065 osg::Vec3 dimension;
00066 double mass;
00067 int texture;
00068
00069
00070 Box*
box;
00071
00072
00073
public:
00074
00075
00076
00077
00078 PassiveBox(
const OdeHandle& odeHandle,
const OsgHandle& osgHandle,
00079
const osg::Vec3& dimension =
osg::Vec3(1.0, 1.0, 1.0),
double mass = 1.0):
00080
AbstractObstacle::
AbstractObstacle(odeHandle, osgHandle),
dimension(
dimension), mass(mass) {
00081
box=0;
00082 obstacle_exists=
false;
00083 };
00084
00085 ~PassiveBox(){
00086
if(
box)
delete box;
00087 }
00088
00089
00090
00091
00092 virtual void update(){
00093
if(
box)
box->
update();
00094 };
00095
00096 virtual void setTexture(
const std::string& filename){
00097
if(
box)
box->
getOSGPrimitive()->
setTexture(filename);
00098 }
00099
00100 virtual void setPose(
const osg::Matrix& pose){
00101 this->pose = osg::Matrix::translate(0,0,
dimension.z()/2) * pose;
00102
if (obstacle_exists){
00103
destroy();
00104 }
00105
create();
00106 };
00107
00108 virtual Primitive*
getMainPrimitive()
const {
return box; }
00109
00110
protected:
00111 virtual void create(){
00112
box =
new Box(
dimension.x(),
dimension.y(),
dimension.z());
00113
box->
init(odeHandle,
mass, osgHandle);
00114
osg::Vec3 pos=pose.getTrans();
00115
box->
setPosition(pos);
00116
00117 obstacle_exists=
true;
00118 };
00119
00120 virtual void destroy(){
00121
if(
box)
delete box;
00122 obstacle_exists=
false;
00123 };
00124
00125 };
00126
00127 }
00128
00129
#endif
00130