Dodawanie hooka do ścieżki Nurbs w Pythonie

Sep 13 2020

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

2 batFINGER Oct 15 2020 at 12:04

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

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ć.