summaryrefslogtreecommitdiff
path: root/src/ftgl/FTGL/FTPoint.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ftgl/FTGL/FTPoint.h')
-rw-r--r--src/ftgl/FTGL/FTPoint.h274
1 files changed, 274 insertions, 0 deletions
diff --git a/src/ftgl/FTGL/FTPoint.h b/src/ftgl/FTGL/FTPoint.h
new file mode 100644
index 0000000..fef4af6
--- /dev/null
+++ b/src/ftgl/FTGL/FTPoint.h
@@ -0,0 +1,274 @@
+/*
+ * FTGL - OpenGL font library
+ *
+ * Copyright (c) 2001-2004 Henry Maddocks <ftgl@opengl.geek.nz>
+ * Copyright (c) 2008 Sam Hocevar <sam@zoy.org>
+ * Copyright (c) 2008 Sean Morrison <learner@brlcad.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef __ftgl__
+# warning This header is deprecated. Please use <FTGL/ftgl.h> from now.
+# include <FTGL/ftgl.h>
+#endif
+
+#ifndef __FTPoint__
+#define __FTPoint__
+
+#ifdef __cplusplus
+
+
+/**
+ * FTPoint class is a basic 3-dimensional point or vector.
+ */
+class FTGL_EXPORT FTPoint
+{
+ public:
+ /**
+ * Default constructor. Point is set to zero.
+ */
+ inline FTPoint()
+ {
+ values[0] = 0;
+ values[1] = 0;
+ values[2] = 0;
+ }
+
+ /**
+ * Constructor. Z coordinate is set to zero if unspecified.
+ *
+ * @param x First component
+ * @param y Second component
+ * @param z Third component
+ */
+ inline FTPoint(const FTGL_DOUBLE x, const FTGL_DOUBLE y,
+ const FTGL_DOUBLE z = 0)
+ {
+ values[0] = x;
+ values[1] = y;
+ values[2] = z;
+ }
+
+ /**
+ * Constructor. This converts an FT_Vector to an FTPoint
+ *
+ * @param ft_vector A freetype vector
+ */
+ inline FTPoint(const FT_Vector& ft_vector)
+ {
+ values[0] = ft_vector.x;
+ values[1] = ft_vector.y;
+ values[2] = 0;
+ }
+
+ /**
+ * Normalise a point's coordinates. If the coordinates are zero,
+ * the point is left untouched.
+ *
+ * @return A vector of norm one.
+ */
+ FTPoint Normalise();
+
+
+ /**
+ * Operator += In Place Addition.
+ *
+ * @param point
+ * @return this plus point.
+ */
+ inline FTPoint& operator += (const FTPoint& point)
+ {
+ values[0] += point.values[0];
+ values[1] += point.values[1];
+ values[2] += point.values[2];
+
+ return *this;
+ }
+
+ /**
+ * Operator +
+ *
+ * @param point
+ * @return this plus point.
+ */
+ inline FTPoint operator + (const FTPoint& point) const
+ {
+ FTPoint temp;
+ temp.values[0] = values[0] + point.values[0];
+ temp.values[1] = values[1] + point.values[1];
+ temp.values[2] = values[2] + point.values[2];
+
+ return temp;
+ }
+
+ /**
+ * Operator -= In Place Substraction.
+ *
+ * @param point
+ * @return this minus point.
+ */
+ inline FTPoint& operator -= (const FTPoint& point)
+ {
+ values[0] -= point.values[0];
+ values[1] -= point.values[1];
+ values[2] -= point.values[2];
+
+ return *this;
+ }
+
+ /**
+ * Operator -
+ *
+ * @param point
+ * @return this minus point.
+ */
+ inline FTPoint operator - (const FTPoint& point) const
+ {
+ FTPoint temp;
+ temp.values[0] = values[0] - point.values[0];
+ temp.values[1] = values[1] - point.values[1];
+ temp.values[2] = values[2] - point.values[2];
+
+ return temp;
+ }
+
+ /**
+ * Operator * Scalar multiplication
+ *
+ * @param multiplier
+ * @return <code>this</code> multiplied by <code>multiplier</code>.
+ */
+ inline FTPoint operator * (double multiplier) const
+ {
+ FTPoint temp;
+ temp.values[0] = values[0] * multiplier;
+ temp.values[1] = values[1] * multiplier;
+ temp.values[2] = values[2] * multiplier;
+
+ return temp;
+ }
+
+
+ /**
+ * Operator * Scalar multiplication
+ *
+ * @param point
+ * @param multiplier
+ * @return <code>multiplier</code> multiplied by <code>point</code>.
+ */
+ inline friend FTPoint operator * (double multiplier, FTPoint& point)
+ {
+ return point * multiplier;
+ }
+
+
+ /**
+ * Operator * Scalar product
+ *
+ * @param a First vector.
+ * @param b Second vector.
+ * @return <code>a.b</code> scalar product.
+ */
+ inline friend double operator * (FTPoint &a, FTPoint& b)
+ {
+ return a.values[0] * b.values[0]
+ + a.values[1] * b.values[1]
+ + a.values[2] * b.values[2];
+ }
+
+
+ /**
+ * Operator ^ Vector product
+ *
+ * @param point Second point
+ * @return this vector point.
+ */
+ inline FTPoint operator ^ (const FTPoint& point)
+ {
+ FTPoint temp;
+ temp.values[0] = values[1] * point.values[2]
+ - values[2] * point.values[1];
+ temp.values[1] = values[2] * point.values[0]
+ - values[0] * point.values[2];
+ temp.values[2] = values[0] * point.values[1]
+ - values[1] * point.values[0];
+ return temp;
+ }
+
+
+ /**
+ * Operator == Tests for equality
+ *
+ * @param a
+ * @param b
+ * @return true if a & b are equal
+ */
+ friend bool operator == (const FTPoint &a, const FTPoint &b);
+
+
+ /**
+ * Operator != Tests for non equality
+ *
+ * @param a
+ * @param b
+ * @return true if a & b are not equal
+ */
+ friend bool operator != (const FTPoint &a, const FTPoint &b);
+
+
+ /**
+ * Cast to FTGL_DOUBLE*
+ */
+ inline operator const FTGL_DOUBLE*() const
+ {
+ return values;
+ }
+
+
+ /**
+ * Setters
+ */
+ inline void X(FTGL_DOUBLE x) { values[0] = x; };
+ inline void Y(FTGL_DOUBLE y) { values[1] = y; };
+ inline void Z(FTGL_DOUBLE z) { values[2] = z; };
+
+
+ /**
+ * Getters
+ */
+ inline FTGL_DOUBLE X() const { return values[0]; };
+ inline FTGL_DOUBLE Y() const { return values[1]; };
+ inline FTGL_DOUBLE Z() const { return values[2]; };
+ inline FTGL_FLOAT Xf() const { return static_cast<FTGL_FLOAT>(values[0]); };
+ inline FTGL_FLOAT Yf() const { return static_cast<FTGL_FLOAT>(values[1]); };
+ inline FTGL_FLOAT Zf() const { return static_cast<FTGL_FLOAT>(values[2]); };
+
+ private:
+ /**
+ * The point data
+ */
+ FTGL_DOUBLE values[3];
+};
+
+#endif //__cplusplus
+
+#endif // __FTPoint__
+