#!/usr/bin/python from interpreter import INTERP_OK import math def g740(self, **words): # G74 is typically called like so: # G74 x ? z ? k ? (x = diameter, usually 0; z = hole endpoint; k = peck length) # get position if (self.params['_lathe_diameter_mode']): # if is_lathe_mode x_mode = 2 else: x_mode = 1 x_start = self.params[5420] * x_mode z_start = self.params[5422] if 'x' in words: x_end = words['x'] * x_mode else: x_end = x_start * x_mode if 'z' in words: z_end = words['z'] if z_end > z_start: return "G74 error - Z cannot be larger than the starting Z position" else: z_end = z_start if 'k' in words: peck_length = words['k'] if peck_length < 0: return "G74 error - K cannot be negative" else: peck_length = 0 if (self.params['_metric']): # if is_metric backoff_length = 0.50 # mm rounding_fudge = 0.0001 else: backoff_length = 0.020 # inch rounding_fudge = 0.00001 z_range = math.fabs(z_end - z_start) - rounding_fudge # rounding_fudge prevents extra peck if peck_length > 0: num_pecks = int(z_range / peck_length) else: num_pecks = 0 z_list = [] for i in range(num_pecks + 1): z_list.append(z_start - (i * peck_length)) z_list.append(z_end) print "--kaw - z_list =", z_list if math.fabs(x_end - x_start) > rounding_fudge: # We're groove'n for i in range(num_pecks + 1): self.execute("G0 Z %s" % z_list[i]) self.execute("G1 Z %s" % z_list[i + 1]) self.execute("G1 X %s" % x_end) self.execute("G1 Z %s" % (z_list[i] + backoff_length)) self.execute("G0 X %s" % x_start) else: # We're drilling for i in range(num_pecks + 1): self.execute("G1 Z %s" % z_list[i + 1]) self.execute("G0 Z %s" % (z_list[i + 1] + backoff_length)) self.execute("G0 Z %s" % z_start) return INTERP_OK