瀏覽代碼

*** empty log message ***

Mark Mine 25 年之前
父節點
當前提交
0efa5b1d85

+ 1 - 3
direct/src/directutil/DirectSession.py

@@ -65,24 +65,22 @@ class DirectSession(PandaObject):
     def select(self, nodePath):
         dnp = self.selected.select(nodePath)
         if dnp:
+            messenger.send('preSelectNodePath', [dnp])
             # Update the readout
             self.readout.reparentTo(render2d)
             self.readout.setText(dnp.name)
             # Show the manipulation widget
             self.widget.reparentTo(render)
-
             # Update camera controls coa to this point
             # Coa2Camera = Coa2Dnp * Dnp2Camera
             mCoa2Camera = dnp.mCoa2Dnp * dnp.getMat(base.camera)
             row = mCoa2Camera.getRow(3)
             coa = Vec3(row[0], row[1], row[2])
             self.cameraControl.updateCoa(coa)
-
             # Adjust widgets size
             # This uses the additional scaling factor used to grow and
             # shrink the widget            
             self.widget.setScalingFactor(dnp.getRadius())
-
             # Spawn task to have object handles follow the selected object
             taskMgr.removeTasksNamed('followSelectedNodePath')
             t = Task.Task(self.followSelectedNodePathTask)

+ 1 - 1
direct/src/extensions/NodePath-extensions.py

@@ -79,7 +79,7 @@
     def getAncestry(self):
         from PandaObject import *
         node = self.node()
-        if ((node != render.node()) | (node != hidden.node())):
+        if (self.hasParent()):
             ancestry = self.getParent().getAncestry()
             ancestry.append(self)
             return ancestry

+ 41 - 42
direct/src/leveleditor/LevelEditor.py

@@ -373,15 +373,16 @@ class LevelEditor(NodePath, PandaObject):
 	self.grid.ignore('insert')
         self.ignore('selectedNodePath')
 	self.ignore('preRemoveNodePath')
-	self.ignore('preSelectNodePath')
+	#self.ignore('preSelectNodePath')
         self.ignore('toggleMapViz')
-	self.ignore('setGroupParent')
-	self.ignore('isolateNodePath')
 	self.ignore('reparentNodePath')
 	self.ignore('createNewLevelGroup')
         self.ignore('setNodePathName')
         self.ignore('manipulateObjectCleanup')
         self.ignore('SGESelectNodePath')
+        self.ignore('SGEIsolateNodePath')
+        self.ignore('SGESet ParentNodePath')
+        self.ignore('SGEAdd GroupNodePath')
 	self.ignore('showAll')
 	self.ignore('p')
 	self.disableManipulation()
@@ -453,15 +454,16 @@ class LevelEditor(NodePath, PandaObject):
 	self.show()
         self.accept('selectedNodePath', self.selectDNARoot)
 	self.accept('preRemoveNodePath', self.preRemoveNodePath)
-	self.accept('preSelectNodePath', self.preSelectNodePath)
 	self.accept('toggleMapViz', self.toggleMapViz)
-	self.accept('setGroupParent', self.setGroupParent)
-	self.accept('isolateNodePath', self.isolateNodePath)
 	self.accept('reparentNodePath', self.reparentNodePath)
 	self.accept('createNewLevelGroup', self.createNewLevelGroup)
 	self.accept('setNodePathName', self.setNodePathName)
         self.accept('manipulateObjectCleanup', self.updateSelectedPose)
         self.accept('SGESelectNodePath', self.selectNodePath)
+	self.accept('SGESelectNodePath', self.preSelectNodePath)
+        self.accept('SGEIsolateNodePath', self.isolateNodePath)
+        self.accept('SGESet ParentNodePath', self.setGroupParent)
+        self.accept('SGEAdd GroupNodePath', self.addGroupToSelected)
 	self.accept('showAll', self.showAll)
 	self.accept('p',self.plantSelectedNodePath)
 	self.enableManipulation()
@@ -699,14 +701,12 @@ class LevelEditor(NodePath, PandaObject):
 	# Otherwise, find its dictionary entry
 	self.selectedLevelObject = (
             self.getLevelObject(self.direct.selected.last))
-
 	# If not None, determine interaction type
         if self.selectedLevelObject:
             selectedObjectDNA = self.selectedLevelObject['DNA']
             # Default target/menu
             target = None
             menuType = None
-
             # Interaction type depends on selected object's class
             objClass = selectedObjectDNA.__class__.getClassType()
             if objClass.eq(DNAFlatBuilding.getClassType()):
@@ -774,7 +774,6 @@ class LevelEditor(NodePath, PandaObject):
                         target =  selectedObjectDNA
                     else:
                         target = None
-                        
             elif objClass.eq(DNALandmarkBuilding.getClassType()):
                 menuType = 'door'
                 target = self.getDoor(selectedObjectDNA)
@@ -787,7 +786,6 @@ class LevelEditor(NodePath, PandaObject):
                 target = selectedObjectDNA
                 if self.direct.fControl:
                     menuType = 'propColor'
-            
             # Now spawn apropriate menu task
             if ((target != None) | (menuType == 'cornice')):
                 self.spawnMenuTask(menuType, target)
@@ -803,20 +801,21 @@ class LevelEditor(NodePath, PandaObject):
         t.initState = t.hidden = aNodePath.isHidden()
         t.count = 0
         t.uponDeath = self.preSelectDone
-        #taskMgr.spawnTaskNamed(t, 'preselectNodePath')
+        taskMgr.spawnTaskNamed(t, 'preselectNodePath')
 
     def preSelectNodePathTask(self, state):
         aNodePath = state.aNodePath
 	initState = state.initState
         hidden = state.hidden
-        count = t.count
-        if (t.count < 4):
-            if hidden:
-                aNodePath.show()
-            else:
-                aNodePath.hide()
-                t.count = count + 1
-            t.hidden = not t.hidden
+        count = state.count
+        if (state.count < 21):
+            if (state.count % 5) == 0:
+                if hidden:
+                    aNodePath.show()
+                else:
+                    aNodePath.hide()
+                state.hidden = not state.hidden
+            state.count = count + 1
             return Task.cont
         else:
             return Task.done
@@ -1740,7 +1739,7 @@ class LevelEditor(NodePath, PandaObject):
 
     def addFlatBuilding(self, buildingType):
 	# Create new building
-	#newDNAFlatBuilding = DNAFlatBuilding(buildingType + '_DNARoot')
+	newDNAFlatBuilding = DNAFlatBuilding(buildingType + '_DNARoot')
         newDNAFlatBuilding = DNAFlatBuilding(buildingType)
 
 	# Select walls
@@ -1792,7 +1791,7 @@ class LevelEditor(NodePath, PandaObject):
                                    self.addFlatBuilding)
 
     def addLandmark(self, landmarkType):
-	#newDNALandmarkBuilding = DNALandmarkBuilding(landmarkType + '_DNARoot')
+	newDNALandmarkBuilding = DNALandmarkBuilding(landmarkType + '_DNARoot')
         newDNALandmarkBuilding = DNALandmarkBuilding(landmarkType)
 	newDNALandmarkBuilding.setCode(self.getDNACode(landmarkType))
 	newDNALandmarkBuilding.setPos(VBase3(0))
@@ -1811,7 +1810,7 @@ class LevelEditor(NodePath, PandaObject):
         return objectDictionary
 
     def addProp(self, newPropType):
-	#newDNAProp = DNAProp(newPropType + '_DNARoot')
+	newDNAProp = DNAProp(newPropType + '_DNARoot')
         newDNAProp = DNAProp(newPropType)
 	newDNAProp.setCode(self.getDNACode(newPropType))
 	newDNAProp.setPos(VBase3(0))
@@ -1821,7 +1820,7 @@ class LevelEditor(NodePath, PandaObject):
 	self.setPropType(newPropType)
 
     def addStreetModule(self, streetType):
-	#newDNAStreet = DNAStreet(streetType + '_DNARoot')
+	newDNAStreet = DNAStreet(streetType + '_DNARoot')
         newDNAStreet = DNAStreet(streetType)
 	newDNAStreet.setCode(self.getDNACode(streetType))
 	newDNAStreet.setPos(VBase3(0))
@@ -1860,6 +1859,10 @@ class LevelEditor(NodePath, PandaObject):
 	newDNADoor.setColor(colors[randint(0,len(colors) - 1)])
 	return newDNADoor
 
+    def addGroupToSelected(self, aNodePath):
+        self.setGroupParent(aNodePath)
+        self.createNewLevelGroup()
+
     def createNewLevelGroup(self):
 	newGroupParentDNA = DNAGroup('group=' + `self.groupNum`)
 	# Add it to the level objects
@@ -2100,7 +2103,7 @@ class LevelEditor(NodePath, PandaObject):
         if (dnaGroup.__class__.getClassType().eq(DNAFlatBuilding.getClassType())):
             dnaGroup.setWidth(self.getWallWidth())
 	newNodePath = dnaGroup.traverse(parent,self.dnaStore)
-        newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')
+        #newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')
         
 	# Add it to the level dictionary
 	self.addObject(newNodePath, dnaGroup)
@@ -2128,7 +2131,7 @@ class LevelEditor(NodePath, PandaObject):
         if dnaGroup.__class__.getClassType().eq(DNAFlatBuilding.getClassType()):
             dnaGroup.setWidth(self.getWallWidth())
 	newNodePath = dnaGroup.traverse(parent, self.dnaStore)
-        newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')        
+        #newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')        
 	# Add it to the level dictionary
 	self.addObject(newNodePath, dnaGroup)
         
@@ -2215,22 +2218,19 @@ class LevelEditor(NodePath, PandaObject):
 	# Get rid of default group and root node
 	self.preRemoveNodePath(self.groupParent)
 	self.removeNodePath(self.groupParent)
-
 	# Clear self.dnaStore
 	self.dnaStore.resetDNAGroups()
-
+        # Reset DNA VIS Groups
+        self.dnaStore.resetDNAVisGroups()
 	# Now load in new file
 	self.groupParent = loadDNAFile(self.dnaStore, filename,
                                        getDefaultCoordinateSystem())
-
  	# Make sure the topmost level object gets put under level objects dna
  	self.groupParentDNA = self.dnaStore.findDNAGroup(
             self.groupParent.getBottomArc())
  	self.levelObjectsDNA.add(self.groupParentDNA)
-
 	# No level objects node found, just add the whole thing
 	self.groupParent.reparentTo(self.levelObjects)
-
         if 0:
             newLevelObjects = nodePath.find('**/LevelObjects')
             if newLevelObjects.isEmpty():
@@ -2245,28 +2245,26 @@ class LevelEditor(NodePath, PandaObject):
                 # (since there is probably one in the dnafile
                 self.preRemoveNodePath(self.groupParent)
                 self.removeNodePath(self.groupParent)
-
                 # Now add the children from the DNA File
                 children = newLevelObjects.getChildren()
                 for i in range(children.getNumPaths()):
                     children.getPath(i).reparentTo(self.levelObjects)
                 # Now create a new top level group with next group number
                 self.createTopLevelGroup()
-	
         # Add these objects to the levelDictionary
 	numPaths = self.dnaStore.getNumNodeRelations()
         for pathNum in range(numPaths):
             relation = self.dnaStore.getNodeRelationAt(pathNum)
             if relation:
-                newNodePath = NodePath(relation)
-                group = self.dnaStore.findDNAGroup(relation)
-                if newNodePath.isSingleton():
-                    print 'Singleton!!'
-                else: 
-                    self.addObject(newNodePath, group)
+                if (relation.getChild() and relation.getParent()):
+                    newNodePath = NodePath(relation)
+                    group = self.dnaStore.findDNAGroup(relation)
+                    if newNodePath.isSingleton():
+                        print 'Singleton!!'
+                    else: 
+                        self.addObject(newNodePath, group)
             else:
                 print'blah'
-
 	self.createNewLevelGroup()
 
     def outputDNADefaultFile(self):
@@ -2353,7 +2351,7 @@ class LevelEditor(NodePath, PandaObject):
 
 	# Traverse the dna to create the new node path
 	newNodePath = dnaGroup.traverse(parent, self.dnaStore)
-        newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')
+        #newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')
 	self.selectNodePath(newNodePath)
 
 	# Add it to the levelObjects dictionary
@@ -2372,7 +2370,7 @@ class LevelEditor(NodePath, PandaObject):
 
 	# Traverse the dna to create the new node path
 	newNodePath = dnaGroup.traverse(parent, self.dnaStore)
-        newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')
+        #newNodePath.node().setName(newNodePath.node().getName() + '_DNARoot')
 	self.selectNodePath(newNodePath)
 
 	# Add it to the levelObjects dictionary
@@ -3200,7 +3198,8 @@ class LevelEditorPanel(Pmw.MegaToplevel):
 
         self.sceneGraphExplorer = SceneGraphExplorer(
             parent = sceneGraphPage,
-            root = self.levelEditor.getLevelObjects())
+            root = self.levelEditor.getLevelObjects(),
+            menuItems = ['Select', 'Isolate', 'Set Parent', 'Add Group'])
         self.sceneGraphExplorer.pack(expand = 1, fill = 'both')
         
     def toggleGrid(self):

+ 5 - 4
direct/src/tkwidgets/SceneGraphExplorer.py

@@ -8,7 +8,9 @@ class SceneGraphExplorer(Pmw.MegaWidget):
     "Graphical display of a scene graph"
     def __init__(self, root = render, parent = None, **kw):
         # Define the megawidget options.
-        optiondefs = ()
+        optiondefs = (
+            ('menuItems',   ['Select'],   None),
+            )
         self.defineoptions(kw, optiondefs)
  
         # Initialise superclass
@@ -45,7 +47,7 @@ class SceneGraphExplorer(Pmw.MegaWidget):
         self._treeItem = SceneGraphExplorerItem(self.root)
 
         self._node = TreeNode(self._canvas, None, self._treeItem,
-                              ['Select Node'])
+                              self['menuItems'])
         self._node.expand()
 
         # Check keywords and initialise options based on input values.
@@ -113,7 +115,6 @@ class SceneGraphExplorerItem(TreeItem):
         messenger.send('SGESelectNodePath', [self.nodePath])
 
     def MenuCommand(self, command):
-        if (command == 'Select Node'):
-            messenger.send('SGESelectNodePath', [self.nodePath])
+        messenger.send('SGE' + command + 'NodePath', [self.nodePath])