# Kirby Urner, 4D Studios, Portland, Oregon  July 27, 2006


# read OFF file, build vertex dictionary, get faces as tuples, construct edges (low, high),

# and brute-force determine what neighbors what and store in a big globalmatrix dictionary


# See:  http://www.4dsolutions.net/ocn/hexapent.html


thepath = 'd:/python25/Lib/site-packages/'

def getinfo(filename):
    thefile = file(thepath + filename, 'r')
    check = thefile.next()

    if check[:3] <> "OFF":
        raise Exception, "this is not an OFF file"

    vertno = 0
    numverts = int(thefile.next().split(' ')[0])
    verts = {}
    
    for i in range(numverts):
	verts[vertno] = tuple([float(i) for i in thefile.next().split(' ')])
	vertno += 1

    faceno = 0
    faces = []

    while True:
	try:
            # drop first digit as it only says how many verts in this face

	    faces.append( tuple([int(i) for i in thefile.next().split(' ')[1:]]) )
	except StopIteration:
	    break
	faceno += 1

    unique = set()

    for f in faces:
        pairs = zip(f, list(f[1:]) + [f[0]])
        for p in pairs:
            unique.add(tuple(sorted(p)))
            
    edges = list(unique)

    thefile.close()
    return (verts, faces, edges)

def getneighbors(thefile):
    globalmatrix = {}
    theverts, thefaces, theedges = getinfo(thefile)
    for f in thefaces:
        neighbors = []
        for candidate in thefaces:
            votes = 0
            for v in f:
                if v in candidate:
                    votes += 1
            if votes == 2:
                neighbors.append(candidate)
        globalmatrix[f] = neighbors
    return (globalmatrix, theverts, thefaces, theedges)
# code highlighted using py2html.py version 0.8