diff --git a/sources/reactphysics3d/body/OBB.cpp b/sources/reactphysics3d/body/OBB.cpp
index 4e452e9d..66976b41 100644
--- a/sources/reactphysics3d/body/OBB.cpp
+++ b/sources/reactphysics3d/body/OBB.cpp
@@ -24,8 +24,30 @@
using namespace reactphysics3d;
// Constructor
-OBB::OBB() {
+OBB::OBB(const Vector3D& center, const Vector3D& axis1, const Vector3D& axis2,
+ const Vector3D& axis3, double extent1, double extent2, double extent3) {
+ this->center = center;
+ this->axis[0] = axis1;
+ this->axis[1] = axis2;
+ this->axis[2] = axis3;
+
+ this->extent[0] = extent1;
+ this->extent[1] = extent2;
+ this->extent[2] = extent3;
+}
+
+// Copy-Constructor
+OBB::OBB(const OBB& obb) {
+ this->center = obb.center;
+
+ this->axis[0] = obb.axis[0];
+ this->axis[1] = obb.axis[1];
+ this->axis[2] = obb.axis[2];
+
+ this->extent[0] = obb.extent[0];
+ this->extent[1] = obb.extent[1];
+ this->extent[2] = obb.extent[2];
}
// Destructor
diff --git a/sources/reactphysics3d/body/OBB.h b/sources/reactphysics3d/body/OBB.h
index 29ac9742..3d16509c 100644
--- a/sources/reactphysics3d/body/OBB.h
+++ b/sources/reactphysics3d/body/OBB.h
@@ -20,6 +20,10 @@
#ifndef OBB_H
#define OBB_H
+// Libraries
+#include "BoundingVolume.h"
+#include "../mathematics/mathematics.h"
+
// ReactPhysics3D namespace
namespace reactphysics3d {
@@ -31,12 +35,86 @@ namespace reactphysics3d {
*/
class OBB : public BoundingVolume {
private :
+ Vector3D center; // Center point of the OBB
+ Vector3D axis[3]; // Array that contains the three axis of the OBB
+ double extent[3]; // Array that contains the three extents size of the OBB
public :
- OBB(); // Constructor
- virtual ~OBB(); // Destructor
+ OBB(const Vector3D& center, const Vector3D& axis1, const Vector3D& axis2,
+ const Vector3D& axis3, double extent1, double extent2, double extent3); // Constructor
+ OBB(const OBB& obb); // Copy-Constructor
+ virtual ~OBB(); // Destructor
+
+ Vector3D getCenter() const; // Return the center point of the OBB
+ void setCenter(const Vector3D& center); // Set the center point
+ Vector3D getAxis(int index) const throw(std::invalid_argument); // Return an axis of the OBB
+ void setAxis(int index, const Vector3D& axis) throw(std::invalid_argument); // Set an axis
+ double getExtent(int index) const throw(std::invalid_argument); // Return an extent value
+ void setExtent(int index, double extent) throw(std::invalid_argument); // Set an extent value
};
+// TODO : Don't forget that we need to code a way that a change in the orientation of a rigid body imply
+// a change in the orientation (center and axis) of the corresponding OBB.
+
+// Return the center point of the OBB
+inline Vector3D OBB::getCenter() const {
+ return center;
+}
+
+// Set the center point
+inline void OBB::setCenter(const Vector3D& center) {
+ this->center = center;
+}
+
+// Return an axis of the OBB
+inline Vector3D OBB::getAxis(int index) const throw(std::invalid_argument) {
+ // Check if the index value is valid
+ if (index >= 0 && index <3) {
+ return axis[index];
+ }
+ else {
+ // The index value is not valid, we throw an exception
+ throw std::invalid_argument("Exception : The index value has to be between 0 and 2");
+ }
+}
+
+// Set an axis
+inline void OBB::setAxis(int index, const Vector3D& axis) throw(std::invalid_argument) {
+ // Check if the index value is valid
+ if (index >= 0 && index <3) {
+ this->axis[index] = axis;
+ }
+ else {
+ // The index value is not valid, we throw an exception
+ throw std::invalid_argument("Exception : The index value has to be between 0 and 2");
+ }
+}
+
+// Return an extent value
+inline double OBB::getExtent(int index) const throw(std::invalid_argument) {
+ // Check if the index value is valid
+ if (index >= 0 && index <3) {
+ return extent[index];
+ }
+ else {
+ // The index value is not valid, we throw an exception
+ throw std::invalid_argument("Exception : The index value has to be between 0 and 2");
+ }
+}
+
+// Set an extent value
+inline void OBB::setExtent(int index, double extent) throw(std::invalid_argument) {
+ // Check if the index value is valid
+ if (index >= 0 && index <3) {
+ this->extent[index] = extent;
+ }
+ else {
+ // The index value is not valid, we throw an exception
+ throw std::invalid_argument("Exception : The index value has to be between 0 and 2");
+ }
+}
+
+
}; // End of the ReactPhysics3D namespace
#endif
diff --git a/sources/reactphysics3d/body/RigidBody.h b/sources/reactphysics3d/body/RigidBody.h
index 74cebbc5..8b9a60ef 100644
--- a/sources/reactphysics3d/body/RigidBody.h
+++ b/sources/reactphysics3d/body/RigidBody.h
@@ -1,21 +1,21 @@
/****************************************************************************
- * Copyright (C) 2009 Daniel Chappuis *
- ****************************************************************************
- * This file is part of ReactPhysics3D. *
- * *
- * ReactPhysics3D is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU Lesser General Public License as published *
- * by the Free Software Foundation, either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * ReactPhysics3D is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public License *
- * along with ReactPhysics3D. If not, see . *
- ***************************************************************************/
+* Copyright (C) 2009 Daniel Chappuis *
+****************************************************************************
+* This file is part of ReactPhysics3D. *
+* *
+* ReactPhysics3D is free software: you can redistribute it and/or modify *
+* it under the terms of the GNU Lesser General Public License as published *
+* by the Free Software Foundation, either version 3 of the License, or *
+* (at your option) any later version. *
+* *
+* ReactPhysics3D is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU Lesser General Public License for more details. *
+* *
+* You should have received a copy of the GNU Lesser General Public License *
+* along with ReactPhysics3D. If not, see . *
+***************************************************************************/
#ifndef RIGIDBODY_H
#define RIGIDBODY_H