Timeline Prototype
This commit is contained in:
@@ -63,6 +63,7 @@ static constexpr float kCenterCircleRadius = 5.0f;
|
||||
static bool SetupCompatibleXform(
|
||||
const pxr::UsdStageRefPtr& stage,
|
||||
const pxr::SdfPath& primPath,
|
||||
pxr::UsdTimeCode time,
|
||||
pxr::GfVec3d& outT,
|
||||
pxr::GfVec3f& outR,
|
||||
pxr::GfVec3f& outS,
|
||||
@@ -75,7 +76,7 @@ static bool SetupCompatibleXform(
|
||||
pxr::GfVec3f pivot3f;
|
||||
|
||||
if (api.GetXformVectors(&outT, &outR, &outS, &pivot3f,
|
||||
&outRotOrder, pxr::UsdTimeCode::Default()))
|
||||
&outRotOrder, time))
|
||||
return true;
|
||||
|
||||
// Fallback -----------------------------------------------------------------
|
||||
@@ -83,7 +84,7 @@ static bool SetupCompatibleXform(
|
||||
" has an incompatible xform stack. Creating a compatible "
|
||||
"override in the edit layer.");
|
||||
|
||||
pxr::UsdGeomXformCache xc(pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCache xc(time);
|
||||
bool reset = false;
|
||||
pxr::GfMatrix4d localMat = xc.GetLocalTransformation(prim, &reset);
|
||||
|
||||
@@ -143,7 +144,7 @@ void TransformManipulator::GetGizmoAxes(pxr::GfVec3d axes[3]) const
|
||||
if (!m_stage || m_primPath.IsEmpty()) return;
|
||||
pxr::UsdPrim prim = m_stage->GetPrimAtPath(m_primPath);
|
||||
if (!prim) return;
|
||||
pxr::UsdGeomXformCache xc(pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCache xc(m_displayTime);
|
||||
pxr::GfMatrix4d l2w = xc.GetLocalToWorldTransform(prim);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
pxr::GfVec3d row(l2w[i][0], l2w[i][1], l2w[i][2]);
|
||||
@@ -454,13 +455,17 @@ bool TransformManipulator::HandleInput(const pxr::GfMatrix4d& vp,
|
||||
|
||||
pxr::GfVec3d trans; pxr::GfVec3f rot,scale;
|
||||
pxr::UsdGeomXformCommonAPI::RotationOrder rotOrder;
|
||||
if (!SetupCompatibleXform(m_stage,m_primPath,trans,rot,scale,rotOrder)) {
|
||||
if (!SetupCompatibleXform(m_stage,m_primPath,m_displayTime,
|
||||
trans,rot,scale,rotOrder)) {
|
||||
m_isDragging=false; return false;
|
||||
}
|
||||
m_dragOriginalTranslate=trans; m_dragOriginalRotate=rot;
|
||||
m_dragOriginalScale=scale; m_dragOriginalRotOrder=rotOrder;
|
||||
m_dragStartTranslate=trans; m_dragStartRotate=rot;
|
||||
m_dragStartScale=scale;
|
||||
// Snapshot keyframe presence before live writes author samples.
|
||||
m_dragPreEditSamples=TransformCommand::QuerySamplePresence(
|
||||
m_stage,m_primPath,rotOrder,m_editTime);
|
||||
|
||||
pxr::GfRay ray=ComputeMouseRay(vp,mouse,imgPos,vW,vH);
|
||||
|
||||
@@ -546,7 +551,7 @@ bool TransformManipulator::HandleInput(const pxr::GfMatrix4d& vp,
|
||||
pxr::GfVec3d parentDelta=worldDelta;
|
||||
pxr::UsdPrim prim=m_stage->GetPrimAtPath(m_primPath);
|
||||
if (prim) {
|
||||
pxr::UsdGeomXformCache xc(pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCache xc(m_displayTime);
|
||||
pxr::UsdPrim parent=prim.GetParent();
|
||||
if (parent && !parent.IsPseudoRoot()) {
|
||||
pxr::GfMatrix4d p2w=xc.GetLocalToWorldTransform(parent);
|
||||
@@ -643,7 +648,7 @@ bool TransformManipulator::HandleInput(const pxr::GfMatrix4d& vp,
|
||||
m_stage->GetEditTarget().GetLayer(),
|
||||
m_dragOriginalTranslate,m_dragOriginalRotate,m_dragOriginalScale,
|
||||
m_dragStartTranslate, m_dragStartRotate, m_dragStartScale,
|
||||
m_dragOriginalRotOrder,
|
||||
m_dragOriginalRotOrder, m_editTime, m_dragPreEditSamples,
|
||||
"Transform "+m_primPath.GetName());
|
||||
m_commandHistory->Push(std::move(cmd));
|
||||
}
|
||||
@@ -661,7 +666,7 @@ void TransformManipulator::ApplyTranslate(const pxr::GfVec3d& t)
|
||||
if (!m_stage||m_primPath.IsEmpty()) return;
|
||||
pxr::UsdPrim p=m_stage->GetPrimAtPath(m_primPath); if (!p) return;
|
||||
pxr::UsdEditContext ec(m_stage,m_stage->GetEditTarget());
|
||||
pxr::UsdGeomXformCommonAPI(p).SetTranslate(t,pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCommonAPI(p).SetTranslate(t,m_editTime);
|
||||
m_dragStartTranslate=t;
|
||||
}
|
||||
|
||||
@@ -671,7 +676,7 @@ void TransformManipulator::ApplyRotate(const pxr::GfVec3f& r,
|
||||
if (!m_stage||m_primPath.IsEmpty()) return;
|
||||
pxr::UsdPrim p=m_stage->GetPrimAtPath(m_primPath); if (!p) return;
|
||||
pxr::UsdEditContext ec(m_stage,m_stage->GetEditTarget());
|
||||
pxr::UsdGeomXformCommonAPI(p).SetRotate(r,ro,pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCommonAPI(p).SetRotate(r,ro,m_editTime);
|
||||
m_dragStartRotate=r;
|
||||
}
|
||||
|
||||
@@ -680,7 +685,7 @@ void TransformManipulator::ApplyScale(const pxr::GfVec3f& s)
|
||||
if (!m_stage||m_primPath.IsEmpty()) return;
|
||||
pxr::UsdPrim p=m_stage->GetPrimAtPath(m_primPath); if (!p) return;
|
||||
pxr::UsdEditContext ec(m_stage,m_stage->GetEditTarget());
|
||||
pxr::UsdGeomXformCommonAPI(p).SetScale(s,pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCommonAPI(p).SetScale(s,m_editTime);
|
||||
m_dragStartScale=s;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user