home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 12135 / WWF_RAW_FML_python_script.7z / obj.py < prev   
Encoding:
Python Source  |  2016-12-14  |  3.2 KB  |  71 lines

  1. import scanf
  2.  
  3. class OBJ(object):
  4.     def __init__(self, filename):
  5.         self.filename = filename
  6.         self.file = open(filename, 'r')
  7.         self.vertex = []
  8.         self.normal = []
  9.         self.face = []
  10.         self.texture_coordinate = []
  11.         self.unknown_list = []
  12.         line_count = 1
  13.         for line in self.file:
  14.             # vertex data v x y z
  15.             if line.startswith("#"):
  16.                 #print "Line %5d Comment, %r" % (line_count, line)
  17.                 line_count += 1
  18.                 continue
  19.             elif line.startswith("v "):
  20.                 try:
  21.                     self.vertex.append(list(scanf.sscanf(line, "v %f %f %f\n")))
  22.                     #print "Line %5d Vertex %3d, %r" % (line_count, len(self.vertex)-1, line)
  23.                 except:
  24.                     #print "Line %5d Vertex FAIL, %r" % (line_count, line)
  25.                     pass
  26.             elif line.startswith("vn "):
  27.                 try:
  28.                     self.normal.append(list(scanf.sscanf(line, "vn %f %f %f\n")))
  29.                     #print "Line %5d Normal %3d, %r" % (line_count, len(self.normal)-1,line)
  30.                 except:
  31.                     #print "Line %5d Normal FAIL, %r" % (line_count,line)
  32.                     pass
  33.             elif line.startswith("f "):
  34.                 try:
  35.                     self.face.append(list(scanf.sscanf(line, "f %d %d %d\n")))
  36.                     #print "Line %5d Face %3d, %r" % (line_count, len(self.face)-1,line)
  37.                 except:
  38.                     pass
  39.                 try:
  40.                     face_list = scanf.sscanf(line, "f %d/%d %d/%d %d/%d\n")
  41.                     self.face.append([face_list[0], face_list[2], face_list[4]])
  42.                     #print "Line %5d Face %3d, %r" % (line_count, len(self.face)-1,line)
  43.                 except:
  44.                     pass
  45.                 try:
  46.                     face_list = scanf.sscanf(line, "f %d//%d %d//%d %d//%d\n")
  47.                     self.face.append([face_list[0], face_list[2], face_list[4]])
  48.                     #print "Line %5d Face %3d, %r" % (line_count, len(self.face)-1,line)
  49.                 except:
  50.                     pass
  51.                 try:
  52.                     face_list = scanf.sscanf(line, "f %d/%d/%d %d/%d/%d %d/%d/%d\n")
  53.                     self.face.append([face_list[0], face_list[3], face_list[6]])
  54.                     #print "Line %5d Face %3d, %r" % (line_count, len(self.face)-1,line)
  55.                 except:
  56.                     pass
  57.             elif line.startswith("vt "):
  58.                 try:
  59.                     self.texture_coordinate.append(list(scanf.sscanf(line, "vt %f %f\n")))
  60.                     #print "Line %5d Face %3d, %r" % (line_count, len(self.texture_coordinate)-1,line)
  61.                 except:
  62.                     #print "Line %5d Face FAIL, %r" % (line_count,line)
  63.                     pass
  64.             else:
  65.                 self.unknown_list.append(line_count)
  66.                 #print "Line %5d Unknown, %r" % (line_count, line)
  67.             line_count += 1 
  68.         for x in xrange(len(self.face)):
  69.             self.face[x][0], self.face[x][1], self.face[x][2] = self.face[x][0] - 1, self.face[x][1] - 1, self.face[x][2] - 1
  70.         
  71.