2017-08-24 4 views
0

Ich habe dieses Stück Code gefunden, der im Objektmodus Gesicht mit gegebenem Index auswählt: bpy.data.objects ['Cube.001']. Data.polygons [0] .selectSo bearbeiten Sie Informationen im Bearbeitungsmodus über den Objektmodus

Ich möchte einige andere Manipulationen im Objektmodus wie select_similar, select_all (Aktion'INVERT ') und löschen (Typ =' ONLY_FACE ').

Ich habe versucht, Informationen über .data.polygons [0] zu finden. Wählen Sie in der offiziellen API, aber habe keinen Erfolg.

Ich möchte dies im Objektmodus tun, ohne den Bearbeitungsmodus zu betreten.

Antwort

0

data.polygons[0].select ist eine boolesche Eigenschaft eines Gesichts, das ein MeshPolygon Objekt ist. Es speichert einen wahren oder falschen Wert und es gibt nicht viel anderes, was Sie darüber erfahren können.

Der Operator zum Auswählen ähnlicher Elemente durchläuft einfach die Flächen und setzt select auf true, wenn ein Kriterium erfüllt ist.

import bpy 

obj_data = bpy.context.object.data 

for f in obj_data.polygons: 
    if f.area < 0.1: 
     f.select = True 
    else: 
     f.select = False 

die Auswahl

for f in obj_data.polygons: 
    f.select = not f.select 

Hinweis invertieren, dass dies nur im Objektmodus arbeiten wird als Bearbeitungsmodus bmesh verwendet und wird alle Änderungen beim Verlassen Bearbeitungsmodus überschreiben. Sie finden bmesh ist eine bessere Option zum Bearbeiten von Mesh-Daten, und Sie müssen das Objekt nicht in den Bearbeitungsmodus versetzen, um es zu verwenden.

import bpy 
import bmesh 

obj_data = bpy.context.object.data 

bm = bmesh.new() 
bm.from_mesh(obj_data) 

bm.faces.ensure_lookup_table() 
bad_faces = [f for f in bm.faces if f.calc_area() < 0.1] 

bmesh.ops.delete(bm, geom=bad_faces, context=5) 

bm.to_mesh(obj_data) 
bm.free() 
obj_data.update() 

Wenn der Obect im Bearbeitungsmodus befindet würden Sie from_edit_mesh und update_edit_mesh verwenden. Sie können einige Informationen über den Kontextparameter für bmesh.ops.delete()here finden.

+0

Vielen Dank! Das hilft wirklich. Ich habe nicht über Bmesh nachgedacht, ich muss es lernen :) aber ich verstehe nicht, wie Render von bearbeiteten Mesh zu machen. Ich benutze animierte Knoten mit Python-Skript und wenn ich rendern werde bekomme ich 'Kontext' Objekt hat kein Attribut 'Objekt' –

+0

Ist das ein Skript-Knoten in der Animationsknoten-Struktur? Haben Sie "Kontext" oder "Kontext" - alles Kleinbuchstaben? Stellen Sie eine andere Frage mit dem fehlerhaften Skript. Sie werden [blender.stackexchange.com] (https://blender.stackexchange.com) hilfreicher für blenderspezifisches Skripting finden. – sambler

Verwandte Themen