Module Draw
[frames | no frames]

Module Draw

Blender.Draw サブモジュール

Draw

New:

このモジュールを使えばBlenderのGUIにアクセスできます。 Widgetとして色々なボタンが用意されています: 押しボタン、トグルボタン、メニューボタン、数値ボタン、文字列ボタン、スライダーボタン、スクロールバーボタン。これに加えて文字列の描画もサポートします。 また、キーボードのキーコードとマウスのボタンコードの値を収めた辞書も用意されています。辞書の内容は、Exampleのあとに載せています。

Example:
 import Blender
 from Blender import Draw, BGL

 mystring = ""
 mymsg = ""
 toggle = 0

 def event(evt, val):    # 入力イベントをハンドルする関数
   global mystring, mymsg

   if not val:  # val = 0: キー/マウスボタンを離したことを示します
     if evt in [Draw.LEFTMOUSE, Draw.MIDDLEMOUSE, Draw.RIGHTMOUSE]:
       mymsg = "You released a mouse button."
       Draw.Redraw(1)
     return

   if evt == Draw.ESCKEY:
     Draw.Exit()                 # ユーザーがESCを押したら終了する
     return

   elif Draw.AKEY <= evt <= Draw.ZKEY: mystring += chr(evt)
   elif evt == Draw.SPACEKEY: mystring += ' '
   elif evt == Draw.BACKSPACEKEY and len(mystring):
     mystring = mystring[:-1]
   else: return # 何も変更がなければ、再描画(Redraw)する必要はありません

   Draw.Redraw(1)

 def button_event(evt):  # Drawボタンイベントをハンドルする関数
   global mymsg, toggle
   if evt == 1:
     mymsg = "You pressed the toggle button."
     toggle = 1 - toggle
     Draw.Redraw(1)

 def gui():              # 画面を描画する関数
   global mystring, mymsg, toggle
   if len(mystring) > 90: mystring = ""
   BGL.glClearColor(0,0,1,1)
   BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
   BGL.glColor3f(1,1,1)
   Draw.Toggle("Toggle", 1, 10, 10, 55, 20, toggle,"A toggle button")
   BGL.glRasterPos2i(72, 16)
   if toggle: toggle_state = "down"
   else: toggle_state = "up"
   Draw.Text("The toggle button is %s." % toggle_state, "small")
   BGL.glRasterPos2i(10, 230)
   Draw.Text("Type letters from a to z, ESC to leave.")
   BGL.glRasterPos2i(20, 200)
   Draw.Text(mystring)
   BGL.glColor3f(1,0.4,0.3)
   BGL.glRasterPos2i(340, 70)
   Draw.Text(mymsg, "tiny")

 Draw.Register(gui, event, button_event)  # 3つのコールバック関数を登録する
全イベントのリスト:

Warnings:

Note: function Button has an alias: PushButton.

クラス
Button BlenderのGUIのボタンを表すオブジェクトです。

関数の概要
  BeginAlign()
この関数の使用後は、ボタンが整列して描画されます。
Blender Button ColorPicker(event, x, y, width, height, initial, tooltip)
Color Pickerボタンオブジェクトを新しく作ります。
Blender Button Create(value)
デフォルトボタンオブジェクトを新しく作ります。
  Draw()
強制的にすぐさま再描画します。
  EndAlign()
BeginAlign()のあと、ボタンの整列をやめたいときに使います。
  Exit()
GUIを終了します。
int GetStringWidth(string, fontsize)
文字列の幅をピクセル値で取得します。
  Image(image, x, y, zoomx, zoomy, clipx, clipy, clipw, cliph)
画面に画像を描画します。
Blender Button Menu(name, event, x, y, width, height, default, tooltip)
メニューボタンオブジェクトを新しく作ります。
Blender Button Normal(event, x, y, width, height, initial, tooltip)
Normal(法線)ボタンを新しく作ります。
Blender Button Number(name, event, x, y, width, height, initial, min, max, tooltip)
数値ボタンオブジェクトを新しく作ります。
int PupBlock(title, sequence)
ポップアップ・ブロックを表示します。
float PupFloatInput(text, default, min, max, clickStep, floatLen)
float値用のポップアップ入力欄を作ります。
int PupIntInput(text, default, min, max)
int値用のポップアップ入力欄を作ります。
int PupMenu(name, maxrow)
ポップアップメニューを作ります。
string PupStrInput(text, default, max)
文字列用のポップアップ入力欄を作ります。
  PushButton(name, event, x, y, width, height, tooltip)
押しボタンオブジェクトを新しく作ります。
  Redraw(after)
再描画イベントをキューに追加します。
  Register(draw, event, button)
GUIのためのコールバック関数を登録します。
Blender Button Slider(name, event, x, y, width, height, initial, min, max, realtime, tooltip)
スライダーボタンオブジェクトを新しく作ります。
Blender Button String(name, event, x, y, width, height, initial, length, tooltip)
文字列ボタンオブジェクトを新しく作ります。
int Text(string, fontsize)
画面上に文字列を描画します。
Blender Button Toggle(name, event, x, y, width, height, default, tooltip)
トグルボタンオブジェクトを新しく作ります。

関数の詳細

BeginAlign()

この関数の使用後は、ボタンが整列して描画されます。 (button layout only).

ColorPicker(event, x, y, width, height, initial, tooltip=None)

Color Pickerボタンオブジェクトを新しく作ります。
引数:
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
initial - 色の初期値。値の範囲はそれぞれ0〜1です。
           (type=3個のfloatのタプル。)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)
戻り値:
作成したボタン。
           (type=Blender Button)

Notes:

  • Registerのイベント関数が無ければ、color pickerは機能しません。
  • 複数のボタンで同じボタン変数を同時に使うと、メモリ内容が破壊されます。

Create(value)

デフォルトボタンオブジェクトを新しく作ります。
引数:
value - ボタンに保持する値。
           (type=int, float, string or 3 floats)
戻り値:
作成したボタン。
           (type=Blender Button)

Note: 文字列は400文字未満でなければいけません。

Draw()

強制的にすぐさま再描画します。強制再描画はバッファに貯められません。 別の言い方をすると、この関数を呼ぶたびに、すぐにウィンドウが再描画されます。

EndAlign()

BeginAlign()のあと、ボタンの整列をやめたいときに使います。 (button layout only).

Exit()

GUIを終了します。

GetStringWidth(string, fontsize='normal')

文字列の幅をピクセル値で取得します。
引数:
string - 文字列。
           (type=string)
fontsize - フォントの大きさ: 'large', 'normal', 'small' or 'tiny'.
           (type=string)
戻り値:
選んだフォントサイズでの文字列の幅。
           (type=int)

Image(image, x, y, zoomx=1.0, zoomy=1.0, clipx=0, clipy=0, clipw=-1, cliph=-1)

画面に画像を描画します。

(x,y)で指定した位置に画像を描画します。 x,y方向それぞれに拡大率(zoom)を設定できます。 画像の一部分だけを描画できるように、 画像の切り抜き範囲(clip)を設定できます。

切り抜き範囲は、画像の座標空間で指定します。 画像の座標空間では、左下が原点となり、x座標は右に伸び、 y座標は上に伸びています。 切り抜き範囲の設定に関わらず、 画像の左下のピクセルは、指定した(x,y)座標に描画されます。 切り抜き範囲を大きく指定しても、画像の大きさに合わせて範囲が抑えられます。 切り抜き範囲の指定で幅(width)や高さ(height)を負の値にすると、 それぞれの方向をできるだけ大きく取って、 画像の多くの領域を含むようになります。

画像を描画するときに背景にアルファ・ブレンディングする場合は、Exampleのようにブレンド設定を有効にする必要があります。

Example:
import Blender
from Blender import BGL, Image, Draw

myimage = Image.Load('myimage.png')

def gui():
     BGL.glEnable( BGL.GL_BLEND ) # Only needed for alpha blending images with background.
     BGL.glBlendFunc(BGL.GL_SRC_ALPHA, BGL.GL_ONE_MINUS_SRC_ALPHA) 
     
     Draw.Image(myimage, 50, 50)
     
     BGL.glDisable( BGL.GL_BLEND )
def event(evt, val):
     if evt == Draw.ESCKEY:
           Draw.Exit()

Draw.Register(gui, event, None)
引数:
image - The image to draw.
           (type=Blender.Image)
x - The lower left x (horizontal) position of the origin of the image.
           (type=int)
y - The lower left y (vertical) position of the origin of the image.
           (type=int)
zoomx - The x (horizontal) zoom factor to use when drawing the image.
           (type=float)
zoomy - The y (vertical) zoom factor to use when drawing the image.
           (type=float)
clipx - 切り抜き範囲の左下のx座標。 0が、 画像の左端を指す。
           (type=int)
clipy - The lower left y (vertical) origin of the clipping rectangle within the image. A value of 0 indicates the bottom of the image.
           (type=int)
clipw - The width of the clipping rectangle within the image. If this value is negative then the clipping rectangle includes as much of the image as possible in the x (horizontal) direction.
           (type=int)
cliph - 画像の切り抜き範囲の高さ。 負の値にすると、画像の大部分をできるだけ含めるように、 高さが設定されます。
           (type=int)

Menu(name, event, x, y, width, height, default, tooltip=None)

メニューボタンオブジェクトを新しく作ります。

メニューの項目は、ボタンの'name'引数によって指定します。 項目のあとに書式コードを書き、'|'文字で項目同士を分けます。 有効な書式コード:
  • %t - その項目をタイトルとして使います。
  • %l - セパレータを挿入します。
  • %xN - その項目のボタン値(button value)を整数のNに設定します。
Example:
 name = "The Title %t|First Entry %x1|Second Entry %x2|Third Entry %x3"
 menu = Draw.Menu(name, 2, 60, 120, 200, 40, 3, "Just a test menu.")
 # 注:default = 3なので、"Third Entry"項目が
 # メニューのデフォルトの選択項目として表示されます。
引数:
name - ボタンの内容を定義する書式文字列。
           (type=string)
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
default - デフォルトで選択状態にする項目の番号。
           (type=int)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)
戻り値:
作成したボタン。
           (type=Blender Button)

Normal(event, x, y, width, height, initial, tooltip=None)

Normal(法線)ボタンを新しく作ります。球を回転させて3次元ベクトルをセットできます。

引数:
event - The event number to pass to the button event function when activated.
           (type=int)
x - The lower left x (horizontal) coordinate of the button.
           (type=int)
y - The lower left y (vertical) coordinate of the button.
           (type=int)
width - The button width - non square normal buttons .
           (type=int)
height - The button height.
           (type=int)
initial - The initial vector value.
           (type=3-float tuple)
tooltip - The button's tooltip (the string that appears when the mouse is kept over the button).
           (type=string)
戻り値:
The Button created.
           (type=Blender Button)

Notes:

  • Registerのイベント関数がNoneの場合、Normalボタンは機能しません。
  • 複数のボタンで同じボタン変数を同時に使うと、メモリ内容が破壊されます。

Number(name, event, x, y, width, height, initial, min, max, tooltip=None)

数値ボタンオブジェクトを新しく作ります。
引数:
name - ボタンに表示する文字列。
           (type=string)
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
initial - 初期値。
           (type=int or float)
min - 最小値。
           (type=int or float)
max - 最大値。
           (type=int or float)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)
戻り値:

作成したボタン。

Example:

This example draws a single floating point value:
 from Blender import Draw
 b= Draw.Create(0.0) # Data for floating point button
 def bevent(evt):
   print 'My Button event:', evt
 def gui():
   global b
   b= Draw.Number('value: ', 1000, 0,0, 200, 20, b.val, 0,10, 'some text tip')

 Draw.Register(gui, None, bevent) # we are not going to worry about keyboard and mouse events

           (type=Blender Button)

PupBlock(title, sequence)

ポップアップ・ブロックを表示します。

以下の書式で、sequence引数で項目を指定します。Possible formats for the items in the sequence parameter. (Value are objects created with Create)
  • 文字列: ラベルを定義します。
  • (文字列, Value, 文字列): トグルボタンを定義します。一つ目の文字列がボタンに表示されます。二つ目の文字列はツールチップで、省略可能です。
  • (文字列, Value, min, max, 文字列): 数値ボタンまたは文字列ボタンを定義します。どちらになるかはValueの内容で決まります。一つ目の文字列がボタンに表示されます。二つ目の文字列はツールチップで、省略可能です。文字列ボタンの場合、maxは最大文字数になり、minは使いません。
Example:
       import Blender
       
       text = Blender.Draw.Create("short text")
       f = Blender.Draw.Create(1.0)
       i = Blender.Draw.Create(2)
       tog = Blender.Draw.Create(0)
       
       block = []
       
       block.append(("Name: ", text, 0, 30, "this is some tool tip"))
       block.append("Some Label")
       block.append(("Value: ", f, 0.0, 100.0))
       block.append(("Value: ", i, 0, 100))
       block.append(("Option", tog, "another tooltip"))
       
       retval = Blender.Draw.PupBlock("PupBlock test", block)
       
       print "PupBlock returned", retval
       
       print "text\t", text
       print "float\t", f
       print "int\t", i
       print "toggle\t", tog
引数:
title - ブロックのタイトル。
           (type=string)
sequence - A sequence defining what the block contains. The order of the list is the order of appearance, from top down.
戻り値:
ポップアップがconfirmされたら1、それ以外は0。
           (type=int)

Warning: キャンセルした場合、文字列Valueは変更後の値を戻し、それ以外のValueオブジェクトは初期値を戻します。

PupFloatInput(text, default, min, max, clickStep, floatLen)

float値用のポップアップ入力欄を作ります。

Blenderのポップアップ入力欄をスクリプトから使えます。

Example:
 default = 50
 min = 0.0
 max = 10.0
 clickStep = 100
 floatLen = 3
 
 msg = "Set this value between 0 and 100"
 result = Draw.PupFloatInput(msg, default, min, max, clickStep, floatLen)
 if result != None:
   print result
 else:
   print 'no user input'
引数:
text - ポップアップに表示するテキスト。
           (type=string)
default - ポップアップの初期値。
           (type=float)
min - ポップアップが受け付ける最小値。
           (type=float)
max - ポップアップが受け付ける最大値。
           (type=float)
clickStep -

クリックしたときの値の増加量。100なら1.0増えて、10なら0.1増える、という具合です。
           (type=int)

floatLen - 表示する小数点以下の桁数。2〜4。
           (type=int)
戻り値:
選択した値。無選択のときはNone。
           (type=float)

PupIntInput(text, default, min, max)

int値用のポップアップ入力欄を作ります。

Blenderのポップアップ入力欄をスクリプトから使えます。

Example:
 default = 50
 min = 0
 max = 100
 
 msg = "Set this value between 0 and 100"
 result = Draw.PupIntInput(msg, default, min, max)
 if result != None:
   print result
 else:
   print 'no user input'
引数:
text - ポップアップに表示するテキスト。
           (type=string)
default - ポップアップの初期値。
           (type=int)
min - ポップアップが受け付ける最小値。
           (type=int)
max - ポップアップが受け付ける最大値。
           (type=int)
戻り値:
選択した値。無選択のときはNone。
           (type=int)

PupMenu(name, maxrow=None)

ポップアップメニューを作ります。

メニューの項目は、Menuと同様に、ボタンの'name'引数によって指定します。 項目のあとに書式コードを書き、'|'文字で項目同士を分けます。 有効な書式コード:
  • %t - その項目をポップアップのタイトルとして使います。
  • %l - セパレータを挿入します。('maxrow'が無指定のときだけ機能します。)
  • %xN - この項目を選んだときに、ポップアップは整数値のNを返します。
Example:
 name = "OK?%t|QUIT BLENDER"  # %xNの指定がなければ、項目番号を1から順に付けます。
 result = Draw.PupMenu(name)
 if result:
   Draw.PupMenu("Really?%t|Yes|No")
引数:
name - ボタンの内容を定義する書式文字列。
           (type=string)
maxrow - ポップアップの各列の最大行数。
           (type=int)
戻り値:
選んだ項目の番号。無選択なら -1 を返します。
           (type=int)

PupStrInput(text, default, max=20)

文字列用のポップアップ入力欄を作ります。

Blenderのポップアップ文字列入力欄をスクリプトから使えます。

Example:
 Blender.Draw.PupStrInput("Name:", "untitled", 25)
引数:
text - ポップアップに表示するテキスト。
           (type=string)
default - ポップアップの初期値。 'max'より長いときは切り詰めます。
           (type=string)
max - ポップアップが受け付ける最大文字数。 無指定なら20文字に設定されます。指定できる範囲は[1, 100]です。
           (type=int)
戻り値:
ユーザーが入力したテキスト。無選択のときはNone。
           (type=string)

PushButton(name, event, x, y, width, height, tooltip=None)

押しボタンオブジェクトを新しく作ります。
引数:
name - ボタンに表示する文字列。
           (type=string)
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)

Note: この関数は"Button"関数を呼ぶだけです。このエイリアスを追加したのは、 クラスと関数にButtonという同じ名前があるとドキュメント生成プログラムが問題を起こすので、 それを回避するためです。古い方の名前は廃止しません。 ButtonでもPushButtonでも好きな方を使ってください。(後者のほうが良いです。)

Redraw(after=0)

再描画イベントをキューに追加します。再描画イベントは一旦バッファに貯められます。 キューに追加したイベントの数に関わらず、ウィンドウは1つの再描画イベントしか受け取らないからです。

引数:
after - 0以外なら、他の入力イベントより先に再描画を処理します。
           (type=int)

Register(draw=None, event=None, button=None)

GUIのためのコールバック関数を登録します。
引数:
draw - 画面を描画するための関数。引数を取りません。: f()
           (type=function)
event - キーボード入力とマウス入力のイベントをハンドルするための関数。 2つの引数を取ります。: f(evt, val):
  • 'evt' (int) はイベント番号です。
  • 'val' (int) は値修飾子です。val = 0なら、キーやマウスボタンを放したときのイベントです。 そうでなければ、キーやマウスボタンを押したときのイベントです。

           (type=function)
button -

Drawボタンのイベントをハンドルするための関数。1つの引数を取ります。: f(evt):

  • 'evt'はボタン番号です。(Buttonevent引数を見よ)

           (type=function)

Notes:

  • このページ先頭にあるExampleで、Draw.Registerを呼んでいるのは 一度だけであることに注意してください。コールバック関数を再登録する必要はありません。 コールバック関数は、Draw.Exitを呼ぶまで存在し続けます。 画面の再描画は、関係のあるイベントをキャッチしたときにだけすれば十分です。
  • eventコールバック中のみ、Blender.ascii変数に 現在のイベントのASCII整数値が(存在していて有効なら)保持されています。

Slider(name, event, x, y, width, height, initial, min, max, realtime=1, tooltip=None)

スライダーボタンオブジェクトを新しく作ります。
引数:
name - ボタンに表示する文字列。
           (type=string)
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
initial - 初期値。
           (type=int or float)
min - 最小値。
           (type=int or float)
max - 最大値。
           (type=int or float)
realtime - 0以外(デフォルト)なら、 スライダーを編集したときにイベントを発行します。
           (type=int)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)
戻り値:
作成したボタン。
           (type=Blender Button)

String(name, event, x, y, width, height, initial, length, tooltip=None)

文字列ボタンオブジェクトを新しく作ります。
引数:
name - ボタンに表示する文字列。
           (type=string)
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
initial - 表示する文字列の初期値。
           (type=string)
length - 入力できる最大文字数。
           (type=int)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)
戻り値:
作成したボタン。
           (type=Blender Button)

Text(string, fontsize='normal')

画面上に文字列を描画します。

文字列の描画位置は、描画前にOpenGLのラスタ位置関数BGL.glRasterPosを使って設定します。 この関数で位置を設定するときは、現在のウィンドウの左下隅を原点とします。

文字列の色は、描画前にOpenGLの色関数BGL.glColorを使って設定します。
引数:
string - 描画するテキスト文字列。
           (type=string)
fontsize - フォントの大きさ: 'large', 'normal', 'small' or 'tiny'.
           (type=string)
戻り値:
選んだフォントサイズで描画した文字列の幅。
           (type=int)

Note: For drawing text in the 3d view see the workaround in BGL.glRasterPos

Toggle(name, event, x, y, width, height, default, tooltip=None)

トグルボタンオブジェクトを新しく作ります。
引数:
name - ボタンに表示する文字列。
           (type=string)
event - アクティブになったときに、 ボタンイベント関数に渡すイベント番号。
           (type=int)
x - ボタンの左下のX(水平)座標。
           (type=int)
y - ボタンの左下のY(垂直)座標。
           (type=int)
width - ボタンの幅。
           (type=int)
height - ボタンの高さ。
           (type=int)
default - 初期状態を指定する値: (0 なら "up"、 1 なら "down")
           (type=int)
tooltip - ボタンのツールチップ。 (この文字列は、ボタンの上にマウスを置きつづけたら表示されます。)
           (type=string)
戻り値:
作成したボタン。
           (type=Blender Button)

Generated by Epydoc 2.1 (modified by morita) on Tue Feb 27 21:06:22 2007 http://epydoc.sf.net