24 #ifndef PXR_USD_PCP_NODE_H
25 #define PXR_USD_PCP_NODE_H
28 #include "pxr/usd/pcp/api.h"
32 #include "pxr/base/tf/hashset.h"
34 #include <boost/operators.hpp>
35 #include <boost/iterator/iterator_facade.hpp>
36 #include <boost/iterator/reverse_iterator.hpp>
38 PXR_NAMESPACE_OPEN_SCOPE
44 class PcpNodeRef_ChildrenIterator;
45 class PcpNodeRef_ChildrenReverseIterator;
47 typedef std::shared_ptr<PcpErrorBase> PcpErrorBasePtr;
68 public boost::totally_ordered<PcpNodeRef>
71 typedef PcpNodeRef_ChildrenIterator child_const_iterator;
72 typedef PcpNodeRef_ChildrenReverseIterator child_const_reverse_iterator;
73 typedef std::pair<child_const_iterator,
74 child_const_iterator> child_const_range;
89 return _nodeIdx == rhs._nodeIdx && _graph == rhs._graph;
100 size_t operator()(
const PcpNodeRef& rhs)
const
136 PcpErrorBasePtr *error);
142 const PcpPrimIndex_GraphPtr& subgraph,
const PcpArc& arc,
143 PcpErrorBasePtr *error);
232 bool HasSymmetry()
const;
248 bool IsInert()
const;
256 bool IsCulled()
const;
263 bool IsRestricted()
const;
275 bool HasSpecs()
const;
280 Pcp_CompressedSdSite GetCompressedSdSite(
size_t layerIndex)
const
282 return Pcp_CompressedSdSite(_nodeIdx, layerIndex);
286 friend class PcpPrimIndex_Graph;
288 friend class PcpNodeRef_ChildrenIterator;
289 friend class PcpNodeRef_ChildrenReverseIterator;
290 friend class PcpNodeRef_PrivateChildrenConstIterator;
291 friend class PcpNodeRef_PrivateChildrenConstReverseIterator;
294 PcpNodeRef(PcpPrimIndex_Graph* graph,
size_t idx)
295 : _graph(graph), _nodeIdx(idx)
298 size_t _GetNodeIndex()
const {
return _nodeIdx; }
300 size_t _GetParentIndex()
const;
301 size_t _GetOriginIndex()
const;
304 PcpPrimIndex_Graph* _graph;
316 typedef TfHashSet<PcpNodeRef, PcpNodeRef::Hash> PcpNodeRefHashSet;
317 typedef std::vector<PcpNodeRef> PcpNodeRefVector;
324 class PcpNodeRef_ChildrenIterator
325 :
public boost::iterator_facade<
326 PcpNodeRef_ChildrenIterator,
328 boost::forward_traversal_tag,
335 PcpNodeRef_ChildrenIterator();
340 PcpNodeRef_ChildrenIterator(
const PcpNodeRef& node,
bool end =
false);
343 friend class boost::iterator_core_access;
346 bool equal(
const PcpNodeRef_ChildrenIterator& other)
const
350 return (_node == other._node && _index == other._index);
352 reference dereference()
const
354 return reference(_node._graph, _index);
364 friend class PcpNodeRef_ChildrenReverseIterator;
372 class PcpNodeRef_ChildrenReverseIterator
373 :
public boost::iterator_facade<
374 PcpNodeRef_ChildrenReverseIterator,
376 boost::forward_traversal_tag,
383 PcpNodeRef_ChildrenReverseIterator();
387 PcpNodeRef_ChildrenReverseIterator(
const PcpNodeRef_ChildrenIterator&);
392 PcpNodeRef_ChildrenReverseIterator(
const PcpNodeRef& node,
bool end =
false);
395 friend class boost::iterator_core_access;
398 bool equal(
const PcpNodeRef_ChildrenReverseIterator& other)
const
402 return (_node == other._node && _index == other._index);
404 reference dereference()
const
406 return reference(_node._graph, _index);
418 struct Tf_IteratorInterface<
PcpNodeRef::child_const_range, false> {
419 typedef PcpNodeRef::child_const_iterator IteratorType;
420 static IteratorType Begin(PcpNodeRef::child_const_range
const &c)
424 static IteratorType End(PcpNodeRef::child_const_range
const &c)
431 struct Tf_IteratorInterface<
PcpNodeRef::child_const_range, true> {
432 typedef PcpNodeRef::child_const_reverse_iterator IteratorType;
433 static IteratorType Begin(PcpNodeRef::child_const_range
const &c)
437 static IteratorType End(PcpNodeRef::child_const_range
const &c)
444 struct Tf_ShouldIterateOverCopy<
PcpNodeRef::child_const_range> :
450 int PcpNode_GetNonVariantPathElementCount(
const SdfPath &path);
452 PXR_NAMESPACE_CLOSE_SCOPE
454 #endif // PXR_USD_PCP_NODE_H
Represents an arc connecting two nodes in the prim index.
PCP_API PcpLayerStackSite GetSite() const
Get the site this node represents.
PCP_API bool IsDueToAncestor() const
Returns true if this node is due to an ancestral opinion.
An expression that yields a PcpMapFunction value.
PCP_API PcpNodeRef InsertChildSubgraph(const PcpPrimIndex_GraphPtr &subgraph, const PcpArc &arc, PcpErrorBasePtr *error)
Inserts subgraph as a child of this node, with the root node of subtree connected to this node via ar...
size_t PcpNodeRef::* UnspecifiedBoolType
Returns true if this is a valid node reference, false otherwise.
A site specifies a path in a layer stack of scene description.
PcpPrimIndex_GraphPtr GetOwningGraph() const
Returns the graph that this node belongs to.
#define TF_DECLARE_WEAK_PTRS(type)
Define standard weak pointer types.
A simple iterator adapter for STL containers.
PCP_API const PcpLayerStackRefPtr & GetLayerStack() const
Returns the layer stack for the site this node represents.
PcpNode represents a node in an expression tree for compositing scene description.
PCP_API PcpNodeRef GetOriginRootNode() const
Walk up to the root origin node for this node.
PCP_API const PcpMapExpression & GetMapToParent() const
Returns mapping function used to translate paths and values from this node to its parent node...
PCP_API SdfPath GetPathAtIntroduction() const
Returns the path for this node's site when it was introduced.
PCP_API bool IsRootNode() const
Returns true if this node is the root node of the prim index graph.
PCP_API int GetSiblingNumAtOrigin() const
Returns this node's index among siblings with the same arc type at this node's origin.
PCP_API void SetRestricted(bool restricted)
Get/set whether this node is restricted.
PCP_API bool CanContributeSpecs() const
Returns true if this node is allowed to contribute opinions for composition, false otherwise...
PCP_API PcpArcType GetArcType() const
Returns the type of arc connecting this node to its parent node.
Object used to iterate over nodes in the prim index graph in strong-to-weak order.
PCP_API PcpNodeRef GetRootNode() const
Walk up to the root node of this expression.
bool operator==(const PcpNodeRef &rhs) const
Returns true if this references the same node as rhs.
PCP_API const PcpMapExpression & GetMapToRoot() const
Returns mapping function used to translate paths and values from this node directly to the root node...
PCP_API int GetDepthBelowIntroduction() const
Return the number of levels of namespace this node's site is below the level at which it was introduc...
PCP_API bool operator<(const PcpNodeRef &rhs) const
Returns true if this node is 'less' than rhs.
A path value used to locate objects in layers or scenegraphs.
PCP_API SdfPath GetIntroPath() const
Get the path that introduced this node.
PCP_API void SetCulled(bool culled)
Get/set whether this node is culled.
constexpr size_t PCP_INVALID_INDEX
A value which indicates an invalid index.
PCP_API void SetPermission(SdfPermission perm)
Get/set the permission for this node.
PCP_API int GetNamespaceDepth() const
Returns the absolute namespace depth of the node that introduced this node.
PCP_API child_const_range GetChildrenRange() const
Returns an iterator range over the children nodes in strongest to weakest order.
PCP_API PcpNodeRef GetOriginNode() const
Returns the immediate origin node for this node.
PCP_API void SetInert(bool inert)
Get/set whether this node is inert.
PCP_API const SdfPath & GetPath() const
Returns the path for the site this node represents.
PCP_API void * GetUniqueIdentifier() const
Returns a value that uniquely identifies this node.
PCP_API PcpNodeRef InsertChild(const PcpLayerStackSite &site, const PcpArc &arc, PcpErrorBasePtr *error)
Inserts a new child node for site, connected to this node via arc.
PCP_API void SetHasSymmetry(bool hasSymmetry)
Get/set whether this node provides any symmetry opinions, either directly or from a namespace ancesto...
PCP_API void SetHasSpecs(bool hasSpecs)
Returns true if this node has opinions authored for composition, false otherwise. ...
PCP_API PcpNodeRef GetParentNode() const
Returns this node's immediate parent node.
SdfPermission
An enum that defines permission levels.
Base class for all error types.
PcpArcType
Describes the type of arc connecting two nodes in the prim index.