diff --git a/OdeWorld.cc b/OdeWorld.cc index f08a46a..aa49f2e 100644 --- a/OdeWorld.cc +++ b/OdeWorld.cc @@ -249,71 +249,73 @@ dGeomID OdeWorld::Object::cloneGeom(dGeomID geom, dBodyID body) return id; } -bool OdeWorld::Object::addCube(const vector args) +bool OdeWorld::Object::addCube(refptr< std::vector > 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 args) +bool OdeWorld::Object::addSphere(refptr< std::vector > 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 args) +bool OdeWorld::Object::addCylinder(refptr< std::vector > 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 args) +bool OdeWorld::Object::addCCylinder(refptr< std::vector > 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 args) +bool OdeWorld::Object::addPlane(refptr< std::vector > 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 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); diff --git a/OdeWorld.h b/OdeWorld.h index 2377e00..92d06d1 100644 --- a/OdeWorld.h +++ b/OdeWorld.h @@ -6,6 +6,7 @@ #include #include #include +#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 args); - bool addSphere(const std::vector args); - bool addCylinder(const std::vector args); - bool addCCylinder(const std::vector args); - bool addPlane(const std::vector args); + bool addCube(refptr< std::vector > args); + bool addSphere(refptr< std::vector > args); + bool addCylinder(refptr< std::vector > args); + bool addCCylinder(refptr< std::vector > args); + bool addPlane(refptr< std::vector > 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);