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

github.com/FormerLurker/ArcWelderLib.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'GcodeProcessorLib/utilities.h')
-rw-r--r--GcodeProcessorLib/utilities.h192
1 files changed, 123 insertions, 69 deletions
diff --git a/GcodeProcessorLib/utilities.h b/GcodeProcessorLib/utilities.h
index cf3a97b..7e2f80b 100644
--- a/GcodeProcessorLib/utilities.h
+++ b/GcodeProcessorLib/utilities.h
@@ -20,83 +20,137 @@
// FormerLurker@pm.me
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma once
+#ifndef UTILITIES_H
+#define UTILITIES_H
#include <string>
#include <vector>
#include <set>
+#include <cmath>
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+#include <cstring>
+#include "fpconv.h"
+
#define FPCONV_BUFFER_LENGTH 25
// Had to increase the zero tolerance because prusa slicer doesn't always
// retract enough while wiping.
#define ZERO_TOLERANCE 0.000005
#define PI_DOUBLE 3.14159265358979323846264338327950288
-class utilities{
-public:
- static bool is_zero(double x, double tolerance = ZERO_TOLERANCE);
- static int round_up_to_int(double x, double tolerance = ZERO_TOLERANCE);
- static bool is_equal(double x, double y, double tolerance = ZERO_TOLERANCE);
- static bool greater_than(double x, double y, double tolerance = ZERO_TOLERANCE);
- static bool greater_than_or_equal(double x, double y, double tolerance = ZERO_TOLERANCE);
- static bool less_than(double x, double y, double tolerance = ZERO_TOLERANCE);
- static bool less_than_or_equal(double x, double y, double tolerance = ZERO_TOLERANCE);
-
- static double get_cartesian_distance(double x1, double y1, double x2, double y2);
- static double get_cartesian_distance(double x1, double y1, double z1, double x2, double y2, double z2);
- static double get_arc_distance(double x1, double y1, double z1, double x2, double y2, double z2, double i, double j, double r, bool is_clockwise);
- /* Todo: Implement for gcode comment processor
- static bool case_insensitive_compare_char(char& c1, char& c2);
- static bool case_insensitive_compare(std::string& str1, std::string& str2);
- */
- static std::string to_string(double value);
- static std::string to_string(int value);
- static std::string ltrim(const std::string& s);
- static std::string rtrim(const std::string& s);
- static std::string trim(const std::string& s);
- static std::istream& safe_get_line(std::istream& is, std::string& t);
- static std::string center(std::string input, int width);
- static double get_percent_change(int v1, int v2);
- static double get_percent_change(double v1, double v2);
- static std::string get_percent_change_string(int v1, int v2, int precision);
- static int get_num_digits(int x);
- static int get_num_digits(double x);
- static int get_num_digits(double x, int precision);
-
- static std::vector<std::string> splitpath(const std::string& str);
- static bool get_file_path(const std::string& file_path, std::string& path);
- static bool get_temp_file_path_for_file(const std::string& file_path, std::string& temp_file_path);
- static std::string create_uuid();
- // Man I can't wait till I can drop python 2.7 support so I can stop doing everything myself. s
- // td::hypot doesn't work for msvc for python 2.7....
- static double hypot(double x, double y);
- static std::string dtos(double x, unsigned char precision);
-
- static double rand_range(double min, double max) {
- double f = (double)std::rand() / RAND_MAX;
- return min + f * (max - min);
- }
-
- static unsigned char rand_range(unsigned char min, unsigned char max) {
- double f = (double)std::rand() / RAND_MAX;
- return static_cast<unsigned char>(static_cast<double>(min) + f * (static_cast<double>(max) - static_cast<double>(min)));
- }
-
- static int rand_range(int min, int max) {
- double f = (double)std::rand() / RAND_MAX;
- return static_cast<int>(static_cast<double>(min) + f * (static_cast<double>(max) - static_cast<double>(min)));
- }
+namespace utilities{
+ extern const std::string WHITESPACE_;
+ extern const char GUID_RANGE[];
+ extern const bool GUID_DASHES[];
+
+ extern const char PATH_SEPARATOR_;
+ bool is_zero(double x, double tolerance);
+ bool is_zero(double x);
+
+ int round_up_to_int(double x, double tolerance);
+ int round_up_to_int(double x);
+
+ bool is_equal(double x, double y, double tolerance);
+
+ bool is_equal(double x, double y);
+
+ bool greater_than(double x, double y, double tolerance);
+
+ bool greater_than(double x, double y);
+
+ bool greater_than_or_equal(double x, double y, double tolerance);
+ bool greater_than_or_equal(double x, double y);
+
+ bool less_than(double x, double y, double tolerance);
+ bool less_than(double x, double y);
+
+ bool less_than_or_equal(double x, double y, double tolerance);
+
+ bool less_than_or_equal(double x, double y);
+
+ double get_cartesian_distance(double x1, double y1, double x2, double y2);
+
+ double get_cartesian_distance(double x1, double y1, double z1, double x2, double y2, double z2);
+
+ double get_arc_distance(double x1, double y1, double z1, double x2, double y2, double z2, double i, double j, double r, bool is_clockwise);
+ std::string to_string(double value);
+
+ std::string to_string(int value);
+ std::string ltrim(const std::string& s);
+
+ std::string rtrim(const std::string& s);
+
+ std::string trim(const std::string& s);
+ std::string join(const std::string* strings, size_t length, std::string sep);
+
+ std::string join(const std::vector<std::string> strings, std::string sep);
+
+ std::istream& safe_get_line(std::istream& is, std::string& t);
+
+ std::string center(std::string input, int width);
+ double get_percent_change(int v1, int v2);
+ double get_percent_change(double v1, double v2);
+ std::string get_percent_change_string(int v1, int v2, int precision);
+
+ int get_num_digits(int x);
+ int get_num_digits(double x, int precision);
+
+ int get_num_digits(double x);
+ // Nice utility function found here: https://stackoverflow.com/questions/8520560/get-a-file-name-from-a-path
+ std::vector<std::string> splitpath(const std::string& str);
+
+ bool get_file_path(const std::string& file_path, std::string& path);
+ std::string create_uuid();
+
+ bool get_temp_file_path_for_file(const std::string& file_path, std::string& temp_file_path);
+
+ double hypot(double x, double y);
+
+ double atan2(double y, double x);
+
+ double atan2f(double y, double x);
+
+ double floor(double x);
+
+ double floorf(double x);
+
+ double ceil(double x);
+
+ double cos(double x);
+
+ double sin(double x);
+
+ double cosf(double x);
+
+ double sinf(double x);
+
+ double abs(double x);
+
+ double fabs(double x);
+
+ double fabsf(double x);
+
+ double sqrt(double x);
+
+ double sqrtf(double x);
+
+ double pow(int e, double x);
+
+ double min(float x, float y);
+
+ void* memcpy(void* dest, const void* src, size_t n);
+
+ std::string dtos(double x, unsigned char precision);
-protected:
- static const std::string WHITESPACE_;
- static const char PATH_SEPARATOR_ =
-#ifdef _WIN32
- '\\';
-#else
- '/';
-#endif
- static const char GUID_RANGE[];
- static const bool GUID_DASHES[];
-private:
- utilities();
-
-};
+ std::string replace(std::string subject, const std::string& search, const std::string& replace);
+
+ double rand_range(double min, double max);
+ unsigned char rand_range(unsigned char min, unsigned char max);
+ int rand_range(int min, int max);
+
+
+
+}
+#endif \ No newline at end of file