def getImageFileName(self, meshName, bImage, which): imageName = bImage.name if imageName in self.gImageInfo: return self.gImageInfo[imageName][which] fullFileName = bImage.getFilename() # # check for relative path and expand if necessary # if fullFileName[0:2] == "//": fullFileName = Blender.sys.expandpath(fullFileName) fullFileName = Blender.sys.cleanpath(fullFileName) dirname = Blender.sys.dirname(fullFileName) exists = False try: file = open(fullFileName, "r") file.close() exists = True except: pass # # it is possible that a blender gen'd image was saved without an # extension. in this case the full filename won't contain the # extension but the image name will... # ext = Blender.sys.splitext(fullFileName)[1] if not exists and (ext == ""): checkName = dirname + Blender.sys.sep + imageName try: file = open(checkName, "r") file.close() exists = True fullFileName = checkName except: pass if bImage.packed or not exists: fileName = bImage.name fileExt = "" else: fileName, fileExt = Blender.sys.splitext(Blender.sys.basename(fullFileName)) debug("\n[Image]") debug("imageName: " + imageName) debug("org fullFileName: " + bImage.getFilename()) debug("fullFileName: " + fullFileName) debug("dirname: " + dirname) debug("fileName: " + fileName) debug("fileExt: " + fileExt) source = "unknown" if bImage.source & Blender.Image.Sources["GENERATED"]: source = "generated" elif bImage.source & Blender.Image.Sources["STILL"]: source = "still" elif bImage.source & Blender.Image.Sources["MOVIE"]: source = "movie" elif bImage.source & Blender.Image.Sources["SEQUENCE"]: source = "sequence" try: debug("bImage.depth: %d" % bImage.depth) debug("bImage.source: %d-%s" % (bImage.source, source)) debug("bImage.packed: %d" % bImage.packed) debug("bImage.lib: %s" % bImage.lib) debug("exists on disk: %d" % exists) except: debug("error accessing image properties for: %s" % bImage.name) return None # # result = "???" ext = fileExt if self.gTexExtension != ".???": ext = self.gTexExtension if bImage.packed or self.gCopyImages: result = iUtils.relpath(self.gTexDir + fileName + ext, self.gBaseDir) else: result = iUtils.relpath(fullFileName, self.gBaseDir) result0 = result result = fullFileName if self.gTexExtension != ".???": result = self.gTexDir + fileName + ext else: result = self.gTexDir + fileName + fileExt debug("result0: %s" % result0) debug("result1: %s" % result) self.gImageInfo[imageName] = (result0, result) if which == 0: return result0 return result
def _exportMesh(self, bObject): # get Mesh meshData = bObject.getData(False, True) oName = bObject.getName() debug("\n[Mesh - ob:%s, me:%s]" % (oName, meshData.name)) self.gMeshFileName = self.gMeshDir + meshData.name + ".irrmesh" binaryMeshFileName = "" if self.gBinary: binaryMeshFileName = self.gMeshDir + meshData.name + ".irrbmesh" iGUI.updateStatus("Exporting Mesh: " + meshData.name + ", Object: " + oName) alreadyExported = self._hasMeshBeenExported(meshData.name) if len(meshData.verts) == 0: msg = "ignoring mesh: %s, no vertices" % meshData.name addWarning(msg) return # # write scene node data to scene (.irr) file # meshFileName = self.gMeshFileName if self.sfile != None: meshFileName = iUtils.relpath(self.gMeshFileName, self.gBaseDir) sceneMeshFileName = meshFileName if self.gBinary: fname, fext = Blender.sys.splitext(meshFileName) sceneMeshFileName = fname + ".irrbmesh" self.iScene.writeMeshObject(self.sfile, sceneMeshFileName, bObject, self.gObjectLevel, self.gExportPhysics) # # have we already exported this mesh data block? # if alreadyExported: return self._addToMeshExportedList(meshData.name) try: file = open(self.gMeshFileName, "w") except: pass irrMesh = iMesh.Mesh(bObject, self, True) if irrMesh.createBuffers() == True: if iGUI.exportCancelled(): file.close() return irrMesh.write(file) if iGUI.exportCancelled(): file.close() return self.gVertCount += irrMesh.getVertexCount() self.gFaceCount += irrMesh.getFaceCount() # write image(s) if any for k, v in irrMesh.getMaterials().iteritems(): if iGUI.exportCancelled(): file.close() return if v.getMaterialType() == "UVMaterial": mat = v.getMaterial() images = mat.getImages() for image in images: self._saveImage(image) file.close() file = None if self.gBinary: self._convertMesh(self.gMeshFileName, binaryMeshFileName)