|
|
Thread Tools | Rate Thread | Display Modes |
#1
|
|||
|
|||
moving and object by mouse but don't know how to stop the movement
my code is to select a ball and move it by mouse, I want to click a key and the ball will remain in that position, but have no idea how to do it.
please help this is my code : import viz viz.go() ground = viz.add('tut_ground.wrl') viz.clearcolor(0.5,0.5,1) ground.disable(viz.PICKING) soccerball1 = viz.add('soccerball.ive') soccerball2 = viz.add('soccerball.ive') soccerball3 = viz.add('soccerball.ive') soccerball1.translate(-1,1.5,3) soccerball2.translate(0,1.5,3) soccerball3.translate(1,1.5,3) viz.mouse(viz.OFF) def mouseclick(button): global ball if button == viz.MOUSEBUTTON_LEFT: pickObj = viz.pick() if pickObj.valid(): ball = pickObj def mymouse(e): global ball if not ball: return else: ball.setPosition((e.x-0.5)*3,e.y*3.5,3) viz.callback(viz.MOUSEDOWN_EVENT,mouseclick) viz.callback(viz.MOUSE_MOVE_EVENT,mymouse) |
#2
|
|||
|
|||
You will just have to set the ball value to None and the ball should stay at its current position as your code already checks whether or not a ball is active before trying to move it.
You could alter the mouse down function to pick up the ball if none is selected and drop the ball if currently holding one, like this: Code:
def mouseclick(button): global ball if button == viz.MOUSEBUTTON_LEFT: if not ball: #we are not holding a ball, try to pick one up pickObj = viz.pick() if pickObj.valid(): ball = pickObj else: #we were holding a ball, drop it ball = None Code:
def dropBall: global ball ball = None vizact.onkeydown( 'd', dropBall ) |
#3
|
|||
|
|||
mouse wheel problem
Thanks for your help, it works perfect. I have another problem.
I want to assign mouse wheel to be able to move my selected ball in depth. But I have no idea how to do it. Please help. |
#4
|
|||
|
|||
Maybe something along the lines of:
Code:
diffInZ = 3.0 # Value to add/subtract to Z position of selected ball def onMouseWheel(dir): global ball # Same ball object selected from previous mouse move callback # Check 'ball' is valid/one selected from previous callback ballPos = ball.getPosition() addZ = -3.0 # If wheel is moving forward, make positive, else leave as negative if dir > 0: addZ = 3.0 ball.setPosition( ballPos[0], ballPos[1], ballPos[2] + addZ ) viz.callback(viz.MOUSEWHEEL_EVENT,onMouseWheel) |
#5
|
|||
|
|||
Thanks for your great help. It worked great.
Just that when I move the ball in depth and then try to move the mouse the ball comes back to front. do you know how should I solve this problem? |
#6
|
|||
|
|||
Yes at this line of code
Code:
ball.setPosition((e.x-0.5)*3,e.y*3.5,3) Code:
pos = ball.getPosition() #get the current position ball.setPosition((e.x-0.5)*3,e.y*3.5, pos[2] ) #pos[2] is the z-coord for the current position |
#7
|
|||
|
|||
Are you resetting the Z position of the selected ball in the mouse movement callback which moves the ball's X and/or Y position?
|
#8
|
|||
|
|||
Thanks for your help mooh. it works perfect.
|
#9
|
|||
|
|||
could u plz help me...i am also developing similar application
i am also practising to develop a similar application which u come across with. i want to create a virtual room with a table and some books on it. along with a chair and i want to move, rotate the chair with the help of mouse. can u plz post the code for picking up the objects and moving, rotating, thanking you..
Quote:
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
how can I stop an action? | nlfrnassimi | Vizard | 4 | 02-13-2009 01:59 AM |
Pick porblem with arrays | shivanangel | Vizard | 3 | 08-27-2007 11:10 AM |
Moving view with object | Xliben | Vizard | 2 | 07-25-2005 06:36 PM |