Thêm một Hook vào một đường dẫn Nurbs với Python

Sep 13 2020

Kịch bản Python

Tôi muốn thêm một hook vào Nurbs Path trong khi viết script

Trong bố cục:

xóa 'Hình khối' Thêm Đường cong -> Thay đổi đường dẫn đến Chế độ Chỉnh sửa chọn một Hình khối ctrl + h

tất cả đã thiết lập và hoàn thành

Viết kịch bản:

# 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)

Đặt bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] chỉ được đọc.

Cố gắng thêm vertex_groups vào Đường dẫn chỉ trả về 'Không loại'

bất kỳ ý tưởng?

THX Martin

Trả lời

2 batFINGER Oct 15 2020 at 12:04

Tránh chế độ chỉnh sửa nếu bạn có thể.

Đề xuất điều này có thể được thực hiện thông qua lệnh gọi API mà không cần toán tử. Hãy thêm các trống bằng op, thêm chúng khi bạn có các đối tượng khác nếu muốn.

Tập lệnh thử nghiệm thêm một móc trống vào mỗi đầu poly của bạn. Lưu ý đã sử dụng NURBS theo tiêu đề câu hỏi. Để có các điểm cuối, hãy thiết lập các thuộc tính use_endpoints_uvà vcủa 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

Sau khi chanh nhắc nhở tôi tự trả lời:

Cách hackish tôi dựa trên Sử dụng python để tạo đường cong và gắn các điểm cuối của nó bằng móc vào hai hình cầu nơi Mutant Bob đang đăng lạihttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html Ý tưởng đằng sau vụ hack này dường như đang thay đổi thành Chế độ chỉnh sửa

đặt P0.select = True và sử dụng
bpy.ops.object.hook_assign (modifier = ...) để đặt vertex_indices

Đây là năm 2014 trong Blender 2.83

toán tử hook_assign đầu tiên bằng cách nào đó (đừng hỏi tôi - đó là một quan sát) khối P0.select = False

Vì thế:

sau khi chuyển sang chế độ đối tượng -> chọn thứ gì đó ở đó -> chọn Đường dẫn một lần nữa -> chuyển sang chế độ chỉnh sửa một lần nữa -> đặt P0.select = False -> đặt P1.select = True -> gọi người điều hành để gán móc - > thay đổi trở lại Chế độ đối tượng

Thật là một sự hổ thẹn khi bỏ ra vài giờ để nghĩ ra điều này.