Browse Source

*** empty log message ***

Mark Mine 24 years ago
parent
commit
8d25bfaf43

+ 1 - 1
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

+ 1 - 1
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):

+ 5 - 4
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

+ 33 - 14
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()

+ 38 - 18
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
 

+ 6 - 0
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)