- 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.

This commit is contained in:
Marius Stanciu 2019-02-06 02:17:29 +02:00 committed by Marius S
parent 299a6585a7
commit b589292c0f
3 changed files with 22 additions and 21 deletions

View File

@ -388,7 +388,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
grb_final.solid_geometry = MultiPolygon(grb_final.solid_geometry) grb_final.solid_geometry = MultiPolygon(grb_final.solid_geometry)
def __init__(self, name): 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) FlatCAMObj.__init__(self, name)
self.kind = "gerber" self.kind = "gerber"
@ -833,7 +833,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
optionChanged = QtCore.pyqtSignal(str) optionChanged = QtCore.pyqtSignal(str)
def __init__(self, name): 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) FlatCAMObj.__init__(self, name)
self.kind = "excellon" 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" # 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: for slot in self.slots:
if slot['tool'] in tools: 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: if buffer_value == 0:
start = slot['start'] start = slot['start']
stop = slot['stop'] stop = slot['stop']
lines_string = LineString([start, 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) geo_obj.solid_geometry.append(poly)
else: else:
start = slot['start'] start = slot['start']
stop = slot['stop'] stop = slot['stop']
lines_string = LineString([start, 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) geo_obj.solid_geometry.append(poly)
if use_thread: if use_thread:
@ -1967,7 +1967,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
def __init__(self, name): def __init__(self, name):
FlatCAMObj.__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" self.kind = "geometry"
@ -4020,7 +4020,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
CNCjob.__init__(self, units=units, kind=kind, z_move=z_move, CNCjob.__init__(self, units=units, kind=kind, z_move=z_move,
feedrate=feedrate, feedrate_rapid=feedrate_rapid, z_cut=z_cut, tooldia=tooldia, 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) FlatCAMObj.__init__(self, name)

View File

@ -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 - 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 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 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 5.02.3019

View File

@ -101,7 +101,7 @@ class Geometry(object):
self.geo_steps_per_circle = geo_steps_per_circle self.geo_steps_per_circle = geo_steps_per_circle
if geo_steps_per_circle is None: 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 self.geo_steps_per_circle = geo_steps_per_circle
def make_index(self): def make_index(self):
@ -537,7 +537,7 @@ class Geometry(object):
if offset == 0: if offset == 0:
geo_iso = self.solid_geometry geo_iso = self.solid_geometry
else: 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 # end of replaced block
if iso_type == 2: if iso_type == 2:
@ -790,7 +790,7 @@ class Geometry(object):
# Can only result in a Polygon or MultiPolygon # Can only result in a Polygon or MultiPolygon
# NOTE: The resulting polygon can be "empty". # 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: if current.area == 0:
# Otherwise, trying to to insert current.exterior == None # Otherwise, trying to to insert current.exterior == None
# into the FlatCAMStorage will fail. # into the FlatCAMStorage will fail.
@ -813,7 +813,7 @@ class Geometry(object):
while True: while True:
# Can only result in a Polygon or MultiPolygon # 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: if current.area > 0:
# current can be a MultiPolygon # current can be a MultiPolygon
@ -835,7 +835,7 @@ class Geometry(object):
# Optimization: Reduce lifts # Optimization: Reduce lifts
if connect: if connect:
# log.debug("Reducing tool lifts...") # 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 return geoms
@ -1873,11 +1873,11 @@ class Gerber (Geometry):
# How to discretize a circle. # How to discretize a circle.
if steps_per_circle is None: if steps_per_circle is None:
steps_per_circle = Gerber.defaults['steps_per_circle'] steps_per_circle = int(Gerber.defaults['steps_per_circle'])
self.steps_per_circle = steps_per_circle self.steps_per_circle = int(steps_per_circle)
# Initialize parent # 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() self.solid_geometry = Polygon()
@ -3268,10 +3268,10 @@ class Excellon(Geometry):
""" """
if geo_steps_per_circle is None: if geo_steps_per_circle is None:
geo_steps_per_circle = Excellon.defaults['geo_steps_per_circle'] geo_steps_per_circle = int(Excellon.defaults['geo_steps_per_circle'])
self.geo_steps_per_circle = 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 # dictionary to store tools, see above for description
self.tools = {} self.tools = {}
@ -4382,10 +4382,10 @@ class CNCjob(Geometry):
# Used when parsing G-code arcs # Used when parsing G-code arcs
if steps_per_circle is None: if steps_per_circle is None:
steps_per_circle = CNCjob.defaults["steps_per_circle"] steps_per_circle = int(CNCjob.defaults["steps_per_circle"])
self.steps_per_circle = 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.kind = kind
self.units = units self.units = units