Vertex Parented Leergut wird versetzt, nachdem Origin auf 3D-Cursor gesetzt hat?

Nov 03 2020

Wie Sie auf diesem GIF sehen können, habe ich ein Netz, das aus einer Reihe von Eckpunkten besteht (unterteilt in ~ 15 Teile). Jeder Scheitelpunkt als leerer Scheitelpunkt.

Erst als ich den übergeordneten Teil beendet hatte, wurde mir klar, dass der Ursprung des übergeordneten Netzes nicht mehr auf dem 3D-Cursor lag (ja, dumm, ich weiß).

Wenn ich den Ursprung auf den 3D-Cursor bewege, folgt das Leergut nicht dem übergeordneten Netz, als ob die Scheitelpunkt-Elternschaft als "Keep Offset" -Erziehung fungiert.

Auf der übergeordneten Registerkarte eines leeren Felds kann ich kein Kontrollkästchen "Verbunden" finden (das ich auf alle Leergutvorgänge gleichzeitig hätte aktivieren und dann den Ursprung auf den 3D-Cursor verschieben können ...).

Irgendeine Idee ? : x

Antworten

4 batFINGER Nov 03 2020 at 00:34

Skript zu beheben

Führen Sie das folgende Skript aus, um die übergeordnete Beziehung direkt zum Scheitelpunkt herzustellen, sodass die Bearbeitung die Position widerspiegelt. Nullen Sie die Position des leeren und löschen Sie die übergeordnete Inverse.

Wenn Sie den Ursprung auf die Geometrie des Netzes einstellen, werden sowohl die Position als auch die übergeordnete Umkehrung des Leerguts geändert, was die Übersetzung des Ursprungsorts widerspiegelt. (Der (0.18, -0.06, -0.41)im Kommentar oben gezeigte Teil der Matrix).

Wählen Sie das Netzobjekt aus (aktivieren Sie es) und führen Sie das Skript aus.

import bpy
from mathutils import Matrix
from bpy import context

scene = context.scene
mesh_ob = context.object
empties = [e for e in scene.objects if e.parent == mesh_ob]

for e in empties:
    e.matrix_parent_inverse = Matrix()
    e.location = (0, 0, 0)

Das UI-Äquivalent wäre, alle Leergutarten auszuwählen, die AltGPosition zu AltPlöschen und die übergeordnete Inverse zu löschen.

Skript zum Hinzufügen von Leergut an jedem Scheitelpunkt

Da ich die Skripterstellung angesprochen habe, ist es meiner Meinung nach eine gute Idee, ein Skript einzufügen, um jedem Scheitelpunkt eines Netzobjekts Leergut hinzuzufügen.

Habe sie "Vert <i>" genannt, wobei i der Index des Vert ist, gegeben ihnen Kreisanzeige und 0,2 leere Skala.

import bpy
from bpy import context

ob = context.object
coll = context.collection

for v in ob.data.vertices:
    mt = bpy.data.objects.new(
        f"Vert{v.index}",
        None,
        )
    mt.empty_display_type = 'CIRCLE'
    mt.empty_display_size = 0.2
    mt.parent = ob
    mt.parent_type = 'VERTEX'
    mt.parent_vertices = [v.index] * 3
    coll.objects.link(mt)