From 8d25bfaf435b80a928d462c3b281d4e7817569c2 Mon Sep 17 00:00:00 2001 From: Mark Mine Date: Mon, 7 May 2001 19:52:38 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/directdevices/DirectJoybox.py | 2 +- direct/src/directtools/DirectManipulation.py | 2 +- direct/src/directtools/DirectSelection.py | 9 ++-- direct/src/directtools/DirectSession.py | 47 +++++++++++----- direct/src/leveleditor/LevelEditor.py | 56 +++++++++++++------- direct/src/showbase/Messenger.py | 6 +++ 6 files changed, 84 insertions(+), 38 deletions(-) diff --git a/direct/src/directdevices/DirectJoybox.py b/direct/src/directdevices/DirectJoybox.py index c82201a933..4db2e147d2 100644 --- a/direct/src/directdevices/DirectJoybox.py +++ b/direct/src/directdevices/DirectJoybox.py @@ -55,7 +55,7 @@ class DirectJoybox(PandaObject): self.refCS = direct.cameraControl.coaMarker self.tempCS = direct.group.attachNewNode('JoyboxTempCS') # Text object to display current mode - self.readout = OnscreenText.OnscreenText( pos = (-0.9, -0.95) ) + self.readout = OnscreenText.OnscreenText( pos = (-0.9, 0.95) ) # List of functions to cycle through self.modeList = [self.joeMode, self.driveMode, self.orbitMode] # Pick initial mode diff --git a/direct/src/directtools/DirectManipulation.py b/direct/src/directtools/DirectManipulation.py index 1288ead1ab..847146afb6 100644 --- a/direct/src/directtools/DirectManipulation.py +++ b/direct/src/directtools/DirectManipulation.py @@ -32,7 +32,7 @@ class DirectManipulationControl(PandaObject): [',', self.objectHandles.multiplyScalingFactorBy, 0.5], ['<', self.objectHandles.multiplyScalingFactorBy, 0.5], ['F', self.objectHandles.growToFit], - ['p', self.plantSelectedNodePath], + ['P', self.plantSelectedNodePath], ] def manipulationStart(self): diff --git a/direct/src/directtools/DirectSelection.py b/direct/src/directtools/DirectSelection.py index ce466b51e7..47d51c0bc6 100644 --- a/direct/src/directtools/DirectSelection.py +++ b/direct/src/directtools/DirectSelection.py @@ -1,9 +1,10 @@ from PandaObject import * from DirectGeometry import * from DirectSelection import * +import __builtin__ UNPICKABLE = ['x-disc-visible', 'y-disc-visible', 'z-disc-visible', - 'GridBack'] + 'gridBack'] # MRM: To do: handle broken node paths in selected and deselected dicts class DirectNodePath(NodePath): @@ -55,7 +56,7 @@ class SelectedNodePaths(PandaObject): def reset(self): self.selectedDict = {} self.deselectedDict = {} - self.last = None + __builtin__.last = self.last = None def select(self, nodePath, fMultiSelect = 0): """ Select the specified node path. Multiselect as required """ @@ -89,7 +90,7 @@ class SelectedNodePaths(PandaObject): # Add it to the selected dictionary self.selectedDict[dnp.id()] = dnp # And update last - self.last = dnp + __builtin__.last = self.last = dnp return dnp def deselect(self, nodePath): @@ -210,7 +211,7 @@ class SelectedNodePaths(PandaObject): selected = self.last if selected: selected.remove() - self.last = None + __builtin__.last = self.last = None def removeAll(self): # Remove all selected nodePaths from the Scene Graph diff --git a/direct/src/directtools/DirectSession.py b/direct/src/directtools/DirectSession.py index 1b38c4c6ff..6cf228ef63 100644 --- a/direct/src/directtools/DirectSession.py +++ b/direct/src/directtools/DirectSession.py @@ -49,11 +49,19 @@ class DirectSession(PandaObject): self.ancestryIndex = 0 self.activeParent = None - self.readout = OnscreenText.OnscreenText( pos = (0.1, -0.95), bg=Vec4(1,1,1,1)) + self.selectedNPReadout = OnscreenText.OnscreenText( + pos = (-1.0, -0.9), bg=Vec4(1,1,1,1), + scale = 0.05, align = TMALIGNLEFT) # Make sure readout is never lit or drawn in wireframe - useDirectRenderStyle(self.readout) - # self.readout.textNode.setCardColor(0.5, 0.5, 0.5, 0.5) - self.readout.reparentTo( hidden ) + 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 = TMALIGNLEFT) + # Make sure readout is never lit or drawn in wireframe + useDirectRenderStyle(self.activeParentReadout) + self.activeParentReadout.reparentTo( hidden ) # Create a vrpn client vrpn-server or default if base.config.GetBool('want-vrpn', 0): @@ -113,7 +121,7 @@ class DirectSession(PandaObject): 'shift', 'shift-up', 'alt', 'alt-up', 'page_up', 'page_down', '[', '{', ']', '}', - 'A', 'b', 'l', 's', 't', 'v', 'w'] + 'A', 'b', 'l', 'p', 's', 't', 'v', 'w'] self.mouseEvents = ['mouse1', 'mouse1-up', 'mouse2', 'mouse2-up', 'mouse3', 'mouse3-up'] @@ -241,6 +249,9 @@ class DirectSession(PandaObject): base.toggleBackface() elif input == 'l': self.lights.toggle() + elif input == 'p': + if self.selected.last: + self.setActiveParent(self.selected.last) elif input == 's': if self.selected.last: self.select(self.selected.last) @@ -264,9 +275,10 @@ class DirectSession(PandaObject): self.ancestry = dnp.getAncestry() self.ancestry.reverse() self.ancestryIndex = 0 - # Update the readout - self.readout.reparentTo(render2d) - self.readout.setText(dnp.name) + # Update the selectedNPReadout + self.selectedNPReadout.reparentTo(aspect2d) + self.selectedNPReadout.setText( + 'Selected:' + dnp.name) # Show the manipulation widget self.widget.showWidget() # Update camera controls coa to this point @@ -300,8 +312,8 @@ class DirectSession(PandaObject): if dnp: # Hide the manipulation widget self.widget.hideWidget() - self.readout.reparentTo(hidden) - self.readout.setText(' ') + self.selectedNPReadout.reparentTo(hidden) + self.selectedNPReadout.setText(' ') taskMgr.removeTasksNamed('followSelectedNodePath') self.ancestry = [] # Send an message marking the event @@ -311,13 +323,17 @@ class DirectSession(PandaObject): self.selected.deselectAll() # Hide the manipulation widget self.widget.hideWidget() - self.readout.reparentTo(hidden) - self.readout.setText(' ') + self.selectedNPReadout.reparentTo(hidden) + self.selectedNPReadout.setText(' ') taskMgr.removeTasksNamed('followSelectedNodePath') def setActiveParent(self, nodePath = None): # Record new parent self.activeParent = nodePath + # Update the activeParentReadout + self.activeParentReadout.reparentTo(aspect2d) + self.activeParentReadout.setText( + 'Active Parent:' + nodePath.getName()) # Alert everyone else messenger.send('DIRECT_activeParent', [self.activeParent]) @@ -550,8 +566,11 @@ class DirectSession(PandaObject): self.widget = self.manipulationControl.objectHandles self.widget.reparentTo(direct.group) - def hideReadout(self): - self.readout.reparentTo(hidden) + def hideSelectedNPReadout(self): + self.selectedNPReadout.reparentTo(hidden) + + def hideActiveParentReadout(self): + self.activeParentReadout.reparentTo(hidden) def toggleWidgetVis(self): self.widget.toggleWidget() diff --git a/direct/src/leveleditor/LevelEditor.py b/direct/src/leveleditor/LevelEditor.py index efcb45c1b1..56bef0dff7 100644 --- a/direct/src/leveleditor/LevelEditor.py +++ b/direct/src/leveleditor/LevelEditor.py @@ -416,8 +416,6 @@ class LevelEditor(NodePath, PandaObject): self.pointDict = {} self.point2edgeDict = {} self.cellDict = {} - self.visitedPoints = [] - self.visitedEdges = [] # Initialize LevelEditor variables DNAData, DNAToplevel, NPToplevel # DNAParent, NPParent, groupNum, lastAngle @@ -617,6 +615,9 @@ class LevelEditor(NodePath, PandaObject): self.snapList = [] # Last menu used self.activeMenu = None + # For highlighting suit paths + self.visitedPoints = [] + self.visitedEdges = [] # Update scene graph explorer if fUpdateExplorer: self.panel.sceneGraphExplorer.update() @@ -774,17 +775,34 @@ class LevelEditor(NodePath, PandaObject): print 'Suit Point:', pointOrCell if DNASTORE.removeSuitPoint(pointOrCell): print "Removed from DNASTORE" - del(self.pointDict[pointOrCell]) - # Update edge dict - for edge in self.point2edgeDict[pointOrCell]: - # Is it still in edge dict? - oldEdgeLine = self.edgeDict.get(edge, None) - if oldEdgeLine: - del self.edgeDict[edge] - oldEdgeLine.reset() - del oldEdgeLine else: print "Not found in DNASTORE" + # Remove point from pointDict + del(self.pointDict[pointOrCell]) + # Remove point from visitedPoints list + if pointOrCell in self.visitedPoints: + self.visitedPoints.remove(pointOrCell) + # Update edge related dictionaries + for edge in self.point2edgeDict[pointOrCell]: + # Is it still in edge dict? + oldEdgeLine = self.edgeDict.get(edge, None) + if oldEdgeLine: + del self.edgeDict[edge] + oldEdgeLine.reset() + del oldEdgeLine + # Find other endpoints of edge and clear out + # corresponding point2edgeDict entry + startPoint = edge.getStartPoint() + endPoint = edge.getEndPoint() + if pointOrCell == startPoint: + self.point2edgeDict[endPoint].remove(edge) + elif pointOrCell == endPoint: + self.point2edgeDict[startPoint].remove(edge) + # Is it in the visited edges list? + if edge in self.visitedEdges: + self.visitedEdges.remove(edge) + # Now delete point2edgeDict entry for this point + del(self.point2edgeDict[pointOrCell]) elif (type == 'battleCellMarker'): # Get parent vis group visGroupNP, visGroupDNA = self.findParentVisGroup(nodePath) @@ -894,13 +912,15 @@ class LevelEditor(NodePath, PandaObject): print "Found suit point!", pointOrCell # Ok, now update all the lines into that node for edge in self.point2edgeDict[pointOrCell]: - oldEdgeLine = self.edgeDict[edge] - del self.edgeDict[edge] - oldEdgeLine.reset() - del oldEdgeLine - newEdgeLine = self.drawSuitEdge( - edge, self.NPParent) - self.edgeDict[edge] = newEdgeLine + # Is it still in edge dict? + oldEdgeLine = self.edgeDict.get(edge, None) + if oldEdgeLine: + del self.edgeDict[edge] + oldEdgeLine.reset() + del oldEdgeLine + newEdgeLine = self.drawSuitEdge( + edge, self.NPParent) + self.edgeDict[edge] = newEdgeLine elif (type == 'battleCellMarker'): print "Found battle cell!", pointOrCell diff --git a/direct/src/showbase/Messenger.py b/direct/src/showbase/Messenger.py index 479959c96d..784aab8526 100644 --- a/direct/src/showbase/Messenger.py +++ b/direct/src/showbase/Messenger.py @@ -98,6 +98,12 @@ class Messenger: # If we looked in both dictionaries and made it here # that object must not be accepting that event. return 0 + + def whoAccepts(self, event): + """ whoAccepts(self, event): + Return objects accepting the given event + """ + return self.dict.get(event, None) def isIgnoring(self, event, object): """ isIgnorning(self, string, DirectObject)