Dodawanie hooka do ścieżki Nurbs w Pythonie
Skrypty w Pythonie
Chciałbym dodać punkt zaczepienia do ścieżki Nurbs podczas pisania skryptów
W układzie:
usuń 'Cube' Dodaj krzywą -> Zmień ścieżkę do trybu edycji wybierz wierzchołek ctrl + h
wszystko gotowe
Skrypty:
# 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)
Ustawienie bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] jest tylko do odczytu.
Próba dodania vertex_groups do ścieżki po prostu zwraca „Brak typu”
jakieś pomysły ?
THX Martin
Odpowiedzi
Unikaj trybu edycji, jeśli możesz.
Zasugeruj, że można to zrobić za pomocą wywołań API bez operatorów. Niech leniwie dodasz puste miejsca za pomocą operacji, dodaj je tak, jak masz inne obiekty, jeśli chcesz.
Skrypt testowy dodaje pusty haczyk na każdym końcu twojego poli. Uwaga użył NURBS zgodnie z tytułem pytania. Aby punkty końcowe ustawiały właściwości use_endpoints_ui vsplajnu.
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)
Po tym, jak cytryna skłoniła mnie do odpowiedzi:
Hackish sposób I polega na użyciu Pythona do utworzenia krzywej i dołączenia jej punktów końcowych za pomocą haków do dwóch sfer, w których Mutant Bob ponownie publikujehttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html Idea tego hacka wydaje się zmieniać w tryb edycji
ustaw P0.select = True i użyj
bpy.ops.object.hook_ assign (modyfikator = ...), aby ustawić wierzchołki_indeksów
To był rok 2014 w Blenderze 2.83
pierwszy operator hook_tage w jakiś sposób (nie pytaj mnie - to obserwacja) blokuje P0.select = False
Więc:
po przejściu do trybu obiektowego -> zaznaczenie czegoś w tym miejscu -> ponowne wybranie ścieżki -> ponowne przejście do trybu edycji -> ustaw P0.select = False -> ustaw P1.select = True -> wywołaj operatora w celu przypisania zaczepu - > wróć do Object Mode
Co za hańba, spędził kilka godzin, aby to wymyślić.