Implement libarea improvements for profile Implement libarea pocketing. consolidate occ and libarea pocketing operation into one with algorithm switch consolidate occ aand libarea profile op into one with algorithm switch add basic engraving operation. Add rough UI for profile holding tags implement holding tags for libarea profile. implement basic defaults for depth settings. First move in Drilling is rapid to clearance height. UI needs lots of work but is usable.
112 lines
3.7 KiB
Python
112 lines
3.7 KiB
Python
# Preliminary postprocessor support for Anilam Crusader M CNC controller
|
|
# This code modified from iso.py and emc2.py distriuted with HeeksCAD as of Sep 2010
|
|
# Kurt Jensen 6 Sep 2010
|
|
# Use at your own risk.
|
|
import nc
|
|
import iso
|
|
|
|
class Creator(iso.Creator):
|
|
def init(self):
|
|
iso.Creator.init(self)
|
|
self.arc_centre_absolute = True
|
|
|
|
def SPACE(self): return(' ')
|
|
|
|
# This version of COMMENT removes comments from the resultant GCode
|
|
# Note: The Anilam hates comments when importing code.
|
|
|
|
def COMMENT(self,comment): return('')
|
|
|
|
def program_begin(self, id, comment):
|
|
self.write('%\n'); # Start of file token that Anilam Crusader M likes
|
|
# No Comments for the Anilam crusaher M, please......
|
|
#self.write( ('(' + comment + ')' + '\n') )
|
|
|
|
def program_end(self):
|
|
self.write_blocknum()
|
|
self.write('G29E\n') # End of code signal for Anilam Crusader M
|
|
self.write('%\n') # EOF signal for Anilam Crusader M
|
|
|
|
############################################################################
|
|
## Settings
|
|
|
|
def imperial(self):
|
|
self.write_blocknum()
|
|
self.write( self.IMPERIAL() + '\n')
|
|
self.fmt.number_of_decimal_places = 4
|
|
|
|
def metric(self):
|
|
self.write_blocknum()
|
|
self.write( self.METRIC() + '\n' )
|
|
self.fmt.number_of_decimal_places = 3
|
|
|
|
def absolute(self):
|
|
self.write_blocknum()
|
|
self.write( self.ABSOLUTE() + '\n')
|
|
|
|
def incremental(self):
|
|
self.write_blocknum()
|
|
self.write( self.INCREMENTAL() + '\n' )
|
|
|
|
def polar(self, on=True):
|
|
if (on) :
|
|
self.write_blocknum()
|
|
self.write(self.POLAR_ON() + '\n' )
|
|
else :
|
|
self.write_blocknum()
|
|
self.write(self.POLAR_OFF() + '\n' )
|
|
|
|
def set_plane(self, plane):
|
|
if (plane == 0) :
|
|
self.write_blocknum()
|
|
self.write('G17\n')
|
|
elif (plane == 1) :
|
|
self.write_blocknum()
|
|
self.write('G18\n')
|
|
elif (plane == 2) :
|
|
self.write_blocknum()
|
|
self.write('G19\n')
|
|
|
|
def comment(self, text):
|
|
self.write_blocknum()
|
|
|
|
############################################################################
|
|
## Tools
|
|
|
|
def tool_change(self, id):
|
|
self.write_blocknum()
|
|
self.write(('T%i' % id) + '\n')
|
|
self.t = id
|
|
|
|
def tool_defn(self, id, name='', params=None):
|
|
self.write_blocknum()
|
|
self.write(('T10%.2d' % id) + ' ')
|
|
|
|
if (radius != None):
|
|
self.write(('X%.3f' % radius) + ' ')
|
|
|
|
if (length != None):
|
|
self.write('Z%.3f' % length)
|
|
|
|
self.write('\n')
|
|
|
|
# This is the coordinate system we're using. G54->G59, G59.1, G59.2, G59.3
|
|
# These are selected by values from 1 to 9 inclusive.
|
|
def workplane(self, id):
|
|
if ((id >= 1) and (id <= 6)):
|
|
self.write_blocknum()
|
|
self.write( (self.WORKPLANE() % (id + self.WORKPLANE_BASE())) + '\n')
|
|
if ((id >= 7) and (id <= 9)):
|
|
self.write_blocknum()
|
|
self.write( ((self.WORKPLANE() % (6 + self.WORKPLANE_BASE())) + ('.%i' % (id - 6))) + '\n')
|
|
|
|
# inhibit N codes being generated for line numbers:
|
|
def write_blocknum(self):
|
|
pass
|
|
|
|
def drill(self, x=None, y=None, dwell=None, depthparams = None, retract_mode=None, spindle_mode=None, internal_coolant_on=None, rapid_to_clearance = None):
|
|
self.write('(Canned drill cycle ops are not yet supported here on this Anilam Crusader M postprocessor)')
|
|
|
|
nc.creator = Creator()
|
|
|