View Single Post
Old 05-11-2009, 02:03 PM
Gladsomebeast Gladsomebeast is offline
Join Date: Mar 2005
Location: Isla Vizta, CA
Posts: 397
To support multiple hardware interfaces, like a keyboard+mouse test mode and production VR tracker mode, you want to separate the "application logic" from the hardware interface code. Their are a few ways you can organize the code to do this. I would use object oriented classes.

Say the user interacts with your Catia model with some 3D cursor thing. That is application logic. I'ed create a Cursor class that holds all the application level information and behavior for this 3D cursor: 3D position, appearance, methods for selecting and moving the Catia model.

I'd create another class called CursorControllerKeyboard that has a pointer to the Cursor class. This guy will respond to keyboard events and manipulate the Cursor appropratly. Another class called CursorControllerWand could manipulate the Cursor in response to input from the Intersense Wand device.

Let the Cursor classes constructor choose which controler to create based on some configuration varable. Here's some code:

import viz
import vizact


class Cursor:
	def __init__(self):
		#Application level stuff
		self.root = viz.addGroup() #3d position
		self.model = viz.add('arrow.wrl', parent=self.root)
			self.CursorControllerWand(self) #pass pointer to self
			self.CursorControllerKeyboard(self) #pass pointer to self
	def grabModel(self):
		#application level stuff
	class CursorControllerKeyboard: #sub-class of Cursor, only Cursor can use me
		def __init__(self, appCursor):
			self.appCursor = appCursor
			vizact.onkeydown(viz.KEY_UP, self.appCursor.root.setPosition, [0,0,1], viz.REL_LOCAL)
			vizact.onkeydown(' ', self.appCursor.grabModel)
	class CursorControllerWand: #sub-class of Cursor, only Cursor can use me
		def __init__(self, appCursor):
			self.appCursor = appCursor
			#do Vr hardware callbacks
if __name__ == '__main__':
Paul Elliott
WorldViz LLC
Reply With Quote