WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Inheritance ambiguities (https://forum.worldviz.com/showthread.php?t=1798)

DrunkenBrit 02-03-2009 03:21 AM

Inheritance ambiguities
 
Hi,

I've derived from the "FlyNavigate" class to implement my own camera class.

I'm basically trying to split the "FlyNavigate::sensitivity" function up so that I can set move and turn speeds seperately.

So far i've got:

Code:

############# MyFlyNavigation Camera ###########

import viz
import vizcam

class MyFlyNavigation(vizcam.FlyNavigate):
       
        MOUSE_LEFT_DOWN = False
       
        def __init__(self):
                # Default movement keys
                vizcam.FlyNavigate.__init__(self,'w','s','a','d')
       
        # Only update the mouse movement if the left mouse has been clicked
        def _camMouseMove(self,e):
                if self.MOUSE_LEFT_DOWN == True:
                        vizcam.FlyNavigate._camMouseMove(self,e)
               
        def _camMouseDown(self,e):
                if e.button == viz.MOUSEBUTTON_LEFT:
                        self.MOUSE_LEFT_DOWN = True
                       
        def _camMouseUp(self,e):
                self.MOUSE_LEFT_DOWN = False

        # Overidden to add a bit of logic
        def _camUpdate(self,e):
                vizcam.FlyNavigate._camUpdate(self,e)
               
                mousePos = viz.mouse.getPosition(viz.WINDOW_PIXELS, True)
                windowSize = viz.window.getSize()
               
                # If the mouse cursor leaves the client window then
                # don't bother updating the _camMouseMove parent function
                if mousePos[0] <= 0:
                        self.MOUSE_LEFT_DOWN = False
                elif mousePos[0] >= windowSize[0]:
                        self.MOUSE_LEFT_DOWN = False
                elif mousePos[1] <= 0:
                        self.MOUSE_LEFT_DOWN = False
                elif mousePos[1] >= windowSize[1]:
                        self.MOUSE_LEFT_DOWN = False
                       
               
        def setMoveSensitivity(self, moveScale):
                #vizcam.FlyNavigate.__moveScale = vizcam.FlyNavigate.MOVE_SPEED * moveScale
                #vizcam.FlyNavigate.sensitivity(self, moveScale, 1.0)
                self.__moveScale = self.MOVE_SPEED * moveScale
       
        def setLookSensitivity(self, turnScale):
                #vizcam.FlyNavigate.__turnScale = vizcam.FlyNavigate.MOVE_SPEED * turnScale
                #vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale)
                self.__turnScale = self.MOVE_SPEED * turnScale
               
        def getMoveSensitivity(self):
                #return vizcam.FlyNavigate.__moveScale
                return self.__moveScale
               
        def getLookSensitivity(self):
                #return vizcam.FlyNavigate.__turnScale
                return self.__turnScale

Neither functions appear to work regardless of what "scope" I try and give to "__moveScale" or "__turnScale"...

Using "vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale)" works until "vizcam.FlyNavigate.sensitivity(self, moveScale, 1.0)" is invoked, and vice versa.

I know this will be a simple mistake i'm doing for something so simple but can't seem to spot it...

Thanks,
DB

Jeff 02-06-2009 03:03 PM

Sorry we have not had a chance to answer this yet. We'll get back to you early next week.

DrunkenBrit 02-09-2009 01:17 AM

That's ok, I gathered you guys are rather busy. Thanks for informing me.

Jeff 02-10-2009 11:25 AM

self.__moveScale and self.__turnScale are private to the FlyNavigate class and when you try to set those in your MyFlyNavigation class your are creating new instances of them and so the viewpoint is not affected.

When you call the sensitivity method it works
Code:

vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale)
but by passing in a 1 you are re-setting the moveScale valueback to its original value

keep track of both moveScale and turnScale in your class and then pass them both to FlyNavigate.sensitivity
Code:

def __init__(self):
        # Default movement keys
        vizcam.FlyNavigate.__init__(self,'w','s','a','d')
        self.__moveScale = 1
        self.__turnScale = 1

and then you can set each value individually and pass in the value set before
Code:

def setMoveSensitivity(self, moveScale):
        self.__moveScale = moveScale
        vizcam.FlyNavigate.sensitivity(self, self.__moveScale, self.__turnScale)
       
def setLookSensitivity(self, turnScale):
        self.__turnScale = turnScale
        vizcam.FlyNavigate.sensitivity(self, self.__moveScale, self.__turnScale)


DrunkenBrit 02-11-2009 12:24 AM

Thanks! :)


All times are GMT -7. The time now is 03:02 AM.

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