Menambahkan Hook ke Nurbs Path dengan Python

Sep 13 2020

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

2 batFINGER Oct 15 2020 at 12:04

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)
1 martburg Sep 13 2020 at 19:08

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.