diff --git a/src/Mod/CAM/CAMTests/TestPathVcarve.py b/src/Mod/CAM/CAMTests/TestPathVcarve.py index 457d4bb58d..471971a220 100644 --- a/src/Mod/CAM/CAMTests/TestPathVcarve.py +++ b/src/Mod/CAM/CAMTests/TestPathVcarve.py @@ -198,7 +198,6 @@ class TestPathVcarve(PathTestWithAssets): newPosition = FreeCAD.Base.Vector(0, 1.7, 3) assert not PathVcarve.canSkipRepositioning(positionHistory, newPosition, 0.01) - def test18(self): """Verify if canSkipRepositioning allows to skip if new edge ends in current position""" @@ -214,7 +213,6 @@ class TestPathVcarve(PathTestWithAssets): newPosition = FreeCAD.Base.Vector(0, 0, 0) assert PathVcarve.canSkipRepositioning(positionHistory, newPosition, defaultTolerance) - # same but should fail because we are out of tolerance newPosition = FreeCAD.Base.Vector(0, 0.1, 0) assert not PathVcarve.canSkipRepositioning(positionHistory, newPosition, defaultTolerance) @@ -224,8 +222,7 @@ class TestPathVcarve(PathTestWithAssets): assert PathVcarve.canSkipRepositioning(positionHistory, newPosition, 0.1) def test19(self): - """Verify virtualBackTrackEdges() various scenarios - """ + """Verify virtualBackTrackEdges() various scenarios""" defaultTolerance = Path.Preferences.defaultGeometryTolerance() @@ -237,17 +234,24 @@ class TestPathVcarve(PathTestWithAssets): ] # new edge ends at current position - newEdge = Part.Edge(Part.LineSegment(FreeCAD.Base.Vector(1,2,3), FreeCAD.Base.Vector(0,1,5))) + newEdge = Part.Edge( + Part.LineSegment(FreeCAD.Base.Vector(1, 2, 3), FreeCAD.Base.Vector(0, 1, 5)) + ) - virtualEdges = PathVcarve.generateVirtualBackTrackEdges(positionHistory, newEdge, defaultTolerance) + virtualEdges = PathVcarve.generateVirtualBackTrackEdges( + positionHistory, newEdge, defaultTolerance + ) assert len(virtualEdges) == 1 - + virtualEdge = virtualEdges[0] # virtualEdge is essentially a reversed newEdge - assert virtualEdge.valueAt(virtualEdge.FirstParameter) == newEdge.valueAt(newEdge.LastParameter) - assert virtualEdge.valueAt(virtualEdge.LastParameter) == newEdge.valueAt(newEdge.FirstParameter) - + assert virtualEdge.valueAt(virtualEdge.FirstParameter) == newEdge.valueAt( + newEdge.LastParameter + ) + assert virtualEdge.valueAt(virtualEdge.LastParameter) == newEdge.valueAt( + newEdge.FirstParameter + ) # test scenario 2 - refer to function comments for explanation @@ -257,12 +261,16 @@ class TestPathVcarve(PathTestWithAssets): ] # new edge ends at previous position - newEdge = Part.Edge(Part.LineSegment(FreeCAD.Base.Vector(1,2,3), FreeCAD.Base.Vector(0,0,0))) + newEdge = Part.Edge( + Part.LineSegment(FreeCAD.Base.Vector(1, 2, 3), FreeCAD.Base.Vector(0, 0, 0)) + ) - virtualEdges = PathVcarve.generateVirtualBackTrackEdges(positionHistory, newEdge, defaultTolerance) + virtualEdges = PathVcarve.generateVirtualBackTrackEdges( + positionHistory, newEdge, defaultTolerance + ) assert len(virtualEdges) == 2 - + virtualEdge1 = virtualEdges[0] virtualEdge2 = virtualEdges[1] @@ -271,8 +279,7 @@ class TestPathVcarve(PathTestWithAssets): assert virtualEdge1.valueAt(virtualEdge1.FirstParameter) == positionHistory[-1] assert virtualEdge1.valueAt(virtualEdge1.LastParameter) == positionHistory[-2] - assert virtualEdge2.valueAt(virtualEdge2.FirstParameter) == positionHistory[-2] - assert virtualEdge2.valueAt(virtualEdge2.LastParameter) == newEdge.valueAt(newEdge.FirstParameter) - - \ No newline at end of file + assert virtualEdge2.valueAt(virtualEdge2.LastParameter) == newEdge.valueAt( + newEdge.FirstParameter + ) diff --git a/src/Mod/CAM/Path/Op/Vcarve.py b/src/Mod/CAM/Path/Op/Vcarve.py index d5d2a47a62..f94ef33d9a 100644 --- a/src/Mod/CAM/Path/Op/Vcarve.py +++ b/src/Mod/CAM/Path/Op/Vcarve.py @@ -145,6 +145,7 @@ def _sortVoronoiWires(wires, start=FreeCAD.Vector(0, 0, 0)): return result + def getReversedEdge(edge): # returns a reversed edge (copy of original edge) curve = edge.Curve @@ -152,9 +153,7 @@ def getReversedEdge(edge): last = edge.LastParameter curve_c = curve.copy() curve_c.reverse() - return Part.Edge( - curve_c, curve_c.reversedParameter(last), curve_c.reversedParameter(first) - ) + return Part.Edge(curve_c, curve_c.reversedParameter(last), curve_c.reversedParameter(first)) def generateVirtualBackTrackEdges(positionHistory, nextEdge, tolerance) -> list: @@ -167,7 +166,7 @@ def generateVirtualBackTrackEdges(positionHistory, nextEdge, tolerance) -> list: if not positionHistory: return [] - + backTrackEdges = [] currentPosition = positionHistory[-1] @@ -177,7 +176,7 @@ def generateVirtualBackTrackEdges(positionHistory, nextEdge, tolerance) -> list: nextEdgeEnd = nextEdge.valueAt(nextEdge.LastParameter) # Scenario 1 - # + # # in some cases travelling between wires looks like that: # A ========= B ------- D # | @@ -212,11 +211,9 @@ def generateVirtualBackTrackEdges(positionHistory, nextEdge, tolerance) -> list: # instead of G0 - just carve the edge in reverse direction backTrackEdges.append(getReversedEdge(nextEdge)) - return backTrackEdges - def canSkipRepositioning(positionHistory, newPosition, tolerance): """ Calculate if it makes sense to raise head to safe height and reposition before @@ -592,8 +589,6 @@ class ObjectVcarve(PathEngraveBase.ObjectOp): # but using some routing logic we may avoid raising CNC toolbit and using G0 # and instead traverse back already carved edges at full speed - - edge_list = backtrack_edges + wire e = edge_list[0]