diff options
Diffstat (limited to 'src/model/plane.h')
-rw-r--r-- | src/model/plane.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/model/plane.h b/src/model/plane.h new file mode 100644 index 0000000..5fdc99f --- /dev/null +++ b/src/model/plane.h @@ -0,0 +1,58 @@ +/* + model/plane.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_MODEL_PLANE_H__ +#define __INCLUDED_MODEL_PLANE_H__ + +#include <string> + +#include "math/vector3f.h" + +namespace model +{ + +/** @brief A class representing a plane in 3d space + * all points p(x, y, z) on the plane satisfy the general equation + * x*a() + y*b() + z*c() + d() = 0 + */ +class Plane +{ +public: + /// a plane defined by 3 points in space + Plane(math::Vector3f const & point0, math::Vector3f const &point1, math::Vector3f const &point2); + /// copy constructor + Plane(Plane const & other); + + /// normal of the plane, not normalized to lenght 1 + inline math::Vector3f const & normal() const { return plane_normal; } + /// the points defining the plane. + /// @param i 0 <= i < 3 + inline math::Vector3f const & point(size_t i) const { return plane_point[i]; } + /// plane texture + inline std::string & texture() { return plane_texture; } + /// first parameter of the general equation + inline float a() const { return plane_normal[0]; } + /// second parameter of the general equation + inline float b() const { return plane_normal[1]; } + /// third param of the general equation + inline float c() const { return plane_normal[2]; } + /// fourth parameter of the general equation + inline float d() const { return pd; } + /// indidcates if this plane was generated from a detail brush + inline bool & detail() { return plane_detail; } + + +private: + math::Vector3f plane_point[3]; + math::Vector3f plane_normal; + std::string plane_texture; + bool plane_detail; + float pd; +}; + +} + +#endif // __INCLUDED_MODEL_PLANE_H__ |