Fixed flipping of an arc if the arc is rotated.

This commit is contained in:
Markus Lampert
2018-06-30 18:15:10 -07:00
parent f8f02db754
commit 3232d79335
2 changed files with 11 additions and 10 deletions

View File

@@ -465,16 +465,12 @@ def flipEdge(edge):
elif Part.Line == type(edge.Curve) or Part.LineSegment == type(edge.Curve):
return Part.Edge(Part.LineSegment(edge.Vertexes[-1].Point, edge.Vertexes[0].Point))
elif Part.Circle == type(edge.Curve):
r = edge.Curve.Radius
c = edge.Curve.Center
d = edge.Curve.Axis
a = math.degrees(edge.Curve.AngleXU)
f = math.degrees(edge.FirstParameter)
l = math.degrees(edge.LastParameter)
if 0 > d.z:
a = a + 180
PathLog.track(r, c, d, a, f, l)
arc = Part.makeCircle(r, c, -d, -l-a, -f-a)
# Create an inverted circle
circle = Part.Circle(edge.Curve.Center, -edge.Curve.Axis, edge.Curve.Radius)
# Rotate the circle appropriately so it starts at edge.valueAt(edge.LastParameter)
circle.rotate(FreeCAD.Placement(circle.Center, circle.Axis, 180 - math.degrees(edge.LastParameter + edge.Curve.AngleXU)))
# Now the edge always starts at 0 and LastParameter is the value range
arc = Part.Edge(circle, 0, edge.LastParameter - edge.FirstParameter)
return arc
elif Part.BSplineCurve == type(edge.Curve):
spline = edge.Curve

View File

@@ -395,6 +395,7 @@ class TestPathGeom(PathTestBase):
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
edge = Part.Edge(Part.LineSegment(Vector(4,2,1), Vector(-3, -7, 9)))
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
edge = Part.makeLine(Vector(1,0,3), Vector(3, 2, 1))
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
@@ -402,6 +403,7 @@ class TestPathGeom(PathTestBase):
'''Flip a circle'''
edge = Part.makeCircle(3, Vector(1, 3, 2), Vector(0, 0, 1))
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
edge = Part.makeCircle(3, Vector(1, 3, 2), Vector(0, 0, -1))
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
@@ -410,10 +412,13 @@ class TestPathGeom(PathTestBase):
# make sure all 4 quadrants work
edge = Part.makeCircle(3, Vector(1, 3, 2), Vector(0, 0, 1), 45, 90)
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
edge = Part.makeCircle(3, Vector(1, 3, 2), Vector(0, 0, 1), 100, 170)
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
edge = Part.makeCircle(3, Vector(1, 3, 2), Vector(0, 0, 1), 200, 250)
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))
edge = Part.makeCircle(3, Vector(1, 3, 2), Vector(0, 0, 1), 300, 340)
self.assertEdgeShapesMatch(edge, PathGeom.flipEdge(edge))