Adicionando um gancho a um caminho Nurbs com Python
Script Python
Eu gostaria de adicionar um gancho para um caminho Nurbs durante o script
No Layout:
delete 'Cubo' Adicionar Curva -> Mudança de Caminho para Modo de Edição selecione um Vertex ctrl + h
tudo pronto e feito
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)
Configurando bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] é somente leitura.
Tentar adicionar vertex_groups ao Path retorna apenas um 'Tipo Nenhum'
alguma ideia ?
THX Martin
Respostas
Evite o modo de edição, se puder.
Sugira que isso pode ser feito por meio de chamadas de API sem operadores. Preguiçosamente adicionou os vazios com o op, adicione-os como você tem outros objetos, se desejar.
O script de teste adiciona um gancho vazio a cada extremidade do polígono. Observe que usei NURBS conforme o título da pergunta. Para que os pontos finais definam as propriedades use_endpoints_ue vda 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)
Depois que Lemon me levou a responder:
A maneira hackeada I é baseada no uso de python para criar uma curva e anexar seus pontos finais com ganchos a duas esferas onde o Bob Mutante está repostandohttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html A ideia por trás deste hack parece estar mudando para o modo de edição
defina P0.select = True e use
bpy.ops.object.hook_assign (modificador = ...) para definir vertex_indices
Isso foi em 2014 no Blender 2.83
o primeiro operador hook_assign de alguma forma (não me pergunte - é uma observação) bloqueia P0.select = False
Então:
depois de mudar para o modo de objeto -> selecionar algo lá -> selecionar o caminho mais uma vez -> mudar para o modo de edição novamente -> definir P0.select = False -> definir P1.select = True -> chamar o operador para atribuir o gancho - > mude de volta para o modo de objeto
Que desgraça gastou algumas horas para chegar a isso.