WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   OO programing in vizard? (https://forum.worldviz.com/showthread.php?t=2802)

renama 06-27-2010 12:12 AM

OO programing in vizard?
 
1 Attachment(s)
I tried to create a class to put an icon on the screen. When the icon is clicked, the music will be truned on or off.

In the class, I used callback viz.MOUSEDOWN_EVENT to capture the mouse clicked event. The class works fine. The problem is: I can not use viz.MOUSEDOWN_EVENT in main program or in other classes anymore once this class is used. That is a disaster. How to solve this problem while keeping the OO programing structure? Is there any other way to encapsulate the event operation in the class?

Thanks so much if anyone can help.

My class like this:

renama 06-27-2010 12:47 AM

Here is the code of the class (same with the previous attachement)
Code:

class MusicOnOff:
      def __init__(self,musicObj):
            self. Obj = musicObj
            self.musicIcon = viz.addTexQuad()
            self.musicIcon.texture(viz.add((‘musicOff.png')))
            self.musicOn = True
            viz.callback( viz.MOUSEDOWN_EVENT, self.onMouseDown )
      def onMouseDown(self, button):
            if button == viz.MOUSEBUTTON_LEFT:
                  object = viz.pick()
                  if object.valid() == False: return
                  if object == self.musicIcon:
                          if self.musicOn == True:
                                self.musicOn = False
                                self.musicIcon.texture(viz.add((‘musicOn.png')))
                                self.Obj.pause()                               
                          else:
                                self.musicOn = True
                                self.musicIcon.texture(viz.add((‘musicOff.png')))
                                self.Obj.play()


IGoudt 06-27-2010 10:34 AM

From my experience, you can register events only once.
For example:

Class A registers a viz.MOUSEDOWN_EVENT
Class B registers a viz.MOUSEDOWN_EVENT

Then if I recall correctly the last register will overwrite the first. What I did to resolve this, is to put all the registers in one of the main, or container, classes. Whenever an event is triggered there, the main class redirects the event to the appropiate classes or objects.

In your case, I guess your main class creates an instance of the MusicOnOff class (a button), and saves it under a variable. Change to:

Code:

class MusicOnOff:
      def __init__(self,musicObj):
            self.Obj = musicObj
            self.musicIcon = viz.addTexQuad()
            self.pictures = [viz.add(‘musicOff.png'), viz.add('musicOn.png')]
            self.musicIcon.texture(self.pictures[1])
            self.musicOn = True
           
           
      def click(self):
           
            self.musicOn = not self.musicOn
            self.musicIcon.texture(self.pictures[self.musicOn])
            if not self.musicOn:
                   
                    self.Obj.pause()                               
            else:
                    self.Obj.play()


renama 06-27-2010 10:03 PM

Thanks, IGoudt. You gave me a good idea for OO programming. I appreciate your help. It is your support that makes me keep searching and trying to work on it. Today I found vizact.onpick(object,fun,arg) can be used in this case. It can be called multiple times. Hope this found can help somebody who has the same coding problem in this situation

farshizzo 06-28-2010 09:30 AM

I highly suggest you read the section in the documentation about events, especially the Event Basics page. It describes how to register multiple callbacks for an event using viz.EventClass.

renama 06-28-2010 02:33 PM

Thanks farshizzo, that is great. I need register other events,like mouse move in my class and creating Event Class solved my problem completely.


All times are GMT -7. The time now is 12:54 AM.

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