cmds.delete(ch = True)
mercredi 29 août 2012
python mel delete history
Petite astuce toute bête, comment faire un 'delete by type history' en mel ou python, et bien grâce a la fonction delete:
mercredi 8 août 2012
convert string character into a variable
Petite astuces python:
Comment convertir une chaine de caracteres en une variable et pouvoir recuperer sa valeur. Grace a la fonction locals().
English version:
Comment convertir une chaine de caracteres en une variable et pouvoir recuperer sa valeur. Grace a la fonction locals().
sal = 12 d = 'sal' v = locals()[d] print v #Result: 12
English version:
mardi 7 août 2012
UI function with arguments
Comme vous avez deja pu le remarquer, Python maya accepte pas d'arguments pour les callback fonctions des UI, par exemple ce qui suit le 'command' d'un bouton...
Faire ceci n'est pas possible:
bt1 = cmds.button(l = 'test1', c = maFonction(monArgument))
La maniere la plus simple de contourner le probleme et de faire appel a la fonction functools.partial. Pour executer une fonction a l'aide de functools.partial:
functools.partial(maFonction, monArgument)
Un petit exemple concret:
import maya.cmds as cmds from functools import partial def selType(none = None, types = None): t = cmds.ls(type = types) cmds.select(t) if cmds.window('partialEx', q= True, ex = True): cmds.deleteUI('partialEx') win = cmds.window('partialEx') lay = cmds.columnLayout() bt1 = cmds.button(l = 'test1',p = lay, c = partial(selType, types = 'mesh')) bt2 = cmds.button(l = 'test2',p = lay, c = partial(selType, types = 'nurbsSurface')) cmds.showWindow(win)
Notez que functools.partial demande un argument supplementaire, ici j'ai ajouté none = None. Si la fonction est dans une class alors le self de la class fera l'affaire.
dimanche 5 août 2012
maya python vector
Salut salut.
Je cherchais comment avoir la distance entre deux vertex quand je me suis rendu compte que dans python on travail pas avec des vecteurs, on fait tout avec les listes et les tuples. Alors que en Mel on a bien des variables de types vector:
Alors comment faire la même chose en python dans maya ? En utilisant l'API et la class MVector, au passage voici le script qui permet d'avoir le vecteur distance entre deux vertex:
English version:
Je cherchais comment avoir la distance entre deux vertex quand je me suis rendu compte que dans python on travail pas avec des vecteurs, on fait tout avec les listes et les tuples. Alors que en Mel on a bien des variables de types vector:
vector $vect1 = <<0,1,0>>; vector $vect2 = <<1,3,0>>; vector $vect3 = $vect1 + $vect2; // Result: <<1, 4, 0>> //
Alors comment faire la même chose en python dans maya ? En utilisant l'API et la class MVector, au passage voici le script qui permet d'avoir le vecteur distance entre deux vertex:
import maya.cmds as m import maya.OpenMaya as om vX = m.pointPosition("pCube1.vtx[2]") vX = m.pointPosition("pCube1.vtx[3]") vXx = om.MVector(vX[0], vX[1], vX[2]) vYy = om.MVector(vY[0], vY[1], vY[2]) vZz = vYy - vXx print vZz.x print vZz.y print vZz.z
English version:
jeudi 2 août 2012
bake animation nParticle on locators
Ici mon objectif est de faire une simulation avec nParticles et d'y instancier un petit rig de sphere, première étape: faire la simu avec des nParticles Ball de mm taille que les spheres finals, deuxième étapes: récupérer les position de chaque particule a chaque image, troisième étapes: réattribuer ces positions a des locators (aussi nombreux que les particles) et pour finir parenter les rigs (ou autre node non simulable), dupliqué en bon nombre, aux locators.
En image:
pph264 from colin laubry on Vimeo.
et voici le script que j'ai du écrire pour faire tout cela.
#recuperation de la derniere image endFrame = cmds.playbackOptions(q = True, maxTime = True) #recuperation de la premiere image startFrame = cmds.playbackOptions(q = True, minTime = True) #recuperation de la selection, dans l'ordre nParticle Instance de base sel = cmds.ls(sl = True) part = sel[0] inst = sel[1] #nom des futurs instances dupliques new = ("newInstance_"+part+"_") #alignement et freeze de l'instance de base cmds.pointConstraint(part, inst, mo = False) cmds.pointConstraint(part, inst, rm = True) cmds.makeIdentity(inst, apply=True, t=1, r=1, s=1, n=0) #pour chaque frame for i in range(startFrame, endFrame): #deplacement du curseur de la timeline cmds.currentTime(i) #recuperation du nombre de particles nPart = cmds.nParticle(part, ct = True, q = True ) print i #pour chaque particle for j in range(1, nPart+1): #test de l'existence pour pas dupliquer a chaque frame if cmds.objExists((new+str(j))) == 0: #duplication de linstance de base dup = cmds.duplicate(inst, n = (new+str(j))) #recuperation de la position de chaque particle posPP = cmds.nParticle(part, at = 'position', id = j, q = True ) #Attribution de la position a linstance duplique cmds.setAttr((new+str(j)+".tx"), posPP[0]) cmds.setAttr((new+str(j)+".ty"), posPP[1]) cmds.setAttr((new+str(j)+".tz"), posPP[2]) #creation de keyframe cmds.setKeyframe(new+str(j)+".tx") cmds.setKeyframe(new+str(j)+".ty") cmds.setKeyframe(new+str(j)+".tz")
English Version:
Pendant ce temps-lá chez FrameStudio ...
...ca tremble !
fr expression from colin laubry on Vimeo.
Pour faire ceci j'ai du me remettre en peu au mel et creer une expression noise sur chaque petit cube qui forme le gros cube. Qui de bien fou, juste une petit subtilité que j'ai découvert pour tester l'existence d'un object:
if ( `objExists $nomTest` ) {}
Voici l'expression en entiere:
//interrupteur attr float $of = `getAttr "nurbsCircle1.onOff"`; //boucle pour chaque petit cube for ( $i=1; $i<99; ++$i ){ //nom des petits cubes string $cu = "pCube" + $i; //test existence du nom if ( `objExists $cu` ) { //random value float $ra = `rand 1 3`; float $ran = 1+((noise(time)*$ra)/10)*$of; //application au scale scale -a $ran $ran $ran $cu; } else{ //rien mm pas un string ca evite les ralentissements } }
Pour le reste, j'ai ajouté trois wave deformer sur le gros cube pour avoir ce "flottement", Pour la spherification j'ai utilisé le sculpt deformer.
Inscription à :
Articles (Atom)