WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   moving and object by mouse but don't know how to stop the movement (https://forum.worldviz.com/showthread.php?t=1817)

nlfrnassimi 02-12-2009 10:21 PM

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)

moooh 02-13-2009 01:07 AM

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

or instead of changing the mousedown function you could make it so that pressing a key on the keyboard drops the ball:
Code:

def dropBall:
    global ball
    ball = None
vizact.onkeydown( 'd', dropBall )

This will drop the ball when the d key is pressed.

nlfrnassimi 02-15-2009 06:02 PM

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.

DrunkenBrit 02-17-2009 05:33 AM

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)


nlfrnassimi 02-18-2009 07:39 PM

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?

moooh 02-19-2009 12:35 AM

Yes at this line of code
Code:

ball.setPosition((e.x-0.5)*3,e.y*3.5,3)
you have coded to always put the ball at z-coord 3 when moving the mouse. If you want to get the z-coord unaltered by the regular mouse movement you will have to change it to use the z-value from the ball's current position
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


DrunkenBrit 02-19-2009 12:36 AM

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?

nlfrnassimi 02-19-2009 11:48 PM

Thanks for your help mooh. it works perfect.

nasr 04-26-2009 07:23 AM

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:

Originally Posted by nlfrnassimi (Post 7143)
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)



All times are GMT -7. The time now is 05:20 AM.

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