Hinzufügen eines Hakens zu einem Nurbs-Pfad mit Python
Python-Skripte
Ich möchte einem Nurbs-Pfad während der Skripterstellung einen Haken hinzufügen
Im Layout:
'Würfel' löschen Kurve hinzufügen -> Pfad in Bearbeitungsmodus ändern Wählen Sie einen Scheitelpunkt Strg + h
alles eingestellt und fertig
Scripting:
# 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)
Das Festlegen von bpy.data.objects ['_ Path']. Modifers [".... ID ...."]. Vertex_indices [0] ist schreibgeschützt.
Beim Versuch, dem Pfad vertex_groups hinzuzufügen, wird nur der Typ "Keine" zurückgegeben.
irgendwelche Ideen ?
THX Martin
Antworten
Vermeiden Sie den Bearbeitungsmodus, wenn Sie können.
Schlagen Sie vor, dass dies über API-Aufrufe ohne Operatoren erfolgen kann. Haben Sie das Leergut mit der Operation faul hinzugefügt, fügen Sie sie hinzu, wenn Sie andere Objekte haben, falls dies gewünscht wird.
Das Testskript fügt jedem Ende Ihrer Poly einen leeren Haken hinzu. Hinweis haben NURBS gemäß Fragentitel verwendet. Damit Endpunkte die use_endpoints_uund vEigenschaften des Splines festlegen können .
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)
Nachdem Zitrone mich aufgefordert hatte, mir zu antworten:
Die hackige Art und Weise, wie ich auf der Verwendung von Python basiert , um eine Kurve zu erstellen und ihre Endpunkte mit Haken an zwei Kugeln anzuhängen, in denen Mutant Bob neu postethttp://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html Die Idee hinter diesem Hack scheint sich in den Bearbeitungsmodus zu ändern
setze P0.select = True und benutze
bpy.ops.object.hook_assign (modifier = ...), um die vertex_indices zu setzen
Dies war 2014 in Blender 2.83
Der erste Hook_assign-Operator (frag mich nicht - es ist eine Beobachtung) blockiert P0.select = False
Damit:
nach dem Wechsel in den Objektmodus -> dort etwas auswählen -> den Pfad noch einmal auswählen -> wieder in den Bearbeitungsmodus wechseln -> P0.select = False setzen -> P1.select = True setzen -> den Bediener anrufen, um den Hook zuzuweisen - > zurück in den Objektmodus wechseln
Was für eine Schande, einige Stunden damit verbracht zu haben.