فهرست منبع

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

Marius Stanciu 7 سال پیش
والد
کامیت
b589292c0f
3فایلهای تغییر یافته به همراه22 افزوده شده و 21 حذف شده
  1. 7 7
      FlatCAMObj.py
  2. 1 0
      README.md
  3. 14 14
      camlib.py

+ 7 - 7
FlatCAMObj.py

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

+ 1 - 0
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
 - 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
 
 

+ 14 - 14
camlib.py

@@ -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']
-        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
         # 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']
-        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
         # 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"]
-        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.kind = kind
         self.units = units
         self.units = units