本文整理汇总了C++中UsdPrim::GetPath方法的典型用法代码示例。如果您正苦于以下问题:C++ UsdPrim::GetPath方法的具体用法?C++ UsdPrim::GetPath怎么用?C++ UsdPrim::GetPath使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UsdPrim
的用法示例。
在下文中一共展示了UsdPrim::GetPath方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetPrim
void
UsdRiStatementsAPI::SetCoordinateSystem(const std::string &coordSysName)
{
UsdAttribute attr = GetPrim().CreateAttribute(_tokens->coordsys,
SdfValueTypeNames->String,
/* custom = */ false);
if (TF_VERIFY(attr)) {
attr.Set(coordSysName);
UsdPrim currPrim = GetPrim();
while (currPrim && currPrim.GetPath() != SdfPath::AbsoluteRootPath()) {
if (currPrim.IsModel() && !currPrim.IsGroup() &&
currPrim.GetPath() != SdfPath::AbsoluteRootPath()) {
UsdRelationship rel =
currPrim.CreateRelationship(_tokens->modelCoordsys,
/* custom = */ false);
if (TF_VERIFY(rel)) {
// Order should not matter, since these are a set,
// but historically we have appended these.
rel.AddTarget(GetPrim().GetPath());
}
break;
}
currPrim = currPrim.GetParent();
}
}
}
示例2: if
/* static */
GfMatrix4d
GusdPrimWrapper::computeTransform(
const UsdPrim& prim,
UsdTimeCode time,
const UT_Matrix4D& houXform,
const GusdSimpleXformCache& xformCache ) {
// We need the transform into the prims space.
// If the prim is in a hierarchy that we have written on this frame,
// its transform will be in the xformCache. Otherwise, we can read it
// from the global cache.
//
// The transform cache is necessary because the gobal cache
// will only contain transform that we read from the stage and
// not anything that we have modified.
UT_Matrix4D primXform;
auto it = xformCache.find( prim.GetPath() );
if( it != xformCache.end() ) {
primXform = it->second;
}
else if( !GusdUSD_XformCache::GetInstance().GetLocalToWorldTransform(
prim,
time,
primXform )) {
TF_WARN( "Failed to get transform for %s.", prim.GetPath().GetText() );
primXform.identity();
}
return GusdUT_Gf::Cast( houXform ) / GusdUT_Gf::Cast( primXform );
}
示例3:
void
GusdUSD_XformCache::XformInfo::ComputeFlags(const UsdPrim& prim,
GusdUSD_XformCache& cache)
{
if(query.TransformMightBeTimeVarying()) {
_flags = FLAGS_LOCAL_MAYBE_TIMEVARYING|
FLAGS_WORLD_MAYBE_TIMEVARYING;
} else {
/* Local transform isn't time-varying, but maybe the parent is.*/
if(!query.GetResetXformStack()) {
UsdPrim parent = prim.GetParent();
if(parent && parent.GetPath() != SdfPath::AbsoluteRootPath()) {
auto info = cache.GetXformInfo(parent);
if(info && info->WorldXformIsMaybeTimeVarying())
_flags = FLAGS_WORLD_MAYBE_TIMEVARYING;
}
}
}
if(!query.GetResetXformStack()) {
UsdPrim parent = prim.GetParent();
if(parent && parent.GetPath() != SdfPath::AbsoluteRootPath())
_flags |= FLAGS_HAS_PARENT_XFORM;
}
}
示例4:
SdfPath
UsdImagingMaterialAdapter::Populate(UsdPrim const& prim,
UsdImagingIndexProxy* index,
UsdImagingInstancerContext const* instancerContext)
{
// Since material are populated by reference, they need to take care not to
// be populated multiple times.
SdfPath cachePath = prim.GetPath();
if (index->IsPopulated(cachePath)) {
return cachePath;
}
index->InsertSprim(HdPrimTypeTokens->material,
cachePath,
prim, shared_from_this());
HD_PERF_COUNTER_INCR(UsdImagingTokens->usdPopulatedPrimCount);
// Also register this adapter on behalf of any descendent
// UsdShadeShader prims, since they are consumed to
// create the material network.
for (UsdPrim const& child: prim.GetDescendants()) {
if (child.IsA<UsdShadeShader>()) {
index->AddPrimInfo(child.GetPath(), child, shared_from_this());
}
}
return prim.GetPath();
}
示例5:
SdfPath
UsdImagingSphereLightAdapter::Populate(UsdPrim const& prim,
UsdImagingIndexProxy* index,
UsdImagingInstancerContext const* instancerContext)
{
index->InsertSprim(HdPrimTypeTokens->sphereLight, prim.GetPath(), prim);
HD_PERF_COUNTER_INCR(UsdImagingTokens->usdPopulatedPrimCount);
return prim.GetPath();
}
示例6: GetShaderBinding
SdfPath
UsdImagingPointsAdapter::Populate(UsdPrim const& prim,
UsdImagingIndexProxy* index,
UsdImagingInstancerContext const* instancerContext)
{
index->InsertPoints(prim.GetPath(),
GetShaderBinding(prim),
instancerContext);
HD_PERF_COUNTER_INCR(UsdImagingTokens->usdPopulatedPrimCount);
return prim.GetPath();
}
示例7: bool
bool GusdXformWrapper::
initUsdPrim(const UsdStagePtr& stage,
const SdfPath& path,
bool asOverride)
{
bool newPrim = true;
if( asOverride ) {
UsdPrim existing = stage->GetPrimAtPath( path );
if( existing ) {
// Note that we are creating a Xformable rather than a Xform.
// If we are writing an overlay and the ROP sees a geometry packed prim,
// we want to write just the xform. In that case we can use a xform
// wrapper to write the xform on any prim type.
m_usdXformForWrite = UsdGeomXformable(stage->OverridePrim( path ));
newPrim = false;
}
else {
m_usdXformForWrite = UsdGeomXform::Define( stage, path );
// Make sure our ancestors have proper types.
UsdPrim p = m_usdXformForWrite.GetPrim().GetParent();
while( p && p.GetTypeName().IsEmpty() ) {
UsdGeomXform::Define( stage, p.GetPath() );
p = p.GetParent();
}
}
}
else {
m_usdXformForWrite = UsdGeomXform::Define( stage, path );
}
if( !m_usdXformForWrite || !m_usdXformForWrite.GetPrim().IsValid() ) {
TF_WARN( "Unable to create %s xform '%s'.", newPrim ? "new" : "override", path.GetText() );
}
return bool(m_usdXformForWrite);
}
示例8: faceIndicesVec
// For now, this is only used by the mesh op. If this logic needs to be
// accessed elsewhere, it should move down into usdKatana.
static void
_CreateFaceSetsFromFaceSetAPI(
const UsdPrim& prim,
const PxrUsdKatanaUsdInPrivateData &data,
FnKat::GeolibCookInterface& interface)
{
UsdGeomFaceSetAPI faceSet = UsdShadeMaterial::GetMaterialFaceSet(prim);
bool isPartition = faceSet.GetIsPartition();;
if (!isPartition) {
TF_WARN("Found face set on prim <%s> that is not a partition.",
prim.GetPath().GetText());
// continue here?
}
const double currentTime = data.GetCurrentTime();
VtIntArray faceCounts, faceIndices;
faceSet.GetFaceCounts(&faceCounts, currentTime);
faceSet.GetFaceIndices(&faceIndices, currentTime);
SdfPathVector bindingTargets;
faceSet.GetBindingTargets(&bindingTargets);
size_t faceSetIdxStart = 0;
for(size_t faceSetIdx = 0; faceSetIdx < faceCounts.size(); ++faceSetIdx) {
size_t faceCount = faceCounts[faceSetIdx];
FnKat::GroupBuilder faceSetAttrs;
faceSetAttrs.set("type", FnKat::StringAttribute("faceset"));
faceSetAttrs.set("materialAssign", FnKat::StringAttribute(
PxrUsdKatanaUtils::ConvertUsdMaterialPathToKatLocation(
bindingTargets[faceSetIdx], data)));
FnKat::IntBuilder facesBuilder;
{
std::vector<int> faceIndicesVec(faceCount);
for (size_t faceIndicesIdx = 0; faceIndicesIdx < faceCount; ++faceIndicesIdx)
{
faceIndicesVec[faceIndicesIdx] =
faceIndices[faceSetIdxStart + faceIndicesIdx];
}
faceSetIdxStart += faceCount;
facesBuilder.set(faceIndicesVec);
}
faceSetAttrs.set("geometry.faces", facesBuilder.build());
std::string faceSetName = TfStringPrintf("faceset_%zu", faceSetIdx);
FnKat::GroupBuilder staticSceneCreateAttrs;
staticSceneCreateAttrs.set("a", faceSetAttrs.build());
interface.createChild(
faceSetName,
"StaticSceneCreate",
staticSceneCreateAttrs.build());
}
}
示例9: AddCreatedObject
MObject
PxrUsdMayaShadingModeImportContext::AddCreatedObject(
const UsdPrim& prim,
const MObject& obj)
{
if (prim) {
return AddCreatedObject(prim.GetPath(), obj);
}
return obj;
}
示例10: UsdPrim
PXR_NAMESPACE_OPEN_SCOPE
// TODO: We should centralize this logic in a UsdImaging ShaderAdapter.
/*static*/
UsdPrim
UsdImaging_MaterialStrategy::GetTargetedShader(UsdPrim const& materialPrim,
UsdRelationship const& materialRel)
{
SdfPathVector targets;
if (!materialRel.GetForwardedTargets(&targets))
return UsdPrim();
if (targets.size() != 1) {
// XXX: This should really be a validation error once USD gets that
// feature.
TF_WARN("We expect only one target on relationship %s of prim <%s>, "
"but got %zu.",
materialRel.GetName().GetText(),
materialPrim.GetPath().GetText(),
targets.size());
return UsdPrim();
}
if (!targets[0].IsPrimPath()) {
// XXX: This should really be a validation error once USD gets that
// feature.
TF_WARN("We expect the target of the relationship %s of prim <%s> "
"to be a prim, instead it is <%s>.",
materialRel.GetName().GetText(),
materialPrim.GetPath().GetText(),
targets[0].GetText());
return UsdPrim();
}
return materialPrim.GetStage()->GetPrimAtPath(targets[0]);
}
示例11: GetShaderBinding
SdfPath
UsdImagingCapsuleAdapter::Populate(UsdPrim const& prim,
UsdImagingIndexProxy* index,
UsdImagingInstancerContext const* instancerContext)
{
index->InsertRprim(HdPrimTypeTokens->mesh,
prim,
GetShaderBinding(prim),
instancerContext);
HD_PERF_COUNTER_INCR(UsdImagingTokens->usdPopulatedPrimCount);
return prim.GetPath();
}
示例12:
bool
PxrUsdMayaShadingModeImportContext::GetCreatedObject(
const UsdPrim& prim,
MObject* obj) const
{
if (not prim) {
return false;
}
MObject node = _context->GetMayaNode(prim.GetPath(), false);
if (not node.isNull()) {
*obj = node;
return true;
}
return false;
}
示例13: material
void
UsdImagingMaterialAdapter::_GetMaterialNetworkMap(UsdPrim const &usdPrim,
HdMaterialNetworkMap *materialNetworkMap) const
{
UsdShadeMaterial material(usdPrim);
if (!material) {
TF_RUNTIME_ERROR("Expected material prim at <%s> to be of type "
"'UsdShadeMaterial', not type '%s'; ignoring",
usdPrim.GetPath().GetText(),
usdPrim.GetTypeName().GetText());
return;
}
const TfToken context = _GetMaterialNetworkSelector();
if (UsdShadeShader s = material.ComputeSurfaceSource(context)) {
_WalkGraph(s, &materialNetworkMap->map[UsdImagingTokens->bxdf],
_GetShaderSourceTypes());
}
if (UsdShadeShader d = material.ComputeDisplacementSource(context)) {
_WalkGraph(d, &materialNetworkMap->map[UsdImagingTokens->displacement],
_GetShaderSourceTypes());
}
}
示例14: DBG
UT_IntrusivePtr<UT_CappedItem>
CreateEntryFn::operator()(
const UsdPrim &prim,
UsdTimeCode time,
GusdPurposeSet purposes,
bool skipRoot ) const
{
// Build a cache entry for a USD Prim. A cache entry contains a GT_Primitive
// that can be used to draw the usd prim.
//
// Handle 3 different cases differently.
//
// USD gprims (leaves in the hierarchy) are just converted to GT_Primitives.
//
// For USD native instances, find the instance's master or the prim in
// master corresponding to an instance proxy, and recurse on that. This way
// each instance should share a cache with its master.
//
// Any other USD primitive represents a branch of the USD hierarchy. Find
// all the instances and leaves in this branch and build a GT_PrimCollect
// that represent the branch.
//
// The viewport doesn't seem to like nested collections very much. So we
// use a refiner to flatten the collections.
Refiner refiner;
// Tell the wrapper classes that we are refining for the viewport. In this case we just load the geometry and color. No
// other primvars. Also load curves as polylines.
GT_RefineParms refineParms;
refineParms.setPackedViewportLOD( true );
bool isInstance = prim.IsInstance();
bool isInstanceProxy = prim.IsInstanceProxy();
if( isInstance || isInstanceProxy)
{
DBG( cerr << "Create prim cache for instance " << prim.GetPath() << " at " << time << endl; )
示例15:
/* static */
bool
PxrUsdMayaTranslatorUtil::CreateNode(
const UsdPrim& usdPrim,
const MString& nodeTypeName,
MObject& parentNode,
PxrUsdMayaPrimReaderContext* context,
MStatus* status,
MObject* mayaNodeObj)
{
if (not CreateNode(MString(usdPrim.GetName().GetText()),
nodeTypeName,
parentNode,
status,
mayaNodeObj)) {
return false;
}
if (context) {
context->RegisterNewMayaNode(usdPrim.GetPath().GetString(), *mayaNodeObj);
}
return true;
}