MRが楽しい

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

Blenderで利用可能なpythonスクリプトを作る その4(オブジェクトの原点移動、寸法調整)

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

オブジェクトの原点変更

指定オブジェクトの原点位置を変更します。
オブジェクトの原点位置を変えるだけなので、オブジェクトそのものは移動しません。
・set_origin_cursor.py

# bpyインポート
import bpy
# copyインポート(参照型のコピーのため)
import copy

# オブジェクトの原点変更
# オブジェクトの原点を指定位置に移動する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def set_origin_cursor(arg_objectname='Default',arg_location=(0,0,0)):
  # 他のオブジェクトの寸法を適用しないよう全てのオブジェクトを走査する
  for ob in bpy.context.scene.objects:
    # 非選択状態に設定する
    ob.select=False
  # 指定オブジェクトを取得する
  selectob = bpy.data.objects[arg_objectname]
  # 変更オブジェクトをアクティブに変更する
  bpy.context.scene.objects.active = selectob
  # 変更オブジェクトを選択状態にする  
  selectob.select=True
  # 3Dカーソルの元の位置を記録しておく(参照型のコピー)
  cursorpos = copy.copy(bpy.context.scene.cursor_location)
  # 3Dカーソルの位置を指定位置に移動する
  bpy.context.scene.cursor_location = arg_location
  # オブジェクトの原点を3Dカーソル位置に移動する
  bpy.ops.object.origin_set(type='ORIGIN_CURSOR')
  # 3Dカーソルの位置を元に戻す
  bpy.context.scene.cursor_location = cursorpos
  return

# 関数の実行例
set_origin_cursor('Cube',(2,2,2))

f:id:bluebirdofoz:20180425231401j:plain


オブジェクトの寸法調整

指定オブジェクトの寸法を計測して調整します。
・change_object_dimensions_10.py

# bpyインポート
import bpy

# オブジェクトの寸法変更
# 一辺が最大 10 になるように寸法を変更する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def change_object_dimensions_10(arg_objectname='Default'):
  # 指定オブジェクトを取得する
  selectob = bpy.data.objects[arg_objectname]
  # 各辺の寸法を取得する
  selectdimX = selectob.dimensions[0]
  selectdimY = selectob.dimensions[1]
  selectdimZ = selectob.dimensions[2]
  # 最も大きい一辺を取得する
  selectdimMax = selectdimX
  if selectdimMax < selectdimY:
    selectdimMax = selectdimY
  if selectdimMax < selectdimZ:
    selectdimMax = selectdimZ
  # 最も大きい一辺を 10 にリサイズするための倍率を取得する
  magnification = 10.0 / selectdimMax
  # 拡大後の寸法を取得します
  changedimX = selectdimX * magnification
  changedimY = selectdimY * magnification
  changedimZ = selectdimZ * magnification
  changedimensions = (changedimX,changedimY,changedimZ)
  # 寸法を変更する
  selectob.dimensions=changedimensions
  return

# 関数の実行例
change_object_dimensions_10('Cube')

f:id:bluebirdofoz:20180425231409j:plain