From b589292c0f008939191cf5b101f97233094c38fa Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 Feb 2019 02:17:29 +0200 Subject: [PATCH] - fixed bug in Excellon Slots milling: a value of a dict key was a string instead to be an int. A cast to integer solved it. --- FlatCAMObj.py | 14 +++++++------- README.md | 1 + camlib.py | 28 ++++++++++++++-------------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/FlatCAMObj.py b/FlatCAMObj.py index d0eea1f8..e8dbdf65 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -388,7 +388,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber): grb_final.solid_geometry = MultiPolygon(grb_final.solid_geometry) def __init__(self, name): - Gerber.__init__(self, steps_per_circle=self.app.defaults["gerber_circle_steps"]) + Gerber.__init__(self, steps_per_circle=int(self.app.defaults["gerber_circle_steps"])) FlatCAMObj.__init__(self, name) self.kind = "gerber" @@ -833,7 +833,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon): optionChanged = QtCore.pyqtSignal(str) def __init__(self, name): - Excellon.__init__(self, geo_steps_per_circle=self.app.defaults["geometry_circle_steps"]) + Excellon.__init__(self, geo_steps_per_circle=int(self.app.defaults["geometry_circle_steps"])) FlatCAMObj.__init__(self, name) self.kind = "excellon" @@ -1590,20 +1590,20 @@ class FlatCAMExcellon(FlatCAMObj, Excellon): # we add a tenth of the minimum value, meaning 0.0000001, which from our point of view is "almost zero" for slot in self.slots: if slot['tool'] in tools: - buffer_value = self.tools[slot['tool']]["C"] / 2 - tooldia / 2 + buffer_value = (float(self.tools[slot['tool']]["C"]) / 2) - float(tooldia / 2) if buffer_value == 0: start = slot['start'] stop = slot['stop'] lines_string = LineString([start, stop]) - poly = lines_string.buffer(0.0000001, self.geo_steps_per_circle).exterior + poly = lines_string.buffer(0.0000001, int(self.geo_steps_per_circle)).exterior geo_obj.solid_geometry.append(poly) else: start = slot['start'] stop = slot['stop'] lines_string = LineString([start, stop]) - poly = lines_string.buffer(buffer_value, self.geo_steps_per_circle).exterior + poly = lines_string.buffer(buffer_value, int(self.geo_steps_per_circle)).exterior geo_obj.solid_geometry.append(poly) if use_thread: @@ -1967,7 +1967,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): def __init__(self, name): FlatCAMObj.__init__(self, name) - Geometry.__init__(self, geo_steps_per_circle=self.app.defaults["geometry_circle_steps"]) + Geometry.__init__(self, geo_steps_per_circle=int(self.app.defaults["geometry_circle_steps"])) self.kind = "geometry" @@ -4020,7 +4020,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob): CNCjob.__init__(self, units=units, kind=kind, z_move=z_move, feedrate=feedrate, feedrate_rapid=feedrate_rapid, z_cut=z_cut, tooldia=tooldia, - spindlespeed=spindlespeed, steps_per_circle=self.app.defaults["cncjob_steps_per_circle"]) + spindlespeed=spindlespeed, steps_per_circle=int(self.app.defaults["cncjob_steps_per_circle"])) FlatCAMObj.__init__(self, name) diff --git a/README.md b/README.md index 9df214d2..e261f25d 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ CAD program, and create G-Code for Isolation routing. - done a regression on Tool Tab default text. It somehow delete Tools in certain scenarios so I got rid of it - fixed bug in multigeometry geometry not having the bounds in self.options and crashing the GCode generation - fixed bug that crashed whole application in case that the GCode editor is activated on a Tool gcode that is defective. +- fixed bug in Excellon Slots milling: a value of a dict key was a string instead to be an int. A cast to integer solved it. 5.02.3019 diff --git a/camlib.py b/camlib.py index 3fe32d44..cd6f5658 100644 --- a/camlib.py +++ b/camlib.py @@ -101,7 +101,7 @@ class Geometry(object): self.geo_steps_per_circle = geo_steps_per_circle if geo_steps_per_circle is None: - geo_steps_per_circle = Geometry.defaults["geo_steps_per_circle"] + geo_steps_per_circle = int(Geometry.defaults["geo_steps_per_circle"]) self.geo_steps_per_circle = geo_steps_per_circle def make_index(self): @@ -537,7 +537,7 @@ class Geometry(object): if offset == 0: geo_iso = self.solid_geometry else: - geo_iso = self.solid_geometry.buffer(offset, int(self.geo_steps_per_circle / 4)) + geo_iso = self.solid_geometry.buffer(offset, int(int(self.geo_steps_per_circle) / 4)) # end of replaced block if iso_type == 2: @@ -790,7 +790,7 @@ class Geometry(object): # Can only result in a Polygon or MultiPolygon # NOTE: The resulting polygon can be "empty". - current = polygon.buffer((-tooldia / 1.999999), int(steps_per_circle / 4)) + current = polygon.buffer((-tooldia / 1.999999), int(int(steps_per_circle) / 4)) if current.area == 0: # Otherwise, trying to to insert current.exterior == None # into the FlatCAMStorage will fail. @@ -813,7 +813,7 @@ class Geometry(object): while True: # Can only result in a Polygon or MultiPolygon - current = current.buffer(-tooldia * (1 - overlap), int(steps_per_circle / 4)) + current = current.buffer(-tooldia * (1 - overlap), int(int(steps_per_circle) / 4)) if current.area > 0: # current can be a MultiPolygon @@ -835,7 +835,7 @@ class Geometry(object): # Optimization: Reduce lifts if connect: # log.debug("Reducing tool lifts...") - geoms = Geometry.paint_connect(geoms, polygon, tooldia, steps_per_circle) + geoms = Geometry.paint_connect(geoms, polygon, tooldia, int(steps_per_circle)) return geoms @@ -1873,11 +1873,11 @@ class Gerber (Geometry): # How to discretize a circle. if steps_per_circle is None: - steps_per_circle = Gerber.defaults['steps_per_circle'] - self.steps_per_circle = steps_per_circle + steps_per_circle = int(Gerber.defaults['steps_per_circle']) + self.steps_per_circle = int(steps_per_circle) # Initialize parent - Geometry.__init__(self, geo_steps_per_circle=steps_per_circle) + Geometry.__init__(self, geo_steps_per_circle=int(steps_per_circle)) self.solid_geometry = Polygon() @@ -3268,10 +3268,10 @@ class Excellon(Geometry): """ if geo_steps_per_circle is None: - geo_steps_per_circle = Excellon.defaults['geo_steps_per_circle'] - self.geo_steps_per_circle = geo_steps_per_circle + geo_steps_per_circle = int(Excellon.defaults['geo_steps_per_circle']) + self.geo_steps_per_circle = int(geo_steps_per_circle) - Geometry.__init__(self, geo_steps_per_circle=geo_steps_per_circle) + Geometry.__init__(self, geo_steps_per_circle=int(geo_steps_per_circle)) # dictionary to store tools, see above for description self.tools = {} @@ -4382,10 +4382,10 @@ class CNCjob(Geometry): # Used when parsing G-code arcs if steps_per_circle is None: - steps_per_circle = CNCjob.defaults["steps_per_circle"] - self.steps_per_circle = steps_per_circle + steps_per_circle = int(CNCjob.defaults["steps_per_circle"]) + self.steps_per_circle = int(steps_per_circle) - Geometry.__init__(self, geo_steps_per_circle=steps_per_circle) + Geometry.__init__(self, geo_steps_per_circle=int(steps_per_circle)) self.kind = kind self.units = units