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:
authorFormerLurker <hochgebe@gmail.com>2020-11-16 18:00:56 +0300
committerFormerLurker <hochgebe@gmail.com>2020-11-16 18:00:56 +0300
commit0f57a03f82a555a9b6d3afdfb133457c72455d54 (patch)
treeb5403a38d5ecd473f727b34e48099c9e35ba320c
parentb995df6e38d0185f32f06cac87e781249975b738 (diff)
Add the job guid to the py arguments and progress updates. Add additional progress data.
-rw-r--r--ArcWelder/arc_welder.h5
-rw-r--r--GcodeProcessorLib/utilities.cpp11
-rw-r--r--GcodeProcessorLib/utilities.h1
-rw-r--r--PyArcWelder/py_arc_welder.cpp16
-rw-r--r--PyArcWelder/py_arc_welder.h5
-rw-r--r--PyArcWelder/py_arc_welder_extension.cpp32
-rw-r--r--PyArcWelder/py_arc_welder_extension.h20
7 files changed, 64 insertions, 26 deletions
diff --git a/ArcWelder/arc_welder.h b/ArcWelder/arc_welder.h
index e26a1b5..5a8d9b4 100644
--- a/ArcWelder/arc_welder.h
+++ b/ArcWelder/arc_welder.h
@@ -94,6 +94,10 @@ struct source_target_segment_statistics {
int total_count_source;
int total_count_target;
int num_segment_tracking_lengths;
+
+ double get_total_count_reduction_percent() const {
+ return utilities::get_percent_change(total_count_source, total_count_target);
+ }
void update(double length, bool is_source)
{
@@ -353,7 +357,6 @@ struct arc_welder_progress {
target_file_size = 0;
compression_ratio = 0;
compression_percent = 0;
-
}
double percent_complete;
double seconds_elapsed;
diff --git a/GcodeProcessorLib/utilities.cpp b/GcodeProcessorLib/utilities.cpp
index d126755..6ff083f 100644
--- a/GcodeProcessorLib/utilities.cpp
+++ b/GcodeProcessorLib/utilities.cpp
@@ -229,6 +229,15 @@ std::string utilities::center(std::string input, int width)
return std::string(left_padding, ' ') + input + std::string(right_padding, ' ');
}
+double utilities::get_percent_change(int v1, int v2)
+{
+ if (v1 != 0)
+ {
+ return (((double)v2 - (double)v1) / (double)v1) * 100.0;
+ }
+ return 0;
+}
+
std::string utilities::get_percent_change_string(int v1, int v2, int precision)
{
std::stringstream format_stream;
@@ -247,7 +256,7 @@ std::string utilities::get_percent_change_string(int v1, int v2, int precision)
}
else
{
- double percent_change = (((double)v2 - (double)v1) / (double)v1) * 100.0;
+ double percent_change = get_percent_change(v1, v2);
format_stream << std::fixed << std::setprecision(precision) << percent_change << "%";
}
return format_stream.str();
diff --git a/GcodeProcessorLib/utilities.h b/GcodeProcessorLib/utilities.h
index b1fc7a3..f93ac53 100644
--- a/GcodeProcessorLib/utilities.h
+++ b/GcodeProcessorLib/utilities.h
@@ -49,6 +49,7 @@ public:
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 std::string get_percent_change_string(int v1, int v2, int precision);
static int get_num_digits(int x);
diff --git a/PyArcWelder/py_arc_welder.cpp b/PyArcWelder/py_arc_welder.cpp
index 0eacf39..fc185fe 100644
--- a/PyArcWelder/py_arc_welder.cpp
+++ b/PyArcWelder/py_arc_welder.cpp
@@ -22,13 +22,17 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "py_arc_welder.h"
-PyObject* py_arc_welder::build_py_progress(const arc_welder_progress& progress)
+PyObject* py_arc_welder::build_py_progress(const arc_welder_progress& progress, std::string guid)
{
std::string segment_statistics = progress.segment_statistics.str();
+ PyObject* pyGuid = gcode_arc_converter::PyUnicode_SafeFromString(guid);
+ if (pyGuid == NULL)
+ return NULL;
PyObject* pyMessage = gcode_arc_converter::PyUnicode_SafeFromString(segment_statistics);
if (pyMessage == NULL)
return NULL;
- PyObject* py_progress = Py_BuildValue("{s:d,s:d,s:d,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:f,s:f,s:f,s:f,s:i,s:i}",
+ double total_count_reduction_percent = progress.segment_statistics.get_total_count_reduction_percent();
+ PyObject* py_progress = Py_BuildValue("{s:d,s:d,s:d,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:f,s:f,s:f,s:f,s:i,s:i,s:f}",
"percent_complete",
progress.percent_complete, //1
"seconds_elapsed",
@@ -60,7 +64,10 @@ PyObject* py_arc_welder::build_py_progress(const arc_welder_progress& progress)
"source_file_total_count",
progress.segment_statistics.total_count_source, //15
"target_file_total_count",
- progress.segment_statistics.total_length_target //16
+ progress.segment_statistics.total_count_target, //16
+ "total_count_reduction_percent",
+ total_count_reduction_percent //17
+
);
if (py_progress == NULL)
@@ -71,12 +78,13 @@ PyObject* py_arc_welder::build_py_progress(const arc_welder_progress& progress)
// else it crashes in python 2.7. Looking forward to retiring this backwards
// compatible code...
PyDict_SetItemString(py_progress, "segment_statistics_text", pyMessage);
+ PyDict_SetItemString(py_progress, "guid", pyGuid);
return py_progress;
}
bool py_arc_welder::on_progress_(const arc_welder_progress& progress)
{
- PyObject* py_dict = py_arc_welder::build_py_progress(progress);
+ PyObject* py_dict = py_arc_welder::build_py_progress(progress, guid_);
if (py_dict == NULL)
{
return false;
diff --git a/PyArcWelder/py_arc_welder.h b/PyArcWelder/py_arc_welder.h
index ffa4561..4d0e56b 100644
--- a/PyArcWelder/py_arc_welder.h
+++ b/PyArcWelder/py_arc_welder.h
@@ -35,6 +35,7 @@ class py_arc_welder : public arc_welder
{
public:
py_arc_welder(
+ std::string guid,
std::string source_path,
std::string target_path,
py_logger* logger,
@@ -54,13 +55,15 @@ public:
g90_g91_influences_extruder,
buffer_size
){
+ guid_ = guid;
py_progress_callback_ = py_progress_callback;
}
virtual ~py_arc_welder() {
}
- static PyObject* build_py_progress(const arc_welder_progress& progress);
+ static PyObject* build_py_progress(const arc_welder_progress& progress, std::string guid);
protected:
+ std::string guid_;
virtual bool on_progress_(const arc_welder_progress& progress);
private:
PyObject* py_progress_callback_;
diff --git a/PyArcWelder/py_arc_welder_extension.cpp b/PyArcWelder/py_arc_welder_extension.cpp
index d22500e..634d30c 100644
--- a/PyArcWelder/py_arc_welder_extension.cpp
+++ b/PyArcWelder/py_arc_welder_extension.cpp
@@ -190,13 +190,13 @@ extern "C"
std::string message = "py_gcode_arc_converter.ConvertFile - Beginning Arc Conversion.";
p_py_logger->log(GCODE_CONVERSION, INFO, message);
- py_arc_welder arc_welder_obj(args.source_file_path, args.target_file_path, p_py_logger, args.resolution_mm, args.path_tolerance_percent, args.max_radius_mm, args.g90_g91_influences_extruder, DEFAULT_GCODE_BUFFER_SIZE, py_progress_callback);
+ py_arc_welder arc_welder_obj(args.guid, args.source_path, args.target_path, p_py_logger, args.resolution_mm, args.path_tolerance_percent, args.max_radius_mm, args.g90_g91_influences_extruder, DEFAULT_GCODE_BUFFER_SIZE, py_progress_callback);
arc_welder_results results = arc_welder_obj.process();
message = "py_gcode_arc_converter.ConvertFile - Arc Conversion Complete.";
p_py_logger->log(GCODE_CONVERSION, INFO, message);
Py_XDECREF(py_progress_callback);
// return the arguments
- PyObject* p_progress = py_arc_welder::build_py_progress(results.progress);
+ PyObject* p_progress = py_arc_welder::build_py_progress(results.progress, args.guid);
if (p_progress == NULL)
p_progress = Py_None;
@@ -204,7 +204,7 @@ extern "C"
"{s:i,s:i,s:s,s:O}",
"success",
results.success,
- "cancelled",
+ "is_cancelled",
results.cancelled,
"message",
results.message.c_str(),
@@ -222,25 +222,35 @@ static bool ParseArgs(PyObject* py_args, py_gcode_arc_args& args, PyObject** py_
"Parsing GCode Conversion Args."
);
+ // Extract the job guid
+ PyObject* py_guid = PyDict_GetItemString(py_args, "guid");
+ if (py_guid == NULL)
+ {
+ std::string message = "ParseArgs - Unable to retrieve the guid parameter from the args.";
+ p_py_logger->log_exception(GCODE_CONVERSION, message);
+ return false;
+ }
+ args.guid = gcode_arc_converter::PyUnicode_SafeAsString(py_guid);
+
// Extract the source file path
- PyObject* py_source_file_path = PyDict_GetItemString(py_args, "source_file_path");
- if (py_source_file_path == NULL)
+ PyObject* py_source_path = PyDict_GetItemString(py_args, "source_path");
+ if (py_source_path == NULL)
{
- std::string message = "ParseArgs - Unable to retrieve the source_file_path parameter from the args.";
+ std::string message = "ParseArgs - Unable to retrieve the source_path parameter from the args.";
p_py_logger->log_exception(GCODE_CONVERSION, message);
return false;
}
- args.source_file_path = gcode_arc_converter::PyUnicode_SafeAsString(py_source_file_path);
+ args.source_path = gcode_arc_converter::PyUnicode_SafeAsString(py_source_path);
// Extract the target file path
- PyObject* py_target_file_path = PyDict_GetItemString(py_args, "target_file_path");
- if (py_target_file_path == NULL)
+ PyObject* py_target_path = PyDict_GetItemString(py_args, "target_path");
+ if (py_target_path == NULL)
{
- std::string message = "ParseArgs - Unable to retrieve the target_file_path parameter from the args.";
+ std::string message = "ParseArgs - Unable to retrieve the target_path parameter from the args.";
p_py_logger->log_exception(GCODE_CONVERSION, message);
return false;
}
- args.target_file_path = gcode_arc_converter::PyUnicode_SafeAsString(py_target_file_path);
+ args.target_path = gcode_arc_converter::PyUnicode_SafeAsString(py_target_path);
// Extract the resolution in millimeters
PyObject* py_resolution_mm = PyDict_GetItemString(py_args, "resolution_mm");
diff --git a/PyArcWelder/py_arc_welder_extension.h b/PyArcWelder/py_arc_welder_extension.h
index 84e50ec..f288c9a 100644
--- a/PyArcWelder/py_arc_welder_extension.h
+++ b/PyArcWelder/py_arc_welder_extension.h
@@ -43,8 +43,9 @@ extern "C"
struct py_gcode_arc_args {
py_gcode_arc_args() {
- source_file_path = "";
- target_file_path = "";
+ guid = "";
+ source_path = "";
+ target_path = "";
resolution_mm = DEFAULT_RESOLUTION_MM;
path_tolerance_percent = ARC_LENGTH_PERCENT_TOLERANCE_DEFAULT;
max_radius_mm = DEFAULT_MAX_RADIUS_MM;
@@ -52,24 +53,27 @@ struct py_gcode_arc_args {
log_level = 0;
}
py_gcode_arc_args(
- std::string source_file_path_,
- std::string target_file_path_,
+ std::string guid_,
+ std::string source_path_,
+ std::string target_path_,
double resolution_mm_,
double path_tolerance_percent_,
double max_radius_mm_,
bool g90_g91_influences_extruder_,
int log_level_
) {
- source_file_path = source_file_path_;
- target_file_path = target_file_path_;
+ guid = guid_;
+ source_path = source_path_;
+ target_path = target_path_;
resolution_mm = resolution_mm_;
path_tolerance_percent = path_tolerance_percent_;
max_radius_mm = max_radius_mm_;
g90_g91_influences_extruder = g90_g91_influences_extruder_;
log_level = log_level_;
}
- std::string source_file_path;
- std::string target_file_path;
+ std::string guid;
+ std::string source_path;
+ std::string target_path;
double resolution_mm;
double path_tolerance_percent;
bool g90_g91_influences_extruder;