Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # pepakura3 (.PDO) to metasequoia (.MQO) converter
- # by MrPotatoHead using python 2.6
- # You must specify the input file with the full directory
- # you must also specify the output directory AND filename (no extension)
- # also remember to change the scale
- # couldn't be bothered to invert the face orientation
- # select all and invert within metasequoia.
- import struct
- import zlib
- import codecs
- from array import array
- import sys
- #saveout = sys.stdout
- #outfile = open('C:/3dsmax7/pdo/output.txt', 'w')
- #sys.stdout = outfile
- h1= codecs.decode('424d','hex')
- h2=codecs.decode('000000003600000028000000','hex')
- h3=codecs.decode('010018000000000000000000120B0000120B00000000000000000000','hex')
- h4= codecs.decode('0000','hex')
- #******* Change the Scale here *********
- scale = 1
- #**************************************
- f = open("C:/noesis/brs/BCHR_EGB01/chr_m_egb01.mdl", "rb")
- #f = open("C:/noesis/brs/BCHR_YUB01/chr_m_yub01.mdl", "rb")
- outputname = "chr_m_egb01"
- outputdirectory = "C:/noesis/brs/BCHR_EGB01/"
- metafile = outputdirectory+outputname
- of = open(metafile+".mqo", 'w')
- UVfile = outputdirectory+"UV.tmp"
- of2 = open(UVfile, 'w+b')
- of.write("Metasequoia Document\n")
- of.write("Format Text Ver 1.0\n")
- of.write(" \n")
- of.write("Scene {\n")
- of.write("pos -30.5374 -301.0406 878.7299\n")
- of.write("lookat 0.0000 0.0000 0.0000\n")
- of.write("head -6.8400\n")
- of.write("pich 0.1908\n")
- of.write("ortho 0\n")
- of.write("zoom2 10.0094\n")
- of.write("amb 0.490 0.490 0.490\n")
- of.write("}\n")
- try:
- offset1 = 776
- f.seek(offset1,0);
- numvert = 400
- kk1 = 1
- if kk1 > 10000: kk1=1
- for i in range(0, kk1):
- name = "obj1"
- of.write("Object \""+name+"\" {\n")
- of.write(" depth 0\n")
- of.write(" folding 0\n")
- of.write(" scale 1.000000 1.000000 1.000000\n")
- of.write(" rotation 0.000000 0.000000 0.000000\n")
- of.write(" translation 0.000000 0.000000 0.000000\n")
- of.write(" visible 15\n")
- of.write(" locking 0\n")
- of.write(" shading 1\n")
- of.write(" facet 59.5\n")
- of.write(" color 0.000 0.000 0.000\n")
- of.write(" color_type 0\n")
- of.write(" vertex "),
- kk2 = 4213
- of.write(str(numvert)),
- of.write("{\n")
- dump = f.read(8)
- if kk2 > 10000: kk2 = 0
- for j in range(0, numvert):
- dump = f.read(8)
- dump = f.read(2)
- off2 = struct.unpack("<H", dump)
- dump = f.read(2)
- dump = f.read(1)
- vnumb = struct.unpack("<B", dump)
- vnum = vnumb[0]
- dump = f.read(3)
- off1 = f.tell()
- off3 = offset1 + off2[0]
- f.seek(off3,0);
- for k in range(0, vnum):
- dump = f.read(12)
- x = f.read(4)
- y = f.read(4)
- z = f.read(4)
- otx = struct.unpack("<f", x)
- oty = struct.unpack("<f", y)
- otz = struct.unpack("<f", z)
- ox = otx[0] #* scale
- oy = oty[0] #* scale
- oz = otz[0] #* scale
- tmpstr = "\t"+("%.5f" % ox)+" "+("%.5f" % oy)+" "+("%.5f" % oz)
- of.write(tmpstr+"\n")
- f.seek(off1,0);
- of.write(" }\n")
- numfaces = numvert
- f.seek(offset1,0);
- dump = f.read(8)
- kcount = 0
- tmpstr = "\t face"+" "+str(numfaces)+" {\n"
- of.write(tmpstr)
- for i in range(0, numfaces):
- dump = f.read(8)
- dump = f.read(2)
- off2 = struct.unpack("<H", dump)
- dump = f.read(2)
- dump = f.read(1)
- vnumb = struct.unpack("<B", dump)
- vnum = vnumb[0]
- dump = f.read(3)
- if vnum == 3:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- kcount+=3
- elif vnum == 4:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- kcount+=4
- elif vnum == 5:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- kcount+=5
- elif vnum == 6:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- kcount+=6
- elif vnum == 7:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
- kcount+=7
- elif vnum == 8:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
- of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
- kcount+=8
- elif vnum == 9:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
- of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
- of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
- kcount+=9
- elif vnum == 10:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
- of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
- of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
- of.write("3 V("+str(kcount+9)+" "+str(kcount+8)+" "+str(kcount+7)+")\n")
- kcount+=10
- elif vnum == 11:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
- of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
- of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
- of.write("3 V("+str(kcount+9)+" "+str(kcount+8)+" "+str(kcount+7)+")\n")
- of.write("3 V("+str(kcount+8)+" "+str(kcount+9)+" "+str(kcount+10)+")\n")
- kcount+=11
- elif vnum == 12:
- of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
- of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
- of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
- of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
- of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
- of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
- of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
- of.write("3 V("+str(kcount+9)+" "+str(kcount+8)+" "+str(kcount+7)+")\n")
- of.write("3 V("+str(kcount+8)+" "+str(kcount+9)+" "+str(kcount+10)+")\n")
- of.write("3 V("+str(kcount+11)+" "+str(kcount+10)+" "+str(kcount+9)+")\n")
- kcount+=12
- of.write("}\n")
- of.write("}\n")
- of.write("Eof\n")
- of.close()
- of2.close()
- except EOFError:
- print "oooops"
- finally:
- f.close()
- print "finished"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement