![]() |
|
|
|
#1
|
|||
|
|||
|
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: Code:
import viz
import vizact
IS_VR_HARDWARE_CONNECTED = False
class Cursor:
def __init__(self):
#Application level stuff
self.root = viz.addGroup() #3d position
self.model = viz.add('arrow.wrl', parent=self.root)
if IS_VR_HARDWARE_CONNECTED:
self.CursorControllerWand(self) #pass pointer to self
else:
self.CursorControllerKeyboard(self) #pass pointer to self
def grabModel(self):
#application level stuff
self.model.color(viz.GREEN)
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__':
viz.go()
Cursor()
__________________
Paul Elliott WorldViz LLC |
|
#2
|
|||
|
|||
|
how to move the other part
Code:
def toggleLink(): global link if link: #If link exits, stop grabbing link.remove() link = None elif vizmat.Distance(hand.getPosition(), ball.getPosition()) < .5: link = viz.grab( hand, ball ) vizact.onpick(ball,toggleLink) |
|
#3
|
|||
|
|||
|
For your elif block:
if link is not none: remove link
__________________
Paul Elliott WorldViz LLC |
|
#4
|
|||
|
|||
|
Better. Replace elif with if.
Code:
def toggleLink(): global link if link: #If link exits, stop grabbing link.remove() link = None if vizmat.Distance(hand.getPosition(), ball.getPosition()) < .5: link = viz.grab( hand, ball ) vizact.onpick(ball,toggleLink)
__________________
Paul Elliott WorldViz LLC |
|
#5
|
|||
|
|||
|
paul thank you very much for your reply.this is my full program
Code:
import viz
viz.go()
viz.MainView.setPosition(0,1.5,-4)
import viztracker
tracker = viztracker.MousePos()
myroom=viz.add('room.wrl')
#Add the object that will do the grabbing and link it to the tracker
hand = viz.add('marker.wrl')
viz.link(tracker, hand)
#turn off mouse navigation
viz.mouse(viz.OFF)
#Add the object that the marker will grab
ball = viz.add( 'ball.wrl' )
ball.translate( 0.5, 1.5, 3 )
table=viz.add('table.wrl')
link = None
#Grab or let go of the ball
def toggleLink():
global link
if link:
#If link exits, stop grabbing
link.remove()
link = None
elif vizmat.Distance(hand.getPosition(), ball.getPosition()) < .5:
vizact.onpick(ball,toggleLink)
now i want to move the ball and the table seperately. now could you please tell me how to make the changes. |
|
#6
|
|||
|
|||
|
vizmat.Distance(hand.getPosition(), ball.getPosition()) < .5: link = viz.grab( hand, ball )
vizact.onpick(ball,toggleLink) paul in the above code im able to grab the ball only. if im trying this loop with an if condition, after selecting the ball im not able to stop the ball how to change the code? |
|
#7
|
|||
|
|||
|
My last post from yesterday will fix your problem. Notice how I changed the elif to if in the toggleLink function.
Also, you will want to call toggleLink whenever the mouse button is pressed, so replace vizact.onpick with vizact.onmousebutton.
__________________
Paul Elliott WorldViz LLC |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Any ideas on linking chess 3ds file with source code? | djones1010 | Vizard | 1 | 04-24-2009 09:56 PM |
| Trying to integrate Source Code with Vizard | djones1010 | Vizard | 1 | 03-10-2009 02:58 PM |
| Vizard Tip of the Month: Use Tasks to Simplify your Code | Gladsomebeast | Vizard | 5 | 05-02-2008 04:30 PM |
| 3D Music Interface | Psirus | Vizard | 3 | 02-26-2008 11:48 AM |
| Vizard Crashes: causes are hard to determine, possible problem with the viz code | vr_boyko | Vizard | 1 | 01-07-2005 10:52 AM |