Hinzufügen eines Hakens zu einem Nurbs-Pfad mit Python

Sep 13 2020

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

2 batFINGER Oct 15 2020 at 12:04

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

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.