View Single Post
  #3  
Old 02-05-2007, 03:19 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Here is a sample script that should work with 2.5
Code:
import viz
viz.go()

DRAG_TIMER = 1

balls = []

#Add 3 balls and place them in front of the user
for x in range(3):
	ball = viz.add('ball.wrl')
	ball.translate(x-1,1.7,4)
	balls.append(ball)
	
#Add a ground
ground = viz.add('tut_ground.wrl')
ground.disable(viz.PICKING)

#Set background color
viz.clearcolor(viz.SKYBLUE)

#Disable mouse navigation
viz.mouse(0)

#The object that will be dragged
dragObject = None

def BeginDrag():
	global dragObject
	#Pick an object
	info = viz.pick(1)
	#Make sure object is one of the balls
	if info.object in balls:
		#Set the drag object
		dragObject = info.object
		dragObject.offset = vizmat.Vector(dragObject.get(viz.POSITION)) - info.intersectPoint
		dragObject.dist = vizmat.Distance(viz.get(viz.HEAD_POS),info.intersectPoint)
		viz.starttimer(DRAG_TIMER,0,viz.FOREVER)

vizact.onmousedown(viz.MOUSEBUTTON_LEFT,BeginDrag)

def EndDrag():
	global dragObject
	#Stop dragging
	dragObject = None
	viz.killtimer(DRAG_TIMER)

vizact.onmouseup(viz.MOUSEBUTTON_LEFT,EndDrag)

def onTimer(num):
	if num == DRAG_TIMER:
		#Move the object based on mouse movement
		line = viz.screentoworld(viz.mousepos())
		begin = line[:3]
		end = line[3:]
		dir = vizmat.Vector(end) - begin
		dir.normalize()
		dir *= dragObject.dist
		pos = vizmat.Vector(begin) + dir + dragObject.offset
		dragObject.translate(pos.get())

viz.callback(viz.TIMER_EVENT,onTimer)
Reply With Quote