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> :
449 PcpNodeRef_ChildrenIterator
450 begin(
const PcpNodeRef::child_const_range& r)
457 PcpNodeRef_ChildrenIterator
458 end(
const PcpNodeRef::child_const_range& r)
466 int PcpNode_GetNonVariantPathElementCount(
const SdfPath &path);
468 PXR_NAMESPACE_CLOSE_SCOPE
470 #endif // PXR_USD_PCP_NODE_H Represents an arc connecting two nodes in the prim index.
An expression that yields a PcpMapFunction value.
PCP_API bool CanContributeSpecs() const
Returns true if this node is allowed to contribute opinions for composition, false otherwise.
PCP_API const PcpMapExpression & GetMapToParent() const
Returns mapping function used to translate paths and values from this node to its parent node.
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...
PCP_API const PcpMapExpression & GetMapToRoot() const
Returns mapping function used to translate paths and values from this node directly to the root node.
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.
PCP_API int GetNamespaceDepth() const
Returns the absolute namespace depth of the node that introduced this node.
#define TF_DECLARE_WEAK_PTRS(type)
Define standard weak pointer types.
PcpPrimIndex_GraphPtr GetOwningGraph() const
Returns the graph that this node belongs to.
A simple iterator adapter for STL containers.
PCP_API bool IsDueToAncestor() const
Returns true if this node is due to an ancestral opinion.
PCP_API PcpNodeRef GetRootNode() const
Walk up to the root node of this expression.
PcpNode represents a node in an expression tree for compositing scene description.
PCP_API void SetRestricted(bool restricted)
Get/set whether this node is restricted.
PCP_API const PcpLayerStackRefPtr & GetLayerStack() const
Returns the layer stack for the site this node represents.
PCP_API PcpNodeRef GetOriginNode() const
Returns the immediate origin node for this node.
PCP_API int GetSiblingNumAtOrigin() const
Returns this node's index among siblings with the same arc type at this node's origin.
PCP_API const SdfPath & GetPath() const
Returns the path for the site this node represents.
PCP_API bool IsRootNode() const
Returns true if this node is the root node of the prim index graph.
PCP_API PcpNodeRef GetParentNode() const
Returns this node's immediate parent node.
PCP_API bool operator<(const PcpNodeRef &rhs) const
Returns true if this node is 'less' than rhs.
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 SdfPath GetPathAtIntroduction() const
Returns the path for this node's site when it was introduced.
Object used to iterate over nodes in the prim index graph in strong-to-weak order.
bool operator==(const PcpNodeRef &rhs) const
Returns true if this references the same node as rhs.
PCP_API child_const_range GetChildrenRange() const
Returns an iterator range over the children nodes in strongest to weakest order.
PCP_API PcpNodeRef GetOriginRootNode() const
Walk up to the root origin node for this node.
A path value used to locate objects in layers or scenegraphs.
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 PcpArcType GetArcType() const
Returns the type of arc connecting this node to its parent node.
std::enable_if< std::is_same< Half, half >::value, size_t >::type hash_value(const Half &h)
Overload hash_value for half.
PCP_API void * GetUniqueIdentifier() const
Returns a value that uniquely identifies this node.
PCP_API PcpLayerStackSite GetSite() const
Get the site this node represents.
PCP_API void SetInert(bool inert)
Get/set whether this node is inert.
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 SdfPath GetIntroPath() const
Get the path that introduced this node.
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.
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.