Thêm một Hook vào một đường dẫn Nurbs với Python
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
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)
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.