diff --git a/direct/src/directutil/DirectCameraControl.py b/direct/src/directutil/DirectCameraControl.py index 3a2a37bb48..21182bd7b2 100644 --- a/direct/src/directutil/DirectCameraControl.py +++ b/direct/src/directutil/DirectCameraControl.py @@ -40,19 +40,30 @@ class DirectCameraControl(PandaObject): # And then spawn task to determine mouse mode numEntries = self.direct.iRay.pickGeom( render,chan.mouseX,chan.mouseY) + # Filter out hidden nodes from entry list + indexList = [] + for i in range(0,numEntries): + entry = self.direct.iRay.cq.getEntry(i) + node = entry.getIntoNode() + if node.isHidden(): + pass + else: + # Not one of the widgets, use it + indexList.append(i) coa = Point3(0) - if(numEntries): + if(indexList): # Start off with first point - minPt = 0 + minPt = indexList[0] # Find hit point in camera's space hitPt = self.direct.iRay.camToHitPt(minPt) coa.set(hitPt[0],hitPt[1],hitPt[2]) coaDist = Vec3(coa - self.zeroPoint).length() # Check other intersection points, sorting them # TBD: Use TBS C++ function to do this - if numEntries > 1: - for i in range(1,numEntries): - hitPt = self.direct.iRay.camToHitPt(i) + if len(indexList) > 1: + for i in range(1,len(indexList)): + entryNum = indexList[i] + hitPt = self.direct.iRay.camToHitPt(entryNum) dist = Vec3(hitPt - self.zeroPoint).length() if (dist < coaDist): coaDist = dist diff --git a/direct/src/directutil/DirectGrid.py b/direct/src/directutil/DirectGrid.py index 9cce685018..f88796db1d 100644 --- a/direct/src/directutil/DirectGrid.py +++ b/direct/src/directutil/DirectGrid.py @@ -59,7 +59,7 @@ class DirectGrid(NodePath,PandaObject): self.ignore('selectedNodePath') def selectGridBackParent(self, nodePath): - if nodePath.getNodePathName() == 'GridBack': + if nodePath.getName() == 'GridBack': self.direct.select(self) def updateGrid(self): diff --git a/direct/src/directutil/DirectManipulation.py b/direct/src/directutil/DirectManipulation.py index 75c67b8cad..67ecef49ae 100644 --- a/direct/src/directutil/DirectManipulation.py +++ b/direct/src/directutil/DirectManipulation.py @@ -97,7 +97,7 @@ class DirectManipulationControl(PandaObject): return Task.done else: return Task.cont - + def manipulationStop(self): taskMgr.removeTasksNamed('manipulateObject') taskMgr.removeTasksNamed('manip-move-wait') @@ -113,6 +113,8 @@ class DirectManipulationControl(PandaObject): for i in range(0,numEntries): entry = self.direct.iRay.cq.getEntry(i) node = entry.getIntoNode() + if node.isHidden(): + pass # Is it a named node?, If so, see if it has a name if issubclass(node.__class__, NamedNode): name = node.getName() diff --git a/direct/src/directutil/DirectSelection.py b/direct/src/directutil/DirectSelection.py index 5cefae500f..f95fa93f0b 100644 --- a/direct/src/directutil/DirectSelection.py +++ b/direct/src/directutil/DirectSelection.py @@ -10,7 +10,7 @@ class DirectNodePath(NodePath): NodePath.__init__(self) self.assign(nodePath) # Get a reasonable name - self.name = self.getNodePathName() + self.name = self.getName() # Create a bounding box self.bbox = DirectBoundingBox(self) center = self.bbox.getCenter() @@ -308,7 +308,7 @@ class DirectBoundingBox: def __repr__(self): return (`self.__class__` + - '\nNodePath:\t%s\n' % self.nodePath.getNodePathName() + + '\nNodePath:\t%s\n' % self.nodePath.getName() + 'Min:\t\t%s\n' % self.vecAsString(self.min) + 'Max:\t\t%s\n' % self.vecAsString(self.max) + 'Center:\t\t%s\n' % self.vecAsString(self.center) + diff --git a/direct/src/extensions/NodePath-extensions.py b/direct/src/extensions/NodePath-extensions.py index 202119e9d2..788939b47d 100644 --- a/direct/src/extensions/NodePath-extensions.py +++ b/direct/src/extensions/NodePath-extensions.py @@ -8,7 +8,8 @@ """Returns the bottom node's this pointer as a unique id""" return self.getBottomArc() - def getNodePathName(self): + def getName(self): + """Returns the name of the bottom node if it exists, or """ from PandaModules import * # Initialize to a default value name = '' @@ -24,41 +25,49 @@ # For iterating over children def getChildrenAsList(self): + """Converts a node path's child NodePathCollection into a list""" childrenList = [] for childNum in range(self.getNumChildren()): childrenList.append(self.getChild(childNum)) return childrenList def printChildren(self): + """Prints out the children of the bottom node of a node path""" for child in self.getChildrenAsList(): - print child.getNodePathName() + print child.getName() def toggleViz(self): + """Toggles visibility of a nodePath""" if self.isHidden(): self.show() else: self.hide() def showSiblings(self): + """Show all the siblings of a node path""" for sib in self.getParent().getChildrenAsList(): if sib.node() != self.node(): sib.show() def hideSiblings(self): + """Hide all the siblings of a node path""" for sib in self.getParent().getChildrenAsList(): if sib.node() != self.node(): sib.hide() def showAllDescendants(self): + """Show the node path and all its children""" self.show() for child in self.getChildrenAsList(): child.showAllDescendants() def isolate(self): + """Show the node path and hide its siblings""" self.showAllDescendants() self.hideSiblings() def remove(self): + """Remove a node path from the scene graph""" from PandaObject import * # Send message in case anyone needs to do something # before node is deleted @@ -68,15 +77,17 @@ self.removeNode() def reversels(self): + """Walk up a tree and print out the path to the root""" ancestry = self.getAncestry() indentString = "" for nodePath in ancestry: type = nodePath.node().getType().getName() - name = nodePath.getNodePathName() + name = nodePath.getName() print indentString + type + " " + name indentString = indentString + " " def getAncestry(self): + """Get a list of a node path's ancestors""" from PandaObject import * node = self.node() if (self.hasParent()): diff --git a/direct/src/leveleditor/LevelEditor.py b/direct/src/leveleditor/LevelEditor.py index 413535ba04..3b28f46ead 100644 --- a/direct/src/leveleditor/LevelEditor.py +++ b/direct/src/leveleditor/LevelEditor.py @@ -381,6 +381,7 @@ class LevelEditor(NodePath, PandaObject): self.ignore('manipulateObjectCleanup') self.ignore('SGESelectNodePath') self.ignore('SGEIsolateNodePath') + self.ignore('SGEToggle VizNodePath') self.ignore('SGESet ParentNodePath') self.ignore('SGEAdd GroupNodePath') self.ignore('showAll') @@ -460,8 +461,9 @@ class LevelEditor(NodePath, PandaObject): self.accept('setNodePathName', self.setNodePathName) self.accept('manipulateObjectCleanup', self.updateSelectedPose) self.accept('SGESelectNodePath', self.selectNodePath) - self.accept('SGESelectNodePath', self.preSelectNodePath) + self.accept('SGEFlashNodePath', self.preSelectNodePath) self.accept('SGEIsolateNodePath', self.isolateNodePath) + self.accept('SGEToggle VizNodePath', self.toggleNodePathViz) self.accept('SGESet ParentNodePath', self.setGroupParent) self.accept('SGEAdd GroupNodePath', self.addGroupToSelected) self.accept('showAll', self.showAll) @@ -657,7 +659,7 @@ class LevelEditor(NodePath, PandaObject): def selectDNARoot(self, aNodePath): # If this isn't a root object see if one exists above it - if (aNodePath.getNodePathName()[-8:] != '_DNARoot'): + if (aNodePath.getName()[-8:] != '_DNARoot'): dnaRoot = self.getDNARoot(aNodePath) # Is this a DNA object? if dnaRoot: @@ -668,7 +670,7 @@ class LevelEditor(NodePath, PandaObject): if ((aNodePath.node() == render.node()) | (aNodePath.node() == hidden.node())): return 0 - name = aNodePath.getNodePathName() + name = aNodePath.getName() if (name[-8:] == '_DNARoot'): return aNodePath else: @@ -920,6 +922,9 @@ class LevelEditor(NodePath, PandaObject): else: self.levelMap.reparentTo(hidden) + def toggleNodePathViz(self, aNodePath): + pass + def setXyzSnap(self, flag): self.grid.setXyzSnap(flag) if flag: @@ -3199,7 +3204,8 @@ class LevelEditorPanel(Pmw.MegaToplevel): self.sceneGraphExplorer = SceneGraphExplorer( parent = sceneGraphPage, root = self.levelEditor.getLevelObjects(), - menuItems = ['Select', 'Isolate', 'Set Parent', 'Add Group']) + menuItems = ['Select', 'Isolate', 'Flash', + 'Toggle Viz', 'Set Parent', 'Add Group']) self.sceneGraphExplorer.pack(expand = 1, fill = 'both') def toggleGrid(self): diff --git a/direct/src/tkwidgets/SceneGraphExplorer.py b/direct/src/tkwidgets/SceneGraphExplorer.py index 4fc8f8ffeb..09ef4218b3 100644 --- a/direct/src/tkwidgets/SceneGraphExplorer.py +++ b/direct/src/tkwidgets/SceneGraphExplorer.py @@ -85,7 +85,7 @@ class SceneGraphExplorerItem(TreeItem): def GetText(self): type = self.nodePath.node().getType().getName() - name = self.nodePath.getNodePathName() + name = self.nodePath.getName() return type + " " + name def IsEditable(self):