def __init__(self): # Establish a global pointer to the direct object early on # so dependant classes can access it in their code __builtins__["direct"] = base.direct = self # These come early since they are used later on self.group = render.attachNewNode('DIRECT') self.font = TextNode.getDefaultFont() self.fEnabled = 0 self.fEnabledLight = 0 self.fScaleWidgetByCam = 0 # [gjeon] flag for scaling widget by distance from the camera self.drList = DisplayRegionList() self.iRayList = map(lambda x: x.iRay, self.drList) self.dr = self.drList[0] self.camera = base.camera self.trueCamera = self.camera self.iRay = self.dr.iRay self.coaMode = COA_ORIGIN self.cameraControl = DirectCameraControl() self.manipulationControl = DirectManipulationControl() self.useObjectHandles() self.grid = DirectGrid() self.grid.disable() self.lights = DirectLights(base.direct.group) # Create some default lights self.lights.createDefaultLights() # But turn them off self.lights.allOff() # Initialize the collection of selected nodePaths self.selected = SelectedNodePaths() # Ancestry of currently selected object self.ancestry = [] self.ancestryIndex = 0 self.activeParent = None self.selectedNPReadout = OnscreenText.OnscreenText( pos=(-1.0, -0.9), bg=Vec4(1, 1, 1, 1), scale=0.05, align=TextNode.ALeft, mayChange=1, font=self.font) # Make sure readout is never lit or drawn in wireframe useDirectRenderStyle(self.selectedNPReadout) self.selectedNPReadout.reparentTo(hidden) self.activeParentReadout = OnscreenText.OnscreenText( pos=(-1.0, -0.975), bg=Vec4(1, 1, 1, 1), scale=0.05, align=TextNode.ALeft, mayChange=1, font=self.font) # Make sure readout is never lit or drawn in wireframe useDirectRenderStyle(self.activeParentReadout) self.activeParentReadout.reparentTo(hidden) self.directMessageReadout = OnscreenText.OnscreenText( pos=(-1.0, 0.9), bg=Vec4(1, 1, 1, 1), scale=0.05, align=TextNode.ALeft, mayChange=1, font=self.font) # Make sure readout is never lit or drawn in wireframe useDirectRenderStyle(self.directMessageReadout) self.directMessageReadout.reparentTo(hidden) # Create a vrpn client vrpn-server or default self.deviceManager = None self.joybox = None self.radamec = None self.fastrak = [] if base.config.GetBool('want-vrpn', 0): from panda3d.direct.directdevices import DirectDeviceManager self.deviceManager = DirectDeviceManager.DirectDeviceManager() # Automatically create any devices specified in config file joybox = base.config.GetString('vrpn-joybox-device', '') radamec = base.config.GetString('vrpn-radamec-device', '') fastrak = base.config.GetString('vrpn-fastrak-device', '') if joybox: from panda3d.direct.directdevices import DirectJoybox self.joybox = DirectJoybox.DirectJoybox(joybox) if radamec: from panda3d.direct.directdevices import DirectRadamec self.radamec = DirectRadamec.DirectRadamec(radamec) if fastrak: from panda3d.direct.directdevices import DirectFastrak # parse string into format device:N where N is the sensor name fastrak = string.split(fastrak) for i in range(len(fastrak))[1:]: self.fastrak.append( DirectFastrak.DirectFastrak(fastrak[0] + ':' + fastrak[i])) self.fControl = 0 self.fAlt = 0 self.fShift = 0 self.fMouse1 = 0 # [gjeon] to update alt key information while mouse1 is pressed self.pos = VBase3() self.hpr = VBase3() self.scale = VBase3() self.hitPt = Point3(0.0) # Lists for managing undo/redo operations self.undoList = [] self.redoList = [] # One run through the context task to init everything self.drList.updateContext() for dr in self.drList: dr.camUpdate() self.actionEvents = [ ['select', self.select], ['deselect', self.deselect], ['deselectAll', self.deselectAll], ['highlightAll', self.selected.highlightAll], ['preRemoveNodePath', self.deselect], # Scene graph explorer functions ['SGE_Select', self.select], ['SGE_Deselect', self.deselect], ['SGE_Set Reparent Target', self.setActiveParent], ['SGE_Reparent', self.reparent], ['SGE_WRT Reparent', lambda np, s=self: s.reparent(np, fWrt=1)], ['SGE_Flash', self.flash], ['SGE_Isolate', self.isolate], ['SGE_Toggle Vis', self.toggleVis], ['SGE_Show All', self.showAllDescendants], ['SGE_Fit', self.fitOnNodePath], ['SGE_Place', Placer.place], ['SGE_Set Color', Slider.rgbPanel], ['SGE_Explore', SceneGraphExplorer.explore], ['SGE_Delete', self.removeNodePath], ['SGE_Set Name', self.getAndSetName], ] self.modifierEvents = [ 'control', 'control-up', 'shift', 'shift-up', 'alt', 'alt-up', ] self.keyEvents = [ 'escape', 'delete', 'page_up', 'page_down', '[', '{', ']', '}', 'shift-a', 'b', 'control-f', 'l', 'shift-l', 'o', 'p', 'r', 'shift-r', 's', 't', 'v', 'w' ] self.mouseEvents = [ 'mouse1', 'mouse1-up', 'shift-mouse1', 'shift-mouse1-up', 'control-mouse1', 'control-mouse1-up', 'alt-mouse1', 'alt-mouse1-up', 'mouse2', 'mouse2-up', 'shift-mouse2', 'shift-mouse2-up', 'control-mouse2', 'control-mouse2-up', 'alt-mouse2', 'alt-mouse2-up', 'mouse3', 'mouse3-up', 'shift-mouse3', 'shift-mouse3-up', 'control-mouse3', 'control-mouse3-up', 'alt-mouse3', 'alt-mouse3-up', ] self.passThroughKeys = [ 'v', 'b', 'l', 'p', 'r', 'shift-r', 's', 't', 'shift-a', 'w' ] if base.wantTk: from panda3d.direct.showbase import TkGlobal from panda3d.direct.tkpanels import DirectSessionPanel self.panel = DirectSessionPanel.DirectSessionPanel(parent=tkroot) try: # Has the clusterMode been set externally (i.e. via the # bootstrap application? self.clusterMode = clusterMode except NameError: # Has the clusterMode been set via a config variable? self.clusterMode = base.config.GetString("cluster-mode", '') if self.clusterMode == 'client': self.cluster = createClusterClient() elif self.clusterMode == 'server': self.cluster = ClusterServer(base.camera, base.cam) else: self.cluster = DummyClusterClient() __builtins__['cluster'] = self.cluster
def __init__(self): __builtins__['direct'] = base.direct = self self.group = render.attachNewNode('DIRECT') self.font = TextNode.getDefaultFont() self.fEnabled = 0 self.fEnabledLight = 0 self.fScaleWidgetByCam = 0 self.fIgnoreDirectOnlyKeyMap = 0 self.drList = DisplayRegionList() self.iRayList = map(lambda x: x.iRay, self.drList) self.dr = self.drList[0] self.win = base.win self.camera = base.camera self.cam = base.cam self.camNode = base.camNode self.trueCamera = self.camera self.iRay = self.dr.iRay self.coaMode = COA_ORIGIN self.cameraControl = DirectCameraControl() self.manipulationControl = DirectManipulationControl() self.useObjectHandles() self.grid = DirectGrid() self.grid.disable() self.lights = DirectLights(base.direct.group) self.lights.createDefaultLights() self.lights.allOff() self.selected = SelectedNodePaths() self.ancestry = [] self.ancestryIndex = 0 self.activeParent = None self.selectedNPReadout = OnscreenText.OnscreenText( pos=(-1.0, -0.9), bg=Vec4(1, 1, 1, 1), scale=0.05, align=TextNode.ALeft, mayChange=1, font=self.font) useDirectRenderStyle(self.selectedNPReadout) self.selectedNPReadout.reparentTo(hidden) self.activeParentReadout = OnscreenText.OnscreenText( pos=(-1.0, -0.975), bg=Vec4(1, 1, 1, 1), scale=0.05, align=TextNode.ALeft, mayChange=1, font=self.font) useDirectRenderStyle(self.activeParentReadout) self.activeParentReadout.reparentTo(hidden) self.directMessageReadout = OnscreenText.OnscreenText( pos=(-1.0, 0.9), bg=Vec4(1, 1, 1, 1), scale=0.05, align=TextNode.ALeft, mayChange=1, font=self.font) useDirectRenderStyle(self.directMessageReadout) self.directMessageReadout.reparentTo(hidden) self.deviceManager = None self.joybox = None self.radamec = None self.fastrak = [] if base.config.GetBool('want-vrpn', 0): from direct.directdevices import DirectDeviceManager self.deviceManager = DirectDeviceManager.DirectDeviceManager() joybox = base.config.GetString('vrpn-joybox-device', '') radamec = base.config.GetString('vrpn-radamec-device', '') fastrak = base.config.GetString('vrpn-fastrak-device', '') if joybox: from direct.directdevices import DirectJoybox self.joybox = DirectJoybox.DirectJoybox(joybox) if radamec: from direct.directdevices import DirectRadamec self.radamec = DirectRadamec.DirectRadamec(radamec) if fastrak: from direct.directdevices import DirectFastrak fastrak = string.split(fastrak) for i in range(len(fastrak))[1:]: self.fastrak.append( DirectFastrak.DirectFastrak(fastrak[0] + ':' + fastrak[i])) self.fControl = 0 self.fAlt = 0 self.fShift = 0 self.fMouse1 = 0 self.fMouse2 = 0 self.fMouse3 = 0 self.pos = VBase3() self.hpr = VBase3() self.scale = VBase3() self.hitPt = Point3(0.0) self.undoList = [] self.redoList = [] self.drList.updateContext() for dr in self.drList: dr.camUpdate() self.actionEvents = [ ['select', self.select], ['DIRECT-select', self.selectCB], ['deselect', self.deselect], ['deselectAll', self.deselectAll], ['DIRECT-preDeselectAll', self.deselectAllCB], ['highlightAll', self.selected.highlightAll], ['preRemoveNodePath', self.deselect], ['SGE_Select', self.select], ['SGE_Deselect', self.deselect], ['SGE_Set Reparent Target', self.setActiveParent], ['SGE_Reparent', self.reparent], ['SGE_WRT Reparent', lambda np, s=self: s.reparent(np, fWrt=1)], ['SGE_Flash', self.flash], ['SGE_Isolate', self.isolate], ['SGE_Toggle Vis', self.toggleVis], ['SGE_Show All', self.showAllDescendants], ['SGE_Fit', self.fitOnNodePath], ['SGE_Delete', self.removeNodePath], ['SGE_Set Name', self.getAndSetName], ['DIRECT-delete', self.removeAllSelected], ['DIRECT-Undo', self.undo], ['DIRECT-Redo', self.redo], ['DIRECT-OOBE', self.oobe], ['DIRECT-toggleWidgetVis', self.toggleWidgetVis], ['DIRECT-toggleWireframe', base.toggleWireframe], ['DIRECT-toggleVisAll', self.selected.toggleVisAll], ['DIRECT-toggleTexture', base.toggleTexture], ['DIRECT-upAncestry', self.upAncestry], ['DIRECT-downAncestry', self.downAncestry], ['DIRECT-toggleBackface', base.toggleBackface], ['DIRECT-flash', self.flash], ['DIRECT-toggleLigths', self.lights.toggle], ['DIRECT-toggleCOALock', self.cameraControl.toggleCOALock], ['DIRECT-setActiveParent', self.doSetActiveParent], ['DIRECT-doWrtReparent', self.doWrtReparent], ['DIRECT-doReparent', self.doReparent], ['DIRECT-doSelect', self.doSelect] ] if base.wantTk: from direct.tkpanels import Placer from direct.tkwidgets import Slider from direct.tkwidgets import SceneGraphExplorer self.actionEvents.extend( [['SGE_Place', Placer.place], ['SGE_Set Color', Slider.rgbPanel], ['SGE_Explore', SceneGraphExplorer.explore]]) self.modifierEvents = [ 'control', 'control-up', 'control-repeat', 'shift', 'shift-up', 'shift-repeat', 'alt', 'alt-up', 'alt-repeat' ] keyList = map(chr, range(97, 123)) keyList.extend(map(chr, range(48, 58))) keyList.extend( ['`', '-', '=', '[', ']', ';', "'", ',', '.', '/', '\\']) self.specialKeys = [ 'escape', 'delete', 'page_up', 'page_down', 'enter' ] def addCtrl(a): return 'control-%s' % a def addShift(a): return 'shift-%s' % a self.keyEvents = keyList[:] self.keyEvents.extend(map(addCtrl, keyList)) self.keyEvents.extend(map(addShift, keyList)) self.keyEvents.extend(self.specialKeys) self.mouseEvents = [ 'mouse1', 'mouse1-up', 'shift-mouse1', 'shift-mouse1-up', 'control-mouse1', 'control-mouse1-up', 'alt-mouse1', 'alt-mouse1-up', 'mouse2', 'mouse2-up', 'shift-mouse2', 'shift-mouse2-up', 'control-mouse2', 'control-mouse2-up', 'alt-mouse2', 'alt-mouse2-up', 'mouse3', 'mouse3-up', 'shift-mouse3', 'shift-mouse3-up', 'control-mouse3', 'control-mouse3-up', 'alt-mouse3', 'alt-mouse3-up' ] self.directOnlyKeyMap = { 'u': ('Orbit Upright Camera', 'DIRECT-orbitUprightCam'), 'shift-u': ('Upright Camera', 'DIRECT-uprightCam'), '1': ('Move Camera to View 1', 'DIRECT-spwanMoveToView-1'), '2': ('Move Camera to View 2', 'DIRECT-spwanMoveToView-2'), '3': ('Move Camera to View 3', 'DIRECT-spwanMoveToView-3'), '4': ('Move Camera to View 4', 'DIRECT-spwanMoveToView-4'), '5': ('Move Camera to View 5', 'DIRECT-spwanMoveToView-5'), '6': ('Move Camera to View 6', 'DIRECT-spwanMoveToView-6'), '7': ('Move Camera to View 7', 'DIRECT-spwanMoveToView-7'), '8': ('Move Camera to View 8', 'DIRECT-spwanMoveToView-8'), '9': ('Rotate Camera About widget 90 degrees Counterclockwise', 'DIRECT-swingCamAboutWidget-0'), '0': ('Rotate Camera About widget 90 degrees Clockwise', 'DIRECT-swingCamAboutWidget-1'), '`': ('Remove ManipulateCameraTask', 'DIRECT-removeManipulateCameraTask'), '=': ('Zoom In', 'DIRECT-zoomInCam'), 'shift-=': ('Zoom In', 'DIRECT-zoomInCam'), 'shift-_': ('Zoom Out', 'DIRECT-zoomOutCam'), '-': ('Zoom Out', 'DIRECT-zoomOutCam'), 'o': ('Toggle OOBE', 'DIRECT-OOBE'), '[': ('DIRECT-Undo', 'DIRECT-Undo'), 'shift-[': ('DIRECT-Undo', 'DIRECT-Undo'), ']': ('DIRECT-Redo', 'DIRECT-Redo'), 'shift-]': ('DIRECT-Redo', 'DIRECT-Redo') } self.hotKeyMap = { 'c': ('Center Camera', 'DIRECT-centerCamIn'), 'f': ('Fit on Widget', 'DIRECT-fitOnWidget'), 'h': ('Move Camera to ', 'DIRECT-homeCam'), 'shift-v': ('Toggle Marker', 'DIRECT-toggleMarkerVis'), 'm': ('Move to fit', 'DIRECT-moveToFit'), 'n': ('Pick Next COA', 'DIRECT-pickNextCOA'), 'delete': ('Delete', 'DIRECT-delete'), '.': ('Scale Up Widget', 'DIRECT-widgetScaleUp'), ',': ('Scale Down Widget', 'DIRECT-widgetScaleDown'), 'page_up': ('Up Ancestry', 'DIRECT-upAncestry'), 'page_down': ('Down Ancestry', 'DIRECT-downAncestry'), 'escape': ('Deselect All', 'deselectAll'), 'v': ('Toggle Manipulating Widget', 'DIRECT-toggleWidgetVis'), 'b': ('Toggle Backface', 'DIRECT-toggleBackface'), 'control-f': ('Flash', 'DIRECT-flash'), 'l': ('Toggle lights', 'DIRECT-toggleLigths'), 'shift-l': ('Toggle COA Lock', 'DIRECT-toggleCOALock'), 'p': ('Set Active Parent', 'DIRECT-setActiveParent'), 'r': ('Wrt Reparent', 'DIRECT-doWrtReparent'), 'shift-r': ('Reparent', 'DIRECT-doReparent'), 's': ('Select', 'DIRECT-doSelect'), 't': ('Toggle Textures', 'DIRECT-toggleTexture'), 'shift-a': ('Toggle Vis all', 'DIRECT-toggleVisAll'), 'w': ('Toggle Wireframe', 'DIRECT-toggleWireframe'), 'control-z': ('Undo', 'LE-Undo'), 'shift-z': ('Redo', 'LE-Redo'), 'control-d': ('Duplicate', 'LE-Duplicate'), 'control-l': ('Make Live', 'LE-MakeLive'), 'control-n': ('New Scene', 'LE-NewScene'), 'control-s': ('Save Scene', 'LE-SaveScene'), 'control-o': ('Open Scene', 'LE-OpenScene'), 'control-q': ('Quit', 'LE-Quit') } self.speicalKeyMap = {'enter': 'DIRECT-enter'} self.passThroughKeys = [ 'v', 'b', 'l', 'p', 'r', 'shift-r', 's', 't', 'shift-a', 'w' ] if base.wantTk: from direct.showbase import TkGlobal from direct.tkpanels import DirectSessionPanel self.panel = DirectSessionPanel.DirectSessionPanel(parent=tkroot) try: self.clusterMode = clusterMode except NameError: self.clusterMode = base.config.GetString('cluster-mode', '') if self.clusterMode == 'client': self.cluster = createClusterClient() elif self.clusterMode == 'server': self.cluster = ClusterServer(base.camera, base.cam) else: self.cluster = DummyClusterClient() __builtins__['cluster'] = self.cluster return None