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
예제 #4
0
 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