Skip to content

Commit

Permalink
Merge pull request #2224 from AnimalLogic/jossh-h/camera_translator_r…
Browse files Browse the repository at this point in the history
…eadAnimatedValues

Enable readAnimatedValues attribute on Camera translator import
  • Loading branch information
seando-adsk authored Apr 19, 2022
2 parents 34322cf + 5aff51e commit 01d4956
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,79 @@ TEST(translators_CameraTranslator, animated_io)
}
}

TEST(translators_CameraTranslator, readAnimatedValues)
{
constexpr auto LAYER_CONTENTS = R"ESC(#usda 1.0
(
defaultPrim = "GEO"
endTimeCode = 1000
startTimeCode = 999
)
def Xform "GEO"
{
float3 xformOp:translate = (-1.0, 2.5, 6.5)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Xform "cameraGroup"
{
double3 xformOp:translate = (-0.0000015314200130234168, 1.587618925213975e-14, -1.4210854715201993e-14)
uniform token[] xformOpOrder = ["xformOp:translate"]
float3 xformOp:rotateZXY:rotate = (0.014807368, 358.9961, -0.03618303)
float3 xformOp:rotateZXY:rotate.timeSamples = {
999: (0.014807368, -1.003891, -0.03618303),
1000: (0.11926156, -0.9200447, 0.12728521)
}
def Camera "renderCam"
{
}
}
}
)ESC";

UsdStageRefPtr stage = UsdStage::CreateInMemory();
stage->GetRootLayer()->ImportFromString(LAYER_CONTENTS);

SdfPath currentPrimPath("/GEO/cameraGroup/renderCam");
UsdPrim currentPrim = stage->GetPrimAtPath(currentPrimPath);
UsdStageCache::Id stageCacheId = AL::usdmaya::StageCache::Get().Insert(stage);
SdfPath cameraPrim("/GEO/cameraGroup/renderCam");

// Load the stage into Maya
EXPECT_TRUE(stageCacheId.IsValid());
MString importCommand
= MString("AL_usdmaya_ProxyShapeImport ") + "-stageId " + stageCacheId.ToLongInt();

MGlobal::executeCommand(importCommand);

// Fetch relevant maya nodes
MSelectionList mSel;
mSel.add("|AL_usdmaya_Proxy|GEO|cameraGroup|renderCam");
mSel.add("|AL_usdmaya_Proxy|GEO|cameraGroup");
mSel.add("|AL_usdmaya_Proxy|GEO"); // Has transforms

MDagPath dagPath1;
mSel.getDagPath(0, dagPath1);
MFnDagNode fnDagNode1(dagPath1.node());

MDagPath dagPath2;
mSel.getDagPath(1, dagPath2);
MFnDagNode fnDagNode2(dagPath2.node());

MDagPath dagPath3;
mSel.getDagPath(2, dagPath3);
MFnDagNode fnDagNode3(dagPath3.node());

// Confrim read animated values is set True
ASSERT_TRUE(fnDagNode1.findPlug("readAnimatedValues").asBool());
ASSERT_TRUE(fnDagNode2.findPlug("readAnimatedValues").asBool());
ASSERT_TRUE(fnDagNode3.findPlug("readAnimatedValues").asBool());

// Validate the transforms on the |AL_usdmaya_Proxy|GEO dag path
// matches our usd stage transforms.
ASSERT_TRUE(fnDagNode3.findPlug("translateX").asFloat() == -1.0);
ASSERT_TRUE(fnDagNode3.findPlug("translateY").asFloat() == 2.5);
ASSERT_TRUE(fnDagNode3.findPlug("translateZ").asFloat() == 6.5);
}

TEST(translators_CameraTranslator, cameraShapeName)
{
auto constructTestUSDFile = []() {
Expand Down
25 changes: 25 additions & 0 deletions plugin/al/translators/Camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,31 @@ MStatus Camera::import(const UsdPrim& prim, MObject& parent, MObject& createdObj
to, m_focusDistance, MDistance(focusDistance, MDistance::kCentimeters)),
errorString);
}

// Update animated transform attribute on the parent hierarchy
MDagPath mDagPath;
fn.getPath(mDagPath);

while (mDagPath.length() != 0) {

MFnDependencyNode mFnDep(mDagPath.node());
const std::string primPathAttr
= AL::maya::utils::convert(mFnDep.findPlug("primPath").asString());
if (primPathAttr.empty()) {
mDagPath.pop();
continue;
}

SdfPath currentPrimPath(primPathAttr);
UsdPrim currentPrim = prim.GetStage()->GetPrimAtPath(currentPrimPath);

if (currentPrim.IsValid()) {
mFnDep.findPlug("readAnimatedValues").setBool(true);
}

mDagPath.pop();
}

return updateAttributes(to, prim);
}

Expand Down

0 comments on commit 01d4956

Please sign in to comment.