#!/usr/sweet/bin/python

import sys
import commands
import string
import re

def usage():
    print "usage: ply2rib <ply_file> <rib_file>"
    print ""
    print "<ply_file> is an input file in ply format"
    print "<rib_file> is the file to output to (in rib format)"


if len(sys.argv) < 3:
    usage()
    sys.exit()

nfaces = 0
nvertices = 0


input = file(sys.argv[1], 'r')
output = file(sys.argv[2], 'w')

while 1:
    line = input.readline()
    match = re.compile(r"vertex (\d+)").search(line)
    if match:
        nvertices = int(match.group(1))
    match = re.compile(r"face (\d+)").search(line)
    if match:
        nfaces = int(match.group(1))
    if re.compile("end_header").search(line):
        break

print "nvertices = ", nvertices, ", nfaces = ", nfaces

vertices = []

minx = 0
maxx = 0
miny = 0
maxy = 0
minz = 0
maxz = 0

float_re = r"([-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?)"
vertex_re = re.compile(r"^\s*" + float_re +
                       r"\s*" + float_re +
                       r"\s*" + float_re + r"\s*$")
for i in range(nvertices):
    line = input.readline()
    match = vertex_re.search(line)
    if not match:
        print "Error reading vertex array"
    x = float(match.group(1))
    y = float(match.group(5))
    z = float(match.group(9))
    if i == 0 or x < minx: minx = x
    if i == 0 or x > maxx: maxx = x
    if i == 0 or y < miny: miny = y
    if i == 0 or y > maxy: maxy = y
    if i == 0 or z < minz: minz = z
    if i == 0 or z > maxz: maxz = z
    vertices.append(line)

print "minx = ", minx
print "maxx = ", maxx
print "miny = ", miny
print "maxy = ", maxy
print "minz = ", minz
print "maxz = ", maxz

output.write("PointsPolygons [")
for i in range(nfaces):
    output.write("3 ")
output.write("] [")

for i in range(nfaces):
    output.write(input.readline()[2:-1])
output.write("]\n")

output.write("\"P\" [")
for vertex in vertices:
    output.write(vertex[:-1])
output.write("]\n")
