PDA

View Full Version : Viewpoint Compass


sl0bz
08-26-2009, 07:03 AM
Hi,

I am creating an application that has a pretty large CAD model and when the users are navigating through the model there have been complaints that they are losing track of where they are in the model. I want to create a "you-are-here" type window that the user can pop up on the screen.

I have been experimenting with addWindow() and addView() to get a top down view of the environment. I would like to be able to insert an arrow over this window that follows the position and orientation of the main viewpoint. Is this possible?

Thanks!

--
Patrick

farshizzo
08-28-2009, 03:06 PM
Here is a sample script that shows how to overlay objects on a sub-window:import viz
import vizact
viz.go()

#Add the room and arrow
room = viz.add('gallery.ive')

# Create a new window in the upper left corner
UpperLeftWindow = viz.addWindow(pos=(0,1.0),size=(0.2,0.2))
UpperLeftWindow.visible(0,viz.SCREEN)

# Create a new viewpoint
BirdView = viz.addView()

#Attach the bird's eye view to the upper left window
UpperLeftWindow.setView(BirdView)

#Move the view above the center of the room
BirdView.setPosition([0,9,0])

#Rotate the view so that it looks down
BirdView.setEuler([0,90,0])

#Overlay arrow on sub window (20x20 pixels)
arrow = viz.addTexQuad(parent=viz.ORTHO,scene=UpperLeftWin dow,size=20)
arrow.texture(viz.add('arrow.tif'))

def UpdateArrow():

#Get the current head orientation and position
yaw,pitch,roll = viz.MainView.getEuler()
pos = viz.MainView.getPosition()

# Place arrow on top of viewpoint
x,y,z = UpperLeftWindow.worldToScreen(pos,mode=viz.WINDOW_ PIXELS)
arrow.setPosition([x,y,0])

# Rotate arrow to match yaw rotation
arrow.setEuler([0,0,-yaw])

vizact.ontimer(0,UpdateArrow)

sl0bz
09-02-2009, 12:27 PM
That worked well for me, thanks for your help!