2
0

DirectFastrak.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """ Class used to create and control radamec device """
  2. from math import *
  3. from direct.showbase.DirectObject import DirectObject
  4. from .DirectDeviceManager import *
  5. from direct.directnotify import DirectNotifyGlobal
  6. """
  7. TODO:
  8. Handle interaction between widget, followSelectedTask and updateTask
  9. """
  10. # ANALOGS
  11. NULL_AXIS = -1
  12. FAST_X = 0
  13. FAST_Y = 1
  14. FAST_Z = 2
  15. class DirectFastrak(DirectObject):
  16. fastrakCount = 0
  17. notify = DirectNotifyGlobal.directNotify.newCategory('DirectFastrak')
  18. def __init__(self, device = 'Tracker0', nodePath = base.direct.camera):
  19. # See if device manager has been initialized
  20. if base.direct.deviceManager == None:
  21. base.direct.deviceManager = DirectDeviceManager()
  22. # Set name
  23. self.name = 'Fastrak-' + repr(DirectFastrak.fastrakCount)
  24. self.deviceNo = DirectFastrak.fastrakCount
  25. DirectFastrak.fastrakCount += 1
  26. # Get analogs
  27. self.device = device
  28. self.tracker = None
  29. self.trackerPos = None
  30. # Spawn update task
  31. self.updateFunc = self.fastrakUpdate
  32. self.enable()
  33. def enable(self):
  34. # Kill existing task
  35. self.disable()
  36. # Initialize tracker
  37. self.tracker = base.direct.deviceManager.createTracker(self.device)
  38. # Update task
  39. taskMgr.add(self.updateTask, self.name + '-updateTask')
  40. def disable(self):
  41. taskMgr.remove(self.name + '-updateTask')
  42. def destroy(self):
  43. self.disable()
  44. self.tempCS.removeNode()
  45. def updateTask(self, state):
  46. self.updateFunc()
  47. return Task.cont
  48. def fastrakUpdate(self):
  49. # Get tracker position in feet. Flip x, z axes.
  50. pos = base.direct.fastrak[self.deviceNo].tracker.getPos()
  51. self.trackerPos = Vec3(3.280839895013123 * pos[2],
  52. 3.280839895013123 * pos[1],
  53. 3.280839895013123 * pos[0])
  54. self.notify.debug("Tracker(%d) Pos = %s" % (self.deviceNo, repr(self.trackerPos)))