98 lines
2.1 KiB
Text
98 lines
2.1 KiB
Text
|
/**
|
||
|
* PANDA 3D SOFTWARE
|
||
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
||
|
*
|
||
|
* All use of this software is subject to the terms of the revised BSD
|
||
|
* license. You should have received a copy of this license along
|
||
|
* with this source code in a file named "LICENSE."
|
||
|
*
|
||
|
* @file workingNodePath.I
|
||
|
* @author drose
|
||
|
* @date 2002-03-16
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Creates a WorkingNodePath that is the same as the indicated NodePath. This
|
||
|
* is generally used to begin the traversal of a scene graph with the root
|
||
|
* NodePath.
|
||
|
*/
|
||
|
INLINE WorkingNodePath::
|
||
|
WorkingNodePath(const NodePath &start) {
|
||
|
nassertv(!start.is_empty());
|
||
|
_next = nullptr;
|
||
|
_start = start._head;
|
||
|
_node = start.node();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE WorkingNodePath::
|
||
|
WorkingNodePath(const WorkingNodePath ©) :
|
||
|
_next(copy._next),
|
||
|
_start(copy._start),
|
||
|
_node(copy._node)
|
||
|
{
|
||
|
nassertv(_next != nullptr ||
|
||
|
_start != nullptr);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a WorkingNodePath that is the same as the indicated
|
||
|
* WorkingNodePath, plus one node. This is generally used to continue the
|
||
|
* traversal to the next node.
|
||
|
*/
|
||
|
INLINE WorkingNodePath::
|
||
|
WorkingNodePath(const WorkingNodePath &parent, PandaNode *child) :
|
||
|
_next(&parent),
|
||
|
_start(nullptr),
|
||
|
_node(child) {
|
||
|
nassertv(_node != _next->_node);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE WorkingNodePath::
|
||
|
~WorkingNodePath() {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE void WorkingNodePath::
|
||
|
operator = (const WorkingNodePath ©) {
|
||
|
_next = copy._next;
|
||
|
_start = copy._start;
|
||
|
_node = copy._node;
|
||
|
|
||
|
nassertv(_next != nullptr ||
|
||
|
_start != nullptr);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructs and returns an actual NodePath that represents the same path we
|
||
|
* have just traversed.
|
||
|
*/
|
||
|
INLINE NodePath WorkingNodePath::
|
||
|
get_node_path() const {
|
||
|
NodePath result;
|
||
|
result._head = r_get_node_path();
|
||
|
nassertr(result._head != nullptr, NodePath::fail());
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the node traversed to so far.
|
||
|
*/
|
||
|
INLINE PandaNode *WorkingNodePath::
|
||
|
node() const {
|
||
|
return _node;
|
||
|
}
|
||
|
|
||
|
INLINE std::ostream &
|
||
|
operator << (std::ostream &out, const WorkingNodePath &node_path) {
|
||
|
node_path.output(out);
|
||
|
return out;
|
||
|
}
|