changed add<Object>() methods to take refptr objects as arguments

git-svn-id: svn://anubis/misc/OdeWorld@198 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
josh 2009-10-26 03:20:40 +00:00
parent 71788d0707
commit bee7a098bc
2 changed files with 39 additions and 36 deletions

View File

@ -249,71 +249,73 @@ dGeomID OdeWorld::Object::cloneGeom(dGeomID geom, dBodyID body)
return id;
}
bool OdeWorld::Object::addCube(const vector<float> args)
bool OdeWorld::Object::addCube(refptr< std::vector<float> > args)
{
if (args.size() != 9)
if (args->size() != 9)
return false;
dGeomID id = dCreateBox(0,
m_scale * args[0],
m_scale * args[1],
m_scale * args[2]);
m_scale * (*args)[0],
m_scale * (*args)[1],
m_scale * (*args)[2]);
dMass mass;
dMassSetBox(&mass, 1.0,
m_scale * args[0],
m_scale * args[1],
m_scale * args[2]);
m_scale * (*args)[0],
m_scale * (*args)[1],
m_scale * (*args)[2]);
setupGeom(id, &mass,
args[3], args[4], args[5],
args[6], args[7], args[8]);
(*args)[3], (*args)[4], (*args)[5],
(*args)[6], (*args)[7], (*args)[8]);
return true;
}
bool OdeWorld::Object::addSphere(const vector<float> args)
bool OdeWorld::Object::addSphere(refptr< std::vector<float> > args)
{
if (args.size() != 4)
if (args->size() != 4)
return false;
dGeomID id = dCreateSphere(0, m_scale * args[0]);
dGeomID id = dCreateSphere(0, m_scale * (*args)[0]);
dMass mass;
dMassSetSphere(&mass, 1.0, m_scale * args[0]);
dMassSetSphere(&mass, 1.0, m_scale * (*args)[0]);
setupGeom(id, &mass,
args[1], args[2], args[3],
(*args)[1], (*args)[2], (*args)[3],
0.0, 0.0, 0.0);
return true;
}
bool OdeWorld::Object::addCylinder(const vector<float> args)
bool OdeWorld::Object::addCylinder(refptr< std::vector<float> > args)
{
if (args.size() != 8)
if (args->size() != 8)
return false;
dGeomID id = dCreateCylinder(0, m_scale * args[0], m_scale * args[1]);
dGeomID id = dCreateCylinder(0, m_scale * (*args)[0], m_scale * (*args)[1]);
dMass mass;
dMassSetCylinder(&mass, 1.0, 3, m_scale * args[0], m_scale * args[1]);
dMassSetCylinder(&mass, 1.0, 3, m_scale * (*args)[0], m_scale * (*args)[1]);
setupGeom(id, &mass,
args[2], args[3], args[4],
args[5], args[6], args[7]);
(*args)[2], (*args)[3], (*args)[4],
(*args)[5], (*args)[6], (*args)[7]);
return true;
}
bool OdeWorld::Object::addCCylinder(const vector<float> args)
bool OdeWorld::Object::addCCylinder(refptr< std::vector<float> > args)
{
if (args.size() != 8)
if (args->size() != 8)
return false;
dGeomID id = dCreateCCylinder(0, m_scale * args[0], m_scale * args[1]);
dGeomID id = dCreateCCylinder(0,
m_scale * (*args)[0], m_scale * (*args)[1]);
dMass mass;
dMassSetCappedCylinder(&mass, 1.0, 3, m_scale * args[0], m_scale * args[1]);
dMassSetCappedCylinder(&mass, 1.0, 3, m_scale * (*args)[0],
m_scale * (*args)[1]);
setupGeom(id, &mass,
args[2], args[3], args[4],
args[5], args[6], args[7]);
(*args)[2], (*args)[3], (*args)[4],
(*args)[5], (*args)[6], (*args)[7]);
return true;
}
bool OdeWorld::Object::addPlane(const vector<float> args)
bool OdeWorld::Object::addPlane(refptr< std::vector<float> > args)
{
if (args.size() != 6)
if (args->size() != 6)
return false;
dMatrix3 r;
dRFromEulerAngles(r, args[3], args[4], args[5]);
dRFromEulerAngles(r, (*args)[3], (*args)[4], (*args)[5]);
dVector3 default_plane_direction = {0, 0, 1, 0};
dVector3 rotated_plane_direction;
dMultiply0(rotated_plane_direction, default_plane_direction, r, 1, 3, 3);
@ -321,7 +323,7 @@ bool OdeWorld::Object::addPlane(const vector<float> args)
float a = rotated_plane_direction[0];
float b = rotated_plane_direction[1];
float c = rotated_plane_direction[2];
float d = m_scale * (a * args[0] + b * args[1] + c * args[2]);
float d = m_scale * (a * (*args)[0] + b * (*args)[1] + c * (*args)[2]);
dGeomID id = dCreatePlane(m_space, a, b, c, d);
m_geoms.push_back(id);

View File

@ -6,6 +6,7 @@
#include <vector>
#include <string>
#include <map>
#include "refptr/refptr.h"
class OdeWorld
{
@ -28,11 +29,11 @@ class OdeWorld
void setRotation(dReal x, dReal y, dReal z);
const dReal * getPosition();
const dReal * getRotation();
bool addCube(const std::vector<float> args);
bool addSphere(const std::vector<float> args);
bool addCylinder(const std::vector<float> args);
bool addCCylinder(const std::vector<float> args);
bool addPlane(const std::vector<float> args);
bool addCube(refptr< std::vector<float> > args);
bool addSphere(refptr< std::vector<float> > args);
bool addCylinder(refptr< std::vector<float> > args);
bool addCCylinder(refptr< std::vector<float> > args);
bool addPlane(refptr< std::vector<float> > args);
void addForce(dReal fx, dReal fy, dReal fz);
void addRelForce(dReal fx, dReal fy, dReal fz);
void addTorque(dReal fx, dReal fy, dReal fz);