2017-08-24 23 views
0

オブジェクトモードで指定されたインデックスで顔を選択するコードを見つけました: bpy.data.objects ['Cube.001']。data.polygons [0] .selectオブジェクトモードで編集モードで情報を編集する方法

私はselect_similar、select_all(action'INVERT ')、delete(type =' ONLY_FACE ')のようなオブジェクトモードでいくつかの操作を行いたいと思います。

私はoficial APIの[0] .select .data.polygonsについての情報を見つけるためにしようと試みたが、いずれsucsessを取得できませんでした。

私が編集モードに入ることなく、オブジェクト・モードでこれをやりたいです。

答えて

0

data.polygons[0].selectMeshPolygon対象である顔のブール特性です。それは真実または偽の価値を保存し、あなたがそれについて学ぶことはそれほど多くありません。

セレクト同様の操作者は、単にそれが条件に一致する場合trueに選択顔やセットをループ。

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 

選択に編集モードがbmesh使用して編集モードを終了するにすべての変更を上書きしてしまいますこれが唯一のオブジェクト・モードで動作することを

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

注意を反転させます。 bmeshはメッシュデータを編集するためのより良いオプションであり、オブジェクトを編集モードにして使用する必要はありません。 obectが編集モードの場合

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() 

あなたはfrom_edit_meshupdate_edit_meshを使用します。コンテクストパラメータの情報はbmesh.ops.delete()hereです。

+0

ありがとうございました!これは本当に役立ちます。 bmeshについて考えていない、それを勉強する必要があります:)しかし、私は編集されたメッシュのレンダリングを行う方法を理解していません。私は、Pythonスクリプトでノードをアニメーション使用していると私は私が手にレンダリングんだろうかの「コンテキスト」オブジェクトが属性「オブジェクト」を持っていない –

+0

は、アニメーションのスクリプトノードがツリーノードということですか? 'Context'や' context'はすべて小文字ですか?失敗したスクリプトで別の質問をしてください。ブレンダー固有のスクリプト作成に役立つ[blender.stackexchange.com](https://blender.stackexchange.com)があります。 – sambler

関連する問題