[path] Sort helix drill jobs to improve efficiency
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user