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-10-17 02:34:25 +0300
committerFormerLurker <hochgebe@gmail.com>2020-10-17 02:34:25 +0300
commit4fd38897fd66c245991a4066c7bb3db373087e70 (patch)
tree30a91cd0ded86278929869ec265c939fc839e18a /PyArcWelder
parent04958af691abfebc8314b300b4d8676f074439a7 (diff)
Add additional statistics. Fix windows c++ build for python 2.7 compilers.
Diffstat (limited to 'PyArcWelder')
-rw-r--r--PyArcWelder/py_arc_welder.cpp78
-rw-r--r--PyArcWelder/py_arc_welder.h2
-rw-r--r--PyArcWelder/py_arc_welder_extension.cpp8
3 files changed, 55 insertions, 33 deletions
diff --git a/PyArcWelder/py_arc_welder.cpp b/PyArcWelder/py_arc_welder.cpp
index 302aa95..0eacf39 100644
--- a/PyArcWelder/py_arc_welder.cpp
+++ b/PyArcWelder/py_arc_welder.cpp
@@ -22,35 +22,55 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "py_arc_welder.h"
-
-PyObject* py_arc_welder::build_py_progress(arc_welder_progress progress)
+PyObject* py_arc_welder::build_py_progress(const arc_welder_progress& progress)
{
- 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}",
- u8"percent_complete",
- progress.percent_complete,
- u8"seconds_elapsed",
- progress.seconds_elapsed,
- u8"seconds_remaining",
- progress.seconds_remaining,
- u8"gcodes_processed",
- progress.gcodes_processed,
- u8"lines_processed",
- progress.lines_processed,
- u8"points_compressed",
- progress.points_compressed,
- u8"arcs_created",
- progress.arcs_created,
- u8"source_file_position",
- progress.source_file_position,
- u8"source_file_size",
- progress.source_file_size,
- u8"target_file_size",
- progress.target_file_size,
- u8"compression_ratio",
- progress.compression_ratio,
- u8"compression_percent",
- progress.compression_percent
+ std::string segment_statistics = progress.segment_statistics.str();
+ 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}",
+ "percent_complete",
+ progress.percent_complete, //1
+ "seconds_elapsed",
+ progress.seconds_elapsed, //2
+ "seconds_remaining",
+ progress.seconds_remaining, //3
+ "gcodes_processed",
+ progress.gcodes_processed, //4
+ "lines_processed",
+ progress.lines_processed, //5
+ "points_compressed",
+ progress.points_compressed, //6
+ "arcs_created",
+ progress.arcs_created, //7
+ "source_file_position",
+ progress.source_file_position, //8
+ "source_file_size",
+ progress.source_file_size, //9
+ "target_file_size",
+ progress.target_file_size, //10
+ "compression_ratio",
+ progress.compression_ratio, //11
+ "compression_percent",
+ progress.compression_percent, //12
+ "source_file_total_length",
+ progress.segment_statistics.total_length_source, //13
+ "target_file_total_length",
+ progress.segment_statistics.total_length_target, //14
+ "source_file_total_count",
+ progress.segment_statistics.total_count_source, //15
+ "target_file_total_count",
+ progress.segment_statistics.total_length_target //16
);
+
+ if (py_progress == NULL)
+ {
+ return NULL;
+ }
+ // Due to a CRAZY issue, I have to add this item after building the py_progress object,
+ // else it crashes in python 2.7. Looking forward to retiring this backwards
+ // compatible code...
+ PyDict_SetItemString(py_progress, "segment_statistics_text", pyMessage);
return py_progress;
}
@@ -58,12 +78,14 @@ bool py_arc_welder::on_progress_(const arc_welder_progress& progress)
{
PyObject* py_dict = py_arc_welder::build_py_progress(progress);
if (py_dict == NULL)
+ {
return false;
+ }
PyObject* func_args = Py_BuildValue("(O)", py_dict);
if (func_args == NULL)
{
Py_DECREF(py_dict);
- return true;
+ return false; // This was returning true, I think it was a typo. Making a note just in case.
}
PyGILState_STATE gstate = PyGILState_Ensure();
diff --git a/PyArcWelder/py_arc_welder.h b/PyArcWelder/py_arc_welder.h
index ef56715..1b70980 100644
--- a/PyArcWelder/py_arc_welder.h
+++ b/PyArcWelder/py_arc_welder.h
@@ -41,7 +41,7 @@ public:
virtual ~py_arc_welder() {
}
- static PyObject* build_py_progress(arc_welder_progress progress);
+ static PyObject* build_py_progress(const arc_welder_progress& progress);
protected:
virtual bool on_progress_(const arc_welder_progress& progress);
private:
diff --git a/PyArcWelder/py_arc_welder_extension.cpp b/PyArcWelder/py_arc_welder_extension.cpp
index 07f9dfc..ea24f59 100644
--- a/PyArcWelder/py_arc_welder_extension.cpp
+++ b/PyArcWelder/py_arc_welder_extension.cpp
@@ -202,13 +202,13 @@ extern "C"
PyObject* p_results = Py_BuildValue(
"{s:i,s:i,s:s,s:O}",
- u8"success",
+ "success",
results.success,
- u8"cancelled",
+ "cancelled",
results.cancelled,
- u8"message",
+ "message",
results.message.c_str(),
- u8"progress",
+ "progress",
p_progress
);
return p_results;