|  |  | @ -17,10 +17,13 @@ min_g1 = 3 | 
			
		
	
		
		
			
				
					
					|  |  |  | max_g1 = 1000 |  |  |  | max_g1 = 1000 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # g29 keyword |  |  |  | # g29 keyword | 
			
		
	
		
		
			
				
					
					|  |  |  | g29_keyword = ';MarlinG29Script' |  |  |  | g29_keyword = 'g29' | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | g29_keyword = g29_keyword.upper() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # output filename |  |  |  | # output filename | 
			
		
	
		
		
			
				
					
					|  |  |  | output_file = folder + 'g29_' + my_file |  |  |  | output_file = folder + 'g29_' + my_file | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # input filename | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | input_file = folder + my_file | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # offset makes the plane a little bit bigger |  |  |  | # offset makes the plane a little bit bigger | 
			
		
	
		
		
			
				
					
					|  |  |  | offset_x = 10 |  |  |  | offset_x = 10 | 
			
		
	
	
		
		
			
				
					|  |  | @ -40,10 +43,12 @@ lines_of_g1 = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  | gcode = [] |  |  |  | gcode = [] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # return only g1-lines | 
			
		
	
		
		
			
				
					
					|  |  |  | def has_g1(line): |  |  |  | def has_g1(line): | 
			
		
	
		
		
			
				
					
					|  |  |  |     return line[:2].upper() == "G1" |  |  |  |     return line[:2].upper() == "G1" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # find position in g1 (x,y,z) | 
			
		
	
		
		
			
				
					
					|  |  |  | def find_axis(line, axis): |  |  |  | def find_axis(line, axis): | 
			
		
	
		
		
			
				
					
					|  |  |  |     found = False |  |  |  |     found = False | 
			
		
	
		
		
			
				
					
					|  |  |  |     number = "" |  |  |  |     number = "" | 
			
		
	
	
		
		
			
				
					|  |  | @ -51,6 +56,8 @@ def find_axis(line, axis): | 
			
		
	
		
		
			
				
					
					|  |  |  |         if found: |  |  |  |         if found: | 
			
		
	
		
		
			
				
					
					|  |  |  |             if char == ".": |  |  |  |             if char == ".": | 
			
		
	
		
		
			
				
					
					|  |  |  |                 number += char |  |  |  |                 number += char | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             elif char == "-": | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 number += char | 
			
		
	
		
		
			
				
					
					|  |  |  |             else: |  |  |  |             else: | 
			
		
	
		
		
			
				
					
					|  |  |  |                 try: |  |  |  |                 try: | 
			
		
	
		
		
			
				
					
					|  |  |  |                     int(char) |  |  |  |                     int(char) | 
			
		
	
	
		
		
			
				
					|  |  | @ -65,6 +72,7 @@ def find_axis(line, axis): | 
			
		
	
		
		
			
				
					
					|  |  |  |         return None |  |  |  |         return None | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # save the min or max-values for each axis | 
			
		
	
		
		
			
				
					
					|  |  |  | def set_mima(line): |  |  |  | def set_mima(line): | 
			
		
	
		
		
			
				
					
					|  |  |  |     global min_x, max_x, min_y, max_y, last_z |  |  |  |     global min_x, max_x, min_y, max_y, last_z | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -81,6 +89,7 @@ def set_mima(line): | 
			
		
	
		
		
			
				
					
					|  |  |  |     return min_x, max_x, min_y, max_y |  |  |  |     return min_x, max_x, min_y, max_y | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # find z in the code and return it | 
			
		
	
		
		
			
				
					
					|  |  |  | def find_z(gcode, start_at_line=0): |  |  |  | def find_z(gcode, start_at_line=0): | 
			
		
	
		
		
			
				
					
					|  |  |  |     for i in range(start_at_line, len(gcode)): |  |  |  |     for i in range(start_at_line, len(gcode)): | 
			
		
	
		
		
			
				
					
					|  |  |  |         my_z = find_axis(gcode[i], 'Z') |  |  |  |         my_z = find_axis(gcode[i], 'Z') | 
			
		
	
	
		
		
			
				
					|  |  | @ -104,27 +113,30 @@ def z_parse(gcode, start_at_line=0, end_at_line=0): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         all_z.append(z) |  |  |  |         all_z.append(z) | 
			
		
	
		
		
			
				
					
					|  |  |  |         z_at_line.append(i) |  |  |  |         z_at_line.append(i) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         temp_line = i - last_i -1 | 
			
		
	
		
		
			
				
					
					|  |  |  |         line_between_z.append(i - last_i - 1) |  |  |  |         line_between_z.append(i - last_i - 1) | 
			
		
	
		
		
			
				
					
					|  |  |  |         # last_z = z |  |  |  |         # last_z = z | 
			
		
	
		
		
			
				
					
					|  |  |  |         last_i = i |  |  |  |         last_i = i | 
			
		
	
		
		
			
				
					
					|  |  |  |         if 0 < end_at_line <= i: |  |  |  |         if 0 < end_at_line <= i or temp_line >= min_g1: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             # print('break at line {} at heigth {}'.format(i, z)) | 
			
		
	
		
		
			
				
					
					|  |  |  |             break |  |  |  |             break | 
			
		
	
		
		
			
				
					
					|  |  |  |             # print('{}:{}'.format(last_z, last_i)) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     line_between_z = line_between_z[1:] |  |  |  |     line_between_z = line_between_z[1:] | 
			
		
	
		
		
			
				
					
					|  |  |  |     return all_z, line_between_z, z_at_line |  |  |  |     return all_z, line_between_z, z_at_line | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # get the lines which should be the first layer | 
			
		
	
		
		
			
				
					
					|  |  |  | def get_lines(gcode, minimum): |  |  |  | def get_lines(gcode, minimum): | 
			
		
	
		
		
			
				
					
					|  |  |  |     i = 0 |  |  |  |     i = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     all_z, line_between_z, z_at_line = z_parse(gcode, end_at_line=max_g1) |  |  |  |     all_z, line_between_z, z_at_line = z_parse(gcode, end_at_line=max_g1) | 
			
		
	
		
		
			
				
					
					|  |  |  |     for count in line_between_z: |  |  |  |     for count in line_between_z: | 
			
		
	
		
		
			
				
					
					|  |  |  |         i += 1 |  |  |  |         i += 1 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if count > minimum: |  |  |  |         if count > minimum: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             # print('layer: {}:{}'.format(z_at_line[i-1], z_at_line[i])) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return z_at_line[i - 1], z_at_line[i] |  |  |  |             return z_at_line[i - 1], z_at_line[i] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | with open(folder+my_file, 'r') as file: |  |  |  | with open(input_file, 'r') as file: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     lines = 0 |  |  |  |     lines = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     for line in file: |  |  |  |     for line in file: | 
			
		
	
		
		
			
				
					
					|  |  |  |         lines += 1 |  |  |  |         lines += 1 | 
			
		
	
	
		
		
			
				
					|  |  | @ -138,6 +150,8 @@ start, end = get_lines(gcode, min_g1) | 
			
		
	
		
		
			
				
					
					|  |  |  | for i in range(start, end): |  |  |  | for i in range(start, end): | 
			
		
	
		
		
			
				
					
					|  |  |  |     set_mima(gcode[i]) |  |  |  |     set_mima(gcode[i]) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | print('x_min:{} x_max:{}\ny_min:{} y_max:{}'.format(min_x, max_x, min_y, max_y)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | min_x = int(min_x) - offset_x |  |  |  | min_x = int(min_x) - offset_x | 
			
		
	
		
		
			
				
					
					|  |  |  | max_x = int(max_x) + offset_x |  |  |  | max_x = int(max_x) + offset_x | 
			
		
	
		
		
			
				
					
					|  |  |  | min_y = int(min_y) - offset_y |  |  |  | min_y = int(min_y) - offset_y | 
			
		
	
	
		
		
			
				
					|  |  | @ -149,18 +163,17 @@ new_command = 'G29 L{0} R{1} F{2} B{3} P{4}\n'.format(min_x, | 
			
		
	
		
		
			
				
					
					|  |  |  |                                                       max_y, |  |  |  |                                                       max_y, | 
			
		
	
		
		
			
				
					
					|  |  |  |                                                       probing_points) |  |  |  |                                                       probing_points) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | out_file = open(output_file, 'w') |  |  |  | out_file = open(output_file, 'w') | 
			
		
	
		
		
			
				
					
					|  |  |  | print('out_file open') |  |  |  | in_file = open(input_file, 'r') | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | input_file = open(my_file, 'r') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | print('input_file open') |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | for line in input_file: |  |  |  | for line in in_file: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     if line[:len(g29_keyword)] == g29_keyword: |  |  |  |     if line[:len(g29_keyword)].upper() == g29_keyword: | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         out_file.write(new_command) |  |  |  |         out_file.write(new_command) | 
			
		
	
		
		
			
				
					
					|  |  |  |         print('write new_command') |  |  |  |         print('write G29') | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |     else: | 
			
		
	
		
		
			
				
					
					|  |  |  |         out_file.write(line) |  |  |  |         out_file.write(line) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | file.close() |  |  |  | file.close() | 
			
		
	
		
		
			
				
					
					|  |  |  | out_file.close() |  |  |  | out_file.close() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | print('auto G29 finished') | 
			
		
	
	
		
		
			
				
					|  |  | 
 |