Ich werde vorstellen, wie Sie die ausgewählte Reihenfolge der Scheitelpunkte, Seiten und Flächen eines Objekts ermitteln, wenn Sie eine neue Funktion des Blender-Plug-Ins hinzufügen. Es werden nur diejenigen ausgewählt, die durch Klicken mit der rechten Maustaste ausgewählt wurden (unter der Annahme des Standard-Tastenlayouts im Folgenden). Mit der Taste B können Sie mehrere Scheitelpunkte, Seiten und Flächen gleichzeitig auswählen. Derzeit können Sie die Auswahlreihenfolge jedoch nicht mit Blender abrufen.
Das folgende Skript ruft die Auswahlreihenfolge für das aktuell ausgewählte Objekt ab. Vergessen Sie nicht, zusätzlich zu bpy auch bmesh zu importieren, um auf die interne Struktur des Mixers zuzugreifen. Es enthält eine versionierungsabhängige Verarbeitung für Blender, die ab Blender 2.73 erforderlich ist. Weitere Informationen finden Sie unter [http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.73/Addons](http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.73] / Addons).
get_face_selection_sequence.py
import bpy
import bmesh #Benötigt zusätzlichen Import
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT') #Die Verarbeitung muss im EDIT-Modus erfolgen
bm = bmesh.from_edit_mesh(obj.data)
#Mixer-Version ist 2.Erforderlich bei 73 oder höher
if bpy.app.version[0] >= 2 and bpy.app.version[1] >= 73:
bm.faces.ensure_lookup_table()
#Gesichtsauswahlreihenfolge anzeigen
for e in bm.select_history:
if isinstance(e, bmesh.types.BMFace) and e.select:
print(repr(e))
get_edge_selection_sequence.py
import bpy
import bmesh #Benötigt zusätzlichen Import
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT') #Die Verarbeitung muss im EDIT-Modus erfolgen
bm = bmesh.from_edit_mesh(obj.data)
#Mixer-Version ist 2.Erforderlich bei 73 oder höher
if bpy.app.version[0] >= 2 and bpy.app.version[1] >= 73:
bm.edges.ensure_lookup_table()
#Zeigen Sie die Auswahlreihenfolge der Seiten an
for e in bm.select_history:
if isinstance(e, bmesh.types.BMEdge) and e.select:
print(repr(e))
get_vert_selection_sequence.py
import bpy
import bmesh #Benötigt zusätzlichen Import
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT') #Die Verarbeitung muss im EDIT-Modus erfolgen
bm = bmesh.from_edit_mesh(obj.data)
#Mixer-Version ist 2.Erforderlich bei 73 oder höher
if bpy.app.version[0] >= 2 and bpy.app.version[1] >= 73:
bm.verts.ensure_lookup_table()
#Zeigen Sie die Auswahlreihenfolge der Scheitelpunkte an
for e in bm.select_history:
if isinstance(e, bmesh.types.BMVert) and e.select:
print(repr(e))
Das Ergebnis der Ausführung ist unten dargestellt.
result.py
>>> for e in bm.select_history:
... if isinstance(e, bmesh.types.BMFace) and e.select:
... print(repr(e))
<BMFace(0x108482cf0), index=4, totverts=4>
<BMFace(0x108482c80), index=2, totverts=4>
>>>
>>> for e in bm.select_history:
... if isinstance(e, bmesh.types.BMEdge) and e.select:
... print(repr(e))
<BMEdge(0x11241f380)>, index=11, verts=(0x10849a960/6, 0x10849a998/7)>
<BMEdge(0x11241f1a0)>, index=5, verts=(0x10849a880/2, 0x10849a8b8/3)>
>>>
>>> for e in bm.select_history:
... if isinstance(e, bmesh.types.BMVert) and e.select:
... print(repr(e))
<BMVert(0x10849a960), index=6>
<BMVert(0x10849a8f0), index=4>
>>>
Recommended Posts