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

This is a implementation of the the sorting of the tools found in Excellon file done in Python language and independent of the UI. There is no need to revert the previous solution as that one will make the sorting visible in GUI.

Marius Stanciu 10 лет назад
Родитель
Сommit
a35a422bcc
1 измененных файлов с 12 добавлено и 4 удалено
  1. 12 4
      camlib.py

+ 12 - 4
camlib.py

@@ -55,6 +55,8 @@ from svgparse import *
 
 import logging
 
+import operator
+
 log = logging.getLogger('base2')
 log.setLevel(logging.DEBUG)
 # log.setLevel(logging.WARNING)
@@ -2708,12 +2710,18 @@ class CNCjob(Geometry):
         log.debug("Creating CNC Job from Excellon...")
 
         # Tools
+        
+        #sort the tools list by the second item in tuple (here we have a dict with diameter of the tool)
+        #so we actually are sorting the tools by diameter
+        sorted_tools = sorted(exobj.tools.items(), key = operator.itemgetter(1))    
         if tools == "all":
-            tools = [tool for tool in exobj.tools]
+            tools = str([i[0] for i in sorted_tools])   #we get a string of ordered tools
+            log.debug("Tools 'all' and sorted are: %s" % str(tools))
         else:
-            tools = [x.strip() for x in tools.split(",")]
-            tools = filter(lambda i: i in exobj.tools, tools)
-        log.debug("Tools are: %s" % str(tools))
+            selected_tools = [x.strip() for x in tools.split(",")]  #we strip spaces and also separate the tools by ','
+            selected_tools = filter(lambda i: i in selected_tools, selected_tools)
+            tools = [i for i,j in sorted_tools for k in selected_tools if i == k]   #create a list of tools from the sorted_tools list only if the tools is in the selected tools
+            log.debug("Tools selected and sorted are: %s" % str(tools)) 
 
         # Points (Group by tool)
         points = {}