Rebase on new Line/LineSegment code.
This commit is contained in:
parent
23196b4c69
commit
198ab6db2e
|
@ -454,7 +454,7 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F
|
|||
|
||||
return int
|
||||
else:
|
||||
# print("DraftGeomUtils: Unsupported curve type: (" + str(edge1.Curve) + ", " + str(edge2.Curve) + ")")
|
||||
print("DraftGeomUtils: Unsupported curve type: (" + str(edge1.Curve) + ", " + str(edge2.Curve) + ")")
|
||||
return []
|
||||
|
||||
def wiresIntersect(wire1,wire2):
|
||||
|
|
|
@ -93,7 +93,7 @@ slack = 0.0000001
|
|||
def pathCommandForEdge(edge):
|
||||
pt = edge.valueAt(edge.LastParameter)
|
||||
params = {'X': pt.x, 'Y': pt.y, 'Z': pt.z}
|
||||
if type(edge.Curve) == Part.Line:
|
||||
if type(edge.Curve) == Part.Line or type(edge.Curve) == Part.LineSegment:
|
||||
command = Path.Command('G1', params)
|
||||
else:
|
||||
p1 = edge.valueAt(edge.FirstParameter)
|
||||
|
@ -151,7 +151,7 @@ class Tag:
|
|||
return self.z + self.actualHeight
|
||||
|
||||
def centerLine(self):
|
||||
return Part.Line(self.originAt(self.bottom() - 1), self.originAt(self.top() + 1))
|
||||
return Part.LineSegment(self.originAt(self.bottom() - 1), self.originAt(self.top() + 1))
|
||||
|
||||
def createSolidsAt(self, z):
|
||||
self.z = z
|
||||
|
@ -210,9 +210,9 @@ class Tag:
|
|||
return self.state != self.Pnone
|
||||
|
||||
def moveEdgeToPlateau(self, edge):
|
||||
if type(edge.Curve) is Part.Line:
|
||||
if type(edge.Curve) is Part.Line or type(edge.Curve) is Part.LineSegment:
|
||||
e = copy.copy(edge)
|
||||
z = edge.Curve.StartPoint.z
|
||||
z = edge.valueAt(edge.FirstParameter).z
|
||||
elif type(edge.Curve) is Part.Circle:
|
||||
# it's an arc
|
||||
e = copy.copy(edge)
|
||||
|
@ -236,7 +236,7 @@ class Tag:
|
|||
if PathGeom.pointsCoincide(i, edge.valueAt(edge.FirstParameter)):
|
||||
# if P0 and P1 are the same, we need to insert a segment for the rise
|
||||
debugPrint('P0', "------- insert vertical rise (%s)" % i)
|
||||
self.edges.append(Part.Edge(Part.Line(i, FreeCAD.Vector(i.x, i.y, self.tag.top()))))
|
||||
self.edges.append(Part.Edge(Part.LineSegment(i, FreeCAD.Vector(i.x, i.y, self.tag.top()))))
|
||||
self.p1 = i
|
||||
self.state = self.P1
|
||||
return edge
|
||||
|
@ -267,8 +267,8 @@ class Tag:
|
|||
# if we have no core the tip is the origin of the Tag
|
||||
line = Part.Edge(self.tag.centerLine())
|
||||
debugEdge(line, "------- center line", 'P0')
|
||||
#i = DraftGeomUtils.findIntersection(line, edge, True)
|
||||
i = line.Curve.intersect(edge)
|
||||
i = DraftGeomUtils.findIntersection(line, edge, True)
|
||||
#i = line.Curve.intersect(edge)
|
||||
if i:
|
||||
debugPrint('P0', '------- P0 split @ (%.2f, %.2f, %.2f)' % (i[0].x, i[0].y, i[0].z))
|
||||
if PathGeom.pointsCoincide(i[0], edge.valueAt(edge.LastParameter)):
|
||||
|
@ -329,7 +329,7 @@ class Tag:
|
|||
if i:
|
||||
if PathGeom.pointsCoincide(i, edge.valueAt(edge.FirstParameter)):
|
||||
debugPrint('P2', "------- insert exit plunge (%s)" % i)
|
||||
self.edges.append(Part.Edge(Part.Line(FreeCAD.Vector(i.x, i.y, self.tag.top()), i)))
|
||||
self.edges.append(Part.Edge(Part.LineSegment(FreeCAD.Vector(i.x, i.y, self.tag.top()), i)))
|
||||
e = None
|
||||
tail = edge
|
||||
elif PathGeom.pointsCoincide(i, edge.valueAt(edge.LastParameter)):
|
||||
|
@ -390,7 +390,7 @@ class Tag:
|
|||
p1a = edge.valueAt(edge.FirstParameter)
|
||||
p1b = FreeCAD.Vector(p1a.x, p1a.y, p1a.z + self.height)
|
||||
p1a.z = self.bottom()
|
||||
e1 = Part.Edge(Part.Line(p1a, p1b))
|
||||
e1 = Part.Edge(Part.LineSegment(p1a, p1b))
|
||||
p1 = self.nextIntersectionClosestTo(e1, self.solid, p1b) # top most intersection
|
||||
print("---------- p1: (%s %s) -> %s %d" % (p1a, p1b, p1, self.solid.isInside(p1, 0.0000001, True)))
|
||||
if not p1:
|
||||
|
@ -400,7 +400,7 @@ class Tag:
|
|||
p2a = edge.valueAt(edge.LastParameter)
|
||||
p2b = FreeCAD.Vector(p2a.x, p2a.y, p2a.z + self.height)
|
||||
p2a.z = self.bottom()
|
||||
e2 = Part.Edge(Part.Line(p2a, p2b))
|
||||
e2 = Part.Edge(Part.LineSegment(p2a, p2b))
|
||||
p2 = self.nextIntersectionClosestTo(e2, self.solid, p2b) # top most intersection
|
||||
if not p2:
|
||||
p1 = edge.valueAt(edge.FirstParameter)
|
||||
|
@ -418,8 +418,8 @@ class Tag:
|
|||
if PathGeom.pointsCoincide(p1, p2):
|
||||
return []
|
||||
|
||||
if type(edge.Curve) == Part.Line:
|
||||
e = Part.Edge(Part.Line(p1, p2))
|
||||
if type(edge.Curve) == Part.Line or type(edge.Curve) == Part.LineSegment:
|
||||
e = Part.Edge(Part.LineSegment(p1, p2))
|
||||
debugEdge(e, "-------- >>")
|
||||
return [e]
|
||||
|
||||
|
|
|
@ -45,9 +45,9 @@ class PathTestBase(unittest.TestCase):
|
|||
|
||||
def assertLine(self, edge, pt1, pt2):
|
||||
"""Verify that edge is a line from pt1 to pt2."""
|
||||
self.assertIs(type(edge.Curve), Part.LineSegment)
|
||||
self.assertCoincide(edge.Curve.StartPoint, pt1)
|
||||
self.assertCoincide(edge.Curve.EndPoint, pt2)
|
||||
self.assertIs(type(edge.Curve), Part.Line)
|
||||
self.assertCoincide(edge.valueAt(edge.FirstParameter), pt1)
|
||||
self.assertCoincide(edge.valueAt(edge.LastParameter), pt2)
|
||||
|
||||
def assertLines(self, edgs, tail, points):
|
||||
"""Verify that the edges match the polygon resulting from points."""
|
||||
|
|
|
@ -97,7 +97,7 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
tag = Tag( 0, 0, 4, 7, 90, True, 0)
|
||||
pt1 = Vector(+5, 5, 0)
|
||||
pt2 = Vector(-5, 5, 0)
|
||||
edge = Part.Edge(Part.Line(pt1, pt2))
|
||||
edge = Part.Edge(Part.LineSegment(pt1, pt2))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertIsNotNone(i)
|
||||
|
@ -109,18 +109,18 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
def test01(self):
|
||||
"""Verify intersection of square tag with line ending at tag start."""
|
||||
tag = Tag( 0, 0, 8, 3, 90, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(4, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
self.assertEqual(len(i.edges), 1)
|
||||
self.assertLine(i.edges[0], edge.Curve.StartPoint, edge.Curve.EndPoint)
|
||||
self.assertLine(i.edges[0], edge.valueAt(edge.FirstParameter), edge.valueAt(edge.LastParameter))
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
def test02(self):
|
||||
"""Verify intersection of square tag with line ending between P1 and P2."""
|
||||
tag = Tag( 0, 0, 8, 3, 90, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(1, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P1)
|
||||
|
@ -128,13 +128,13 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
p1 = Vector(4, 0, 0)
|
||||
p2 = Vector(4, 0, 3)
|
||||
p3 = Vector(1, 0, 3)
|
||||
self.assertLine(i.edges[0], edge.Curve.StartPoint, p1)
|
||||
self.assertLine(i.edges[0], edge.valueAt(edge.FirstParameter), p1)
|
||||
self.assertLine(i.edges[1], p1, p2)
|
||||
self.assertLine(i.edges[2], p2, p3)
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
# verify we stay in P1 if we add another segment
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(0, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(0, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P1)
|
||||
self.assertEqual(len(i.edges), 4)
|
||||
|
@ -145,12 +145,12 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
def test03(self):
|
||||
"""Verify intesection of square tag with line ending on P2."""
|
||||
tag = Tag( 0, 0, 8, 3, 90, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(-4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(-4, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertEqual(len(i.edges), 3)
|
||||
p0 = edge.Curve.StartPoint
|
||||
p0 = edge.valueAt(edge.FirstParameter)
|
||||
p1 = Vector( 4, 0, 0)
|
||||
p2 = Vector( 4, 0, 3)
|
||||
p3 = Vector(-4, 0, 3)
|
||||
|
@ -160,9 +160,9 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# make sure it also works if we get there not directly
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(0, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(0, 0, 0)))
|
||||
i = tag.intersect(edge)
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(-4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(-4, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertEqual(len(i.edges), 4)
|
||||
|
@ -176,18 +176,18 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
def test04(self):
|
||||
"""Verify plunge down is inserted for square tag on exit."""
|
||||
tag = Tag( 0, 0, 8, 3, 90, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(-5, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(-5, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P3)
|
||||
self.assertTrue(i.isComplete())
|
||||
self.assertEqual(len(i.edges), 4)
|
||||
p0 = edge.Curve.StartPoint
|
||||
p0 = edge.valueAt(edge.FirstParameter)
|
||||
p1 = Vector( 4, 0, 0)
|
||||
p2 = Vector( 4, 0, 3)
|
||||
p3 = Vector(-4, 0, 3)
|
||||
p4 = Vector(-4, 0, 0)
|
||||
p5 = edge.Curve.EndPoint
|
||||
p5 = edge.valueAt(edge.LastParameter)
|
||||
self.assertLine(i.edges[0], p0, p1)
|
||||
self.assertLine(i.edges[1], p1, p2)
|
||||
self.assertLine(i.edges[2], p2, p3)
|
||||
|
@ -198,13 +198,13 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
def test05(self):
|
||||
"""Verify all lines between P0 and P3 are added."""
|
||||
tag = Tag( 0, 0, 4, 7, 90, True, 0)
|
||||
e0 = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(+2, 0, 0)))
|
||||
e1 = Part.Edge(Part.Line(e0.Curve.EndPoint, Vector(+1, 0, 0)))
|
||||
e2 = Part.Edge(Part.Line(e1.Curve.EndPoint, Vector(+0.5, 0, 0)))
|
||||
e3 = Part.Edge(Part.Line(e2.Curve.EndPoint, Vector(-0.5, 0, 0)))
|
||||
e4 = Part.Edge(Part.Line(e3.Curve.EndPoint, Vector(-1, 0, 0)))
|
||||
e5 = Part.Edge(Part.Line(e4.Curve.EndPoint, Vector(-2, 0, 0)))
|
||||
e6 = Part.Edge(Part.Line(e5.Curve.EndPoint, Vector(-5, 0, 0)))
|
||||
e0 = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(+2, 0, 0)))
|
||||
e1 = Part.Edge(Part.LineSegment(e0.valueAt(e0.LastParameter), Vector(+1, 0, 0)))
|
||||
e2 = Part.Edge(Part.LineSegment(e1.valueAt(e1.LastParameter), Vector(+0.5, 0, 0)))
|
||||
e3 = Part.Edge(Part.LineSegment(e2.valueAt(e2.LastParameter), Vector(-0.5, 0, 0)))
|
||||
e4 = Part.Edge(Part.LineSegment(e3.valueAt(e3.LastParameter), Vector(-1, 0, 0)))
|
||||
e5 = Part.Edge(Part.LineSegment(e4.valueAt(e4.LastParameter), Vector(-2, 0, 0)))
|
||||
e6 = Part.Edge(Part.LineSegment(e5.valueAt(e5.LastParameter), Vector(-5, 0, 0)))
|
||||
|
||||
i = tag
|
||||
for e in [e0, e1, e2, e3, e4, e5]:
|
||||
|
@ -222,7 +222,7 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
pt6 = Vector(-2, 0, 7)
|
||||
|
||||
self.assertEqual(len(i.edges), 8)
|
||||
self.assertLines(i.edges, i.tail, [e0.Curve.StartPoint, pt0, pt1, pt2, pt3, pt4, pt5, pt6, e6.Curve.StartPoint, e6.Curve.EndPoint])
|
||||
self.assertLines(i.edges, i.tail, [e0.valueAt(e0.FirstParameter), pt0, pt1, pt2, pt3, pt4, pt5, pt6, e6.valueAt(e6.FirstParameter), e6.valueAt(e6.LastParameter)])
|
||||
self.assertIsNotNone(i.tail)
|
||||
|
||||
def test06(self):
|
||||
|
@ -236,17 +236,17 @@ class TestTag02SquareTag(PathTestBase): # =============
|
|||
p3 = Vector(-2, 0, 7)
|
||||
p4 = Vector(-2, 0, i)
|
||||
p5 = Vector(-5, 0, i)
|
||||
edge = Part.Edge(Part.Line(p0, p5))
|
||||
edge = Part.Edge(Part.LineSegment(p0, p5))
|
||||
s = tag.intersect(edge)
|
||||
self.assertTrue(s.isComplete())
|
||||
self.assertLines(s.edges, s.tail, [p0, p1, p2, p3, p4, p5])
|
||||
|
||||
# for all edges at height or above the original line is used
|
||||
for i in range(7, 9):
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, i), Vector(-5, 0, i)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, i), Vector(-5, 0, i)))
|
||||
s = tag.intersect(edge)
|
||||
self.assertTrue(s.isComplete())
|
||||
self.assertLine(s.tail, edge.Curve.StartPoint, edge.Curve.EndPoint)
|
||||
self.assertLine(s.tail, edge.valueAt(edge.FirstParameter), edge.valueAt(edge.LastParameter))
|
||||
|
||||
def test10(self):
|
||||
"""Verify intersection of square tag with an arc."""
|
||||
|
@ -295,7 +295,7 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
tag = Tag( 0, 0, 8, 3, 45, True, 0)
|
||||
pt1 = Vector(+5, 5, 0)
|
||||
pt2 = Vector(-5, 5, 0)
|
||||
edge = Part.Edge(Part.Line(pt1, pt2))
|
||||
edge = Part.Edge(Part.LineSegment(pt1, pt2))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertIsNotNone(i)
|
||||
|
@ -307,21 +307,21 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
def test01(self):
|
||||
"""Veify intersection of trapezoid tag with line ending before P1."""
|
||||
tag = Tag( 0, 0, 8, 3, 45, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(4, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
self.assertEqual(len(i.edges), 1)
|
||||
self.assertLine(i.edges[0], edge.Curve.StartPoint, edge.Curve.EndPoint)
|
||||
self.assertLine(i.edges[0], edge.valueAt(edge.FirstParameter), edge.valueAt(edge.LastParameter))
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
# now add another segment that doesn't reach the top of the cone
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(3, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(3, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
# still a P0 and edge fully consumed
|
||||
p1 = Vector(edge.Curve.StartPoint)
|
||||
p1 = Vector(edge.valueAt(edge.FirstParameter))
|
||||
p1.z = 0
|
||||
p2 = Vector(edge.Curve.EndPoint)
|
||||
p2 = Vector(edge.valueAt(edge.LastParameter))
|
||||
p2.z = 1 # height of cone @ (3,0)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
self.assertEqual(len(i.edges), 2)
|
||||
|
@ -329,10 +329,10 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# add another segment to verify starting point offset
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(2, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(2, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
# still a P0 and edge fully consumed
|
||||
p3 = Vector(edge.Curve.EndPoint)
|
||||
p3 = Vector(edge.valueAt(edge.LastParameter))
|
||||
p3.z = 2 # height of cone @ (2,0)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
self.assertEqual(len(i.edges), 3)
|
||||
|
@ -342,19 +342,19 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
def test02(self):
|
||||
"""Verify intersection of trapezoid tag with line ending between P1 and P2"""
|
||||
tag = Tag( 0, 0, 8, 3, 45, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(1, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P1)
|
||||
self.assertEqual(len(i.edges), 2)
|
||||
p1 = Vector(4, 0, 0)
|
||||
p2 = Vector(1, 0, 3)
|
||||
self.assertLine(i.edges[0], edge.Curve.StartPoint, p1)
|
||||
self.assertLine(i.edges[0], edge.valueAt(edge.FirstParameter), p1)
|
||||
self.assertLine(i.edges[1], p1, p2)
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
# verify we stay in P1 if we add another segment
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(0, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(0, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P1)
|
||||
self.assertEqual(len(i.edges), 3)
|
||||
|
@ -365,11 +365,11 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
def test03(self):
|
||||
"""Verify intersection of trapezoid tag with edge ending on P2."""
|
||||
tag = Tag( 0, 0, 8, 3, 45, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(-1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(-1, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
p0 = Vector(edge.Curve.StartPoint)
|
||||
p0 = Vector(edge.valueAt(edge.FirstParameter))
|
||||
p1 = Vector(4, 0, 0)
|
||||
p2 = Vector(1, 0, 3)
|
||||
p3 = Vector(-1, 0, 3)
|
||||
|
@ -377,18 +377,18 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# make sure we get the same result if there's another edge
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(1, 0, 0)))
|
||||
i = tag.intersect(edge)
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(-1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(-1, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3])
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
# and also if the last segment doesn't cross the entire plateau
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(0.5, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(0.5, 0, 0)))
|
||||
i = tag.intersect(edge)
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(-1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(-1, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
p2a = Vector(0.5, 0, 3)
|
||||
|
@ -398,7 +398,7 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
def test04(self):
|
||||
"""Verify proper down plunge on trapezoid tag exit."""
|
||||
tag = Tag( 0, 0, 8, 3, 45, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(-2, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(-2, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
|
@ -411,7 +411,7 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# make sure adding another segment doesn't change the state
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(-3, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(-3, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertEqual(len(i.edges), 5)
|
||||
|
@ -420,7 +420,7 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# now if we complete to P3 ....
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(-4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(-4, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P3)
|
||||
self.assertTrue(i.isComplete())
|
||||
|
@ -430,7 +430,7 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# verify proper operation if there is a single edge going through all
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(-4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(-4, 0, 0)))
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P3)
|
||||
self.assertTrue(i.isComplete())
|
||||
|
@ -438,23 +438,23 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
self.assertIsNone(i.tail)
|
||||
|
||||
# verify tail is added as well
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(-5, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(-5, 0, 0)))
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P3)
|
||||
self.assertTrue(i.isComplete())
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3, p6, edge.Curve.EndPoint])
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3, p6, edge.valueAt(edge.LastParameter)])
|
||||
self.assertIsNotNone(i.tail)
|
||||
|
||||
def test05(self):
|
||||
"""Verify all lines between P0 and P3 are added."""
|
||||
tag = Tag( 0, 0, 8, 3, 45, True, 0)
|
||||
e0 = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(+4, 0, 0)))
|
||||
e1 = Part.Edge(Part.Line(e0.Curve.EndPoint, Vector(+2, 0, 0)))
|
||||
e2 = Part.Edge(Part.Line(e1.Curve.EndPoint, Vector(+0.5, 0, 0)))
|
||||
e3 = Part.Edge(Part.Line(e2.Curve.EndPoint, Vector(-0.5, 0, 0)))
|
||||
e4 = Part.Edge(Part.Line(e3.Curve.EndPoint, Vector(-1, 0, 0)))
|
||||
e5 = Part.Edge(Part.Line(e4.Curve.EndPoint, Vector(-2, 0, 0)))
|
||||
e6 = Part.Edge(Part.Line(e5.Curve.EndPoint, Vector(-5, 0, 0)))
|
||||
e0 = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(+4, 0, 0)))
|
||||
e1 = Part.Edge(Part.LineSegment(e0.valueAt(e0.LastParameter), Vector(+2, 0, 0)))
|
||||
e2 = Part.Edge(Part.LineSegment(e1.valueAt(e1.LastParameter), Vector(+0.5, 0, 0)))
|
||||
e3 = Part.Edge(Part.LineSegment(e2.valueAt(e2.LastParameter), Vector(-0.5, 0, 0)))
|
||||
e4 = Part.Edge(Part.LineSegment(e3.valueAt(e3.LastParameter), Vector(-1, 0, 0)))
|
||||
e5 = Part.Edge(Part.LineSegment(e4.valueAt(e4.LastParameter), Vector(-2, 0, 0)))
|
||||
e6 = Part.Edge(Part.LineSegment(e5.valueAt(e5.LastParameter), Vector(-5, 0, 0)))
|
||||
|
||||
i = tag
|
||||
for e in [e0, e1, e2, e3, e4, e5]:
|
||||
|
@ -472,7 +472,7 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
p6 = Vector(-2, 0, 2)
|
||||
p7 = Vector(-4, 0, 0)
|
||||
|
||||
self.assertLines(i.edges, i.tail, [e0.Curve.StartPoint, p0, p1, p2, p3, p4, p5, p6, p7, e6.Curve.EndPoint])
|
||||
self.assertLines(i.edges, i.tail, [e0.valueAt(e0.FirstParameter), p0, p1, p2, p3, p4, p5, p6, p7, e6.valueAt(e6.LastParameter)])
|
||||
self.assertIsNotNone(i.tail)
|
||||
|
||||
def test06(self):
|
||||
|
@ -486,17 +486,17 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
p3 = Vector(-1, 0, 3)
|
||||
p4 = Vector(-4+i, 0, i)
|
||||
p5 = Vector(-5, 0, i)
|
||||
edge = Part.Edge(Part.Line(p0, p5))
|
||||
edge = Part.Edge(Part.LineSegment(p0, p5))
|
||||
s = tag.intersect(edge)
|
||||
self.assertTrue(s.isComplete())
|
||||
self.assertLines(s.edges, s.tail, [p0, p1, p2, p3, p4, p5])
|
||||
|
||||
# for all edges at height or above the original line is used
|
||||
for i in range(3, 5):
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, i), Vector(-5, 0, i)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, i), Vector(-5, 0, i)))
|
||||
s = tag.intersect(edge)
|
||||
self.assertTrue(s.isComplete())
|
||||
self.assertLine(s.tail, edge.Curve.StartPoint, edge.Curve.EndPoint)
|
||||
self.assertLine(s.tail, edge.valueAt(edge.FirstParameter), edge.valueAt(edge.LastParameter))
|
||||
|
||||
def test10(self):
|
||||
"""Verify intersection with an arc."""
|
||||
|
@ -544,31 +544,31 @@ class TestTag03TrapezoidTag(PathTestBase): # =============
|
|||
class TestTag04TriangularTag(PathTestBase): # ========================
|
||||
"""Unit tests for tags that take on a triangular shape."""
|
||||
|
||||
def xtest00(self):
|
||||
def test00(self):
|
||||
"""Verify intersection of triangular tag with line ending at tag start."""
|
||||
tag = Tag( 0, 0, 8, 7, 45, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(4, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(4, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
self.assertEqual(len(i.edges), 1)
|
||||
self.assertLine(i.edges[0], edge.Curve.StartPoint, edge.Curve.EndPoint)
|
||||
self.assertLine(i.edges[0], edge.valueAt(edge.FirstParameter), edge.valueAt(edge.LastParameter))
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
def xtest01(self):
|
||||
def test01(self):
|
||||
"""Verify intersection of triangular tag with line ending between P0 and P1."""
|
||||
tag = Tag( 0, 0, 8, 7, 45, True, 0)
|
||||
edge = Part.Edge(Part.Line(Vector(5, 0, 0), Vector(3, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(Vector(5, 0, 0), Vector(3, 0, 0)))
|
||||
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
p1 = Vector(4, 0, 0)
|
||||
p2 = Vector(3, 0, 1)
|
||||
self.assertLines(i.edges, i.tail, [edge.Curve.StartPoint, p1, p2])
|
||||
self.assertLines(i.edges, i.tail, [edge.valueAt(edge.FirstParameter), p1, p2])
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
# verify we stay in P1 if we add another segment
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, Vector(1, 0, 0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), Vector(1, 0, 0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P0)
|
||||
self.assertEqual(len(i.edges), 3)
|
||||
|
@ -576,21 +576,21 @@ class TestTag04TriangularTag(PathTestBase): # ========================
|
|||
self.assertLine(i.edges[2], p2, p3)
|
||||
self.assertIsNone(i.tail)
|
||||
|
||||
def xtest02(self):
|
||||
def test02(self):
|
||||
"""Verify proper down plunge on exit of triangular tag."""
|
||||
tag = Tag( 0, 0, 8, 7, 45, True, 0)
|
||||
|
||||
p0 = Vector(5, 0, 0)
|
||||
p1 = Vector(4, 0, 0)
|
||||
p2 = Vector(0, 0, 4)
|
||||
edge = Part.Edge(Part.Line(p0, FreeCAD.Vector(0,0,0)))
|
||||
edge = Part.Edge(Part.LineSegment(p0, FreeCAD.Vector(0,0,0)))
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertEqual(len(i.edges), 2)
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2])
|
||||
|
||||
# adding another segment doesn't make a difference
|
||||
edge = Part.Edge(Part.Line(edge.Curve.EndPoint, FreeCAD.Vector(-3,0,0)))
|
||||
edge = Part.Edge(Part.LineSegment(edge.valueAt(edge.LastParameter), FreeCAD.Vector(-3,0,0)))
|
||||
i = i.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertEqual(len(i.edges), 3)
|
||||
|
@ -598,12 +598,12 @@ class TestTag04TriangularTag(PathTestBase): # ========================
|
|||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3])
|
||||
|
||||
# same result if all is one line
|
||||
edge = Part.Edge(Part.Line(p0, edge.Curve.EndPoint))
|
||||
edge = Part.Edge(Part.LineSegment(p0, edge.valueAt(edge.LastParameter)))
|
||||
i = tag.intersect(edge)
|
||||
self.assertEqual(i.state, Tag.Intersection.P2)
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3])
|
||||
|
||||
def xtest03(self):
|
||||
def test03(self):
|
||||
"""Verify triangular tag shap on intersection."""
|
||||
tag = Tag( 0, 0, 8, 7, 45, True, 0)
|
||||
|
||||
|
@ -611,7 +611,7 @@ class TestTag04TriangularTag(PathTestBase): # ========================
|
|||
p1 = Vector(4, 0, 0)
|
||||
p2 = Vector(0, 0, 4)
|
||||
p3 = Vector(-4, 0, 0)
|
||||
edge = Part.Edge(Part.Line(p0, p3))
|
||||
edge = Part.Edge(Part.LineSegment(p0, p3))
|
||||
i = tag.intersect(edge)
|
||||
self.assertTrue(i.isComplete())
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3])
|
||||
|
@ -619,13 +619,13 @@ class TestTag04TriangularTag(PathTestBase): # ========================
|
|||
|
||||
# this should also work if there is some excess, aka tail
|
||||
p4 = Vector(-5, 0, 0)
|
||||
edge = Part.Edge(Part.Line(p0, p4))
|
||||
edge = Part.Edge(Part.LineSegment(p0, p4))
|
||||
i = tag.intersect(edge)
|
||||
self.assertTrue(i.isComplete())
|
||||
self.assertLines(i.edges, i.tail, [p0, p1, p2, p3, p4])
|
||||
self.assertIsNotNone(i.tail)
|
||||
|
||||
def xtest10(self):
|
||||
def test10(self):
|
||||
"""Verify intersection with an arc."""
|
||||
tag = Tag( 0, 0, 8, 7, 45, True, 0)
|
||||
p1 = Vector(10, -10, 0)
|
||||
|
|
Loading…
Reference in New Issue
Block a user