MRが楽しい

MRやVRについて学習したことを書き残す

Blenderで利用可能なpythonスクリプトを作る その13(メッシュ情報から頂点の選択)

本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com

メッシュ情報から特定座標の頂点を選択する

bmesh をインポートしてメッシュ情報にアクセスできます。
頂点の座標情報を取得してX軸がマイナス値の頂点を選択状態にします。

・mesh_verts_check.py

# bpyインポート
import bpy
import bmesh

# X軸がマイナス値の頂点を選択状態にする
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def mesh_verts_check(arg_objectname='Default'):
  # 指定オブジェクトを取得する
  selectob = bpy.data.objects[arg_objectname]
  # 変更オブジェクトをアクティブに変更する
  bpy.context.scene.objects.active = selectob
  # 編集モードであることを確認する
  if selectob.mode == 'EDIT':
    # メッシュデータを取得する
    meshdata = bmesh.from_edit_mesh(selectob.data)
    # 頂点を走査する
    for v in meshdata.verts:
      # X軸の値が -0.001 以下の頂点を取得する
      if v.co.x < -0.001:
        # 頂点位置の情報をコンソールに表示する
        print(v.co)
        # 頂点を選択状態にする
        v.select = True
      else:
        # 頂点を非選択状態にする
        v.select = False
  return


# 関数の実行例
mesh_verts_check('Sphere')

f:id:bluebirdofoz:20190602043052j:plain

X軸がマイナス値の頂点を削除してミラーモディファイアを設定する

頂点選択からの削除とモディファイア設定を組み合わせた処理です。
X軸がマイナス値の頂点を削除してミラーモディファイアを設定します。

・set_mirror_modifier.py

# bpyインポート
import bpy
import bmesh

# X軸がマイナス値の頂点を削除してミラーモディファイアを設定する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def set_mirror_modifier(arg_objectname='Default'):
  # 指定オブジェクトを取得する
  selectob = bpy.data.objects[arg_objectname]
  # 変更オブジェクトをアクティブに変更する
  bpy.context.scene.objects.active = selectob
  # 編集モードに移行する
  bpy.ops.object.mode_set(mode='EDIT', toggle=False)
  # メッシュデータを取得する
  meshdata = bmesh.from_edit_mesh(selectob.data)
  # 頂点を走査する
  for v in meshdata.verts:
    # X軸の値が -0.001 以下の頂点を取得する
    if v.co.x < -0.001:
      # 頂点を選択状態にする
      v.select = True
    else:
      # 頂点を非選択状態にする
      v.select = False
  # 選択した頂点を削除する
  bpy.ops.mesh.delete(type='VERT')
  # オブジェクトモードに移行する
  bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
  # 「ミラー」モディファイアを追加する
  bpy.ops.object.modifier_add(type='MIRROR')
  # 作成モディファイアを取得する
  selectmod = selectob.modifiers['Mirror']
  # X軸でミラー
  selectmod.use_x = True
  selectmod.use_y = False
  selectmod.use_z = False
  # オブション設定(結合,クリッピング,頂点グループ)
  selectmod.use_mirror_merge = True
  selectmod.use_clip = True
  selectmod.use_mirror_vertex_groups = True
  # 結合距離
  selectmod.merge_threshold = 0.001
  return


# 関数の実行例
set_mirror_modifier('Sphere')

f:id:bluebirdofoz:20190602043108j:plain