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

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaime van Kessel <nallath@gmail.com>2021-05-18 12:37:16 +0300
committerJaime van Kessel <nallath@gmail.com>2021-05-18 12:37:16 +0300
commit0ddc6e1c58ef8119e31047b3c5472a8b47795114 (patch)
tree58df1ac8d15645c4993dff816fbe2ba83f8ffac0 /scripts
parent90eb2bfbdcc66fdbf82b0e1dac6bcf1a536845b0 (diff)
Add line length checker script
Diffstat (limited to 'scripts')
-rw-r--r--scripts/line_length_checker.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/scripts/line_length_checker.py b/scripts/line_length_checker.py
new file mode 100644
index 0000000000..88cafab3e9
--- /dev/null
+++ b/scripts/line_length_checker.py
@@ -0,0 +1,70 @@
+import re
+import sys
+
+def getValue(line: str, key: str, default = None):
+ """Convenience function that finds the value in a line of g-code.
+ When requesting key = x from line "G1 X100" the value 100 is returned.
+ """
+ if not key in line or (';' in line and line.find(key) > line.find(';')):
+ return default
+ sub_part = line[line.find(key) + 1:]
+ m = re.search('^-?[0-9]+\.?[0-9]*', sub_part)
+ if m is None:
+ return default
+ try:
+ return int(m.group(0))
+ except ValueError: #Not an integer.
+ try:
+ return float(m.group(0))
+ except ValueError: #Not a number at all.
+ return default
+
+def analyse(gcode, distance_to_report, print_layers = False):
+ lines_found = 0
+ previous_x = 0
+ previous_y = 0
+ dist_squared = distance_to_report * distance_to_report
+ current_layer = 0
+ for line in gcode.split("\n"):
+ if not line.startswith("G1"):
+ if line.startswith(";LAYER:"):
+ previous_x = 0
+ previous_y = 0
+ current_layer += 1
+ continue
+ current_x = getValue(line, "X")
+ current_y = getValue(line, "Y")
+ if current_x is None or current_y is None:
+ continue
+ diff_x = current_x - previous_x
+ diff_y = current_y - previous_y
+ if diff_x * diff_x + diff_y * diff_y < dist_squared:
+ lines_found += 1
+ if print_layers:
+ print("[!] ", distance_to_report, " layer ", current_layer, " ", previous_x, previous_y)
+ previous_y = current_y
+ previous_x = current_x
+ return lines_found
+
+def loadAndPrettyPrint(file_name):
+ print(file_name.replace(".gcode",""))
+ with open(file_name) as f:
+ data = f.read()
+ print("| Line length | Num segments |")
+ print("| ------------- | ------------- |")
+ print("| 1 |", analyse(data, 1), "|")
+ print("| 0.5 |", analyse(data, 0.5), "|")
+ print("| 0.1 |", analyse(data, 0.1), "|")
+ print("| 0.05 |", analyse(data, 0.05), "|")
+ print("| 0.01 |", analyse(data, 0.01), "|")
+ print("| 0.005 |", analyse(data, 0.005), "|")
+ print("| 0.001 |", analyse(data, 0.001), "|")
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2 :
+ print("Usage: <input g-code>")
+ sys.exit(1)
+
+ in_filename = sys.argv[1]
+ loadAndPrettyPrint(sys.argv[1])