mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-04 03:04:23 +08:00
Add line length checker script
This commit is contained in:
parent
90eb2bfbdc
commit
0ddc6e1c58
70
scripts/line_length_checker.py
Normal file
70
scripts/line_length_checker.py
Normal file
@ -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])
|
Loading…
x
Reference in New Issue
Block a user