home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 9341 / fmt_cm3d2.7z / fmt_cm3d2.py
Encoding:
Python Source  |  2015-06-25  |  2.0 KB  |  93 lines

  1. #sample class
  2. from inc_noesis import *
  3.  
  4. def registerNoesisTypes():
  5.     handle = noesis.register("Custom Maid 3D 2", ".model")
  6.     noesis.setHandlerTypeCheck(handle, cm3d2modCheckType)
  7.     noesis.setHandlerLoadModel(handle, cm3d2modLoadModel)
  8.  
  9.     #handle = noesis.register("cm3d2 tex", ".cm3d2tex")
  10.     #noesis.setHandlerTypeCheck(handle, cm3d2texCheckType)
  11.     #noesis.setHandlerLoadRGBA(handle, cm3d2texLoadRGBA)
  12.     #noesis.logPopup()
  13.  
  14.     return 1
  15.  
  16.  
  17. def cm3d2modCheckType(data):
  18.     td = NoeBitStream(data)
  19.     myHeader = td.readBytes(11).decode("ASCII")
  20.     if "\nCM3D2_MESH" == myHeader:
  21.         return 1
  22.     else:
  23.         return 0
  24.  
  25. #def cm3d2texCheckType(data):
  26. #    td = NoeBitStream(data)
  27. #    return 1
  28.  
  29. class cm3d2File: 
  30.          
  31.     def __init__(self, bs):
  32.         self.bs = bs
  33.         self.texList  = []
  34.         self.matList  = [] 
  35.         self.boneList = []
  36.         self.boneMap  = []
  37.         self.offsetList = []
  38.         self.meshOffsets = []
  39.  
  40.     def loadAll(self, bs):
  41.         self.loadMeshHeader(bs)
  42.         self.loadBones(bs)
  43.  
  44.     def loadMeshNames(self, bs):
  45.         pass
  46.  
  47.     def loadMeshHeader(self, bs):
  48.         myHeader = bs.readBytes(11).decode("ASCII")
  49.         myVersion = bs.readUInt()
  50.         modelNameSize = bs.readUByte()
  51.         modelName = bs.readBytes(modelNameSize).decode("ASCII")
  52.         sceneNameSize = bs.readUByte()
  53.         sceneName = bs.readBytes(sceneNameSize).decode("ASCII")
  54.         print(modelName, sceneName)
  55.         
  56.     def loadBones(self, bs):
  57.         boneCount = bs.readUInt()
  58.         print(boneCount)
  59.  
  60.     def loadMeshInfo(self, bs):
  61.         pass
  62.  
  63.     def loadUnk1(self, bs):
  64.         pass
  65.  
  66.     def loadBonePallet(self, bs):
  67.         pass
  68.  
  69.     def loadTex(self): 
  70.         pass
  71.  
  72.     def loadMatInfo(self, bs):
  73.         pass
  74.  
  75.     def loadMeshs(self, bs):
  76.         pass
  77.  
  78. def cm3d2modLoadModel(data, mdlList):
  79.     ctx = rapi.rpgCreateContext()
  80.     cm3d2 = cm3d2File(NoeBitStream(data))
  81.     cm3d2.loadAll(cm3d2.bs)
  82.     try:
  83.         mdl = rapi.rpgConstructModel()
  84.     except:
  85.         mdl = NoeModel()
  86.     mdl.setModelMaterials(NoeModelMaterials(cm3d2.texList, cm3d2.matList))
  87.     mdlList.append(mdl); mdl.setBones(cm3d2.boneList)    
  88.     return 1
  89.  
  90.  
  91. #def cm3d2texLoadRGBA(data, texList):
  92. #    td = NoeBitStream(data)
  93. #    return 1