Fixed flipping of an arc if the arc is rotated.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user