[Blender] Pythonメモ。トランスフォーム

Pythonスクリプトのメモ。
位置、回転、スケール。

●Cubeという名前のオブジェクトを、Z方向に1移動する。
import bpy #←これを読み込まないとスクリプトでオブジェクトを操作出来ない。
bpy.data.objects['Cube'].location.z +=1
●選択したひとつのオブジェクトを、Z方向に1移動する。
import bpy
bpy.context.selected_objects[0].location.z += 1
●選択したひとつのオブジェクトを、オブジェクトの中心Z方向を軸にして15度回転させる。
import bpy
import math #←mathを読み込まないとpi(円周率)が使えない。

hako = bpy.context.selected_objects[0]
atai = 2 * math.pi / 360 * 15 #←15度をラジアンに変換
hako.rotation_euler.z += atai

※角度を指定する際、値は度数法ではなく、孤度法。
なので、度数法のつもりで15と入力すると、15ラジアン入力した事になり、
859.35度回転してしまう(57.29×15)

・円を360度で示すのが度数法。
・半径が1の円で、長さ1の弧が作る角度を1ラジアンとするのが孤度法。

  ■■■■■■■■■■■■ 1度は何ラジアンか? ■■■■■■■■■■■■
  円周の長さは直径×円周率。
  円周の長さは孤度法だと2πになる。角度は2πラジアン。

  360度=2πラジアンなので、
  2πラジアンを360分割すれば、度数法の1度になる。

  これはπラジアンを180分割するのと同じ。
  3.14159/180=0.0174532777777778
  1度を孤度法にすると、約0.0174533ラジアン。

  ■■■■■■■■■■■■ 1ラジアンは度数法だと何度か? ■■■■■■■■■■■■
  比率で計算する。
  2πラジアン:360度
  πラジアン:180度
  どんな数も、同じ数字で割れば1になる。
  π÷π:180÷π
  ↓
  1:180÷π
  180÷3.1415=57.29582790879777
  1ラジアンは、約57.29度

●選択したオブジェクトのX位置とY位置を、-1~1の範囲で、ランダムに変える。
import bpy
import random #←randomを読み込まないと乱数が使えない。

hako = bpy.context.selected_objects
for i in hako:
    i.rotation_euler.x += random.uniform(-1,1)
    i.rotation_euler.y += random.uniform(-1,1)
●選択したオブジェクトを、X、Y方向に、-30~30度の範囲で、ランダムに回転させる。
import bpy
import math
import random 

hako = bpy.context.selected_objects
for i in hako:
    atai = 2 * math.pi / 360 * 30 #←30度をラジアンに変換
    i.rotation_euler.x += random.uniform(-atai,atai)
    i.rotation_euler.y += random.uniform(-atai,atai)
●選択したオブジェクトのスケールを2倍にする。
import bpy
hako = bpy.context.selected_objects[0]
hako.scale *= 2
●選択したオブジェクトのスケールを軸ごとに変える。X軸を1、Y軸を1、Z軸を3にする。
import bpy
hako = bpy.context.selected_objects[0]
hako.scale = (1,1,3)

●参考サイト
情報処理 I - 第15回:Python による Blender の制御 和歌山大学
ラジアン(弧度法)の意味と「度」への変換方法 sci-pursuit.com

[Blender]スクリプトを使用し、選択したオブジェクトにモディファイアを追加する

Blender 2.6 Python
選択したオブジェクトに一括でモディファイアを追加したい場合のスクリプト

今回の例では、サブデビジョンサーフェスモディファイアを追加する。
スクリプトを実行する前に、モディファイアを追加したい対象オブジェクトを選択する。

import bpy

sentaku = bpy.context.selected_objects

kazu = len(sentaku)

for i in range(0,kazu):
    bpy.context.scene.objects.active = sentaku[i]
    bpy.ops.object.modifier_add(type="SUBSURF")

使い方や、解説は続きから。

続きを読む

[Blender]別のオブジェクトに、モディファイアをコピーする。

モディファイアをほかのオブジェクトにコピーしたい場合は、Copy Attributes Menuから行う。

コピー先となるオブジェクトを選択する。
(コピー先を最初に選択する。)

コピー元となるモディファイアを保有しているオブジェクトを選択に追加する。
(コピー元を最後に選択する)

Ctlr+Cキーを押す。(メニューが出る)

出てきたメニューからCopy Modifiersを選択する。

コピー完了。
コピー元オブジェクトに追加されているモディファイアが全部コピーされる。

※Ctrl+Cキーを押しても、Copy Attributes Menuが出てこない場合。

User Preferences

Addons

3D View

Copy Attributes Menuにチェックを入れ、有効にする。