[path] Sort helix drill jobs to improve efficiency

This commit is contained in:
Sabin Iacob
2017-04-29 11:06:41 +03:00
parent beff8eb3ca
commit fc9f7510d4

View File

@@ -297,6 +297,35 @@ class ObjectPathHelix(object):
def __setstate__(self, state):
return None
def sort_jobs(self, jobs):
""" sort holes by the nearest neighbor method """
from Queue import PriorityQueue
def sqdist(a, b):
""" square Euclidean distance """
return (a['xc'] - b['xc']) ** 2 + (a['yc'] - b['yc']) ** 2
def find_closest(job_list, job, dist):
q = PriorityQueue()
for j in job_list:
q.put((dist(j, job) + job['xc'], j))
prio, result = q.get()
return result
out = []
zero = {'xc': 0, 'yc': 0}
out.append(find_closest(jobs, zero, sqdist))
while jobs:
closest = find_closest(jobs, out[-1], sqdist)
out.append(closest)
jobs.remove(closest)
return out
def execute(self, obj):
from Part import Circle, Cylinder, Plane
from math import sqrt
@@ -404,6 +433,8 @@ class ObjectPathHelix(object):
drill_jobs.extend(jobs)
drill_jobs = self.sort_jobs(drill_jobs)
for job in drill_jobs:
output += helix_cut((job["xc"], job["yc"]), job["r_out"], job["r_in"], obj.DeltaR.Value,
job["zmax"], job["zmin"], obj.StepDown.Value,