diff options
author | Jaime van Kessel <nallath@gmail.com> | 2021-05-18 12:37:16 +0300 |
---|---|---|
committer | Jaime van Kessel <nallath@gmail.com> | 2021-05-18 12:37:16 +0300 |
commit | 0ddc6e1c58ef8119e31047b3c5472a8b47795114 (patch) | |
tree | 58df1ac8d15645c4993dff816fbe2ba83f8ffac0 /scripts | |
parent | 90eb2bfbdcc66fdbf82b0e1dac6bcf1a536845b0 (diff) |
Add line length checker script
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/line_length_checker.py | 70 |
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]) |