Beispiel #1
0
    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
Beispiel #2
0
    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)