kopia lustrzana https://github.com/vilemduha/blendercam
321 wiersze
11 KiB
Python
321 wiersze
11 KiB
Python
from . import nc
|
|
from . import makerbot_codes as maker
|
|
import datetime
|
|
import iso_modal
|
|
import math
|
|
|
|
|
|
now = datetime.datetime.now()
|
|
|
|
################################################################################
|
|
|
|
|
|
class CreatorMakerbotHBP(iso_modal.CreatorIsoModal):
|
|
def __init__(self):
|
|
iso_modal.CreatorIsoModal.__init__(self)
|
|
|
|
self.absolute_flag = True
|
|
self.prev_g91 = ''
|
|
|
|
|
|
################################################################################
|
|
# program begin and end
|
|
|
|
|
|
def program_begin(self, id, name=''):
|
|
self.write((maker.codes.COMMENT(now)))
|
|
self.write((maker.codes.EXTRUDER_TEMP('220')) + (maker.codes.COMMENT('Extruder Temp')))
|
|
self.write((maker.codes.BUILD_BED_TEMP('110')) + (maker.codes.COMMENT('Build Bed Temp')))
|
|
self.write((maker.codes.FAN_OFF()) + (maker.codes.COMMENT('Fan Off')))
|
|
self.write((maker.codes.METRIC()) + (maker.codes.COMMENT('Metric units')))
|
|
self.write((maker.codes.ABSOLUTE()) + (maker.codes.COMMENT('Absolute units')))
|
|
self.write('G92 X0 Y0 Z0 (You are now at 0,0,0)\n')
|
|
self.write('G0 Z15 (Move up for warmup)\n')
|
|
self.write((maker.codes.EXTRUDER_SPEED_PWM('255')) +
|
|
(maker.codes.COMMENT('Extruder Speed')))
|
|
self.write('M6 T0 (Wait for tool to heat up)\n')
|
|
self.write('G04 P5000 (Wait 5 seconds)\n')
|
|
self.write((maker.codes.EXTRUDER_ON_FWD()) + (maker.codes.COMMENT('Extruder On')))
|
|
self.write('G04 P5000 (Wait 5 seconds)\n')
|
|
self.write((maker.codes.EXTRUDER_OFF()) + (maker.codes.COMMENT('Extruder Off')))
|
|
self.write('M01 (The heated build platform is heating up. Wait until after the lights have turned off for the first time, clear the test extrusion, and click yes.)\n')
|
|
self.write('G0 Z0 (Go back to zero.)\n')
|
|
|
|
def program_end(self):
|
|
self.write((maker.codes.COMMENT('End of the file. Begin cool-down')))
|
|
self.write((maker.codes.EXTRUDER_TEMP('0')) + (maker.codes.COMMENT('Extruder Temp')))
|
|
self.write((maker.codes.BUILD_BED_TEMP('0')) + (maker.codes.COMMENT('Build Bed Temp')))
|
|
self.write((maker.codes.FAN_ON()) + (maker.codes.COMMENT('Fan On')))
|
|
self.write('G92 Z0 (zero our z axis - hack b/c skeinforge mangles gcodes in end.txt)\n')
|
|
self.write('G1 Z10 (go up 10 b/c it was zeroed earlier.)\n')
|
|
self.write('G1 X0 Y0 Z10 (go to 0,0,z)\n')
|
|
self.write((maker.codes.STEPPERS_OFF()) + (maker.codes.COMMENT('Steppers Off')))
|
|
|
|
def program_stop(self):
|
|
self.write((maker.codes.EXTRUDER_TEMP('0')))
|
|
self.write((maker.codes.BUILD_BED_TEMP('0')))
|
|
self.write((maker.codes.STEPPERS_OFF()))
|
|
|
|
################################################################################
|
|
# general
|
|
def write_blocknum(self):
|
|
pass
|
|
|
|
def set_plane(self, plane):
|
|
pass
|
|
|
|
def workplane(self, id):
|
|
pass
|
|
|
|
def spindle(self, s, clockwise):
|
|
pass
|
|
################################################################################
|
|
# Extruder Control
|
|
|
|
def extruder_on(self):
|
|
self.write((maker.codes.EXTRUDER_ON()) + ('\n'))
|
|
|
|
def extruder_off(self):
|
|
self.write((maker.codes.EXTRUDER_OFF()) + ('\n'))
|
|
|
|
def set_extruder_flowrate(self, flowrate):
|
|
self.write((maker.codes.EXTRUDER_SPEED_PWM(flowrate)) + ('\n'))
|
|
|
|
def extruder_temp(self, temp):
|
|
self.write((maker.codes.EXTRUDER_TEMP(temp)) + ('\n'))
|
|
|
|
################################################################################
|
|
# Build Environment Control
|
|
def build_bed_temp(self, temp):
|
|
self.write((maker.codes.BUILD_BED_TEMP(temp)) + ('\n'))
|
|
|
|
def chamber_temp(self, temp):
|
|
self.write((maker.codes.CHAMBER_TEMP(temp)) + ('\n'))
|
|
|
|
################################################################################
|
|
# Fan Control
|
|
def fan_on(self):
|
|
self.write((maker.codes.FAN_ON()) + ('\n'))
|
|
|
|
def fan_off(self):
|
|
self.write((maker.codes.FAN_OFF()) + ('\n'))
|
|
|
|
################################################################################
|
|
# Custom routines
|
|
|
|
def wipe(self):
|
|
self.write(('(This would be a good place for a custom wipe routine)\n'))
|
|
|
|
################################################################################
|
|
# APT style INSERT- insert anything into program
|
|
|
|
def insert(self, text):
|
|
self.write((text + '\n'))
|
|
|
|
################################################################################
|
|
# tool info
|
|
def tool_change(self, id):
|
|
pass
|
|
# self.write_blocknum()
|
|
# self.write((maker.codes.TOOL() % id) + '\n')
|
|
# self.t = id
|
|
|
|
def tool_defn(self, id, name='', params=None):
|
|
pass
|
|
############################################################################
|
|
# Moves
|
|
|
|
def rapid(self, x=None, y=None, z=None, a=None, b=None, c=None):
|
|
self.write_blocknum()
|
|
if self.g0123_modal:
|
|
if self.prev_g0123 != maker.codes.RAPID():
|
|
self.write(maker.codes.RAPID())
|
|
self.prev_g0123 = maker.codes.RAPID()
|
|
else:
|
|
self.write(maker.codes.RAPID())
|
|
self.write_preps()
|
|
if (x != None):
|
|
dx = x - self.x
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.X() + (self.fmt % x))
|
|
else:
|
|
self.write(maker.codes.X() + (self.fmt % dx))
|
|
self.x = x
|
|
if (y != None):
|
|
dy = y - self.y
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.Y() + (self.fmt % y))
|
|
else:
|
|
self.write(maker.codes.Y() + (self.fmt % dy))
|
|
|
|
self.y = y
|
|
if (z != None):
|
|
dz = z - self.z
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.Z() + (self.fmt % z))
|
|
else:
|
|
self.write(maker.codes.Z() + (self.fmt % dz))
|
|
|
|
self.z = z
|
|
|
|
if (a != None):
|
|
da = a - self.a
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.A() + (self.fmt % a))
|
|
else:
|
|
self.write(maker.codes.A() + (self.fmt % da))
|
|
self.a = a
|
|
|
|
if (b != None):
|
|
db = b - self.b
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.B() + (self.fmt % b))
|
|
else:
|
|
self.write(maker.codes.B() + (self.fmt % db))
|
|
self.b = b
|
|
|
|
if (c != None):
|
|
dc = c - self.c
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.C() + (self.fmt % c))
|
|
else:
|
|
self.write(maker.codes.C() + (self.fmt % dc))
|
|
self.c = c
|
|
self.write_spindle()
|
|
self.write_misc()
|
|
self.write('\n')
|
|
|
|
def feed(self, x=None, y=None, z=None, a=None, b=None, c=None):
|
|
if self.same_xyz(x, y, z):
|
|
return
|
|
self.write_blocknum()
|
|
if self.g0123_modal:
|
|
if self.prev_g0123 != maker.codes.FEED():
|
|
self.write(maker.codes.FEED())
|
|
self.prev_g0123 = maker.codes.FEED()
|
|
else:
|
|
self.write(maker.codes.FEED())
|
|
self.write_preps()
|
|
dx = dy = dz = 0
|
|
if (x != None):
|
|
dx = x - self.x
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.X() + (self.fmt % x))
|
|
else:
|
|
self.write(maker.codes.X() + (self.fmt % dx))
|
|
self.x = x
|
|
if (y != None):
|
|
dy = y - self.y
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.Y() + (self.fmt % y))
|
|
else:
|
|
self.write(maker.codes.Y() + (self.fmt % dy))
|
|
|
|
self.y = y
|
|
if (z != None):
|
|
dz = z - self.z
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.Z() + (self.fmt % z))
|
|
else:
|
|
self.write(maker.codes.Z() + (self.fmt % dz))
|
|
|
|
self.z = z
|
|
if (self.fhv):
|
|
self.calc_feedrate_hv(math.sqrt(dx*dx+dy*dy), math.fabs(dz))
|
|
self.write_feedrate()
|
|
self.write_spindle()
|
|
self.write_misc()
|
|
self.write('\n')
|
|
|
|
def same_xyz(self, x=None, y=None, z=None):
|
|
if (x != None):
|
|
if (self.fmt % x) != (self.fmt % self.x):
|
|
return False
|
|
if (y != None):
|
|
if (self.fmt % y) != (self.fmt % self.y):
|
|
return False
|
|
if (z != None):
|
|
if (self.fmt % z) != (self.fmt % self.z):
|
|
return False
|
|
|
|
return True
|
|
|
|
def arc(self, cw, x=None, y=None, z=None, i=None, j=None, k=None, r=None):
|
|
if self.same_xyz(x, y, z):
|
|
return
|
|
self.write_blocknum()
|
|
arc_g_code = ''
|
|
if cw:
|
|
arc_g_code = maker.codes.ARC_CW()
|
|
else:
|
|
arc_g_code = maker.codes.ARC_CCW()
|
|
if self.g0123_modal:
|
|
if self.prev_g0123 != arc_g_code:
|
|
self.write(arc_g_code)
|
|
self.prev_g0123 = arc_g_code
|
|
else:
|
|
self.write(arc_g_code)
|
|
self.write_preps()
|
|
if (x != None):
|
|
dx = x - self.x
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.X() + (self.fmt % x))
|
|
else:
|
|
self.write(maker.codes.X() + (self.fmt % dx))
|
|
self.x = x
|
|
if (y != None):
|
|
dy = y - self.y
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.Y() + (self.fmt % y))
|
|
else:
|
|
self.write(maker.codes.Y() + (self.fmt % dy))
|
|
self.y = y
|
|
if (z != None):
|
|
dz = z - self.z
|
|
if (self.absolute_flag):
|
|
self.write(maker.codes.Z() + (self.fmt % z))
|
|
else:
|
|
self.write(maker.codes.Z() + (self.fmt % dz))
|
|
self.z = z
|
|
if (i != None):
|
|
self.write(maker.codes.CENTRE_X() + (self.fmt % i))
|
|
if (j != None):
|
|
self.write(maker.codes.CENTRE_Y() + (self.fmt % j))
|
|
if (k != None):
|
|
self.write(maker.codes.CENTRE_Z() + (self.fmt % k))
|
|
if (r != None):
|
|
self.write(maker.codes.RADIUS() + (self.fmt % r))
|
|
# use horizontal feed rate
|
|
if (self.fhv):
|
|
self.calc_feedrate_hv(1, 0)
|
|
self.write_feedrate()
|
|
self.write_spindle()
|
|
self.write_misc()
|
|
self.write('\n')
|
|
|
|
def arc_cw(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None):
|
|
self.arc(True, x, y, z, i, j, k, r)
|
|
|
|
def arc_ccw(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None):
|
|
self.arc(False, x, y, z, i, j, k, r)
|
|
|
|
def dwell(self, t):
|
|
self.write_blocknum()
|
|
self.write_preps()
|
|
self.write(maker.codes.DWELL() + (maker.codes.TIME() % t))
|
|
self.write_misc()
|
|
self.write('\n')
|
|
|
|
def rapid_home(self, x=None, y=None, z=None, a=None, b=None, c=None):
|
|
pass
|
|
|
|
def rapid_unhome(self):
|
|
pass
|
|
|
|
def set_machine_coordinates(self):
|
|
self.write(maker.codes.MACHINE_COORDINATES())
|
|
self.prev_g0123 = ''
|
|
|
|
|
|
nc.creator = CreatorMakerbotHBP()
|