本日は Blender の技術調査枠です。
Blender2.8で利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com
オブジェクトの原点変更
指定オブジェクトの原点位置を変更します。
オブジェクトの原点位置を変えるだけなので、オブジェクトそのものは移動しません。
・set_origin_cursor.py
# bpyインポート import bpy # copyインポート(参照型のコピーのため) import copy # オブジェクトの原点を指定位置に移動する def set_origin_cursor(arg_objectname="Default", arg_location=(0, 0, 0)) -> bool: """オブジェクトの原点を指定位置に移動する Keyword Arguments: arg_objectname {str} -- 対象オブジェクト名 (default: {"Default"}) arg_location {tuple} -- 移動先の指定座標 (default: {(0, 0, 0)}) Returns: bool -- 実行の正否 """ # 他のオブジェクトの寸法を適用しないよう全てのオブジェクトを走査する for ob in bpy.context.scene.objects: # 非選択状態に設定する ob.select_set(False) # 指定オブジェクトを取得する # (get関数は対象が存在しない場合 None が返る) selectob = bpy.data.objects.get(arg_objectname) # 指定オブジェクトが存在するか確認する if selectob == None: # 指定オブジェクトが存在しない場合は処理しない return False # 変更オブジェクトを選択状態にする selectob.select_set(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 True # 関数の実行例 set_origin_cursor( arg_objectname="Cube", arg_location=(2, 2, 2) )
オブジェクトのサイズ調整
指定オブジェクトのサイズを指定の長辺サイズに合うように拡縮します。
・change_object_dimensions.py
# bpyインポート import bpy # オブジェクトの寸法を指定のサイズ以内に変更する def change_object_dimensions(arg_objectname="Default", arg_magnification=10) -> bool: """オブジェクトの寸法を指定のサイズ以内に変更する Keyword Arguments: arg_objectname {str} -- 対象オブジェクト名 (default: {"Default"}) arg_magnification {int} -- 指定サイズ (default: {10}) Returns: bool -- 実行の正否 """ # 指定オブジェクトを取得する # (get関数は対象が存在しない場合 None が返る) selectob = bpy.data.objects.get(arg_objectname) # 指定オブジェクトが存在するか確認する if selectob == None: # 指定オブジェクトが存在しない場合は処理しない return False # 各辺の寸法を取得する 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 = arg_magnification / selectdimMax # 拡大後の寸法を取得します changedimX = selectdimX * magnification changedimY = selectdimY * magnification changedimZ = selectdimZ * magnification changedimensions = (changedimX,changedimY,changedimZ) # 寸法を変更する selectob.dimensions = changedimensions return True # 関数の実行例 change_object_dimensions( arg_objectname="Cube", arg_magnification=10 )