Astuces
- Maya
- jEdit
- The GIMP
- Thunderbird
- Code compilé
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.
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).
Tapez la commande:
parent -s -r "curveShape1" "joint3"
Et hop!
Vous pouvez supprimer le node de tranform orphelin puis cliquer sur la courbe.
Cela aura pour effet de sélectionner directement le joint:
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):
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)
jEdit
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:
- Greedy Backspace -> BACK_SPACE
- Greedy Delete -> DELETE
- Greedy Left -> LEFT
- Greedy Right -> RIGHT
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.
- Scannez votre image en grande taille (1200dpi)
- Appliquez un Bruit/Éparpiller d'une valeur qui soit un multiple de deux (2, 4, 6, 8, etc...) suffisamment grande pour faire disparaitre le moirage.
- Appliquez un Flou/Pixeliser d'une valeur à laquelle sera divisée votre image (si vous prenez 4, vous diviserez la taille de votre image par 4 a l'étape suivante).
- Redimensionnez votre image en fonction de la valeur de pixellisation choisi au dessus (si vous avez pris 4, mettez 25%) et en prenant soin de ne pas sampler durant le redimensionnement.
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.
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++
- Propriétés du projet
- C/C++
- général
- Sélectionnez le niveau d'avertissement du compilateur. Un bon choix est 4.
Dernière mise à jour : ven. 08 mai 2020