def test_polygons(): random.seed(9831) segments = array([ (0, 0), # degenerate (1, 2), (2, 3), (3, 1), # closed (4, 5), (7, 6), (6, 4), (4, 8), (8, 9), (9, 10) ]) # nonmanifold closed = Nested([(0, ), (1, 2, 3)]) open = Nested([(4, 5), (7, 6, 4), (4, 8, 9, 10)]) def closed_key(p): p = asarray(p) i = argmin(p) return tuple(hstack([p[i:], p[:i]])) for _ in xrange(4): inj = injection(11) segs = inj[segments] random.shuffle(segs) closed2, open2 = SegmentSoup(segs).polygons() assert sorted(map(closed_key, closed2)) == sorted( closed_key(inj[p]) for p in closed) assert sorted(map(tuple, open2)) == sorted(tuple(inj[p]) for p in open)
def test_incident_segments(): mesh = SegmentSoup([(0, 1), (0, 2)]) incident = mesh.incident_elements() print incident.offsets print incident.flat incident = map(list, mesh.incident_elements()) assert incident == [[0, 1], [0], [1]]
def test_nonmanifold_segments(): random.seed(71318) map = injection(12) mesh = SegmentSoup(map[asarray( [ (0, 0), # degenerate segment (1, 2), (3, 4), # open curve (4, 5), (4, 6), # two outgoing segments (8, 7), (9, 7), # two incoming segments (10, 11), (11, 10) ], int32)]) # closed loop assert all(mesh.nonmanifold_nodes(False) == sort(map[asarray(xrange(10))])) assert all(mesh.nonmanifold_nodes(True) == sort(map[asarray([0, 4, 7])]))
def test_adjacent_segments(): mesh = SegmentSoup([(0, 1), (1, 2)]) assert all(mesh.adjacent_elements() == [(-1, 1), (0, -1)])
def test_bending_triples(): mesh = SegmentSoup([(7, 8), (8, 9), (8, 10)]) assert all(mesh.bending_tuples() == [(7, 8, 9), (7, 8, 10), (9, 8, 10)])
def test_neighbors(): mesh = SegmentSoup([(0, 1), (0, 2), (0, 2)]) assert all(mesh.neighbors() == [[1, 2], [0], [0]])