Astuces

Cette page a pour but de regrouper des astuces rapides sur différent sujet.

Maya

La plupart des commandes peuvent êtres placées dans le userSetup.mel pour ne pas avoir a être activées manuellement a chaque fois.

Trouver le userSetup.mel chargé par Maya

whatIs userSetup.mel
// Result: Script found in: blabla/scripts/userSetup.mel // 

Désactiver l'affichage des Warnings de Maya

Il peut arriver que dans un de vos script, Maya affiche des Warning alors que vous savez précisément ce que vous faites. Pour les supprimer, rien de plus simple:

scriptEditorInfo -e -suppressWarnings true;

N'oubliez pas de les réafficher une fois le bout de code bavard exécuté. ;)

Masquer la partie Notes de l'Attributes Editor

layout -e -vis 0 AEaddOrEditNotesLayout;

Activer les nodes de production (mip_shaders)

Voir la méthode simple sur la page des Nodes de Production (mip shaders).

Afficher physiquement une valeur dans une scène Maya

Créez un groupe vide anEmptyGroup puis créez une expression avec:

string $parentGrp = "anEmptyGroup";
string $value = locator1.translateX;

if(`objExists "DIGIVALLUE_GRP"`){
    delete "DIGIVALLUE_GRP";
}

string $curveResults[] = `textCurves -text $value -font "Courier"`;
group -name "DIGIVALLUE_GRP";
parent -relative "DIGIVALLUE_GRP" $parentGrp;
string $planarResults[] = `planarSrf -polygon 1 -tolerance 0.001 -degree 3`;
parent $planarResults[0] "DIGIVALLUE_GRP";
polyExtrudeFacet -keepFacesTogether 1 -constructionHistory 1 -translateZ 0.05;

Ce bout de code va générer, a chaque image, un mesh en texte affichant la valeur de $value parenté au groupe “anEmptyGroup” que vous pouvez déplacez.

Maya_expression_create_text001

Maya_expression_create_text002

Assigner une shape à un joint

Vous pouvez assigner une shape à un joint. Ainsi, sélectionnez la shape en question, sélectionnez directement le joint (qui fait ducoup office de transform).

Parent_curve_to_joint_001

Tapez la commande:

parent -s -r "curveShape1" "joint3"

Parent_curve_to_joint_002

Et hop!

Parent_curve_to_joint_003

Vous pouvez supprimer le node de tranform orphelin puis cliquer sur la courbe.

Cela aura pour effet de sélectionner directement le joint:

Parent_curve_to_joint_004

Pratique en rig.

API Python

Récupérer le MObject/MDagPath d'un node depuis son nom

import maya.OpenMaya as OpenMaya

sel = OpenMaya.MSelectionList()
obj = OpenMaya.MObject()
dagPath = OpenMaya.MDagPath()

sel.add("pSphere1")
sel.getDependNode(0, obj)


# ou, si le node donné a un DAG:
sel.getDagPath(0, dagPath)


# voir même les deux d'un coup:
sel.getDagPath(0, dagPath, obj)

Source: http://forums.cgsociety.org/showthread.php?t=630763#post5166642

Récupérer le hash d'un node

import maya.OpenMaya as OpenMaya

myMObjHandle = OpenMaya.MObjectHandle(myMObj)
print myMObjHandle.hashCode()

Notez que le hash code n'est pas garantie d'une session a l'autre, en cas de suppression puis undo, de réouverture de scène etc...

Source: OpenMaya.MObjectHandle().hashCode()

Connaître la position d'un point de l'espace 3D dans l'espace écran

Petit morceau de code avec des matrices dedans qui renvoi la position 2D, dans l’écran, d'un locator (une projection en somme).

import maya.cmds as cmds
import maya.OpenMaya as OpenMaya


# prepare la selection list
mSelectList = OpenMaya.MSelectionList()
mSelectList.add("locator1")
mSelectList.add("camera1")


# récupère des MDagPath et MObject des deux nodes
iter = OpenMaya.MItSelectionList(mSelectList)
locatorMDag = OpenMaya.MDagPath()
locatorMObj = OpenMaya.MObject()
iter.getDagPath(locatorMDag, locatorMObj)

iter.next()
camMDag = OpenMaya.MDagPath()
camMObj = OpenMaya.MObject()
iter.getDagPath(camMDag, camMObj)


# récupère les matrices
locMatrix = locatorMDag.exclusiveMatrix()
camMatrix = camMDag.inclusiveMatrixInverse()


# récupération de la matrice de projection et conversion d'un MFloatMatrix en MMatrix.
camMFn = OpenMaya.MFnCamera(camMDag)
camProjFloatMatrix = camMFn.projectionMatrix()
camProjMatrix = OpenMaya.MMatrix(camProjFloatMatrix.matrix)


# récupère la position du locator dans l'espace monde sous la forme d'un MPoint
locatorTransform = OpenMaya.MFnTransform(locatorMDag)
locatorVector = locatorTransform.getTranslation(OpenMaya.MSpace.kWorld)
locatorMPoint = OpenMaya.MPoint(locatorVector)

resultPoint = locatorMPoint*camMatrix
print "Position du locator relative a la camera ->", resultPoint.x, resultPoint.y, resultPoint.z
resultPoint = resultPoint*camProjMatrix
print "Position du locator relative a la camera projete ->", resultPoint.x, resultPoint.y, resultPoint.z
print "Position du locator relative a l'ecran ->", ((resultPoint.x/resultPoint.w)/2)+0.5, ((resultPoint.y/resultPoint.w)/2)+0.5 # C'est juste un petit bricolage pour avoir des coordonnées comprises entre 0 et 1.

Créer des instances

Soit une scène avec une pSphere1 et dix “null” (transforms):

Instance_api_001

import maya.OpenMaya as om

shapeObj     = om.MObject()  # will contain the MObject representing the shape to instanciate
xformDagPath = om.MDagPath() # will contain the MDagPath of the null nodes


# retrieve shape node to instanciate
sel = om.MSelectionList()
sel.add("pSphereShape1")
sel.getDependNode(0, shapeObj)
sel.clear()


# create function set to modify every xform
xformDagNodeFn = om.MFnDagNode()

for i in range(1,11):

    # retrive the current null node
    xformName = 'null{0}'.format(i)
    sel.add(xformName)
    sel.getDagPath(0, xformDagPath)
    sel.clear()

    # now we have the dag path of the null, we set it to the function set
    xformDagNodeFn.setObject(xformDagPath)

    # True at the end mean the child is added asa instance (see doc)
    xformDagNodeFn.addChild(shapeObj, xformDagNodeFn.kNextPos, True)

Instance_api_002

jEdit

Jedit_splash

Comportement du backspace correct avec les tabs en espaces (Soft Tabs)

Quand on utilise les soft tabs avec jEdit, un backspace ne supprime qu'un espace a la fois, même si il y a 4 espaces (et que votre nombre d'espace pour un tab est de 4).

Pour ça, il suffit d'aller dans les raccourcis (Global Options/Shortcuts) et d'appliquer les modifications suivantes:

Jedit_greedy_backspace

Source: jEdit is Genius (Soft Tabs done Right)

The GIMP

Supprimer le moirage (détramer) d'une image

Une méthode simple que j'utilise souvent.

Voila. Ce n'est pas aussi efficace qu'une transformation de Fourier mais bon, c'est plus rapide... :)

Thunderbird

Répondre au dessus du mail

Voici la manipulation pour configurer les options par défaut de réponse à un mail. Par défaut, quand on clique sur Répondre, le curseur vient se placer sous le mail ce qui n'est pas toujours pratique.

Thunderbird_parametres_des_comptes

Thunderbird_parametres_des_comptes_quote_position

Code compilé

Un tutorial sur les problèmes courants en C: Débusquer et apprivoiser les bugs en C

Afficher tout les warnings lors de la compilation

Sous GCC

-Wall -Wextra -Wunreachable-code -Wwrite-strings -Wstrict-prototypes

Sous Visual C++