def test_topomesh(): t = Topomesh(3) def dstr(did): return "%d (%d)" % (did, t.degree(did)) dids = [t.add_wisp(d) for d in range(4)] print[dstr(did) for did in t.wisps()] print[dstr(did) for did in t.wisps(1)] for i in range(3): t.link(dids[i], dids[i + 1]) did = dids[1] print "regions", did, [dstr(rid) for rid in t.regions(did)] print "borders", did, [dstr(bid) for bid in t.borders(did)] did = dids[2] print "regions2", did, [dstr(rid) for rid in t.regions(did, 2)] print "borders2", did, [dstr(bid) for bid in t.borders(did, 2)] t.remove_wisp(did) print[dstr(did) for did in t.wisps()] did = dids[1] print "regions", did, [dstr(rid) for rid in t.regions(did)] print "borders", did, [dstr(bid) for bid in t.borders(did)]
def test_divide_face(): # 0----0----1----1----2 # | | # 5 fid 2 # | | # 5----4----4----3----3 m = Topomesh(2) for i in xrange(6): m.add_wisp(0, i) for i in xrange(6): m.add_wisp(1, i) m.link(1, i, i) m.link(1, i, (i + 1) % 6) fid = m.add_wisp(2) for i in xrange(6): m.link(2, fid, i) fid1, fid2, eid = topo_divide_face(m, fid, 1, 4) # 0----0----1----1----2 # | | | # 5 fid1 eid fid2 2 # | | | # 5----4----4----3----3 assert set(m.borders(1, eid)) == set([1, 4]) assert set(m.regions(1, eid)) == set([fid1, fid2]) fid1, = m.regions(1, 5) fid2, = m.regions(1, 2) assert set(m.borders(2, fid1)) == set([0, eid, 4, 5]) assert set(m.borders(2, fid2)) == set([1, 2, 3, eid])
from openalea.container import Topomesh m=Topomesh(2) pts=[m.add_wisp(0) for i in xrange(6)] edges=[m.add_wisp(1) for i in xrange(7)] faces=[m.add_wisp(2) for i in xrange(2)] for i,(pid1,pid2) in enumerate([(0,1),(1,2),(2,3),(3,4),(4,5),(5,1),(1,4)]) : m.link(1,edges[i],pts[pid1]) m.link(1,edges[i],pts[pid2]) for i,eids in enumerate([(0,4,5,6),(1,2,3,6)]) : for eid in eids : m.link(2,faces[i],edges[eid]) for eid in edges : print eid print "B",list(m.borders(1,eid)),m.nb_borders(1,eid) print "R",list(m.regions(1,eid)),m.nb_regions(1,eid) for fid in faces : print list(m.borders(2,fid)),m.nb_borders(2,fid)
m.link(1,i,i) m.link(1,i,(i + 1) % 6) fid = m.add_wisp(2) for i in xrange(6) : m.link(2,fid,i) fid1,fid2,eid = topo_divide_face(m,fid,1,4) # 0----0----1----1----2 # | | | # 5 fid1 eid fid2 2 # | | | # 5----4----4----3----3 assert set(m.borders(1,eid) ) == set([1,4]) assert set(m.regions(1,eid) ) == set([fid1,fid2]) fid1, = m.regions(1,5) fid2, = m.regions(1,2) assert set(m.borders(2,fid1) ) == set([0,eid,4,5]) assert set(m.borders(2,fid2) ) == set([1,2,3,eid]) ############################################# # # divide cell # ############################################# #top # 0----12---4----16---8 # | | |
def test_divide_cell(): # top # 0----12---4----16---8 # | | | # 0 0 4 4 8 # | | | # 1----13---5----17---9 # front # 1----13---5----17---9 # | | | # 1 1 5 5 9 # | | | # 2----14---6----18---10 # bottom # 3----15---7----19---11 # | | | # 2 2 6 6 10 # | | | # 2----14---6----18---10 # back # 0----12---4----16---8 # | | | # 3 3 7 7 11 # | | | # 3----15---7----19---11 # left # 0----0----1 # | | # 3 8 1 # | | # 3----2----2 # middle (no face) # 4----4----5 # | | # 7 5 # | | # 7----6----6 # right # 8----8----9 # | | # 11 9 9 # | | # 11---10---10 m = Topomesh(3) # points for i in xrange(12): m.add_wisp(0, i) # edges for i in xrange(20): m.add_wisp(1, i) for i in xrange(4): m.link(1, i, i) m.link(1, i, (i + 1) % 4) m.link(1, 4 + i, 4 + i) m.link(1, 4 + i, 4 + (i + 1) % 4) m.link(1, 8 + i, 8 + i) m.link(1, 8 + i, 8 + (i + 1) % 4) m.link(1, 12 + i, i) m.link(1, 12 + i, 4 + i) m.link(1, 16 + i, 4 + i) m.link(1, 16 + i, 8 + i) # faces for i in xrange(10): m.add_wisp(2, i) for i in xrange(4): m.link(2, 8, i) m.link(2, 9, 8 + i) for eid in (0, 4, 12, 13): for i in xrange(3): m.link(2, i, i + eid) m.link(2, 4 + i, 4 + i + eid) for eid in (3, 12, 7, 15): m.link(2, 3, eid) m.link(2, 7, 4 + eid) # cell cid = m.add_wisp(3) for i in xrange(10): m.link(3, cid, i) # divide cid1, cid2, fid = topo_divide_cell(m, cid, (4, 5, 6, 7)) # middle (no face) # 4----4----5 # | | # 7 fid 5 # | | # 7----6----6 assert set(m.borders(2, fid)) == set([4, 5, 6, 7]) assert set(m.regions(2, fid)) == set([cid1, cid2]) cid1, = m.regions(2, 8) cid2, = m.regions(2, 9) assert set(m.borders(3, cid1)) == set([0, 1, 2, 3, 8, fid]) assert set(m.borders(3, cid2)) == set([4, 5, 6, 7, 9, fid])
t = Topomesh() def dstr (did) : return "%d (%d)" % (did, t.degree(did) ) dids = [t.add_dart(d) for d in range(4)] print [dstr(did) for did in t.darts()] print [dstr(did) for did in t.darts(1)] for i in range(3) : t.link(dids[i], dids[i + 1]) did = dids[1] print "regions", did, [dstr(rid) for rid in t.regions(did)] print "borders", did, [dstr(bid) for bid in t.borders(did)] did = dids[2] print "regions2", did, [dstr(rid) for rid in t.regions(did, 2)] print "borders2", did, [dstr(bid) for bid in t.borders(did, 2)] t.remove_dart(did) print [dstr(did) for did in t.darts()] did = dids[1] print "regions", did, [dstr(rid) for rid in t.regions(did)] print "borders", did, [dstr(bid) for bid in t.borders(did)]