#!/usr/bin/python #By Andrew Sarangan import re import numpy as np import sys def parse(words,n): name = "Error" if len(words) == n: temp = words[n-1].split('/') name = temp[-1] else: name = ' '.join(words[n:len(words)]) return name filename = sys.argv[1] rootname = filename.split('.')[0] fileout = open(rootname+".mtl","w") fileout.write("\ newmtl material0\n\ Ka 1.000000 1.000000 1.000000\n\ Kd 1.000000 1.000000 1.000000\n\ Ks 0.000000 0.000000 0.000000\n\ Tr 1.000000\n\ illum 1\n\ Ns 0.000000\n\ map_Kd "+rootname+".dds") fileout.close() fileout = open(rootname+"_WF.obj","w") p = re.compile(r'(\w+)') file = open(filename,"r") for line in file: if "POINT_COUNTS" in p.findall(line): words = line.split() num_vt = int(words[1]) num_idx = int(words[4]) file.close() vt = np.zeros((num_vt,3)) vx = np.zeros((num_vt,2)) nn = np.zeros((num_vt,3)) idx = np.zeros(num_idx,dtype=int) file = open(filename,"r") i = 0 for line in file: if "VT" in p.findall(line): words = line.split() vt[i][0] = float(words[1]) vt[i][1] = float(words[2]) vt[i][2] = float(words[3]) nn[i][0] = float(words[4]) nn[i][1] = float(words[5]) nn[i][2] = float(words[6]) vx[i][0] = float(words[7]) vx[i][1] = float(words[8]) i = i + 1 file.close() file = open(filename,"r") i = 0 for line in file: if "IDX10" in p.findall(line): words = line.split() for q in range(0,10): idx[i+q] = int(words[q+1]) i = i +10 file.close() file = open(filename,"r") for line in file: if "IDX" in p.findall(line): words = line.split() idx[i] = int(words[1]) i = i+1 file.close() s = "mtllib %s.mtl\n" % (rootname) fileout.write(s) for q in range(0,num_vt): s = "v %f %f %f\n" % (vt[q][0],vt[q][1],vt[q][2]) fileout.write(s) for q in range(0,num_vt): s = "vt %f %f\n" % (vx[q][0],vx[q][1]) fileout.write(s) for q in range(0,num_vt): s = "vn %d %d %d\n" % (nn[q][0],nn[q][1],nn[q][2]) fileout.write(s) fileout.write("usemtl material0\n") fileout.write("s off\n") file = open(filename,"r") #reg = re.compile("ATTR_.+_.+_.+") #reg = re.compile("ATTR_manip_command.+") #if bool(re.match(reg,line)) == 1: #if "ATTR_manip_command_knob" in line: #name = words[3:-1] trisno = 0 name = "Line #0" for line in file: trisno = trisno+1 temp = line words = temp.split() if len(words) > 0: if words[0] == "ANIM_show": name = parse(words,4) if words[0] == "ANIM_trans": name = parse(words,10) if words[0] == "ANIM_trans_begin": name = parse(words,2) if words[0] == "ANIM_rotate": name = parse(words,9) if words[0] == "ANIM_rotate_begin": name = parse(words,5) if words[0] == "ATTR_manip_command": name = parse(words,3) if words[0] == "ATTR_manip_command_knob": name = parse(words,4) if words[0] == "ATTR_manip_command_switch_left_right": name = parse(words,4) if words[0] == "ATTR_manip_command_switch_up_down": name = parse(words,4) if words[0] == "ATTR_manip_drag_rotate": name = parse(words,17) if words[0] == "ATTR_manip_drag_axis": name = parse(words,8) if words[0] == "ATTR_manip_drag_xy": name = parse(words,10) if words[0] == "ATTR_manip_axis_knob": name = parse(words,7) if words[0] == "ATTR_manip_toggle": name = parse(words,5) if words[0] == "ATTR_manip_wrap": name = parse(words,7) if words[0] == "ATTR_manip_none": name = "Line #"+str(trisno) if words[0] == "ATTR_manip_noop": name = parse(words,2) if words[0] == "ATTR_light_level": name = parse(words,4) if "TRIS" in line: words = line.split() start = int(words[1]) end = start+int(words[2]) fileout.write("o "+name+"\n") name = "Line #"+str(trisno+1) for q in range(start,end,3): s = "f %d/%d/%d %d/%d/%d %d/%d/%d\n" % (idx[q+2]+1,idx[q+2]+1,idx[q+2]+1,idx[q+1]+1,idx[q+1]+1,idx[q+1]+1,idx[q]+1,idx[q]+1,idx[q]+1) fileout.write(s) file.close()