From: EMC C. s. <cv...@cv...> - 2006-08-30 02:27:34
|
Modified file emc2/src/emc/usr_intf/axis/scripts/image-to-gcode.py Full file: <http://cvs.linuxcnc.org/cvs/emc2/src/emc/usr_intf/axis/scripts/image-to-gcode.py?rev=1.10> Difference: <http://cvs.linuxcnc.org/cvs/emc2/src/emc/usr_intf/axis/scripts/image-to-gcode.py.diff?r1=1.9;r2=1.10> Branch: HEAD Log: revision 1.10 date: 2006/08/30 02:27:32; author: jepler; state: Exp; lines: +141 -6 begin to introduce entry cuts. hard-coded arc entry cut for now, works sorta --- image-to-gcode.py 2006/08/29 22:47:29 1.9 +++ image-to-gcode.py 2006/08/30 02:27:32 1.10 @@ -166,7 +166,8 @@ class Converter: def __init__(self, image, units, tool_shape, pixelsize, pixelstep, safetyheight, \ - tolerance, feed, convert_rows, convert_cols, cols_first_flag): + tolerance, feed, convert_rows, convert_cols, cols_first_flag, + entry_cut): self.image = image self.units = units self.tool = tool_shape @@ -178,6 +179,7 @@ self.convert_rows = convert_rows self.convert_cols = convert_cols self.cols_first_flag = cols_first_flag + self.entry_cut = entry_cut self.cache = {} @@ -245,8 +247,7 @@ scan.append(milldata) for flag, points in convert_scan(primary, scan): if flag: - self.g.safety() - self.g.rapid(points[0][1][0], points[0][1][1]) + self.entry_cut(self, points[0][0], j, points) for p in points: self.g.cut(*p[1]) @@ -268,14 +269,148 @@ scan.append(milldata) for flag, points in convert_scan(primary, scan): if flag: - self.g.safety() - self.g.rapid(points[0][1][0], points[0][1][1]) + self.entry_cut(self, j, points[0][0], points) for p in points: self.g.cut(*p[1]) def convert(*args, **kw): return Converter(*args, **kw).convert() +class SimpleEntryCut: + def __init__(self, feed): + self.feed = feed + + def __call__(self, conv, i0, j0, points): + p = points[0][1] + if self.feed: + conv.g.set_feed(self.feed) + conv.g.safety() + conv.g.rapid(p[0], p[1]) + if self.feed: + conv.g.set_feed(conv.feed) + +def circ(r,b): + """\ +Calculate the portion of the arc to do so that none is above the +safety height (that's just silly) +XXX something is wrong with this math""" + + z = (2 * r * b + b) + if z < 0: z = 0 + print >>sys.stderr, "circ", r, b, z + return r/2 - z ** .5 + +class ArcEntryCut: + def __init__(self, feed, max_radius): + self.feed = feed + self.max_radius = max_radius + + def __call__(self, conv, i0, j0, points): + if len(points) < 2: + p = points[0][1] + if self.feed: + conv.g.set_feed(self.feed) + conv.g.safety() + conv.g.rapid(p[0], p[1]) + if self.feed: + conv.g.set_feed(conv.feed) + return + + p1 = points[0][1] + p2 = points[1][1] + z0 = p1[2] + + lim = int(ceil(self.max_radius / conv.pixelsize)) + r = range(1, lim) + + if self.feed: + conv.g.set_feed(self.feed) + conv.g.safety() + + x, y, z = p1 + + pixelsize = conv.pixelsize |