Examples of using mouse events to interact with objects.
ClickOnObject.tar

# 1: Create a class to load a model, and prepare it for use with the MousePickingManager

from pandac.PandaModules import *
from direct.task import *
from direct.showbase import DirectObject
import direct.directbase.DirectStart
import random
from MousePickingManager import *
import sys

class World (DirectObject.DirectObject):
    def __init__(self):
        self.loadmodels()
        self.mousemanager = MousePickingManager(self)
        self.accept ('escape',self.quit)
       
    def loadmodels(self):
        light1Node=PointLight("light1")
        light1=camera.attachNewNode(light1Node)
        render.setLight(light1)
        camera.setPos(0,-10,0)
       
        self.redpawn = Pawn("red pawn")
        self.redpawn.obj.setColor(1,0,0,1)
       
           
    def quit (self):
        print "bye bye"
        sys.exit()

class Pawn (DirectObject.DirectObject):
    def __init__(self,name):
        self.name=name
       
        p=loader.loadModel("pawn")
        p.setName(name)
        p.reparentTo(render)      
       
        self.obj=p
       
w=World()

run()

# 1: Create a class to load a model, and prepare it for use with the MousePickingManager

from pandac.PandaModules import *
from direct.task import *
from direct.showbase import DirectObject
import direct.directbase.DirectStart
import random
from MousePickingManager import *
import sys

class World (DirectObject.DirectObject):
    def __init__(self):
        self.loadmodels()
        self.mousemanager = MousePickingManager(self)
        self.accept ('escape',self.quit)
       
    def loadmodels(self):
        light1Node=PointLight("light1")
        light1=camera.attachNewNode(light1Node)
        render.setLight(light1)
        camera.setPos(0,-10,0)
       
        self.redpawn = Pawn("red pawn")
        self.redpawn.obj.setColor(1,0,0,1)
       
           
    def quit (self):
        print "bye bye"
        sys.exit()

class Pawn (DirectObject.DirectObject):
    def __init__(self,name):
        self.name=name
       
        p=loader.loadModel("pawn")
        p.setName(name)
        p.reparentTo(render)      
       
        # setTag() lets you add extra properties to a node.  "mouseInteraction" is a flag for the MousePickingManager,
        # telling it that this object can have mouse interactions applied to it.
        p.setTag("mouseInteraction","1")

        # setPythonTag is like setTag, but it lets you connect a node to a python object.
        # here we connect the model to the Python object that uses it.  
        # this is because the mouse interaction code can only tell what object you've clicked on, and needs this
        # information to connect to the event handlers.
        p.setPythonTag("pythonObject",self)
       
        # the mouse manager generates events with the name of the object appended, so this form of accept() will catch them correctly
        self.accept("mouseEnter"+self.name, self.onMouseEnter)
               
        self.obj=p
       
    def onMouseEnter(self):
        print "Mouse Enter", self.name

w=World()

run()

# 3: all mouse events

from pandac.PandaModules import *
from direct.task import *
from direct.showbase import DirectObject
import direct.directbase.DirectStart
import random
from MousePickingManager import *
import sys

class World (DirectObject.DirectObject):
    def __init__(self):
        self.loadmodels()
        self.mousemanager = MousePickingManager(self)
        self.accept ('escape',self.quit)
       
    def loadmodels(self):
        light1Node=PointLight("light1")
        light1=camera.attachNewNode(light1Node)
        render.setLight(light1)
        camera.setPos(0,-10,0)
       
        self.redpawn = Pawn("red pawn")
        self.redpawn.obj.setColor(1,0,0,1)
       
           
    def quit (self):
        print "bye bye"
        sys.exit()

class Pawn (DirectObject.DirectObject):
    def __init__(self,name):
        self.name=name
       
        p=loader.loadModel("pawn")
        p.setName(name)
        p.reparentTo(render)      
       
        p.setTag("mouseInteraction","1")
        p.setPythonTag("pythonObject",self)
       
        self.accept("mouseEnter"+self.name, self.onMouseEnter)
        self.accept("mouseLeave"+self.name, self.onMouseLeave)
        self.accept("mouseDown"+self.name, self.onMouseDown)
        self.accept("mouseUp"+self.name,self.onMouseUp)
        self.accept("mouseUpOutside"+self.name,self.onMouseUpOutside)
        self.obj=p
       
    def onMouseEnter(self):
        print "Mouse Enter", self.name
    def onMouseLeave(self):
        print "Mouse Leave", self.name
    def onMouseDown(self):
        print "Mouse Down", self.name
    def onMouseUp(self):
        print "Mouse Up", self.name        
    def onMouseUpOutside(self):
        print "Mouse Up Outside", self.name        
w=World()

run()

# 4: use the mouse events to change something about the object

from pandac.PandaModules import *
from direct.task import *
from direct.showbase import DirectObject
import direct.directbase.DirectStart
import random
from MousePickingManager import *
import sys

class World (DirectObject.DirectObject):
    def __init__(self):
        self.loadmodels()
        self.mousemanager = MousePickingManager(self)
        self.accept ('escape',self.quit)
       
    def loadmodels(self):
        light1Node=PointLight("light1")
        light1=camera.attachNewNode(light1Node)
        render.setLight(light1)
        camera.setPos(0,-10,0)
       
        self.redpawn = Pawn("red pawn")
        self.redpawn.obj.setColor(1,0,0,1)
       
           
    def quit (self):
        print "bye bye"
        sys.exit()

class Pawn (DirectObject.DirectObject):
    def __init__(self,name):
        self.name=name
       
        p=loader.loadModel("pawn")
        p.setName(name)
        p.reparentTo(render)      
       
        p.setTag("mouseInteraction","1")
        p.setPythonTag("pythonObject",self)
       
        self.accept("mouseEnter"+self.name, self.onMouseEnter)
        self.accept("mouseLeave"+self.name, self.onMouseLeave)
        self.accept("mouseDown"+self.name, self.onMouseDown)
        self.accept("mouseUp"+self.name,self.onMouseUp)
        self.accept("mouseUpOutside"+self.name,self.onMouseUpOutside)
        self.obj=p
       
    def onMouseEnter(self):
        self.obj.setScale(1.1)
    def onMouseLeave(self):
        self.obj.setScale(1)
    def onMouseDown(self):
        self.obj.setScale(1.5)
    def onMouseUp(self):
        self.obj.setScale(1.1)      
    def onMouseUpOutside(self):
        self.obj.setScale(1)
w=World()

run()

# 5: changing color

from pandac.PandaModules import *
from direct.task import *
from direct.showbase import DirectObject
import direct.directbase.DirectStart
import random
from MousePickingManager import *
import sys

class World (DirectObject.DirectObject):
    def __init__(self):
        self.loadmodels()
        self.mousemanager = MousePickingManager(self)
        self.accept ('escape',self.quit)
       
    def loadmodels(self):
        light1Node=PointLight("light1")
        light1=camera.attachNewNode(light1Node)
        render.setLight(light1)
        camera.setPos(0,-10,0)
       
        self.redpawn = Pawn("red pawn")
       
        # add properties for base color, rollover color, and click color
        # these will be part of Pawn, not part of Pawn.obj
       
        self.redpawn.setBaseColor (.5,.4,.4)
        self.redpawn.setHighlightColor (1,0,0)
        self.redpawn.setSelectColor (1,.5,.5)
       
       
           
    def quit (self):
        print "bye bye"
        sys.exit()

class Pawn (DirectObject.DirectObject):
    def __init__(self,name):
        self.name=name
       
        p=loader.loadModel("pawn")
        p.setName(name)
        p.reparentTo(render)      
       
        p.setTag("mouseInteraction","1")
        p.setPythonTag("pythonObject",self)
       
        self.accept("mouseEnter"+self.name, self.onMouseEnter)
        self.accept("mouseLeave"+self.name, self.onMouseLeave)
        self.accept("mouseDown"+self.name, self.onMouseDown)
        self.accept("mouseUp"+self.name,self.onMouseUp)
        self.accept("mouseUpOutside"+self.name,self.onMouseUpOutside)
        self.obj=p

        self.setBaseColor(1,1,1)
        self.highlightColor=Vec4(1,1,1,1)
        self.selectColor=Vec4(1,1,1,1)
       
    def setBaseColor(self,r,g,b):
        self.baseColor = Vec4(r,g,b,1)
        self.obj.setColor(self.baseColor)
    def setHighlightColor(self,r,g,b):
        self.highlightColor = Vec4(r,g,b,1)
    def setSelectColor(self,r,g,b):
        self.selectColor = Vec4(r,g,b,1)
       
    def onMouseEnter(self):
        self.obj.setColor(self.highlightColor)
    def onMouseLeave(self):
        self.obj.setColor(self.baseColor)
    def onMouseDown(self):
        self.obj.setColor(self.selectColor)
    def onMouseUp(self):
        self.obj.setColor(self.highlightColor)
    def onMouseUpOutside(self):
        self.obj.setColor(self.baseColor)
w=World()

run()

Leave a Reply