HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
composeSite.h
Go to the documentation of this file.
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_USD_PCP_COMPOSE_SITE_H
8 #define PXR_USD_PCP_COMPOSE_SITE_H
9 
10 /// \file pcp/composeSite.h
11 ///
12 /// Single-site composition.
13 ///
14 /// These are helpers that compose specific fields at single sites.
15 /// They compose the field for a given path across a layer stack,
16 /// using field-specific rules to combine the values.
17 ///
18 /// These helpers are low-level utilities used by the rest of the
19 /// Pcp algorithms, to discover composition arcs in scene description.
20 /// These arcs are what guide the algorithm to pull additional
21 /// sites of scene description into the PcpPrimIndex.
22 ///
23 /// Some of these field types support list-editing. (See SdListOp.)
24 /// List-editing for these fields is applied across the fixed domain
25 /// of a single site; you cannot apply list-ops across sites.
26 /// The intention is to avoid subtle ordering issues in composition
27 /// semantics.
28 ///
29 /// Note that these helpers do not take PcpSite as a literal parameter;
30 /// instead, they require the actual computed layer stack that a site
31 /// identified. Rather than tying these helpers to PcpCache and its
32 /// process of computing layer stacks, they just employ the result.
33 /// Conceptually, though, they are operating on the scene description
34 /// identified by a PcpSite.
35 
36 #include "pxr/pxr.h"
37 #include "pxr/usd/pcp/api.h"
38 #include "pxr/usd/pcp/errors.h"
39 #include "pxr/usd/pcp/node.h"
41 #include "pxr/usd/sdf/path.h"
42 #include "pxr/usd/sdf/payload.h"
43 #include "pxr/usd/sdf/reference.h"
44 #include "pxr/usd/sdf/types.h"
45 #include "pxr/usd/sdf/site.h"
46 
47 #include <set>
48 #include <string>
49 #include <unordered_set>
50 #include <vector>
51 
53 
55 
56 class PcpLayerStackSite;
57 
58 /// \struct PcpArcInfo
59 ///
60 /// Helper information about an arc. All arcs have a
61 /// layer that the arc comes from. References and payloads
62 /// supply an authored asset path as well.
63 ///
64 struct PcpArcInfo {
65  SdfLayerHandle sourceLayer;
67  std::string authoredAssetPath;
68  int arcNum;
69 };
70 
71 /// A vector of reference or payload arc information.
72 typedef std::vector<PcpArcInfo> PcpArcInfoVector;
73 
74 /// References
75 PCP_API
76 void
78  PcpLayerStackRefPtr const &layerStack,
79  SdfPath const &path,
81  PcpArcInfoVector *info,
82  std::unordered_set<std::string> *exprVarDependencies,
83  PcpErrorVector *errors);
84 
85 inline void
87  PcpLayerStackRefPtr const &layerStack,
88  SdfPath const &path,
90  PcpArcInfoVector *info)
91 {
93  layerStack, path, result, info, nullptr , nullptr);
94 }
95 
96 inline void
98  PcpNodeRef const &node,
100  PcpArcInfoVector *info,
101  std::unordered_set<std::string> *exprVarDependencies,
102  PcpErrorVector *errors)
103 {
105  node.GetLayerStack(), node.GetPath(),
106  result, info, exprVarDependencies, errors);
107 }
108 
109 inline void
111  PcpNodeRef const &node,
113  PcpArcInfoVector *info)
114 {
116  node.GetLayerStack(), node.GetPath(), result, info, nullptr, nullptr);
117 }
118 
119 /// Payloads
120 PCP_API
121 void
123  PcpLayerStackRefPtr const &layerStack,
124  SdfPath const &path,
126  PcpArcInfoVector *info,
127  std::unordered_set<std::string> *exprVarDependencies,
128  PcpErrorVector *errors);
129 
130 inline void
132  PcpLayerStackRefPtr const &layerStack,
133  SdfPath const &path,
135  PcpArcInfoVector *info)
136 {
137  return PcpComposeSitePayloads(
138  layerStack, path, result, info, nullptr, nullptr);
139 }
140 
141 inline void
143  PcpNodeRef const &node,
145  PcpArcInfoVector *info,
146  std::unordered_set<std::string> *exprVarDependencies,
147  PcpErrorVector *errors)
148 {
149  return PcpComposeSitePayloads(
150  node.GetLayerStack(), node.GetPath(),
151  result, info, exprVarDependencies, errors);
152 }
153 
154 inline void
156  PcpNodeRef const &node,
158  PcpArcInfoVector *info)
159 {
160  return PcpComposeSitePayloads(
161  node.GetLayerStack(), node.GetPath(), result, info, nullptr, nullptr);
162 }
163 
164 /// Permission
165 PCP_API
167 PcpComposeSitePermission(PcpLayerStackRefPtr const &layerStack,
168  SdfPath const &path);
169 
170 inline SdfPermission
172 {
173  return PcpComposeSitePermission(node.GetLayerStack(), node.GetPath());
174 }
175 
176 /// Prim sites
177 PCP_API
178 void
179 PcpComposeSitePrimSites(PcpLayerStackRefPtr const &layerStack,
180  SdfPath const &path,
182 
183 inline void
185 {
187  node.GetLayerStack(), node.GetPath(), result);
188 }
189 
190 /// Has prim or property specs.
191 PCP_API
192 bool
194  PcpLayerStackRefPtr const &layerStack,
195  SdfPath const &path,
196  const std::unordered_set<SdfLayerHandle, TfHash>& layersToIgnore);
197 
198 PCP_API
199 bool
200 PcpComposeSiteHasSpecs(PcpLayerStackRefPtr const &layerStack,
201  SdfPath const &path);
202 
203 inline bool
205 {
206  return PcpComposeSiteHasSpecs(node.GetLayerStack(), node.GetPath());
207 }
208 
209 /// \deprecated. Use PcpComposeSiteHasSpecs instead.
210 inline bool
212  PcpLayerStackRefPtr const &layerStack,
213  SdfPath const &path,
214  const std::unordered_set<SdfLayerHandle, TfHash>& layersToIgnore)
215 {
216  return PcpComposeSiteHasSpecs(layerStack, path, layersToIgnore);
217 }
218 
219 /// \deprecated. Use PcpComposeSiteHasSpecs instead.
220 inline bool
221 PcpComposeSiteHasPrimSpecs(PcpLayerStackRefPtr const &layerStack,
222  SdfPath const &path)
223 {
224  return PcpComposeSiteHasSpecs(layerStack, path);
225 }
226 
227 /// \deprecated. Use PcpComposeSiteHasSpecs instead.
228 inline bool
230 {
231  return PcpComposeSiteHasSpecs(node.GetLayerStack(), node.GetPath());
232 }
233 
234 /// Symmetry
235 PCP_API
236 bool
237 PcpComposeSiteHasSymmetry(PcpLayerStackRefPtr const &layerStack,
238  SdfPath const &path);
239 inline bool
241 {
242  return PcpComposeSiteHasSymmetry(node.GetLayerStack(), node.GetPath());
243 }
244 
245 /// Value clips
246 PCP_API
247 bool
248 PcpComposeSiteHasValueClips(PcpLayerStackRefPtr const &layerStack,
249  SdfPath const &path);
250 PCP_API
251 inline bool
253 {
254  return PcpComposeSiteHasValueClips(node.GetLayerStack(), node.GetPath());
255 }
256 
257 /// Inherits
258 PCP_API
259 void
260 PcpComposeSiteInherits(PcpLayerStackRefPtr const &layerStack,
261  SdfPath const &path, SdfPathVector *result,
262  PcpArcInfoVector *info);
263 
264 PCP_API
265 void
266 PcpComposeSiteInherits(PcpLayerStackRefPtr const &layerStack,
267  SdfPath const &path, SdfPathVector *result);
268 
269 inline void
271 {
272  return PcpComposeSiteInherits(node.GetLayerStack(), node.GetPath(), result);
273 }
274 
275 /// Specializes
276 PCP_API
277 void
278 PcpComposeSiteSpecializes(PcpLayerStackRefPtr const &layerStack,
279  SdfPath const &path, SdfPathVector *result,
280  PcpArcInfoVector *info);
281 
282 PCP_API
283 void
284 PcpComposeSiteSpecializes(PcpLayerStackRefPtr const &layerStack,
285  SdfPath const &path, SdfPathVector *result);
286 
287 inline void
289 {
291  node.GetLayerStack(), node.GetPath(), result);
292 }
293 
294 /// VariantSets
295 PCP_API
296 void
297 PcpComposeSiteVariantSets(PcpLayerStackRefPtr const &layerStack,
298  SdfPath const &path,
299  std::vector<std::string> *result,
300  PcpArcInfoVector *info);
301 
302 PCP_API
303 void
304 PcpComposeSiteVariantSets(PcpLayerStackRefPtr const &layerStack,
305  SdfPath const &path,
306  std::vector<std::string> *result);
307 inline void
309  std::vector<std::string> *result) {
311  node.GetLayerStack(), node.GetPath(), result);
312 }
313 
314 /// VariantSetOptions
315 PCP_API
316 void
317 PcpComposeSiteVariantSetOptions(PcpLayerStackRefPtr const &layerStack,
318  SdfPath const &path,
319  std::string const &vsetName,
320  std::set<std::string> *result);
321 inline void
323  std::string const &vsetName,
324  std::set<std::string> *result)
325 {
327  node.GetLayerStack(), node.GetPath(), vsetName, result);
328 }
329 
330 /// VariantSelection
331 PCP_API
332 bool
334  PcpLayerStackRefPtr const &layerStack,
335  SdfPath const &path,
336  std::string const &vsetName,
337  std::string *result,
338  std::unordered_set<std::string> *exprVarDependencies,
339  PcpErrorVector *errors);
340 
341 inline bool
343  PcpLayerStackRefPtr const &layerStack,
344  SdfPath const &path,
345  std::string const &vsetName,
346  std::string *result)
347 {
349  layerStack, path, vsetName, result, nullptr, nullptr);
350 }
351 
352 inline bool
354  std::string const &vsetName,
355  std::string *result)
356 {
358  node.GetLayerStack(), node.GetPath(), vsetName, result);
359 }
360 
361 /// VariantSelections
362 PCP_API
363 void
365  PcpLayerStackRefPtr const &layerStack,
366  SdfPath const &path,
368  std::unordered_set<std::string> *exprVarDependencies,
369  PcpErrorVector *errors);
370 
371 inline void
373  PcpLayerStackRefPtr const &layerStack,
374  SdfPath const &path,
376 {
378  layerStack, path, result, nullptr, nullptr);
379 }
380 
381 inline void
384 {
386  node.GetLayerStack(), node.GetPath(), result);
387 }
388 
389 PCP_API
390 bool
392  PcpLayerStackRefPtr const &layerStack,
393  SdfPath const &path);
394 
395 /// Compose child names.
396 /// If the optional \p orderField is provided, its order will be applied.
397 PCP_API
398 void
400  SdfPath const &path,
401  const TfToken & namesField,
402  TfTokenVector *nameOrder,
403  PcpTokenSet *nameSet,
404  const TfToken *orderField = nullptr);
405 
407 
408 #endif // PXR_USD_PCP_COMPOSE_SITE_H
std::vector< PcpArcInfo > PcpArcInfoVector
A vector of reference or payload arc information.
Definition: composeSite.h:72
PCP_API void PcpComposeSiteVariantSets(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, std::vector< std::string > *result, PcpArcInfoVector *info)
VariantSets.
std::vector< SdfPayload > SdfPayloadVector
Definition: payload.h:25
#define PXR_NAMESPACE_OPEN_SCOPE
Definition: pxr.h:73
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
std::vector< SdfSite > SdfSiteVector
Definition: site.h:80
std::map< std::string, std::string > SdfVariantSelectionMap
A map of reference variant set names to variants in those sets.
Definition: types.h:261
PCP_API void PcpComposeSiteChildNames(SdfLayerRefPtrVector const &layers, SdfPath const &path, const TfToken &namesField, TfTokenVector *nameOrder, PcpTokenSet *nameSet, const TfToken *orderField=nullptr)
**But if you need a result
Definition: thread.h:622
bool PcpComposeSiteHasPrimSpecs(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, const std::unordered_set< SdfLayerHandle, TfHash > &layersToIgnore)
Definition: composeSite.h:211
PCP_API bool PcpComposeSiteHasSymmetry(PcpLayerStackRefPtr const &layerStack, SdfPath const &path)
Symmetry.
PXR_NAMESPACE_OPEN_SCOPE TF_DECLARE_WEAK_AND_REF_PTRS(PcpLayerStack)
PCP_API bool PcpComposeSiteHasSpecs(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, const std::unordered_set< SdfLayerHandle, TfHash > &layersToIgnore)
Has prim or property specs.
PCP_API void PcpComposeSitePayloads(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, SdfPayloadVector *result, PcpArcInfoVector *info, std::unordered_set< std::string > *exprVarDependencies, PcpErrorVector *errors)
Payloads.
Definition: token.h:70
std::vector< TfRefPtr< SdfLayer > > SdfLayerRefPtrVector
std::vector< class SdfPath > SdfPathVector
PCP_API void PcpComposeSitePrimSites(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, SdfSiteVector *result)
Prim sites.
PCP_API const SdfPath & GetPath() const
Returns the path for the site this node represents.
PCP_API bool PcpComposeSiteHasValueClips(PcpLayerStackRefPtr const &layerStack, SdfPath const &path)
Value clips.
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440
PCP_API void PcpComposeSiteVariantSetOptions(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, std::string const &vsetName, std::set< std::string > *result)
VariantSetOptions.
Definition: path.h:280
std::vector< PcpErrorBasePtr > PcpErrorVector
Definition: errors.h:65
PCP_API const PcpLayerStackRefPtr & GetLayerStack() const
Returns the layer stack for the site this node represents.
SdfLayerHandle sourceLayer
Definition: composeSite.h:65
PCP_API bool PcpComposeSiteHasVariantSelections(PcpLayerStackRefPtr const &layerStack, SdfPath const &path)
std::vector< SdfReference > SdfReferenceVector
Definition: reference.h:27
SdfLayerOffset sourceLayerStackOffset
Definition: composeSite.h:66
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
PCP_API void PcpComposeSiteInherits(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, SdfPathVector *result, PcpArcInfoVector *info)
Inherits.
PCP_API bool PcpComposeSiteVariantSelection(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, std::string const &vsetName, std::string *result, std::unordered_set< std::string > *exprVarDependencies, PcpErrorVector *errors)
VariantSelection.
PCP_API void PcpComposeSiteVariantSelections(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, SdfVariantSelectionMap *result, std::unordered_set< std::string > *exprVarDependencies, PcpErrorVector *errors)
VariantSelections.
std::string authoredAssetPath
Definition: composeSite.h:67
PCP_API SdfPermission PcpComposeSitePermission(PcpLayerStackRefPtr const &layerStack, SdfPath const &path)
Permission.
PCP_API void PcpComposeSiteSpecializes(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, SdfPathVector *result, PcpArcInfoVector *info)
Specializes.
PCP_API void PcpComposeSiteReferences(PcpLayerStackRefPtr const &layerStack, SdfPath const &path, SdfReferenceVector *result, PcpArcInfoVector *info, std::unordered_set< std::string > *exprVarDependencies, PcpErrorVector *errors)
References.
SdfPermission
Definition: types.h:135
#define PCP_API
Definition: api.h:23