Advertisement
Guest User

brsverts1.py

a guest
Mar 14th, 2012
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.46 KB | None | 0 0
  1. # pepakura3 (.PDO) to metasequoia (.MQO) converter
  2. # by MrPotatoHead using python 2.6
  3.  
  4. # You must specify the input file with the full directory
  5. # you must also specify the output directory AND filename (no extension)
  6. # also remember to change the scale
  7.  
  8. # couldn't be bothered to invert the face orientation
  9. # select all and invert within metasequoia.
  10. import struct
  11. import zlib
  12. import codecs
  13. from array import array
  14. import sys
  15. #saveout = sys.stdout
  16. #outfile = open('C:/3dsmax7/pdo/output.txt', 'w')
  17. #sys.stdout = outfile
  18.  
  19.  
  20.  
  21. h1= codecs.decode('424d','hex')
  22. h2=codecs.decode('000000003600000028000000','hex')
  23. h3=codecs.decode('010018000000000000000000120B0000120B00000000000000000000','hex')
  24. h4= codecs.decode('0000','hex')
  25.  
  26. #******* Change the Scale here *********
  27. scale = 1
  28. #**************************************
  29.  
  30.  
  31. f = open("C:/noesis/brs/BCHR_EGB01/chr_m_egb01.mdl", "rb")
  32. #f = open("C:/noesis/brs/BCHR_YUB01/chr_m_yub01.mdl", "rb")
  33. outputname = "chr_m_egb01"
  34. outputdirectory = "C:/noesis/brs/BCHR_EGB01/"
  35.  
  36.  
  37. metafile = outputdirectory+outputname
  38. of = open(metafile+".mqo", 'w')
  39.  
  40. UVfile = outputdirectory+"UV.tmp"
  41. of2 = open(UVfile, 'w+b')
  42.  
  43. of.write("Metasequoia Document\n")
  44. of.write("Format Text Ver 1.0\n")
  45. of.write(" \n")
  46. of.write("Scene {\n")
  47. of.write("pos -30.5374 -301.0406 878.7299\n")
  48. of.write("lookat 0.0000 0.0000 0.0000\n")
  49. of.write("head -6.8400\n")
  50. of.write("pich 0.1908\n")
  51. of.write("ortho 0\n")
  52. of.write("zoom2 10.0094\n")
  53. of.write("amb 0.490 0.490 0.490\n")
  54. of.write("}\n")
  55.  
  56.  
  57.  
  58.  
  59. try:
  60. offset1 = 776
  61. f.seek(offset1,0);
  62. numvert = 400
  63. kk1 = 1
  64. if kk1 > 10000: kk1=1
  65. for i in range(0, kk1):
  66.  
  67. name = "obj1"
  68. of.write("Object \""+name+"\" {\n")
  69. of.write(" depth 0\n")
  70. of.write(" folding 0\n")
  71. of.write(" scale 1.000000 1.000000 1.000000\n")
  72. of.write(" rotation 0.000000 0.000000 0.000000\n")
  73. of.write(" translation 0.000000 0.000000 0.000000\n")
  74. of.write(" visible 15\n")
  75. of.write(" locking 0\n")
  76. of.write(" shading 1\n")
  77. of.write(" facet 59.5\n")
  78. of.write(" color 0.000 0.000 0.000\n")
  79. of.write(" color_type 0\n")
  80. of.write(" vertex "),
  81. kk2 = 4213
  82. of.write(str(numvert)),
  83. of.write("{\n")
  84. dump = f.read(8)
  85. if kk2 > 10000: kk2 = 0
  86. for j in range(0, numvert):
  87. dump = f.read(8)
  88. dump = f.read(2)
  89. off2 = struct.unpack("<H", dump)
  90. dump = f.read(2)
  91. dump = f.read(1)
  92. vnumb = struct.unpack("<B", dump)
  93. vnum = vnumb[0]
  94. dump = f.read(3)
  95. off1 = f.tell()
  96. off3 = offset1 + off2[0]
  97. f.seek(off3,0);
  98. for k in range(0, vnum):
  99. dump = f.read(12)
  100. x = f.read(4)
  101. y = f.read(4)
  102. z = f.read(4)
  103. otx = struct.unpack("<f", x)
  104. oty = struct.unpack("<f", y)
  105. otz = struct.unpack("<f", z)
  106. ox = otx[0] #* scale
  107. oy = oty[0] #* scale
  108. oz = otz[0] #* scale
  109. tmpstr = "\t"+("%.5f" % ox)+" "+("%.5f" % oy)+" "+("%.5f" % oz)
  110. of.write(tmpstr+"\n")
  111. f.seek(off1,0);
  112. of.write(" }\n")
  113. numfaces = numvert
  114. f.seek(offset1,0);
  115. dump = f.read(8)
  116. kcount = 0
  117. tmpstr = "\t face"+" "+str(numfaces)+" {\n"
  118. of.write(tmpstr)
  119.  
  120. for i in range(0, numfaces):
  121. dump = f.read(8)
  122. dump = f.read(2)
  123. off2 = struct.unpack("<H", dump)
  124. dump = f.read(2)
  125. dump = f.read(1)
  126. vnumb = struct.unpack("<B", dump)
  127. vnum = vnumb[0]
  128. dump = f.read(3)
  129. if vnum == 3:
  130. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  131. kcount+=3
  132. elif vnum == 4:
  133. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  134. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  135. kcount+=4
  136. elif vnum == 5:
  137. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  138. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  139. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  140. kcount+=5
  141. elif vnum == 6:
  142. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  143. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  144. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  145. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  146. kcount+=6
  147. elif vnum == 7:
  148. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  149. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  150. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  151. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  152. of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
  153. kcount+=7
  154. elif vnum == 8:
  155. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  156. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  157. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  158. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  159. of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
  160. of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
  161. kcount+=8
  162. elif vnum == 9:
  163. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  164. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  165. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  166. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  167. of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
  168. of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
  169. of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
  170. kcount+=9
  171. elif vnum == 10:
  172. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  173. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  174. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  175. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  176. of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
  177. of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
  178. of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
  179. of.write("3 V("+str(kcount+9)+" "+str(kcount+8)+" "+str(kcount+7)+")\n")
  180. kcount+=10
  181. elif vnum == 11:
  182. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  183. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  184. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  185. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  186. of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
  187. of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
  188. of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
  189. of.write("3 V("+str(kcount+9)+" "+str(kcount+8)+" "+str(kcount+7)+")\n")
  190. of.write("3 V("+str(kcount+8)+" "+str(kcount+9)+" "+str(kcount+10)+")\n")
  191. kcount+=11
  192. elif vnum == 12:
  193. of.write("3 V("+str(kcount)+" "+str(kcount+1)+" "+str(kcount+2)+")\n")
  194. of.write("3 V("+str(kcount+3)+" "+str(kcount+2)+" "+str(kcount+1)+")\n")
  195. of.write("3 V("+str(kcount+2)+" "+str(kcount+3)+" "+str(kcount+4)+")\n")
  196. of.write("3 V("+str(kcount+5)+" "+str(kcount+4)+" "+str(kcount+3)+")\n")
  197. of.write("3 V("+str(kcount+4)+" "+str(kcount+5)+" "+str(kcount+6)+")\n")
  198. of.write("3 V("+str(kcount+7)+" "+str(kcount+6)+" "+str(kcount+5)+")\n")
  199. of.write("3 V("+str(kcount+6)+" "+str(kcount+7)+" "+str(kcount+8)+")\n")
  200. of.write("3 V("+str(kcount+9)+" "+str(kcount+8)+" "+str(kcount+7)+")\n")
  201. of.write("3 V("+str(kcount+8)+" "+str(kcount+9)+" "+str(kcount+10)+")\n")
  202. of.write("3 V("+str(kcount+11)+" "+str(kcount+10)+" "+str(kcount+9)+")\n")
  203. kcount+=12
  204.  
  205.  
  206. of.write("}\n")
  207. of.write("}\n")
  208. of.write("Eof\n")
  209. of.close()
  210. of2.close()
  211.  
  212.  
  213.  
  214.  
  215. except EOFError:
  216. print "oooops"
  217.  
  218. finally:
  219. f.close()
  220.  
  221. print "finished"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement