WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 03-07-2010, 01:57 PM
Josh Josh is offline
Member
 
Join Date: Jan 2010
Posts: 63
unset onkeydown for a key?

Hi all

Is there a way to unset the onkeydown for a key once you already assigned it an action?

Thanks
Josh
Reply With Quote
  #2  
Old 03-07-2010, 10:16 PM
IGoudt IGoudt is offline
Member
 
Join Date: Sep 2009
Posts: 20
You can use:
Code:
viz.callback(viz.KEYDOWN_EVENT,None)
I guess you can also use:

Code:
vizact.onkeydown(key, None)
Depending if you use vizact or viz.callback to handle your events.
Reply With Quote
  #3  
Old 03-08-2010, 02:37 AM
Josh Josh is offline
Member
 
Join Date: Jan 2010
Posts: 63
Thanks so far...

The space bar should only be pressed once in my experiment:

vizact.onkeydown(' ', play_first_joke)

As soon as it's been pressed, it shouldn't invode the play_first_joke method anymore.

vizact.onkeydown(' ', None)

...gives the following error:

Code:
Traceback (most recent call last):
  File "C:\Programme\WorldViz\Vizard30\python\vizact.py", line 3019, in __onkeydown
    self._callGroup(self.__keydownmap[key])
  File "C:\Programme\WorldViz\Vizard30\python\vizact.py", line 2971, in _callGroup
    val = e.call(arg)
  File "C:\Programme\WorldViz\Vizard30\python\vizact.py", line 2794, in _callStatic
    return func(*args,**kwargs)
TypeError: 'NoneType' object is not callable
Reply With Quote
  #4  
Old 03-08-2010, 04:01 AM
IGoudt IGoudt is offline
Member
 
Join Date: Sep 2009
Posts: 20
After searching in the documentation I found the following:
Code:
<vizact>.removeEvent
Deletes an EventFunction object

<vizact>.removeEvent( eventFunctionObj )

eventFunctionObj

Remarks

Uses this when you no longer need an EventFunction callback.

Return Value

None

Example

eventFunction = vizact.onupdate( 5, doSomething )
...
vizact.removeEvent( eventFunction )
Reply With Quote
  #5  
Old 03-08-2010, 04:03 AM
Josh Josh is offline
Member
 
Join Date: Jan 2010
Posts: 63
Thank you. But I don't know how exactly I can use this now... I'm sorry, I'm absolutely new to Python and to the theories that stand behind events in WorldViz...
Reply With Quote
  #6  
Old 03-08-2010, 04:24 AM
IGoudt IGoudt is offline
Member
 
Join Date: Sep 2009
Posts: 20
Whenever you register a function with vizact.onkeydown a reference is made in memory between the keystroke and the function. What you wish to achieve is to break that reference. A way to do that, have your program memorize that reference as a variable and then do some operation on that variable, in this case: removeEvent.

Take for example:
Code:
def initialiseProgram():
     playJokeEvent = vizact.onkeydown(' ', play_first_joke)
     ... other initialisation

def play_first_joke():
     vizact.removeEvent(playJokeEvent)
     .. do your fancy scene stuff here
I have to admit that I am used to program OOP in classes, and the handling of variables is different when using classes in python than when using direct code (self, vs, global). Try this code snippet first, if it doesn't work out well then we might to do some hacking with the [global] statement.

Last edited by IGoudt; 03-08-2010 at 04:29 AM.
Reply With Quote
  #7  
Old 03-08-2010, 12:49 PM
Josh Josh is offline
Member
 
Join Date: Jan 2010
Posts: 63
Thanks, that helps a lot. :-)
Reply With Quote
Reply

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
onkeydown list of values Cheff Vizard 2 07-02-2008 02:00 AM


All times are GMT -7. The time now is 03:17 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC