diff -r 3d8ab0f89102 -r 450827da2376 src/Misc.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Misc.h Tue Jan 21 02:09:14 2014 +0200
@@ -0,0 +1,142 @@
+/*
+ * LDForge: LDraw parts authoring CAD
+ * Copyright (C) 2013, 2014 Santeri Piippo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef LDFORGE_MISC_H
+#define LDFORGE_MISC_H
+
+#include
+#include "Configuration.h"
+#include "Main.h"
+#include "Types.h"
+
+#define NUM_PRIMES 500
+
+class LDDocument;
+class QColor;
+class QAction;
+
+// Prime numbers
+extern const int g_primes[NUM_PRIMES];
+
+// Returns whether a given string represents a floating point number.
+bool numeric (const QString& tok);
+
+// Simplifies the given fraction.
+void simplify (int& numer, int& denom);
+
+void roundToDecimals (double& a, int decimals);
+
+QString join (initlist vals, QString delim = " ");
+
+// Grid stuff
+struct gridinfo
+{
+ const char* const name;
+ float* const confs[4];
+};
+
+extern_cfg (Int, grid);
+static const int g_NumGrids = 3;
+extern const gridinfo g_GridInfo[3];
+
+inline const gridinfo& currentGrid()
+{
+ return g_GridInfo[grid];
+}
+
+// =============================================================================
+enum ERotationPoint
+{
+ EObjectOrigin,
+ EWorldOrigin,
+ ECustomPoint
+};
+
+Vertex rotPoint (const LDObjectList& objs);
+void configRotationPoint();
+
+// =============================================================================
+namespace Grid
+{
+ enum Type
+ {
+ Coarse,
+ Medium,
+ Fine
+ };
+
+ enum Config
+ {
+ X,
+ Y,
+ Z,
+ Angle
+ };
+
+ double snap (double value, const Grid::Config axis);
+}
+
+// -----------------------------------------------------------------------------
+// Plural expression
+template static inline const char* plural (T n)
+{
+ return (n != 1) ? "s" : "";
+}
+
+// -----------------------------------------------------------------------------
+// Templated clamp
+template static inline T clamp (T a, T min, T max)
+{
+ return (a > max) ? max : (a < min) ? min : a;
+}
+
+// Templated minimum
+template static inline T min (T a, T b)
+{
+ return (a < b) ? a : b;
+}
+
+// Templated maximum
+template static inline T max (T a, T b)
+{
+ return (a > b) ? a : b;
+}
+
+// Templated absolute value
+template static inline T abs (T a)
+{
+ return (a >= 0) ? a : -a;
+}
+
+template inline bool isZero (T a)
+{
+ return abs (a) < 0.0001;
+}
+
+template inline bool isInteger (T a)
+{
+ return isZero (a - (int) a);
+}
+
+template void removeDuplicates (QList& a)
+{
+ std::sort (a.begin(), a.end());
+ a.erase (std::unique (a.begin(), a.end()), a.end());
+}
+
+#endif // LDFORGE_MISC_H