Agregar un gancho a una ruta de Nurbs con Python
Secuencias de comandos de Python
Me gustaría agregar un gancho a un Nurbs Path mientras escribo
En diseño:
eliminar 'Cubo' Agregar curva -> Ruta cambiar al modo de edición seleccionar un vértice ctrl + h
todo listo y listo
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 configuración de bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] es de solo lectura.
Intentar agregar vertex_groups a la ruta solo devuelve un 'Tipo Ninguno'
algunas ideas ?
THX Martín
Respuestas
Evite el modo de edición si puede.
Sugiera que esto se puede hacer a través de llamadas a la API sin operadores. Haga que lazilly agregue los vacíos con la operación, agréguelos como tiene otros objetos si así lo desea.
El script de prueba agrega un gancho vacío a cada extremo de su polietileno. Tenga en cuenta que se han utilizado NURBS según el título de la pregunta. Para que los puntos finales establezcan las propiedades use_endpoints_uy 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)
Después de que limón me incitó a responderme a mí mismo:
La forma hackish I se basa en el uso de Python para crear una curva y adjuntar sus extremos con ganchos a dos esferas donde Mutant Bob está volviendo a publicarhttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html La idea detrás de este truco parece estar cambiando al modo de edición
configure P0.select = True y use
bpy.ops.object.hook_assign (modifier = ...) para configurar vertex_indices
Esto fue en 2014 en Blender 2.83
el primer operador hook_assign de alguna manera (no me pregunte, es una observación) bloquea P0.select = False
Entonces:
después de cambiar al modo de objeto -> seleccionar algo allí -> seleccionar la ruta una vez más -> cambiar al modo de edición nuevamente -> establecer P0.select = False -> establecer P1.select = True -> llamar al operador para asignar el gancho - > volver al modo Objeto
Qué vergüenza pasaron algunas horas para pensar en esto.