822 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			822 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Blender.Draw module and the Button PyType object
 | 
						|
 | 
						|
"""
 | 
						|
The Blender.Draw submodule.
 | 
						|
 | 
						|
Draw
 | 
						|
====
 | 
						|
 | 
						|
B{New}:
 | 
						|
 - access to ASCII values in L{events<Register>} callbacks;
 | 
						|
 - 'large' fonts for L{Text} and L{GetStringWidth}.
 | 
						|
 - Pop-up blocks with L{PupBlock}
 | 
						|
 - Color Picker button with L{ColorPicker}
 | 
						|
 | 
						|
This module provides access to a B{windowing interface} in Blender.  Its widgets
 | 
						|
include many kinds of buttons: push, toggle, menu, number, string, slider,
 | 
						|
scrollbar, plus support for text drawing.  It also includes keyboard keys and
 | 
						|
mouse button code values in its dictionary, see a list after this example.
 | 
						|
 | 
						|
Example::
 | 
						|
 import Blender
 | 
						|
 from Blender import Draw, BGL
 | 
						|
 | 
						|
 mystring = ""
 | 
						|
 mymsg = ""
 | 
						|
 toggle = 0
 | 
						|
 | 
						|
 def event(evt, val):    # the function to handle input events
 | 
						|
   global mystring, mymsg
 | 
						|
 | 
						|
   if not val:  # val = 0: it's a key/mbutton release
 | 
						|
     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()                 # exit when user presses 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 # no need to redraw if nothing changed
 | 
						|
 | 
						|
   Draw.Redraw(1)
 | 
						|
 | 
						|
 def button_event(evt):  # the function to handle Draw Button events
 | 
						|
   global mymsg, toggle
 | 
						|
   if evt == 1:
 | 
						|
     mymsg = "You pressed the toggle button."
 | 
						|
     toggle = 1 - toggle
 | 
						|
     Draw.Redraw(1)
 | 
						|
 | 
						|
 def gui():              # the function to draw the screen
 | 
						|
   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)  # registering the 3 callbacks
 | 
						|
 | 
						|
All available events:
 | 
						|
  - ACCENTGRAVEKEY
 | 
						|
  - AKEY
 | 
						|
  - BACKSLASHKEY
 | 
						|
  - BACKSPACEKEY
 | 
						|
  - BKEY
 | 
						|
  - CAPSLOCKKEY
 | 
						|
  - CKEY
 | 
						|
  - COMMAKEY
 | 
						|
  - DELKEY
 | 
						|
  - DKEY
 | 
						|
  - DOWNARROWKEY
 | 
						|
  - EIGHTKEY
 | 
						|
  - EKEY
 | 
						|
  - ENDKEY
 | 
						|
  - EQUALKEY
 | 
						|
  - ESCKEY
 | 
						|
  - F10KEY
 | 
						|
  - F11KEY
 | 
						|
  - F12KEY
 | 
						|
  - F1KEY
 | 
						|
  - F2KEY
 | 
						|
  - F3KEY
 | 
						|
  - F4KEY
 | 
						|
  - F5KEY
 | 
						|
  - F6KEY
 | 
						|
  - F7KEY
 | 
						|
  - F8KEY
 | 
						|
  - F9KEY
 | 
						|
  - FIVEKEY
 | 
						|
  - FKEY
 | 
						|
  - FOURKEY
 | 
						|
  - GKEY
 | 
						|
  - HKEY
 | 
						|
  - HOMEKEY
 | 
						|
  - IKEY
 | 
						|
  - INPUTCHANGE
 | 
						|
  - INSERTKEY
 | 
						|
  - JKEY
 | 
						|
  - KEYBD
 | 
						|
  - KKEY
 | 
						|
  - LEFTALTKEY
 | 
						|
  - LEFTARROWKEY
 | 
						|
  - LEFTBRACKETKEY
 | 
						|
  - LEFTCTRLKEY
 | 
						|
  - LEFTMOUSE
 | 
						|
  - LEFTSHIFTKEY
 | 
						|
  - LINEFEEDKEY
 | 
						|
  - LKEY
 | 
						|
  - MIDDLEMOUSE
 | 
						|
  - MINUSKEY
 | 
						|
  - MKEY
 | 
						|
  - MOUSEX
 | 
						|
  - MOUSEY
 | 
						|
  - NINEKEY
 | 
						|
  - NKEY
 | 
						|
  - OKEY
 | 
						|
  - ONEKEY
 | 
						|
  - PAD0
 | 
						|
  - PAD1
 | 
						|
  - PAD2
 | 
						|
  - PAD3
 | 
						|
  - PAD4
 | 
						|
  - PAD5
 | 
						|
  - PAD6
 | 
						|
  - PAD7
 | 
						|
  - PAD8
 | 
						|
  - PAD9
 | 
						|
  - PADASTERKEY
 | 
						|
  - PADENTER
 | 
						|
  - PADMINUS
 | 
						|
  - PADPERIOD
 | 
						|
  - PADPLUSKEY
 | 
						|
  - PADSLASHKEY
 | 
						|
  - PAGEDOWNKEY
 | 
						|
  - PAGEUPKEY
 | 
						|
  - PAUSEKEY
 | 
						|
  - PERIODKEY
 | 
						|
  - PKEY
 | 
						|
  - QFULL
 | 
						|
  - QKEY
 | 
						|
  - QUOTEKEY
 | 
						|
  - Q_FIRSTTIME
 | 
						|
  - RAWKEYBD
 | 
						|
  - REDRAW
 | 
						|
  - RETKEY
 | 
						|
  - RIGHTALTKEY
 | 
						|
  - RIGHTARROWKEY
 | 
						|
  - RIGHTBRACKETKEY
 | 
						|
  - RIGHTCTRLKEY
 | 
						|
  - RIGHTMOUSE
 | 
						|
  - RIGHTSHIFTKEY
 | 
						|
  - RKEY
 | 
						|
  - SEMICOLONKEY
 | 
						|
  - SEVENKEY
 | 
						|
  - SIXKEY
 | 
						|
  - SKEY
 | 
						|
  - SLASHKEY
 | 
						|
  - SPACEKEY
 | 
						|
  - TABKEY
 | 
						|
  - THREEKEY
 | 
						|
  - TIMER0
 | 
						|
  - TIMER1
 | 
						|
  - TIMER2
 | 
						|
  - TIMER3
 | 
						|
  - TKEY
 | 
						|
  - TWOKEY
 | 
						|
  - UKEY
 | 
						|
  - UPARROWKEY
 | 
						|
  - VKEY
 | 
						|
  - WHEELDOWNMOUSE
 | 
						|
  - WHEELUPMOUSE
 | 
						|
  - WINCLOSE
 | 
						|
  - WINFREEZE
 | 
						|
  - WINQUIT
 | 
						|
  - WINTHAW
 | 
						|
  - WKEY
 | 
						|
  - XKEY
 | 
						|
  - YKEY
 | 
						|
  - ZEROKEY
 | 
						|
  - ZKEY
 | 
						|
 | 
						|
@note: function Button has an alias: L{PushButton}.
 | 
						|
 | 
						|
@warn: B{very important}: if using your script causes "Error totblock"
 | 
						|
messages when Blender exits (meaning that memory has been leaked), this may
 | 
						|
have been caused by an ignored return value from one of the button types.  To
 | 
						|
avoid this, assign created buttons return values to B{global} variables,
 | 
						|
instead of ignoring them.  Examples::
 | 
						|
 | 
						|
  # avoid this, it can cause memory leaks:
 | 
						|
  Draw.Toggle(...)
 | 
						|
  Draw.Number(...)
 | 
						|
  Draw.String(...)
 | 
						|
  # this is correct -- assuming the variables are globals:
 | 
						|
  my_toggle_button = Draw.Toggle(...)
 | 
						|
  my_int_button = Draw.Number(...)
 | 
						|
  my_str_button = Draw.String(...)
 | 
						|
 | 
						|
 | 
						|
@warn: Inside the windowing loop (after Draw.Register() has been executed and
 | 
						|
before Draw.Exit() is called), don't use the redraw functions from other
 | 
						|
modules (Blender and Window).  The Draw submodule has its own Draw.Redraw() and
 | 
						|
Draw.Draw() functions that can be used inside the windowing loop.
 | 
						|
"""
 | 
						|
 | 
						|
def Exit():
 | 
						|
  """
 | 
						|
  Exit the windowing interface.
 | 
						|
  """
 | 
						|
 | 
						|
def BeginAlign():
 | 
						|
  """
 | 
						|
  Buttons after this function will draw aligned (button layout only).
 | 
						|
  """
 | 
						|
 | 
						|
def EndAlign():
 | 
						|
  """
 | 
						|
  Use after BeginAlign() to stop aligning the buttons (button layout only).
 | 
						|
  """
 | 
						|
 | 
						|
def Register(draw = None, event = None, button = None):
 | 
						|
  """
 | 
						|
  Register callbacks for windowing.
 | 
						|
  @type draw: function
 | 
						|
  @type event: function
 | 
						|
  @type button: function
 | 
						|
  @param draw: A function to draw the screen, taking no arguments: f().
 | 
						|
  @param event: A function to handle keyboard and mouse input events, taking
 | 
						|
      two arguments: f(evt, val), where:
 | 
						|
       - 'evt' (int) is the event number;
 | 
						|
       - 'val' (int) is the value modifier.  If val = 0, the event refers to a
 | 
						|
       key or mouse button being released.  Otherwise it's a key/button press.
 | 
						|
  @param button: A function to handle Draw Button events, taking one argument:
 | 
						|
      f(evt), where:
 | 
						|
        - 'evt' is the button number (see the I{event} parameter in L{Button}).
 | 
						|
  @note: note that in the example at the beginning of this page Draw.Register
 | 
						|
      is called only once.  It's not necessary to re-register the callbacks,
 | 
						|
      they will stay until Draw.Exit is called.  It's enough to redraw the
 | 
						|
      screen, when a relevant event is caught.
 | 
						|
  @note: only during the B{event} callback: the L{Blender}.ascii variable holds
 | 
						|
      the ASCII integer value (if it exists and is valid) of the current event.
 | 
						|
  """
 | 
						|
 | 
						|
def Redraw(after = 0):
 | 
						|
  """
 | 
						|
  Queue a redraw event.  Redraw events are buffered so that, regardless of how
 | 
						|
  many events are queued, the window only receives one redraw event.
 | 
						|
  @type after: int
 | 
						|
  @param after: If non-zero, the redraw is processed before other input events.
 | 
						|
  """
 | 
						|
 | 
						|
def Draw():
 | 
						|
  """
 | 
						|
  Force an immediate redraw.  Forced redraws are not buffered.  In other words,
 | 
						|
  the window is redrawn once every time this function is called.
 | 
						|
  """
 | 
						|
 | 
						|
def Create(value):
 | 
						|
  """
 | 
						|
  Create a default Button object.
 | 
						|
  @type value: int, float, string or 3 floats
 | 
						|
  @param value: The value to store in the button.
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  @note: String values must have less then 400 characters.
 | 
						|
  """
 | 
						|
 | 
						|
def PushButton(name, event, x, y, width, height, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new (push) Button object.
 | 
						|
  @type name: string
 | 
						|
  @param name: The string to display on the button.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @note: This function used to be called only "Button".  We added an
 | 
						|
     alternative alias to avoid a name clash with the L{Button} class/type that
 | 
						|
     caused trouble in this documentation's generation.  The old name shouldn't
 | 
						|
     be deprecated, use Button or PushButton (better) at your choice.
 | 
						|
  """
 | 
						|
 | 
						|
def PupMenu(name, maxrow = None):
 | 
						|
  """
 | 
						|
  Create a pop-up menu.
 | 
						|
 | 
						|
  The menu options are specified through the 'name' parameter, like with
 | 
						|
  L{Menu}: options are followed by a format code and separated by the '|'
 | 
						|
  character.  Valid format codes are:
 | 
						|
    - %t - The option should be used as the title of the pop-up;
 | 
						|
    - %l - insert a separating line (only works if 'maxrow' isn't given);
 | 
						|
    - %xB{N} - Chosen this option, PupMenu should return the integer B{N}.
 | 
						|
 | 
						|
  Example::
 | 
						|
    name = "OK?%t|QUIT BLENDER"  # if no %xN int is set, indices start from 1
 | 
						|
    result = Draw.PupMenu(name)
 | 
						|
    if result:
 | 
						|
      Draw.PupMenu("Really?%t|Yes|No")
 | 
						|
 | 
						|
  @type name: string
 | 
						|
  @param name: The format string to define the contents of the button.
 | 
						|
  @type maxrow: int
 | 
						|
  @param maxrow: The maximum number of rows for each column in the pop-up.
 | 
						|
  @rtype: int
 | 
						|
  @return: the chosen entry number or -1 if none was chosen.
 | 
						|
  """
 | 
						|
 | 
						|
def PupIntInput(text, default, min, max):
 | 
						|
  """
 | 
						|
  Create an integer number input pop-up.
 | 
						|
 | 
						|
  This allows python to use Blender's integer number pop-up input.
 | 
						|
 | 
						|
  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'
 | 
						|
    
 | 
						|
  @type text: string
 | 
						|
  @param text: The text that is displayed in the pop-up.
 | 
						|
  @type default: int
 | 
						|
  @param default: The value that the pop-up is set to initially.
 | 
						|
  @type min: int
 | 
						|
  @param min: The lowest value the pop-up will allow.
 | 
						|
  @type max: int
 | 
						|
  @param max: The highest value the pop-up will allow.
 | 
						|
  @rtype: int
 | 
						|
  @return: the number chosen or None if none was chosen.
 | 
						|
  """
 | 
						|
 | 
						|
def PupFloatInput(text, default, min, max, clickStep, floatLen):
 | 
						|
  """
 | 
						|
  Create a floating point number input pop-up.
 | 
						|
  
 | 
						|
  This allows python to use Blender's floating point pop-up input.
 | 
						|
 | 
						|
  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'
 | 
						|
    
 | 
						|
  @type text: string
 | 
						|
  @param text: The text that is displayed in the pop-up.
 | 
						|
  @type default: float
 | 
						|
  @param default: The value that the pop-up is set to initially.
 | 
						|
  @type min: float
 | 
						|
  @param min: The lowest value the pop-up will allow.
 | 
						|
  @type max: float
 | 
						|
  @param max: The highest value the pop-up will allow.
 | 
						|
  @type clickStep: int
 | 
						|
  @param clickStep: How much is incremented per user click, 100 will increment 1.0, 10 will increment 0.1 etc.
 | 
						|
  @type floatLen: int
 | 
						|
  @param floatLen: The number of decimal places to display, between 2 and 4.
 | 
						|
  @rtype: float
 | 
						|
  @return: the number chosen or None if none was chosen.
 | 
						|
  """
 | 
						|
 | 
						|
def PupStrInput(text, default, max = 20):
 | 
						|
  """
 | 
						|
  Create a string input pop-up.
 | 
						|
  
 | 
						|
  This allows python to use Blender's string pop-up input.
 | 
						|
 | 
						|
  Example::
 | 
						|
    Blender.Draw.PupStrInput("Name:", "untitled", 25)
 | 
						|
    
 | 
						|
  @type text: string
 | 
						|
  @param text: The text that is displayed in the pop-up.
 | 
						|
  @type default: string
 | 
						|
  @param default: The value that the pop-up is set to initially.  If it's longer
 | 
						|
      then 'max', it's truncated.
 | 
						|
  @type max: int
 | 
						|
  @param max: The most characters the pop-up input will allow.  If not given
 | 
						|
      it defaults to 20 chars.  It should be in the range [1, 100].
 | 
						|
  @rtype: string
 | 
						|
  @return: The text entered by the user or None if none was chosen.
 | 
						|
  """
 | 
						|
 | 
						|
def PupBlock(title, sequence):
 | 
						|
	"""
 | 
						|
	Display a pop-up block.
 | 
						|
	
 | 
						|
	Possible formats for the items in the sequence parameter.
 | 
						|
	(Value are objects created with L{Create})
 | 
						|
		- string:	Defines a label
 | 
						|
		- (string, Value, string): Defines a toggle button. The first string is the text on the button, the optional second string is the tooltip.
 | 
						|
		- (string, Value, min, max, string): Defines a numeric or string button, depending on the content of Value.  The first string is the text on the button, the optional second string is the tooltip. I{For string, max is the maximum length of the string and min is unused.}
 | 
						|
		
 | 
						|
	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
 | 
						|
 | 
						|
	@warning: On cancel, the Value objects are brought back to there initial values except for string values which will still contain the modified values.
 | 
						|
	@type title: string
 | 
						|
	@param title: The title of the block.
 | 
						|
	@param sequence: A sequence defining what the block contains.
 | 
						|
		The order of the list is the order of appearance, from top down.
 | 
						|
	@rtype: int
 | 
						|
	@return: 1 if the pop-up is confirmed, 0 otherwise
 | 
						|
	"""
 | 
						|
 | 
						|
def Menu(name, event, x, y, width, height, default, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new Menu Button object.
 | 
						|
  
 | 
						|
  The menu options are specified through the 'name' of the button.  Options are
 | 
						|
  I{followed} by a format code and separated by the '|' (pipe) character.  Valid
 | 
						|
  format codes are:
 | 
						|
    - %t - The option should be used as the title;
 | 
						|
    - %l - Insert a separating line;
 | 
						|
    - %xB{N} - The option should set the integer B{N} in the button value.
 | 
						|
 | 
						|
  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.")
 | 
						|
    # note that, since default = 3, the "Third Entry"
 | 
						|
    # will appear as the default choice in the Menu.
 | 
						|
 | 
						|
  @type name: string
 | 
						|
  @param name: The format string to define the contents of the button.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type default: int
 | 
						|
  @param default: The number of the option to be selected by default.
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  """
 | 
						|
 | 
						|
def Toggle(name, event, x, y, width, height, default, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new Toggle Button object.
 | 
						|
  @type name: string
 | 
						|
  @param name: The string to display on the button.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type default: int
 | 
						|
  @param default:  The value specifying the default state:
 | 
						|
      (0 for "up", 1 for "down").
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  """
 | 
						|
 | 
						|
def Slider(name, event, x, y, width, height, initial, min, max, realtime = 1,
 | 
						|
           tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new Slider Button object.
 | 
						|
  @type name: string
 | 
						|
  @param name: The string to display on the button.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type initial: int or float
 | 
						|
  @type min: int or float
 | 
						|
  @type max: int or float
 | 
						|
  @param initial:  The initial value.
 | 
						|
  @param min:  The minimum value.
 | 
						|
  @param max:  The maximum value.
 | 
						|
  @type realtime: int
 | 
						|
  @param realtime: If non-zero (the default), the slider will emit events as
 | 
						|
      it is edited.
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  """
 | 
						|
 | 
						|
#def Scrollbar(event, x, y, width, height, initial, min, max, realtime = 1,
 | 
						|
#           tooltip = None):
 | 
						|
#  """
 | 
						|
#  Create a new Scrollbar Button object.
 | 
						|
#  @type event: int
 | 
						|
#  @param event: The event number to pass to the button event function when
 | 
						|
#      activated.
 | 
						|
#  @type x: int
 | 
						|
#  @type y: int
 | 
						|
#  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
#  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
#  @type width: int
 | 
						|
#  @type height: int
 | 
						|
#  @param width: The button width.
 | 
						|
#  @param height: The button height.
 | 
						|
#  @type initial: int or float
 | 
						|
#  @type min: int or float
 | 
						|
#  @type max: int or float
 | 
						|
#  @param initial:  The initial value.
 | 
						|
#  @param min:  The minimum value.
 | 
						|
#  @param max:  The maximum value.
 | 
						|
#  @type realtime: int
 | 
						|
#  @param realtime: If non-zero (the default), the slider will emit events as
 | 
						|
#      it is edited.
 | 
						|
#  @type tooltip: string
 | 
						|
#  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
#      is kept over the button).
 | 
						|
#  @rtype: Blender Button
 | 
						|
#  @return: The Button created.
 | 
						|
#  """
 | 
						|
 | 
						|
def ColorPicker(event, x, y, width, height, initial, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new Color Picker Button object.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type initial: 3-float tuple
 | 
						|
  @param initial:  The initial color value. All values must be between 0 and 1
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  @note: The color picker will not work if the Register's event function is None.
 | 
						|
  @note: Using the same button variable with more then 1 button at a time will corrupt memory.
 | 
						|
  """
 | 
						|
 | 
						|
def Normal(event, x, y, width, height, initial, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new Normal button, this allows you to set a 3d vector by rotating a sphere.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width - non square normal buttons .
 | 
						|
  @param height: The button height.
 | 
						|
  @type initial: 3-float tuple
 | 
						|
  @param initial:  The initial vector value.
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  @note: The normal button will not work if the Register's event function is None.
 | 
						|
  @note: Using the same button variable with more then 1 button at a time will corrupt memory.
 | 
						|
  """
 | 
						|
 | 
						|
def Number(name, event, x, y, width, height, initial, min, max, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new Number Button object.
 | 
						|
  @type name: string
 | 
						|
  @param name: The string to display on the button.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type initial: int or float
 | 
						|
  @type min: int or float
 | 
						|
  @type max: int or float
 | 
						|
  @param initial:  The initial value.
 | 
						|
  @param min:  The minimum value.
 | 
						|
  @param max:  The maximum value.
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
 | 
						|
  I{B{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
 | 
						|
  """
 | 
						|
 | 
						|
 | 
						|
def String(name, event, x, y, width, height, initial, length, tooltip = None):
 | 
						|
  """
 | 
						|
  Create a new String Button object.
 | 
						|
  @type name: string
 | 
						|
  @param name: The string to display on the button.
 | 
						|
  @type event: int
 | 
						|
  @param event: The event number to pass to the button event function when
 | 
						|
      activated.
 | 
						|
  @type x: int
 | 
						|
  @type y: int
 | 
						|
  @param x: The lower left x (horizontal) coordinate of the button.
 | 
						|
  @param y: The lower left y (vertical) coordinate of the button.
 | 
						|
  @type width: int
 | 
						|
  @type height: int
 | 
						|
  @param width: The button width.
 | 
						|
  @param height: The button height.
 | 
						|
  @type initial: string
 | 
						|
  @param initial: The string to display initially.
 | 
						|
  @type length: int
 | 
						|
  @param length: The maximum input length.
 | 
						|
  @type tooltip: string
 | 
						|
  @param tooltip: The button's tooltip (the string that appears when the mouse
 | 
						|
      is kept over the button).
 | 
						|
  @rtype: Blender Button
 | 
						|
  @return: The Button created.
 | 
						|
  """
 | 
						|
 | 
						|
def GetStringWidth(string, fontsize = 'normal'):
 | 
						|
  """
 | 
						|
  Get the width in pixels of a string.
 | 
						|
  @type string: string
 | 
						|
  @param string: A string.
 | 
						|
  @type fontsize: string
 | 
						|
  @param fontsize: The size of the font: 'large', 'normal', 'small' or 'tiny'.
 | 
						|
  @rtype: int
 | 
						|
  @return: The width of I{string} with the chosen I{fontsize}.
 | 
						|
  """
 | 
						|
 | 
						|
def Text(string, fontsize = 'normal'):
 | 
						|
  """
 | 
						|
  Draw a string on the screen.
 | 
						|
 | 
						|
  Text location is set using the OpenGL raster location functions L{BGL.glRasterPos} before the text is drawn.
 | 
						|
  This sets the text location from the lower left corner of the current window.
 | 
						|
 | 
						|
  Text color is set using the OpenGL color functions L{BGL.glColor} before the text is drawn.
 | 
						|
  
 | 
						|
  @type string: string
 | 
						|
  @param string: The text string to draw.
 | 
						|
  @type fontsize: string
 | 
						|
  @param fontsize: The size of the font: 'large', 'normal', 'small' or 'tiny'.
 | 
						|
  @rtype: int
 | 
						|
  @return: The width of I{string} drawn with the chosen I{fontsize}.
 | 
						|
  @note: For drawing text in the 3d view see the workaround in L{BGL.glRasterPos}
 | 
						|
  """
 | 
						|
 | 
						|
def Image(image, x, y, zoomx=1.0, zoomy=1.0, clipx=0, clipy=0, clipw=-1, cliph=-1):
 | 
						|
  """
 | 
						|
  Draw an image on the screen.
 | 
						|
 | 
						|
  The image is drawn at the location specified by the coordinates (x,y).  A
 | 
						|
  pair of optional zoom factors (in horizontal and vertical directions) can
 | 
						|
  be applied to the image as it is drawn, and an additional clipping rectangle
 | 
						|
  can be applied to extract a particular sub-region of the image to draw.
 | 
						|
 | 
						|
  Note that the clipping rectangle is given in image space coordinates.  In
 | 
						|
  image space, the origin is located at the bottom left, with x coordinates 
 | 
						|
  increasing to the right and y coordinates increasing upwards.  No matter 
 | 
						|
  where the clipping rectangle is placed in image space, the lower-left pixel 
 | 
						|
  drawn on the screen is always placed at the coordinates (x,y).  The
 | 
						|
  clipping rectangle is itself clipped to the dimensions of the image.  If
 | 
						|
  either the width or the height of the clipping rectangle are negative then
 | 
						|
  the corresponding dimension (width or height) is set to include as much of 
 | 
						|
  the image as possible.
 | 
						|
  
 | 
						|
  For drawing images with alpha blending with the background you will need to enable blending as shown in the 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)
 | 
						|
 | 
						|
  @type image: Blender.Image
 | 
						|
  @param image: The image to draw.
 | 
						|
  @type x: int
 | 
						|
  @param x: The lower left x (horizontal) position of the origin of the image.
 | 
						|
  @type y: int
 | 
						|
  @param y: The lower left y (vertical) position of the origin of the image.
 | 
						|
  @type zoomx: float
 | 
						|
  @param zoomx: The x (horizontal) zoom factor to use when drawing the image.
 | 
						|
  @type zoomy: float
 | 
						|
  @param zoomy: The y (vertical) zoom factor to use when drawing the image.
 | 
						|
  @type clipx: int
 | 
						|
  @param clipx: The lower left x (horizontal) origin of the clipping rectangle
 | 
						|
                within the image.  A value of 0 indicates the left of the
 | 
						|
                image.
 | 
						|
  @type clipy: int
 | 
						|
  @param 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 clipw: int
 | 
						|
  @param 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 cliph: int
 | 
						|
  @param cliph: The height 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 y (vertical) direction.
 | 
						|
  """
 | 
						|
 | 
						|
class Button:
 | 
						|
  """
 | 
						|
  The Button object
 | 
						|
  =================
 | 
						|
    This object represents a button in Blender's GUI.
 | 
						|
  @type val: int or float, string or 3-float tuple (depends on button type).
 | 
						|
  @ivar val: The button's value.
 | 
						|
  """
 |