Menambahkan Hook ke Nurbs Path dengan Python
Skrip Python
Saya ingin menambahkan hook ke Nurbs Path saat membuat skrip
Dalam Tata Letak:
hapus 'Kubus' Tambahkan Kurva -> Ubah jalur ke Mode Edit pilih salah satu Vertex ctrl + h
semua siap dan selesai
Skrip:
# 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)
Menyetel bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] hanya bisa dibaca.
Mencoba menambahkan vertex_groups ke Path hanya mengembalikan 'Jenis Tidak Ada'
ada Ide?
THX Martin
Jawaban
Hindari mode edit jika Anda bisa.
Sarankan ini dapat dilakukan melalui panggilan API tanpa operator. Dengan malas menambahkan kosong dengan op, tambahkan mereka karena Anda memiliki objek lain jika diinginkan.
Skrip pengujian menambahkan hook kosong ke setiap ujung poli Anda. Catatan telah menggunakan NURBS sesuai judul pertanyaan. Untuk mengatur titik akhir use_endpoints_udan vproperti 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)
Setelah lemon mendorong saya untuk menjawab sendiri:
Cara hackish saya didasarkan pada Menggunakan python untuk membuat kurva dan memasang titik akhir dengan kait ke dua bidang di mana Bob Mutan sedang mengirim ulanghttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html Ide di balik peretasan ini tampaknya berubah menjadi Mode Edit
set P0.select = True dan gunakan
bpy.ops.object.hook_assign (modifier = ...) untuk menyetel vertex_indices
Ini adalah tahun 2014 di Blender 2.83
operator hook_assign pertama entah bagaimana (jangan tanya saya - ini adalah observasi) memblokir P0.select = False
Begitu:
setelah mengubah ke mode objek -> memilih sesuatu di sana -> memilih Path sekali lagi -> mengubah ke mode edit lagi -> set P0.select = False -> set P1.select = True -> panggil operator untuk menetapkan hook - > ubah kembali ke Object Mode
Betapa memalukan menghabiskan beberapa jam untuk memikirkan ini.