Started multi-pass cuts.

This commit is contained in:
Juan Pablo Caram 2015-10-04 21:45:19 -04:00
parent b5f428deea
commit d687fb5287

View File

@ -2686,7 +2686,7 @@ class CNCjob(Geometry):
gcode += "M6\n" # Tool change
gcode += "(MSG, Change to tool dia=%.4f)\n" % exobj.tools[tool]["C"]
gcode += "M0\n" # Temporary machine stop
if(self.spindlespeed != None):
if self.spindlespeed is not None:
gcode += "M03 S%d\n" % int(self.spindlespeed) # Spindle start with configured speed
else:
gcode += "M03\n" # Spindle start
@ -2702,7 +2702,8 @@ class CNCjob(Geometry):
self.gcode = gcode
def generate_from_geometry_2(self, geometry, append=True, tooldia=None, tolerance=0):
def generate_from_geometry_2(self, geometry, append=True, tooldia=None, tolerance=0,
multipass=False, depthpercut=None):
"""
Second algorithm to generate from Geometry.
@ -2779,15 +2780,32 @@ class CNCjob(Geometry):
if pt != geo.coords[0] and pt == geo.coords[-1]:
geo.coords = list(geo.coords)[::-1]
# G-code
# Note: self.linear2gcode() and self.point2gcode() will
# lower and raise the tool every time.
if type(geo) == LineString or type(geo) == LinearRing:
self.gcode += self.linear2gcode(geo, tolerance=tolerance)
elif type(geo) == Point:
self.gcode += self.point2gcode(geo)
if not multipass:
# G-code
# Note: self.linear2gcode() and self.point2gcode() will
# lower and raise the tool every time.
if type(geo) == LineString or type(geo) == LinearRing:
self.gcode += self.linear2gcode(geo, tolerance=tolerance)
elif type(geo) == Point:
self.gcode += self.point2gcode(geo)
else:
log.warning("G-code generation not implemented for %s" % (str(type(geo))))
else:
log.warning("G-code generation not implemented for %s" % (str(type(geo))))
if depthpercut is None:
depthpercut = self.z_cut
depth = 0
while depth > self.z_cut:
depth -= depthpercut
# G-code
# Note: self.linear2gcode() and self.point2gcode() will
# lower and raise the tool every time.
# if type(geo) == LineString or type(geo) == LinearRing:
# self.gcode += self.linear2gcode(geo, tolerance=tolerance)
# elif type(geo) == Point:
# self.gcode += self.point2gcode(geo)
# else:
# log.warning("G-code generation not implemented for %s" % (str(type(geo))))
# Delete from index, update current location and continue.
#rti.delete(hits[0], geo.coords[0])
@ -3033,7 +3051,7 @@ class CNCjob(Geometry):
# TODO: This takes forever. Too much data?
self.solid_geometry = cascaded_union([geo['geom'] for geo in self.gcode_parsed])
def linear2gcode(self, linear, tolerance=0):
def linear2gcode(self, linear, tolerance=0, down=True, up=True):
"""
Generates G-code to cut along the linear feature.
@ -3066,7 +3084,10 @@ class CNCjob(Geometry):
for pt in path[1:]:
gcode += t % (1, pt[0], pt[1]) # Linear motion to point
gcode += "G00 Z%.4f\n" % self.z_move # Stop cutting
if up:
gcode += "G00 Z%.4f\n" % self.z_move # Stop cutting
return gcode
def point2gcode(self, point):