2016-07-13 21 views
0

In Blender 2.77 Ich habe ein Polygon, verweist als:Wie kann ich in Blender ein Polygon, das durch Indizes gegeben ist, für einen Operator aufrufen?

bpy.data.objects['Cube.001'].data.polygons[0] 

und ein Betreiber:

bpy.ops.transform.resize(value=(0, 0, 1), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1) 

Wie kann ich den Bediener macht auf dem Polygon ausgeführt werden? Ich habe versucht:

bpy.data.objects['Cube.001'].data.polygons[0].select = True 

es zur Auswahl, aber es hat schien nicht zu funktionieren.

Antwort

0

Während Mixer speichert .select zu tun, sind diese Daten nur im Objektmodus gültig Wenn Sie in den Bearbeitungsmodus wechseln, wird eine Bmesh-Kopie der Polygonnetzdaten erstellt, die den Inhalt object.data ersetzt, wenn Sie den Bearbeitungsmodus verlassen. Da Sie beim Bearbeiten von Auswahländerungen ein doppeltes Polygonnetz verwenden, ändern Sie mit dem Python-Befehl object.data nicht das Bearbeitungsgitter und werden beim Beenden des Bearbeitungsmodus überschrieben.

Wenn Sie bpy.ops.transform.resize() verwenden, funktioniert es auf dem aktiven Element, das bedeutet, dass es die Größe eines Polygons ändern muss, das Sie im Bearbeitungsmodus sein müssen. Im Objektmodus skaliert derselbe Operator das Objekt.

So könnte man

bpy.data.objects['Cube.001'].data.polygons[0].select = True 
bpy.ops.object.mode_set(mode='EDIT') 
bpy.ops.transform.resize(value=(0, 0, 1)) 
bpy.ops.object.mode_set(mode='OBJECT') 

verwenden, aber bmesh verwendet, ist der bevorzugte Weg, Daten zu bearbeiten Netz mit Python. Sie finden Beispiele für die Verwendung von bmesh here und ein detaillierteres Beispiel für die Bearbeitung der BMESH data here.

So ein kurzes Beispiel, das face[0] auf der z-Achse skaliert sei -

import bpy 
import bmesh 

bm = bmesh.new() 
bm.from_mesh(obj.data) 

bm.faces.ensure_lookup_table() 
bmesh.ops.scale(bm, verts=bm.faces[0].verts, vec=(0.0, 0.0, 1.0)) 

bm.to_mesh(obj.data) 
bm.free() 
0

Sieht aus wie Sie zurück zu den Objektmodus wechseln müssen die ... Polygone [0] die Netzdaten innerhalb object.data

# assume in EDIT... mode now 
bpy.data.objects['Cube.001'].data.polygons[0] 
bpy.ops.object.editmode_toggle() 
bpy.data.objects['Cube.001'].data.polygons[0].select = True 
bpy.ops.object.editmode_toggle() 
bpy.ops.transform.resize(value=(0, 0, 1), 
        constraint_axis=(False, False, False), 
        constraint_orientation='GLOBAL', 
        mirror=False, 
        proportional='DISABLED', 
        proportional_edit_falloff='SMOOTH', 
        proportional_size=1)