Added unit tests for orientWire.
This commit is contained in:
@@ -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])
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user