Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/freestyle/intern/geometry/Polygon.h')
-rw-r--r--source/blender/freestyle/intern/geometry/Polygon.h339
1 files changed, 174 insertions, 165 deletions
diff --git a/source/blender/freestyle/intern/geometry/Polygon.h b/source/blender/freestyle/intern/geometry/Polygon.h
index b2359f82477..ad8a947d21d 100644
--- a/source/blender/freestyle/intern/geometry/Polygon.h
+++ b/source/blender/freestyle/intern/geometry/Polygon.h
@@ -28,7 +28,7 @@
#include "GeomUtils.h"
#ifdef WITH_CXX_GUARDEDALLOC
-#include "MEM_guardedalloc.h"
+# include "MEM_guardedalloc.h"
#endif
using namespace std;
@@ -37,184 +37,193 @@ namespace Freestyle {
namespace Geometry {
-template <class Point>
-class Polygon
-{
-public:
- inline Polygon()
- {
- _id = 0;
- userdata = 0;
- userdata2 = 0;
- }
-
- inline Polygon(const vector<Point>& vertices)
- {
- _vertices = vertices;
- computeBBox();
- _id = 0;
- userdata = 0;
- userdata2 = 0;
- }
-
- inline Polygon(const Polygon<Point>& poly)
- {
- Point p;
- for (typename vector<Point>::const_iterator it = poly.getVertices().begin();
- it != poly.getVertices().end();
- it++)
- {
- p = *it;
- _vertices.push_back(p);
- }
-
- _id = poly.getId();
- poly.getBBox(_min, _max);
- userdata = 0;
- userdata2 = 0;
- }
-
- virtual ~Polygon() {}
-
- //
- // Accessors
- //
- /////////////////////////////////////////////////////////////////////////////
- inline const vector<Point>& getVertices() const
- {
- return _vertices;
- }
-
- inline void getBBox(Point& min, Point& max) const
- {
- min = _min;
- max = _max;
- }
-
- inline Point getBBoxCenter()
- {
- Point result;
- result = (_min + _max) / 2;
- return result;
- }
-
- inline Point getCenter()
- {
- Point result;
- for (typename vector<Point>::iterator it = _vertices.begin(); it != _vertices.end(); it++)
- result += *it;
- result /= _vertices.size();
- return result;
- }
-
- inline unsigned getId() const
- {
- return _id;
- }
-
- //
- // Modifiers
- //
- /////////////////////////////////////////////////////////////////////////////
- inline void setVertices(const vector<Point>& vertices)
- {
- _vertices.clear();
- Point p;
- for (typename vector<Point>::const_iterator it = vertices.begin(); it != vertices.end(); it++) {
- p = *it;
- _vertices.push_back(p);
- }
- computeBBox();
- }
-
- inline void setId(unsigned id)
- {
- _id = id;
- }
-
- //
- // Other methods
- //
- /////////////////////////////////////////////////////////////////////////////
- inline void computeBBox()
- {
- if (_vertices.empty())
- return;
-
- _max = _vertices[0];
- _min = _vertices[0];
-
- for (typename vector<Point>::iterator it = _vertices.begin(); it != _vertices.end(); it++) {
- for (unsigned int i = 0; i < Point::dim(); i++) {
- if ((*it)[i] > _max[i])
- _max[i] = (*it)[i];
- if ((*it)[i] < _min[i])
- _min[i] = (*it)[i];
- }
- }
- }
-
- // FIXME Is it possible to get rid of userdatas ?
- void *userdata;
- void *userdata2; // Used during ray casting
-
-protected:
- vector<Point> _vertices;
- Point _min;
- Point _max;
- unsigned _id;
+template<class Point> class Polygon {
+ public:
+ inline Polygon()
+ {
+ _id = 0;
+ userdata = 0;
+ userdata2 = 0;
+ }
+
+ inline Polygon(const vector<Point> &vertices)
+ {
+ _vertices = vertices;
+ computeBBox();
+ _id = 0;
+ userdata = 0;
+ userdata2 = 0;
+ }
+
+ inline Polygon(const Polygon<Point> &poly)
+ {
+ Point p;
+ for (typename vector<Point>::const_iterator it = poly.getVertices().begin();
+ it != poly.getVertices().end();
+ it++) {
+ p = *it;
+ _vertices.push_back(p);
+ }
+
+ _id = poly.getId();
+ poly.getBBox(_min, _max);
+ userdata = 0;
+ userdata2 = 0;
+ }
+
+ virtual ~Polygon()
+ {
+ }
+
+ //
+ // Accessors
+ //
+ /////////////////////////////////////////////////////////////////////////////
+ inline const vector<Point> &getVertices() const
+ {
+ return _vertices;
+ }
+
+ inline void getBBox(Point &min, Point &max) const
+ {
+ min = _min;
+ max = _max;
+ }
+
+ inline Point getBBoxCenter()
+ {
+ Point result;
+ result = (_min + _max) / 2;
+ return result;
+ }
+
+ inline Point getCenter()
+ {
+ Point result;
+ for (typename vector<Point>::iterator it = _vertices.begin(); it != _vertices.end(); it++)
+ result += *it;
+ result /= _vertices.size();
+ return result;
+ }
+
+ inline unsigned getId() const
+ {
+ return _id;
+ }
+
+ //
+ // Modifiers
+ //
+ /////////////////////////////////////////////////////////////////////////////
+ inline void setVertices(const vector<Point> &vertices)
+ {
+ _vertices.clear();
+ Point p;
+ for (typename vector<Point>::const_iterator it = vertices.begin(); it != vertices.end();
+ it++) {
+ p = *it;
+ _vertices.push_back(p);
+ }
+ computeBBox();
+ }
+
+ inline void setId(unsigned id)
+ {
+ _id = id;
+ }
+
+ //
+ // Other methods
+ //
+ /////////////////////////////////////////////////////////////////////////////
+ inline void computeBBox()
+ {
+ if (_vertices.empty())
+ return;
+
+ _max = _vertices[0];
+ _min = _vertices[0];
+
+ for (typename vector<Point>::iterator it = _vertices.begin(); it != _vertices.end(); it++) {
+ for (unsigned int i = 0; i < Point::dim(); i++) {
+ if ((*it)[i] > _max[i])
+ _max[i] = (*it)[i];
+ if ((*it)[i] < _min[i])
+ _min[i] = (*it)[i];
+ }
+ }
+ }
+
+ // FIXME Is it possible to get rid of userdatas ?
+ void *userdata;
+ void *userdata2; // Used during ray casting
+
+ protected:
+ vector<Point> _vertices;
+ Point _min;
+ Point _max;
+ unsigned _id;
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:Geometry:Polygon")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:Geometry:Polygon")
#endif
};
-
//
// Polygon3r class
//
///////////////////////////////////////////////////////////////////////////////
-class Polygon3r : public Polygon<Vec3r>
-{
-public:
- inline Polygon3r() : Polygon<Vec3r>() {}
-
- inline Polygon3r(const vector<Vec3r>& vertices, const Vec3r& normal) : Polygon<Vec3r>(vertices)
- {
- setNormal(normal);
- }
-
- inline Polygon3r(const Polygon3r& poly) : Polygon<Vec3r>(poly), _normal(poly._normal) {}
-
- virtual ~Polygon3r() {}
-
- void setNormal(const Vec3r& normal)
- {
- _normal = normal;
- }
-
- inline Vec3r getNormal() const
- {
- return _normal;
- }
-
- /*! Check whether the Polygon intersects with the ray or not */
- inline bool rayIntersect(const Vec3r& orig, const Vec3r& dir, real& t, real& u, real& v,
- real epsilon = M_EPSILON) const
- {
+class Polygon3r : public Polygon<Vec3r> {
+ public:
+ inline Polygon3r() : Polygon<Vec3r>()
+ {
+ }
+
+ inline Polygon3r(const vector<Vec3r> &vertices, const Vec3r &normal) : Polygon<Vec3r>(vertices)
+ {
+ setNormal(normal);
+ }
+
+ inline Polygon3r(const Polygon3r &poly) : Polygon<Vec3r>(poly), _normal(poly._normal)
+ {
+ }
+
+ virtual ~Polygon3r()
+ {
+ }
+
+ void setNormal(const Vec3r &normal)
+ {
+ _normal = normal;
+ }
+
+ inline Vec3r getNormal() const
+ {
+ return _normal;
+ }
+
+ /*! Check whether the Polygon intersects with the ray or not */
+ inline bool rayIntersect(const Vec3r &orig,
+ const Vec3r &dir,
+ real &t,
+ real &u,
+ real &v,
+ real epsilon = M_EPSILON) const
+ {
#if 0
- if (_vertices.size() < 3)
- return false;
+ if (_vertices.size() < 3)
+ return false;
#endif
- return GeomUtils::intersectRayTriangle(orig, dir, _vertices[0], _vertices[1], _vertices[2], t, u, v, epsilon);
- }
+ return GeomUtils::intersectRayTriangle(
+ orig, dir, _vertices[0], _vertices[1], _vertices[2], t, u, v, epsilon);
+ }
-private:
- Vec3r _normal;
+ private:
+ Vec3r _normal;
};
-} // end of namespace Geometry
+} // end of namespace Geometry
} /* namespace Freestyle */
-#endif // __POLYGON_H__
+#endif // __POLYGON_H__