def _getGCode(self, order_int): file_text = self._startProgram() # move to start, at safe-Z, in INCR mode file_text += G.set_INCR_mode() file_text += G.G0_XY(( \ self.startRefs['x_starting_ref'], \ self.startRefs['y_starting_ref'] \ )) height_to_cut = self.workpiece_params['stock_height'] while height_to_cut > 0: # move down to top of stock file_text += G.set_ABS_mode() file_text += G.G0_Z(height_to_cut) # get to cutting height height_to_cut = max( height_to_cut - self.cutting_params['cut_per_pass'], 0) file_text += G.set_ABS_mode() file_text += G.G1_Z( height_to_cut) # could be G0 here, but it's good practice # This is other magic for A/B: special order of paths. file_text += self.cutFingers(order_int) file_text += self.returnToStart(order_int) file_text += self.returnToHome() file_text += self._endProgram() return file_text
def cutFingers(self, order_int): """ One full pass. Assumes it's already at its starting position in XYZ. """ bit_diameter = self.machine_params['bit_diameter'] bit_radius = bit_diameter / 2 distribution = self.getDistribution() path_num = 1 file_text = G.set_INCR_mode() file_text += G.G1_XY((0, bit_radius)) # Start _remCut with bit center at edge of stock. file_text += self._remCut() while path_num <= distribution['num_fingers']: if path_num % 2 == order_int: file_text += self._leftwardsPath() else: file_text += self._rightwardsPath() path_num += 1 file_text += self._remCut() file_text += G.G1_XY((0, bit_radius)) return file_text
def returnToHome(self): file_text = self.machine.moveToSafeZ() file_text += G.set_INCR_mode() file_text += G.G0_XY(( \ - self.startRefs['x_starting_ref'], \ - self.startRefs['y_starting_ref'], \ )) return file_text
def setMode(self, mode): file_text = '' if mode.lower() == 'abs': if self.mode != 'abs': self.mode = 'abs' file_text = G.set_ABS_mode() elif mode.lower() == 'incr': if self.mode != 'incr': self.mode = 'incr' file_text = G.set_INCR_mode() else: raise ValueError('"%s" mode is not handled by SimpleMachine' % (mode)) return file_text
def returnToStart(self, order_int): distribution = self.getDistribution() stock_span = self.workpiece_params[ 'stock_width'] + self.machine_params['bit_diameter'] file_text = self.machine.moveToSafeZ() file_text += G.set_INCR_mode() if distribution['num_fingers'] % 2 == 0: file_text += G.G0_XY(( \ 0, \ - stock_span \ )) else: if order_int == 1: file_text += G.G0_XY((\ - self.cutting_params['finger_depth'], \ - stock_span \ )) else: file_text += G.G0_XY((\ self.cutting_params['finger_depth'], \ - stock_span \ )) return file_text