Ajout d'un hook à un chemin Nurbs avec Python
Script Python
Je voudrais ajouter un hook à un chemin Nurbs pendant le script
Dans la mise en page:
supprimer 'Cube' Ajouter une courbe -> Changement de chemin en mode d'édition sélectionnez un sommet ctrl + h
tout est prêt et fait
Scripting:
# Add Path
coords_list = ([[0,0,0], [1,0,0]])
path = bpy.data.curves.new('_path', 'CURVE')
path.dimensions = "3D"
spline = path.splines.new(type='POLY')
spline.points.add(len(coords_list)-1)
for p, new_co in zip(spline.points, coords_list):
p.co = (new_co + [1.0]) # (add nurbs weight)
Path = bpy.data.objects.new('_Path', path)
bpy.context.scene.collection.objects.link(Path)
La définition de bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] est en lecture seule.
Essayer d'ajouter vertex_groups au chemin renvoie simplement un 'Aucun type'
des idées ?
THX Martin
Réponses
Évitez le mode d'édition si vous le pouvez.
Suggérer que cela peut être fait via des appels API sans opérateur. Avoir paresseusement ajouté les vides avec l'op, ajoutez-les comme vous avez d'autres objets si vous le souhaitez.
Le script de test ajoute un crochet vide à chaque extrémité de votre poly. Remarque a utilisé NURBS selon le titre de la question. Pour que les points d'extrémité définissent les propriétés use_endpoints_uet vde la spline.
import bpy
from bpy import context
# Add Path
coords_list = ([[0,0,0], [1,0,0]])
path = bpy.data.curves.new('_path', 'CURVE')
path.dimensions = "3D"
spline = path.splines.new(type='NURBS')
spline.points.add(len(coords_list)-1)
spline.use_endpoint_u = True
spline.use_endpoint_v = True
path_ob = bpy.data.objects.new('_Path', path)
for i, (p, new_co) in enumerate(
zip(spline.points, coords_list)
):
p.co = (new_co + [1.0]) # (add nurbs weight)
bpy.ops.object.empty_add(
location=new_co,
)
hm = path_ob.modifiers.new(
name=f"Hook{i}",
type='HOOK',
)
hm.object = context.object
hm.vertex_indices_set([i])
context.collection.objects.link(path_ob)
Après le citron m'a incité à me répondre:
La manière hackish I est basée sur Utiliser python pour créer une courbe et attacher ses extrémités avec des crochets à deux sphères où Mutant Bob republiehttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html L'idée derrière ce hack semble changer en mode d'édition
set P0.select = True et utiliser
bpy.ops.object.hook_assign (modifier = ...) pour définir les vertex_indices
C'était en 2014 dans Blender 2.83
le premier opérateur hook_assign en quelque sorte (ne me demandez pas - c'est une observation) bloque P0.select = False
Alors:
après être passé en mode objet -> sélectionner quelque chose là-bas -> sélectionner à nouveau le chemin -> passer à nouveau en mode édition -> définir P0.select = False -> définir P1.select = True -> appeler l'opérateur pour attribuer le crochet - > revenir en mode objet
Quelle honte a passé quelques heures à trouver ça.