Je vais vous présenter comment obtenir l'ordre sélectionné des sommets, des côtés et des faces d'un objet lors de l'ajout d'une nouvelle fonction du plug-in Blender. Seul celui sélectionné par un clic droit (en supposant la disposition des touches par défaut ci-après) est ciblé. Vous pouvez sélectionner plusieurs sommets, côtés et faces en même temps avec la touche B, mais vous ne pouvez pas obtenir l'ordre de sélection avec Blender pour le moment.
Ce qui suit est un script pour obtenir l'ordre de sélection de l'objet actuellement sélectionné. N'oubliez pas d'importer bmesh en plus de bpy pour accéder à la structure interne du mixeur. Il inclut le traitement dépendant de la version pour Blender, qui est requis par Blender 2.73. Pour plus d'informations, voir [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 #Nécessite une importation supplémentaire
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT') #Le traitement doit être effectué en mode EDIT
bm = bmesh.from_edit_mesh(obj.data)
#la version blender est 2.Obligatoire lorsque 73 ou plus
if bpy.app.version[0] >= 2 and bpy.app.version[1] >= 73:
bm.faces.ensure_lookup_table()
#Afficher l'ordre de sélection des visages
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 #Nécessite une importation supplémentaire
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT') #Le traitement doit être effectué en mode EDIT
bm = bmesh.from_edit_mesh(obj.data)
#la version blender est 2.Obligatoire lorsque 73 ou plus
if bpy.app.version[0] >= 2 and bpy.app.version[1] >= 73:
bm.edges.ensure_lookup_table()
#Afficher l'ordre de sélection des côtés
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 #Nécessite une importation supplémentaire
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT') #Le traitement doit être effectué en mode EDIT
bm = bmesh.from_edit_mesh(obj.data)
#la version blender est 2.Obligatoire lorsque 73 ou plus
if bpy.app.version[0] >= 2 and bpy.app.version[1] >= 73:
bm.verts.ensure_lookup_table()
#Afficher l'ordre de sélection des sommets
for e in bm.select_history:
if isinstance(e, bmesh.types.BMVert) and e.select:
print(repr(e))
Le résultat de l'exécution est indiqué ci-dessous.
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