Added unit tests for orientWire.

This commit is contained in:
markus
2019-09-05 10:40:24 -07:00
committed by wmayer
parent 9b8ad9525b
commit 40d7d32d19
2 changed files with 89 additions and 0 deletions

View File

@@ -181,3 +181,9 @@ class PathTestBase(unittest.TestCase):
self.assertCoincide(valueAt(e1, 0.80), valueAt(e2, 0.20))
self.assertCoincide(valueAt(e1, 0.90), valueAt(e2, 0.10))
def assertPointsMatch(self, pts0, pts1):
"""Verify that two arrays of points are the same, including their order."""
self.assertEqual(len(pts0), len(pts1))
for i in range(len(pts0)):
self.assertCoincide(pts0[i], pts1[i])

View File

@@ -72,6 +72,12 @@ def makeWire(pts):
edges.append(Part.Edge(Part.LineSegment(last, first)))
return Part.Wire(edges)
def wireMarkers(wire):
pts = [wire.Edges[0].valueAt(wire.Edges[0].FirstParameter)]
for edge in wire.Edges:
pts.append(edge.valueAt(edge.LastParameter))
return pts
class TestPathOpTools(PathTestUtils.PathTestBase):
@@ -780,3 +786,80 @@ class TestPathOpTools(PathTestUtils.PathTestBase):
rEdges = [e for e in wire.Edges if Part.Circle == type(e.Curve)]
self.assertEqual(0, len(rEdges))
def test50(self):
'''Orient an already oriented wire'''
p0 = Vector()
p1 = Vector(1, 2, 3)
p2 = Vector(2, 3, 4)
pts = [p0, p1, p2]
e0 = Part.Edge(Part.LineSegment(p0, p1))
e1 = Part.Edge(Part.LineSegment(p1, p2))
wire = PathOpTools.orientWire(Part.Wire([e0, e1]))
wirePts = wireMarkers(wire)
self.assertPointsMatch(wirePts, pts)
def test51(self):
'''Orient a potentially misoriented wire'''
p0 = Vector()
p1 = Vector(1, 2, 3)
p2 = Vector(2, 3, 4)
pts = [p0, p1, p2]
e0p = Part.Edge(Part.LineSegment(p0, p1))
e0m = Part.Edge(Part.LineSegment(p1, p0))
e1p = Part.Edge(Part.LineSegment(p1, p2))
e1m = Part.Edge(Part.LineSegment(p2, p1))
wire = PathOpTools.orientWire(Part.Wire([e0p, e1p]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0p, e1m]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0m, e1p]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0m, e1m]))
self.assertPointsMatch(wireMarkers(wire), pts)
def test52(self):
'''Orient a potentially misoriented longer wire'''
p0 = Vector()
p1 = Vector(1, 2, 3)
p2 = Vector(4, 5, 6)
p3 = Vector(7, 8, 9)
pts = [p0, p1, p2, p3]
e0p = Part.Edge(Part.LineSegment(p0, p1))
e0m = Part.Edge(Part.LineSegment(p1, p0))
e1p = Part.Edge(Part.LineSegment(p1, p2))
e1m = Part.Edge(Part.LineSegment(p2, p1))
e2p = Part.Edge(Part.LineSegment(p2, p3))
e2m = Part.Edge(Part.LineSegment(p3, p2))
wire = PathOpTools.orientWire(Part.Wire([e0p, e1p, e2p]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0p, e1m, e2p]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0m, e1p, e2p]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0m, e1m, e2p]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0p, e1p, e2m]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0p, e1m, e2m]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0m, e1p, e2m]))
self.assertPointsMatch(wireMarkers(wire), pts)
wire = PathOpTools.orientWire(Part.Wire([e0m, e1m, e2m]))
self.assertPointsMatch(wireMarkers(wire), pts)