src/miscallenous.h

changeset 655
b376645315ab
child 733
cc39df788660
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/miscallenous.h	Sat Mar 29 05:26:10 2014 +0200
@@ -0,0 +1,138 @@
+/*
+ *  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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+#include <QVector>
+#include "configuration.h"
+#include "main.h"
+#include "basics.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 (QList< StringFormatArg > 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<class T> static inline const char* plural (T n)
+{
+	return (n != 1) ? "s" : "";
+}
+
+// =============================================================================
+// Templated clamp
+template<class T> static inline T clamp (T a, T min, T max)
+{
+	return (a > max) ? max : (a < min) ? min : a;
+}
+
+// Templated minimum
+template<class T> static inline T min (T a, T b)
+{
+	return (a < b) ? a : b;
+}
+
+// Templated maximum
+template<class T> static inline T max (T a, T b)
+{
+	return (a > b) ? a : b;
+}
+
+// Templated absolute value
+template<class T> static inline T abs (T a)
+{
+	return (a >= 0) ? a : -a;
+}
+
+template<class T> inline bool isZero (T a)
+{
+	return abs<T> (a) < 0.0001;
+}
+
+template<class T> inline bool isInteger (T a)
+{
+	return isZero (a - (int) a);
+}
+
+template<class T> void removeDuplicates (QList<T>& a)
+{
+	std::sort (a.begin(), a.end());
+	a.erase (std::unique (a.begin(), a.end()), a.end());
+}

mercurial