WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   inheritence question (https://forum.worldviz.com/showthread.php?t=1300)

theuberk 01-09-2008 06:42 AM

inheritence question
 
Hi,

I'm trying to make custom class called car a subclass of the VizNode class, but I'm having a few problems. Here is the main part of my constructor for the car class:

Code:

class Car(viz.VizNode):
       
        def __init__(self, direction = "right", id = sys.carID):
               
                randomCar = random.randint(1,14)
               
                if (randomCar == 10):
                        randomCar += 1       
                if (randomCar > 10):
                        self.tempCar = viz.add( "cars\car_" + str(randomCar) + ".ive" )
                else:
                        self.tempCar = viz.add( "cars\car_0" + str(randomCar) + ".ive" )
               
                viz.VizNode.__init__( self, self.tempCar.id )

The problem lies in that I cannot seem to manipulate any of the fields present in the VizNode class from outside the car class. For example:

If I add the following code to the car constructor:
Code:

self.tempCar.collideBox()
self.tempCar.setVelocity([10,0,0])

the car will fall and move along the x-axis at 10units/s

however, if I type the following code outside of the car class:

Code:

viz.go()
viz.phys.enable()
car = Car()
car.collideBox()
car.setVelocity([100,0,0])

I get the following error:

Cannot collideBox with invalid bounding box

collideBox is not the only method that does not work. I've also tried methods like car.setPosition(10,0,0) which also does not do anything.

Any ideas?

farshizzo 01-09-2008 04:10 PM

Can you provide a minimal working sample that reproduces the problem? The following code works for me:
Code:

class Car(viz.VizNode):
        def __init__(self):
               
                model = viz.add('mini.osgx')
               
                viz.VizNode.__init__(self,model.id)


import viz
viz.go()

c = Car()
c.setPosition(0,0,10)
c.setEuler(180,0,0)
c.addAction(vizact.spin(0,1,0,90))


theuberk 01-10-2008 06:49 AM

Alright I figured out the problem. It had to do with getting a child object from the model that was imported as a "car". This was code that was in the constructor that I didn't include in my previous post because I didn't think it was important (oops.):

Code:

self.frontWheels = self.tempCar.getChild( '0' + str(randomCar) + 'tyresBack-OFFSET' )
self.backWheels = self.tempCar.getChild( '0' + str(randomCar) + 'tyresFront-OFFSET' )


this needed to be changed to:

Code:

self.frontWheels = self.getChild( '0' + str(randomCar) + 'tyresBack-OFFSET' )
self.backWheels = self.getChild( '0' + str(randomCar) + 'tyresFront-OFFSET' )


theuberk 01-10-2008 07:01 AM

Sorry I forgot, I also had to change the name of the ID parameter in the constructor. It must have been scope problems with tempcar.id or something..


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

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