Aggiunta di un hook a un percorso Nurbs con Python

Sep 13 2020

Scripting Python

Vorrei aggiungere un hook a un Nurbs Path durante lo script

Nel layout:

elimina "Cubo" Aggiungi curva -> Cambia percorso in modalità Modifica seleziona un vertice ctrl + h

tutto pronto e fatto

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)

L'impostazione di bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] è di sola lettura.

Il tentativo di aggiungere vertex_groups al percorso restituisce solo un 'Nessuno tipo'

qualche idea ?

THX Martin

Risposte

2 batFINGER Oct 15 2020 at 12:04

Evita la modalità di modifica se puoi.

Suggerisci che questo possa essere fatto tramite chiamate API senza operatori. Hai aggiunto brasiliano i vuoti con l'op, aggiungili come hai altri oggetti se lo desideri.

Lo script di test aggiunge un hook vuoto a ciascuna estremità del tuo poly. Nota hanno utilizzato NURBS come da titolo della domanda. Per fare in modo che i punti finali impostino le proprietà use_endpoints_ue vdella 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)
1 martburg Sep 13 2020 at 19:08

Dopo che il limone mi ha spinto a rispondere a me stesso:

Il mio modo hacker è basato sull'utilizzo di Python per creare una curva e collegare i suoi punti finali con ganci a due sfere in cui Mutant Bob sta ripubblicandohttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html L'idea alla base di questo hack sembra cambiare in modalità di modifica

imposta P0.select = True e usa
bpy.ops.object.hook_assign (modifier = ...) per impostare vertex_indices

Questo era il 2014 in Blender 2.83

il primo operatore hook_assign in qualche modo (non chiedermelo - è un'osservazione) blocca P0.select = False

Così:

dopo essere passati alla modalità oggetto -> selezionando qualcosa lì -> selezionando ancora una volta il percorso -> passando di nuovo alla modalità di modifica -> imposta P0.select = False -> imposta P1.select = True -> chiama l'operatore per assegnare il gancio - > torna alla modalità oggetto

Che disgrazia impiegare alcune ore per inventare questo.