Blender 2.25/2.26/2.27
Attention : inutilisable à partir de la version 2.28.
Python :
Contrôler les courbes Ipos 
avec le python (3/n)
    Début   Index
précédentScript Python
Script python Suivant

Utiliser  un motif de courbe pour contrôler la rotation de plusieurs objets
L'objectif de ce script est de déclancher le mouvement de la chute d'un domino avec un délai de n images. Pour cela, la courbe est  évaluée à l'instant désiré pour pouvoir modifier la valeur de rotation de l'objet visée.

#-------------------------
# dominos
# jm soler 07-2003
#------------------------
import Blender
import math
dominos=41                       #  number of falling objects - 2 
for o in range(dominos):
  O_='Cube.%03d'%(o+1)           # order is important, ('.001','.002','.003',...) 
  decalage=5*(o+1)               # first contact with next object
  O=Blender.Object.Get(O_)       # get this object : "Cube.0nn", nn=str(o)
  C=Blender.Object.Get('Cube')   # get original object
  I=Blender.Ipo.Get('ObIpo.002') # get teh lone ipo cirve of the file
  Tf=Blender.Get('curframe')     # get curframe number
  if Tf>=decalage:               # for this object eval ipo curve 
     O.RotX=I.curves[0].eval(float(Tf-decalage))/6.2832*1.1
  else:
     O.RotX=I.curves[0].eval(1.0)/(math.pi*2)*1.06

 Le script doit être lié  à la scène courante  avec l'option FrameChanging  de manière à ce qu'il s'exécute à chaque calcul d'image dans l'animation :

Variation sur une surface sphérique:

#-------------------------
# dominos
# jm soler 07-2003
#
# il peut etre necessaire de 
# faire alt-p avant de lancer
# l'animation 
#------------------------
import Blender
import math
rayon=310.30

name='domino'
dom=Blender.Object.Get()
dominos=0

for d in dom:
   if d.name.find(name+'.')!=-1:
      dominos+=1
      print dominos

#dominos-=1

C=Blender.Object.Get(name)       # get original object
P=Blender.Object.Get('planete')       # get original object

#print P.LocX,P.LocY,P.LocZ

for o in range(dominos):
  O_=name+'.%03d'%(o+1)          # order is important, ('.001','.002','.003',...) 
  decalage=4*(o+1)               # first contact with next object
  O=Blender.Object.Get(O_)       # get this object : "Cube.0nn", nn=str(o)
  I=Blender.Ipo.Get('ObIpo')     # get the lone ipo cirve of the file
  Tf=Blender.Get('curframe')     # get curframe number

  if Tf>=decalage+10:               # for this object eval ipo curve 
     O.RotX=I.curves[0].eval(float(Tf-decalage))/6.2832*1.155-(o*(math.pi*2)/dominos)
  else:
     try:
       #print O.name
       O.RotX=I.curves[0].eval(1.0)/(math.pi*2)*1.06-(o*(math.pi*2)/(dominos+1))
       O.LocZ=math.cos(o*(math.pi*2)/(dominos+1))*rayon+P.LocZ
       O.LocY=math.sin(o*(math.pi*2)/(dominos+1))*rayon+P.LocY
     except:
       pass
 


 
précédentScript Python
 Script python Suivant
Vers le  Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender


 

 

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube