Commit 6d63da17 authored by sumpfralle's avatar sumpfralle

fixed climb/conventional milling style for ContourFollow and Engraving


git-svn-id: https://pycam.svn.sourceforge.net/svnroot/pycam/trunk@838 bbaffbd6-741e-11dd-a85d-61de82d9cad9
parent 443453a6
...@@ -59,6 +59,9 @@ class Path: ...@@ -59,6 +59,9 @@ class Path:
s += "%d(%g,%g,%g)" % (p.id, p.x, p.y, p.z) s += "%d(%g,%g,%g)" % (p.id, p.x, p.y, p.z)
return s return s
def insert(self, index, p):
self.points.insert(index, get_point_object(p))
def append(self, p): def append(self, p):
self.points.append(get_point_object(p)) self.points.append(get_point_object(p))
......
...@@ -50,7 +50,8 @@ class EngraveCutter: ...@@ -50,7 +50,8 @@ class EngraveCutter:
self.pa_push = path_processor self.pa_push = path_processor
# We use a separated path processor for the last "drop" layer. # We use a separated path processor for the last "drop" layer.
# This path processor does not need to be configurable. # This path processor does not need to be configurable.
self.pa_drop = pycam.PathProcessors.PathAccumulator.PathAccumulator() self.pa_drop = pycam.PathProcessors.PathAccumulator.PathAccumulator(
reverse=self.pa_push.reverse)
self.physics = physics self.physics = physics
def GenerateToolPath(self, minz, maxz, horiz_step, dz, draw_callback=None): def GenerateToolPath(self, minz, maxz, horiz_step, dz, draw_callback=None):
......
...@@ -77,5 +77,6 @@ class ContourCutter(pycam.PathProcessors.BasePathProcessor): ...@@ -77,5 +77,6 @@ class ContourCutter(pycam.PathProcessors.BasePathProcessor):
if self.reverse: if self.reverse:
paths.reverse() paths.reverse()
self.paths.extend(paths) self.paths.extend(paths)
self.sort_layered()
self.pe = None self.pe = None
...@@ -37,6 +37,9 @@ class PathAccumulator(pycam.PathProcessors.BasePathProcessor): ...@@ -37,6 +37,9 @@ class PathAccumulator(pycam.PathProcessors.BasePathProcessor):
def append(self, p): def append(self, p):
if self.curr_path == None: if self.curr_path == None:
self.curr_path = Path() self.curr_path = Path()
if self.reverse:
self.curr_path.insert(0, p)
else:
self.curr_path.append(p) self.curr_path.append(p)
def new_direction(self, direction): def new_direction(self, direction):
...@@ -52,9 +55,10 @@ class PathAccumulator(pycam.PathProcessors.BasePathProcessor): ...@@ -52,9 +55,10 @@ class PathAccumulator(pycam.PathProcessors.BasePathProcessor):
if self.curr_path: if self.curr_path:
if self.zigzag and (self.scanline % 2 == 0): if self.zigzag and (self.scanline % 2 == 0):
self.curr_path.reverse() self.curr_path.reverse()
if self.reverse:
self.curr_path.reverse()
simplify_toolpath(self.curr_path) simplify_toolpath(self.curr_path)
if self.reverse:
self.paths.insert(0, self.curr_path)
else:
self.paths.append(self.curr_path) self.paths.append(self.curr_path)
self.curr_path = None self.curr_path = None
...@@ -75,4 +75,5 @@ class PolygonCutter(pycam.PathProcessors.BasePathProcessor): ...@@ -75,4 +75,5 @@ class PolygonCutter(pycam.PathProcessors.BasePathProcessor):
if self.reverse: if self.reverse:
p.reverse() p.reverse()
self.paths.extend(paths) self.paths.extend(paths)
self.sort_layered()
...@@ -57,3 +57,6 @@ class SimpleCutter(pycam.PathProcessors.BasePathProcessor): ...@@ -57,3 +57,6 @@ class SimpleCutter(pycam.PathProcessors.BasePathProcessor):
print "ERROR: curr_path expected to be empty" print "ERROR: curr_path expected to be empty"
self.curr_path = None self.curr_path = None
def finish(self):
self.sort_layered()
...@@ -35,3 +35,21 @@ class BasePathProcessor(object): ...@@ -35,3 +35,21 @@ class BasePathProcessor(object):
def finish(self): def finish(self):
pass pass
def sort_layered(self, upper_first=True):
if upper_first:
compare_height = lambda path1, path2: path1.points[0].z < path2.points[0].z
else:
compare_height = lambda path1, path2: path1.points[0].z > path2.points[0].z
finished = False
while not finished:
index = 0
finished = True
while index < len(self.paths) - 1:
current_path = self.paths[index]
next_path = self.paths[index + 1]
if compare_height(current_path, next_path):
del self.paths[index]
self.paths.insert(index + 1, current_path)
finished = False
index += 1
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment