Blender (jusqu'à 2.49)
|
Python
:
Contrôler
les courbes Ipos
avec
le python (2/n)
|
|
Répéter
un motif de courbe pour l'API inférieure à la version <=
2.28
Répéter
un motif de courbe pour l'API supérieure à la version > 2.32
Répéter
un motif de courbe : variation pour imiter cyclic extrapolation
Répéter
un motif de courbe pour l'API inférieure à la version <=
2.28
L'objectif de ce script est de copier un
certain nombre de fois le motif d'une courbe IPO quelconque attribuée
à un objet quelconque.
#------------------
# jm soler (c) juillet 2003
# repeter une motif d'une courbe ipo
# attribuée à un objet quelconque.
#------------------
import Blender
#nom de l'objet, ['Plane',...]
objet=['Plane']
#['LocX','LocY','LocZ','dLocX','dLocY','dLocZ',...]
ipo=['LocX']
#'Vect','Free','Auto'
Vtype='Auto'
#nombre de fois ou le motif est repete
duplique=2
#boucle sur la liste de nom d'objet definis dans la liste 'objet'
for o in objet:
#selection de lobjet
O=Blender.Object.Get(o)
#recuperation des son bloc IPO
I=O.getIpo()
#analyse du bloc
for i in ipo:
#traitement des courbes
for C in I.curves:
#comparaison des nom de courbes avec
celles indiquees dans la iste
# 'ipo'
if C.name==i:
#si le nom est bien
dans la liste recuperation du dernier
# point de la courbe
Dernier=C.bezierPoints[-1].pt[:]
Point=[]
#copie du motif defini
par la courbe
for bz in C.bezierPoints:
Point.append([bz.pt[:],bz.h1[:],bz.h2[:],bz.h1t,bz.h2t])
#boucle le nombre de
fois indique dans la variable 'duplique'
for t in range(duplique):
#ajout
de point à la fin de la courbe
for bz
in Point:
#...
C.addBezier((bz[0][0]+Dernier[0],bz[0][1]),Vtype)
#------------
# N'utiliser
la fonction suivante que dans les versions anterieures
# a la
228
#------------
#recalcul
de la courbe
Blender.Ipo.Recalc(C)
#recuperation
de la position du dernier point pour recommencer
Dernier=C.bezierPoints[-1].pt[:]
Blender.Window.RedrawAll()
|
Répéter
un motif de courbe pour l'API supérieure à la version > 2.32
Globalement le script fonctionne de la
même manière que dans les versions natéreiures ou égales
à al 2.28.
Hélas, il n'est plus possible (au
moins au moment où cette page est mise à jour) de sélectionner
le mode de gestion des poignets . La boucle:
for bz in C.bezierPoints:
Point.append([bz.pt[:],bz.h1[:],bz.h2[:],bz.h1t,bz.h2t]) |
devient:
for bz in C.bezierPoints:
h1, p, h2 = bz.getTriple()
Point.append([h1[:],p[:],h2[:]]) |
Le script:
#------------------
# jm soler (c) novembre 2004
# repeter une motif d'une courbe ipo
# attribuée à un objet quelconque.
#------------------
import Blender
# INDISPENSABLE donnez la liste des courbes
# qui doivent etre traites (en atendant l'interface
# graphique qui ne devrait pas tarder). Exemple :
#['LocX','LocY','LocZ','dLocX','dLocY','dLocZ',...]
ipo=['LocX']
#nom de l'objet, normalement tou sles objets
#selectionnes
objet=[o.name for o in Blender.Object.GetSelected()]
#'Vect','Free','Auto'
Vtype='Auto'
#nombre de fois ou le motif est repete
duplique=2
#boucle sur la liste de nom d'objet definis dans la liste 'objet'
for o in objet:
#selection de lobjet
O=Blender.Object.Get(o)
#recuperation des son bloc IPO
I=O.getIpo()
print "I=O.getIpo()", I
#analyse du bloc
if I!=None:
for i in ipo:
#traitement des courbes
n=0
for C in I.curves:
#comparaison des nom de
courbes avec celles indiquees dans la iste
#'ipo'
if C.getName()==i:
print
"C.getName()==i:",C.getName(),i
#si le
nom est bien dans la liste recuperation du dernier
# point
de la courbe
Dernier=C.bezierPoints[-1].pt[:]
#...
Point=[]
#copie
du motif defini par la courbe
for bz
in C.bezierPoints:
h1, p, h2 = bz.getTriple()
Point.append([h1[:],p[:],h2[:]])
#...
#boucle
le nombre de fois indique dans la variable 'duplique'
for t
in range(duplique):
#ajout de point à la fin de la courbe
for bz in Point:
C.addBezier((bz[1][0]+Dernier[0],bz[1][1]))
#...
#------------
# N'utiliser la fonction suivante que dans les versions anterieures
# a la 228
#------------
#recalcul de la courbe
Blender.Ipo.Recalc(C)
#...
#recuperation de la position du dernier point pour recommencer
Dernier=C.bezierPoints[-1].pt[:]
#...
Blender.Window.RedrawAll() |
Répéter
un motif de courbe : variation pour imiter cyclic extrapolation
#------------------
# jm soler (c) novembre 2004/févier 2006
# repeter une motif d'une courbe ipo
# attribuée à un objet quelconque.
#------------------
import Blender
# INDISPENSABLE donnez la liste des courbes
# qui doivent etre traites (en atendant l'interface
# graphique qui ne devrait pas tarder). Exemple :
#['LocX','LocY','LocZ','dLocX','dLocY','dLocZ',...]
ipo=['RotY']
#nom de l'objet, normalement tous les objets
#selectionnes
objet=[o.name for o in Blender.Object.GetSelected()]
#'Vect','Free','Auto'
Vtype='Auto'
#nombre de fois ou le motif est repete
duplique=1
# Pour imiter cyclic extrapolation, changer la valeur de cette
variable
EXTRAPOLATION = 0 # 1 actif, 0 inactif
#boucle sur la liste de nom d'objet definis dans la liste 'objet'
for o in objet:
#selection de lobjet
O=Blender.Object.Get(o)
#recuperation des son bloc IPO
I=O.getIpo()
print "I=O.getIpo()", I
#analyse du bloc
if I!=None:
for i in ipo:
#traitement des courbes
n=0
for C in I.curves:
#comparaison des nom de
courbes avec celles indiquees dans la iste
#'ipo'
if C.getName()==i:
print
"C.getName()==i:",C.getName(),i
#si le
nom est bien dans la liste recuperation du dernier
# point
de la courbe
Dernier=C.bezierPoints[-1].pt[:]
if EXTRAPOLATION:
DIFFERENCE=Dernier[1]-C.bezierPoints[0].pt[:][1]
else :
DIFFERENCE = 0.0
#...
Point=[]
#copie
du motif defini par la courbe
for bz
in C.bezierPoints:
h1, p, h2 = bz.getTriple()
Point.append([h1[:],p[:],h2[:]])
#...
#boucle
le nombre de fois indique dans la variable 'duplique'
for t
in range(duplique):
#ajout de point à la fin de la courbe
for bz in Point:
C.addBezier((bz[1][0]+Dernier[0],
bz[1][1]+DIFFERENCE))
#...
#------------
# N'utiliser la fonction suivante que dans les versions anterieures
# a la 228
#------------
#recalcul de la courbe
Blender.Ipo.Recalc(C)
#...
#recuperation de la position du dernier point pour recommencer
Dernier=C.bezierPoints[-1].pt[:]
#...
Blender.Window.RedrawAll() |
Pour l'instant ce script est limité
aux objets mais il devrait être possible de l'étendre à
tous les domaines (Material, Camera, Lamp, etc.) du logiciel . Mais en
raison du très grand nombre de nom de courbe possible, cela
ne se fera qu'au travers d'une interface graphique .
Préparation de l'interface graphique
:
#==============================
# Dictionnaire des types IPOs et des courbes qui leur sont liées
#==============================
IPO_type={
"Camera" : 'Lens', 'ClSta', 'ClEnd',
"Material": 'R', 'G', 'B', 'SpecR', 'SpecG', 'SpecB', 'MirR',
'MirG', 'MirB', 'Ref', 'Alpha', 'Emit', 'Amb', 'Spec', 'Hard', 'SpTra',
'Ang', 'Mode', 'HaSize', 'Translu', 'RayMir', 'FresMir', 'FresMirI', 'FresTra',
'FresTraI', 'TraGlow', 'OfsX', 'OfsY', 'OfsZ', 'SizeX', 'SizeY', 'SizeZ',
'TexR', 'TexG', 'TexB', 'DefVar', 'Col', 'Nor', 'Var',
"Object": 'LocX', 'LocY', 'LocZ', 'dLocX', 'dLocY', 'dLocZ',
'RotX', 'RotY', 'RotZ','dRotX', 'dRotY', 'dRotZ', 'SizeX', 'SizeY', 'SizeZ',
'dSizeX', 'dSizeY', 'dSizeZ', 'Layer', 'Time', 'ColR', 'ColG', 'ColB',
'ColA', 'FStreng', 'FFOff', 'Damping', 'RDamp', 'Perm',
'Lamp': 'Energ', 'R','G', 'B', 'Dist', 'SpoSi', 'SpoBl', 'Quad1',
'Quad2', 'HaIntl',
'World': 'HorR', 'HorG', 'HorB', 'ZenR', 'ZenG', 'ZenB', 'Expos',
'Misi', 'MisDi', 'MisSta', 'MisHi', 'StaR', 'StaG', 'StaB', 'StarDi',
'StarSi', 'OfsX', 'OfsY', 'OfsZ','SizeX', 'SizeY', 'SizeZ', 'TexR', 'TexG',
'TexB', 'DefVar', 'Col', 'Nor', 'Var',
"Texture": 'NSize', 'NDepth', 'NType', 'Turb', 'Vnw1', 'Vnw2',
'Vnw3', 'Vnw4', 'MinkMExp', 'DistM', 'ColT', 'iScale', 'DistA', 'MgType',
'MgH', 'Lacu', 'Oct', 'MgOff', 'MgGan', 'NBase1', 'NBase2',
"Curve": 'Speed',
"Key": 'Speed', 'Key 1','Key 2','Key 3','Key 4','Key 5','Key
6','Key 7','Key 8','Key 9','Key 10','Key 11','Key 12','Key 13','Key 14','Key
15','Key 16','Key 17', 'Key 18','Key 19','Key 20', 'Key 31',
"Action": 'LocX', 'LocY', 'LocZ', 'SizeX', 'SizeY', 'SizeZ','QuatX',
'QuatY', 'QuatZ', 'QuatW',
"Sequence": 'Fac',
"Constraint": 'Inf.'} |
Les questions concernant cette page
peuvent être posées sur :
news://news.zoo-logique.org/3D.Blender
|