3

bpy.types.Meshデータフィールドを含むbpy.types.Objectがあるとしましょう。新しいbpy.types.Object内に含まれている可能性のある新しいbpy.types.Meshを取得して、元のシーンを変更しないようにするために、オブジェクトに関連付けられている修飾子の1つを適用するにはどうすればよいですか?

頂点データをカスタム形式にエクスポートする直前に、EdgeSplitモディファイヤを適用することに興味があります。私がこれをやりたい理由は、Blenderに、方向が大きく異なる2つの面で共有されている頂点を自動的かつ透過的に複製させるためです。

4

2 に答える 2

9

2.6APIを使用していると思います。

bpy.ops.object.modifier_apply (modifier='EdgeSplit')

...現在アクティブなオブジェクトにそのエッジ分割モディファイヤを適用します。オブジェクト.modifier_apply(...)であることに注意してください

使用できます

bpy.context.scene.objects.active = my_object

アクティブオブジェクトを設定します。オブジェクトが.activeであることに注意してください。

また、modifier_applydocsを確認してください。bpy.ops。*でしかできないことがたくさんあります。

編集:新しい(おそらく一時的な)メッシュオブジェクトが必要であることがわかりました。ただやる

bpy.ops.object.duplicate()

アクティブオブジェクトを設定すると、新しいアクティブオブジェクトが複製になります(追加された修飾子は保持されます。「Cube」という名前のオブジェクトの場合は、複製してアクティブにし、「Cube.001」という名前を付けます)。その後、修飾子を適用できます。これが十分に明確であることを願っています:)

編集:bpy.ops.object.duplicate()アクティブオブジェクトではなく、選択されたオブジェクトを使用することに注意してください。正しいオブジェクトが選択され、複製されていることを確認するには、これを行います

bpy.ops.object.select_all(action = 'DESELECT')
object.select = True
于 2012-07-26T19:39:53.447 に答える
9

カスタムエクスポーターに適していると思われる別の方法がありto_meshます。エクスポートするオブジェクトのメソッドを呼び出します。すべてのモディファイヤが適用されたオブジェクトのメッシュのコピーが提供されます。次のように使用します。

mesh = your_object.to_mesh(scene = bpy.context.scene, apply_modifiers = True, settings = 'PREVIEW')

次に、返されたメッシュを使用して、必要なデータをカスタム形式に書き込みます。元のオブジェクト(データを含む)は変更されず、エクスポートが終了した後、返されたメッシュを破棄できます。

詳細については、BlenderPythonAPIドキュメントを確認してください。

この方法には1つの問題があります。複数の修飾子が定義されている場合、これを使用して特定の修飾子を1つだけ適用できるかどうかはわかりません。それらすべてを適用しているように見えるので、あなたの場合には役に立たないかもしれません。

于 2013-01-23T15:48:06.487 に答える