[Tutor] Command not issued until after escape from loop
David Hutto
dwightdhutto at yahoo.com
Mon Mar 15 07:58:12 CET 2010
--- On Mon, 3/15/10, David Hutto <dwightdhutto at yahoo.com> wrote:
> From: David Hutto <dwightdhutto at yahoo.com>
> Subject: Command not issued until after escape from loop
> To: tutor at python.org
> Date: Monday, March 15, 2010, 2:15 AM
> In the following code, the portion
> I'm having a problem with is outlined in stars, but since
> the overall code was short, I included it, just in case
> something else might be hindering the process.
>
> When I execute the script, it shows my main window, then if
> I press the CKEY it's *supposed* to call the cleanSlate()
> function, which grabs and deletes objects in the contents of
> another window.
>
> My problem is, it doesn't execute cleanSlate() until I hit
> the ESCKEY, or the QKEY. In the original example code I'm
> using as a template(I put in the ev() portion of the main
> template below my current code, so maybe someone could see
> where I deviated from the original, and why the differences
> in implementing redraw) , it's setup in the same manner.
>
> Why would it not execute immediately(during the main loop)
> in mine, but in the original it does?
>
> import Blender
> from Blender.BGL import *
> from Blender import Draw, Scene, Object, Mesh
> R = G = 0
> B = A = 1
> title = "Basic Object Manipulation"
> instructions = "Select an object to manipulate"
> len1 = Draw.GetStringWidth(title)
> len2 = Draw.GetStringWidth(instructions)
>
> # Removes default objects in scene
>
> def cleanSlate(scn):
> for ob in
> scn.objects:
>
> if ob.getType == 'Mesh' or 'Camera':
>
>
> scn.objects.unlink(ob)
>
> #defining the window
> def show_win():
>
> glClearColor(R,G,B,A)
> # define color used to clear buffers
>
> glClear(GL_COLOR_BUFFER_BIT)
> # use it to clear the color buffer
>
> glColor3f(0.35,0.18,0.92)
> # define default color
>
> glColor3f(.0,0.0,0.0)
> # change default color for next item
> glRecti(10, 450,
> 20+len2, 113) # sets a box
> border
>
> glColor3f(0.2,0.2,0.2)
> # change default color for next
> item
>
> glRasterPos2i(14,435)
> # move cursor
>
> Draw.Text(title)
> # draw this text
> there
>
> glRasterPos2i(14,410)
> # move cursor again
>
> Draw.Text(instructions) # draw another msg
> ******************************************************************
>
> # defining the event handling list
> def ev(evt, val):
> scn =
> Scene.getCurrent()
> if evt == Draw.ESCKEY
> or evt == Draw.QKEY:
>
> Draw.Exit()
> elif not val:
>
> return
> elif evt ==
> Draw.CKEY:
>
> cleanSlate(scn)
> else:
>
> return
> Draw.Redraw(1)
> ******************************************************************
>
> # build the window
> Draw.Register(show_win, ev, None) #
> start the main loop
>
>
> #End code
>
>
> This is the original ev()
> **********************************************************
>
> def ev(evt, val):
> # event callback for
> Draw.Register()
> global R,G,B,A
>
> # ... it handles input events
> if evt == Draw.ESCKEY or evt ==
> Draw.QKEY:
> Draw.Exit()
>
> # this quits the script
> elif not val: return
> elif evt == Draw.LEFTMOUSE: R = 1 - R
> elif evt == Draw.MIDDLEMOUSE: G = 1 - G
> elif evt == Draw.RIGHTMOUSE: B = 1 - B
> elif evt == Draw.WHEELUPMOUSE:
> R += 0.1
> if R > 1: R = 1
> elif evt == Draw.WHEELDOWNMOUSE:
> R -= 0.1
> if R < 0: R = 0
> else:
> return
>
> # don't redraw if nothing changed
> Draw.Redraw(1)
>
>
> TIA,
> David
>
>
>
>
The revised question to this, after messing around a little more, is why does the loop hold the cleanSlate() function until ESC, or Q, but not hold on to the mouse events, which it executes immediately?
I know the ESC, and Q are not triggering the function call, because it doesn't execute on ESC, or Q if the action to call it isn't performed during the loop.
David
More information about the Tutor
mailing list