Archives pour la categorie ‘Maya API’

Maya: executer un fichier python en le glissant dans le viewport

Si vous êtes un du genre à vouloir utiliser des modules python comme des fichiers MEL, à vouloir juste drag and drop un .py dans le viewport maya pour le charger (oui, j’ai souvent eu droit à des « Eh mais python c’est de la *****, c’est pas reconnu par maya sauf si c’est dans le script editor, c’est ******! »), utiliser des petits scripts sans dépendances, tous regroupés dans un fichier, si vous avez peur de vouloir gérer des modules/packages et que vous ne voulez pas vous prendre la tête avec les « import », cet article est fait pour vous!

Enregistrez le code ci-dessous dans un fichier « .py », dans le plugin manager de maya (Window->Settings/Preferences->Plug-in manager), allez chercher le plugin précédemment créé (où placez le dans un des répertoire de plugins que maya va lancer au démarrage) et le tour est joué!
Vous pouvez maintenant drag&drop des fichiers .py (attention, pas .pyc) dans maya!

# -*- coding: utf-8 -*-

import sys
import maya.OpenMayaMPx as mpx


class PyDrop(mpx.MPxFileTranslator):
    registeredName = "pyDrop"

    def __init__(self):
        mpx.MPxFileTranslator.__init__(self)

    @classmethod
    def canBeOpened(cls):
        return False

    @classmethod
    def haveReadMethod(cls):
        return True

    @classmethod
    def filter(cls):
        return "*.py"

    @classmethod
    def defaultExtension(cls):
        return "py"

    def reader(self, file_, optionsString, mode):
        execfile(file_.rawFullName())


def translatorCreator():
    return mpx.asMPxPtr(PyDrop())


def initializePlugin(mobject):
    mplugin = mpx.MFnPlugin(mobject)
    try:
        mplugin.registerFileTranslator(PyDrop.registeredName, None, translatorCreator)
    except:
        sys.stderr.write("Failed to register translator: %s" % PyDrop.registeredName)
        raise


def uninitializePlugin(mobject):
    mplugin = mpx.MFnPlugin(mobject)
    try:
        mplugin.deregisterFileTranslator(PyDrop.registeredName)
    except:
        sys.stderr.write("Failed to deregister translator: %s" % PyDrop.registeredName)
        raise

Maya convertir des images en normal map

from maya.OpenMaya import MImage
import os.path as osp


def convertBumpToNormal(src, dst, scale=1, outputFormat=None, force=False):
    """Creates a new file (dst) that can be used as normal map file from given (src)
     file.

    :param src: Source file used to create normal map.
    :type src: str
    :param dst: Destination file, where to save converted map.
    :type dst: str
    :param scale: Depth normal scale, can vary from -256.0 to 256.0, although typical values range from 1.0 to 10.0.
    :type scale: float
    :param outputFormat: Destination format, if not set, if taken from given dst or src.
    :type outputFormat: str
    :param force: If dst file exists, overwrites it.
    :type force: bool
    """
    image = MImage()
    if not osp.isfile(src):
        raise ValueError("%s if not a file!" % src)
    if osp.isfile(dst) and not force:
        raise Exception("%s already exists, use -force flag to overwrite." % dst)

    image.readFromFile(src)
    image.filter(MImage.kHeightFieldBumpFormat, MImage.kNormalMapBumpFormat, scale)

    outputFormat = (outputFormat or osp.splitext(dst)[1].replace(".", "") or
                    osp.splitext(src)[1].replace(".", ""))
    if not outputFormat:
        image.writeToFile(dst)
    else:
        image.writeToFile(dst, outputFormat)

Haut de Page