sélection et contrainte sur plusieurs objets de même type

Ici on parle des scripts

Modérateurs : frez, Yadoob, stilobique, Matpi, ModSquad

sélection et contrainte sur plusieurs objets de même type

Message par Wogesjan » 25 Mars 2018, 00:19

bonjour,

Travaillant dans la console python de Blender,j'ai crée un grand système solaire composé de 25 sphères par cette commande python:

for i in range(0,25):bpy.ops.mesh.primitive_uv_sphere_add(size=1-4*i*0.01,location=(2*i,0,0))

Ensuite,par cette commande python,je crée les cercles concentriques passant par chaque sphère:

for i in range(0,25):bpy.ops.curve.primitive_bezier_circle_add(radius=2*i,location=(0,0,0))

Jusque là,ça marche !

ensuite là où cela ne marche pas en python

pour chaque shère(for i in range(0,25): )

-je la séléctionne,

bpy.data.objects['Sphère.00i'].select = True

-j'ajoute une contrainte "follow path"dont la cible est le cercle 00i:

bpy.types.FollowPathConstraint.target='CercleBézier.00i'

-en cochant dans chaque contrainte la case "suivre courbe":

bpy.types.FollowPathConstraint.use_curve_follow=True


Peut-on me résoudre en python pour que cela marche?

merci de votre aide
Wogesjan
 
Message(s) : 27
Inscription : 16 Mars 2018, 13:58

Re: sélection et contrainte sur plusieurs objets de même typ

Message par Ethan Aeris » 25 Mars 2018, 10:02

Salut,
les chemins d'animation sont particuliers, il faut leur définir une cible.
Et pour ça il te faut des variables supplémentaires.

Un rapide récapitulatif :

Code : Tout sélectionner
# c'est toujours bon de définir une durée
duration = bpy.context.scene.frame_end

#définition des axes . Forwardaxe est le sens d'avancement, et upaxe la direction du haut
forwardaxe = 'TRACK_NEGATIVE_Y'
upaxe = 'UP_Z'

# ta méthode pour la sélection des objets est bien, mais je rajoute  une variable supplémentaire

bpy.data.objects['Sphère.00i'].select = True
objectname = bpy.context.active_object
bpy.ops.object.constraint_add(type='FOLLOW_PATH')

#Définis les orientations de l'objet
bpy.context.object.constraints["Follow Path"].forward_axis = forwardaxe
bpy.context.object.constraints["Follow Path"].up_axis = upaxe


# à mettre seulement si tu as problèmes d'origine
bpy.ops.object.editmode_toggle()
bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY')
bpy.ops.object.editmode_toggle()
       
# définis ta trajectoire

#lorsque tu crées ton cercle de trajectoire , nommes le
for i in range(0,25):bpy.ops.curve.primitive_bezier_circle_add(radius=2*i,location=(0,0,0))
bpy.context.object.name = "Path"

#par contre comme tu as plusieurs orbites, il va falloir que tu en crées plusieurs, path001, path002 , etc . entraines toi d'abord avec un seul chemin.

#sélectionne ton objet et attribue lui en cible ton chemin, c'est la partie la plus importante. tu étais sur la bonne voie, c'est juste une histoire de syntaxe.
bpy.context.scene.objects.active = objectname
bpy.context.object.constraints["Follow Path"].target = pathname
bpy.context.object.constraints["Follow Path"].use_curve_follow = True

# si ton objet n'est pas calé sur le chemin, réinitialises les coordonnées

bpy.context.scene.objects.active = pathname
bpy.context.object.data.path_duration = duration

objectname.location[0] = 0
objectname.location[1] = 0
objectname.location[2] = 0

objectname.rotation_euler[0] = 0
objectname.rotation_euler[1] = 0
objectname.rotation_euler[2] = 0


Si ce n'est toujours pas clair, tu peux jeter un oeil sur le code complet de mon script fastpath, qui gère justement ce genre de cas.

https://gist.github.com/ethanaeris/4952e9d34ce54e4cbc5fe22983538b52

En espérant que cela te soit utile ;-)
Avatar de l’utilisateur
Ethan Aeris
 
Message(s) : 247
Inscription : 29 Juin 2016, 17:58


Retour vers Scripts - Python - OSL

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)