Просмотр исходного кода

- optimized the Paint and NCC Tools. When the Lines type of painting/clearing is used, the lines will try to arrange themselves on the direction that the lines length clearing the polygon are bigger

Marius Stanciu 6 лет назад
Родитель
Сommit
c004c9082f
2 измененных файлов с 64 добавлено и 26 удалено
  1. 4 0
      README.md
  2. 60 26
      camlib.py

+ 4 - 0
README.md

@@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing.
 
 
 =================================================
 =================================================
 
 
+10.02.2020
+
+- optimized the Paint and NCC Tools. When the Lines type of painting/clearing is used, the lines will try to arrange themselves on the direction that the lines length clearing the polygon are bigger
+
 8.02.2020
 8.02.2020
 
 
 - added a new preprocessor for using laser on a Marlin 3D printer named 'Marlin_laser_use_Spindle_pin'
 - added a new preprocessor for using laser on a Marlin 3D printer named 'Marlin_laser_use_Spindle_pin'

+ 60 - 26
camlib.py

@@ -1445,37 +1445,71 @@ class Geometry(object):
             log.debug("camlib.Geometry.clear_polygon3() --> Could not buffer the Polygon")
             log.debug("camlib.Geometry.clear_polygon3() --> Could not buffer the Polygon")
             return None
             return None
 
 
-        # First line
-        try:
-            y = top - tooldia / 1.99999999
-            while y > bot + tooldia / 1.999999999:
-                if self.app.abort_flag:
-                    # graceful abort requested by the user
-                    raise FlatCAMApp.GracefulException
-
-                # provide the app with a way to process the GUI events when in a blocking loop
-                QtWidgets.QApplication.processEvents()
+        # decide the direction of the lines
+        if abs(left - right) >= abs(top  -bot):
+            # First line
+            try:
+                y = top - tooldia / 1.99999999
+                while y > bot + tooldia / 1.999999999:
+                    if self.app.abort_flag:
+                        # graceful abort requested by the user
+                        raise FlatCAMApp.GracefulException
+
+                    # provide the app with a way to process the GUI events when in a blocking loop
+                    QtWidgets.QApplication.processEvents()
+
+                    line = LineString([(left, y), (right, y)])
+                    line = line.intersection(margin_poly)
+                    lines_trimmed.append(line)
+                    y -= tooldia * (1 - overlap)
+                    if prog_plot:
+                        self.plot_temp_shapes(line)
+                        self.temp_shapes.redraw()
 
 
+                # Last line
+                y = bot + tooldia / 2
                 line = LineString([(left, y), (right, y)])
                 line = LineString([(left, y), (right, y)])
                 line = line.intersection(margin_poly)
                 line = line.intersection(margin_poly)
-                lines_trimmed.append(line)
-                y -= tooldia * (1 - overlap)
-                if prog_plot:
-                    self.plot_temp_shapes(line)
-                    self.temp_shapes.redraw()
 
 
-            # Last line
-            y = bot + tooldia / 2
-            line = LineString([(left, y), (right, y)])
-            line = line.intersection(margin_poly)
+                for ll in line:
+                    lines_trimmed.append(ll)
+                    if prog_plot:
+                        self.plot_temp_shapes(line)
+            except Exception as e:
+                log.debug('camlib.Geometry.clear_polygon3() Processing poly --> %s' % str(e))
+                return None
+        else:
+            # First line
+            try:
+                x = left + tooldia / 1.99999999
+                while x < right - tooldia / 1.999999999:
+                    if self.app.abort_flag:
+                        # graceful abort requested by the user
+                        raise FlatCAMApp.GracefulException
+
+                    # provide the app with a way to process the GUI events when in a blocking loop
+                    QtWidgets.QApplication.processEvents()
+
+                    line = LineString([(x, top), (x, bot)])
+                    line = line.intersection(margin_poly)
+                    lines_trimmed.append(line)
+                    x += tooldia * (1 - overlap)
+                    if prog_plot:
+                        self.plot_temp_shapes(line)
+                        self.temp_shapes.redraw()
 
 
-            for ll in line:
-                lines_trimmed.append(ll)
-                if prog_plot:
-                    self.plot_temp_shapes(line)
-        except Exception as e:
-            log.debug('camlib.Geometry.clear_polygon3() Processing poly --> %s' % str(e))
-            return None
+                # Last line
+                x = right + tooldia / 2
+                line = LineString([(x, top), (x, bot)])
+                line = line.intersection(margin_poly)
+
+                for ll in line:
+                    lines_trimmed.append(ll)
+                    if prog_plot:
+                        self.plot_temp_shapes(line)
+            except Exception as e:
+                log.debug('camlib.Geometry.clear_polygon3() Processing poly --> %s' % str(e))
+                return None
 
 
         if prog_plot:
         if prog_plot:
             self.temp_shapes.redraw()
             self.temp_shapes.redraw()