Timeline Prototype
This commit is contained in:
+20
-11
@@ -32,6 +32,15 @@ void ViewportTile::SetCommandHistory(CommandHistory* h)
|
||||
// (ViewportPanel), not by individual tiles.
|
||||
}
|
||||
|
||||
void ViewportTile::SetTimeCodes(pxr::UsdTimeCode displayTime,
|
||||
pxr::UsdTimeCode editTime)
|
||||
{
|
||||
m_displayTime = displayTime;
|
||||
m_editTime = editTime;
|
||||
m_renderer.SetCurrentTimeCode(displayTime);
|
||||
m_renderer.SetForceRefresh(true);
|
||||
}
|
||||
|
||||
void ViewportTile::SetStage(pxr::UsdStageRefPtr stage)
|
||||
{
|
||||
m_stage = stage;
|
||||
@@ -48,7 +57,7 @@ void ViewportTile::SetStage(pxr::UsdStageRefPtr stage)
|
||||
if (stage) {
|
||||
pxr::TfTokenVector purposes = {
|
||||
pxr::UsdGeomTokens->default_, pxr::UsdGeomTokens->proxy };
|
||||
pxr::UsdGeomBBoxCache bboxCache(pxr::UsdTimeCode::Default(), purposes, true);
|
||||
pxr::UsdGeomBBoxCache bboxCache(m_displayTime, purposes, true);
|
||||
pxr::GfBBox3d stageBBox = bboxCache.ComputeWorldBound(stage->GetPseudoRoot());
|
||||
if (!stageBBox.GetRange().IsEmpty())
|
||||
m_camera.FrameSelection(stageBBox, 1.1);
|
||||
@@ -70,7 +79,7 @@ void ViewportTile::FrameScene()
|
||||
if (!m_stage) return;
|
||||
pxr::TfTokenVector purposes = {
|
||||
pxr::UsdGeomTokens->default_, pxr::UsdGeomTokens->proxy };
|
||||
pxr::UsdGeomBBoxCache bboxCache(pxr::UsdTimeCode::Default(), purposes, true);
|
||||
pxr::UsdGeomBBoxCache bboxCache(m_displayTime, purposes, true);
|
||||
pxr::GfBBox3d stageBBox = bboxCache.ComputeWorldBound(m_stage->GetPseudoRoot());
|
||||
if (!stageBBox.GetRange().IsEmpty()) {
|
||||
InitCameraNavigation();
|
||||
@@ -109,7 +118,7 @@ void ViewportTile::InitCameraNavigation()
|
||||
pxr::UsdPrim prim = m_stage->GetPrimAtPath(camPath);
|
||||
if (!prim || !prim.IsA<pxr::UsdGeomCamera>()) { TrySwitchToFreeCamera(); return; }
|
||||
pxr::UsdGeomCamera usdCam(prim);
|
||||
pxr::GfCamera gfCam = usdCam.GetCamera(pxr::UsdTimeCode::Default());
|
||||
pxr::GfCamera gfCam = usdCam.GetCamera(m_displayTime);
|
||||
m_camera.SwitchToFreeCamera(&gfCam);
|
||||
m_isDrivingUsdCamPrim = true;
|
||||
m_drivenUsdCamPath = camPath;
|
||||
@@ -124,13 +133,13 @@ pxr::GfVec3d ViewportTile::ComputeGizmoPivot() const
|
||||
pxr::TfTokenVector purposes = {
|
||||
pxr::UsdGeomTokens->default_, pxr::UsdGeomTokens->proxy };
|
||||
pxr::UsdGeomBBoxCache bboxCache(
|
||||
pxr::UsdTimeCode::Default(), purposes, true);
|
||||
m_displayTime, purposes, true);
|
||||
pxr::GfBBox3d bbox = bboxCache.ComputeWorldBound(prim);
|
||||
pxr::GfRange3d range = bbox.ComputeAlignedRange();
|
||||
if (!range.IsEmpty())
|
||||
return (range.GetMin() + range.GetMax()) * 0.5;
|
||||
|
||||
pxr::UsdGeomXformCache xformCache(pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCache xformCache(m_displayTime);
|
||||
pxr::GfMatrix4d worldXform = xformCache.GetLocalToWorldTransform(prim);
|
||||
return worldXform.ExtractTranslation();
|
||||
}
|
||||
@@ -261,7 +270,7 @@ pxr::GfCamera ViewportTile::ResolveCamera()
|
||||
pxr::GfVec3d t; pxr::GfVec3f r, s, pv;
|
||||
pxr::UsdGeomXformCommonAPI::RotationOrder ro;
|
||||
if (!xformAPI.GetXformVectors(
|
||||
&t, &r, &s, &pv, &ro, pxr::UsdTimeCode::Default()))
|
||||
&t, &r, &s, &pv, &ro, m_displayTime))
|
||||
pxr::UsdGeomXformable(prim).ClearXformOpOrder();
|
||||
}
|
||||
pxr::GfMatrix4d camToWorld = gfCamera.GetTransform();
|
||||
@@ -271,13 +280,13 @@ pxr::GfCamera ViewportTile::ResolveCamera()
|
||||
pxr::GfVec3d::XAxis(),
|
||||
pxr::GfVec3d::YAxis(),
|
||||
pxr::GfVec3d::ZAxis());
|
||||
xformAPI.SetTranslate(translate, pxr::UsdTimeCode::Default());
|
||||
xformAPI.SetTranslate(translate, m_editTime);
|
||||
xformAPI.SetRotate(
|
||||
pxr::GfVec3f(float(eulerDeg[0]),
|
||||
float(eulerDeg[1]),
|
||||
float(eulerDeg[2])),
|
||||
pxr::UsdGeomXformCommonAPI::RotationOrderXYZ,
|
||||
pxr::UsdTimeCode::Default());
|
||||
m_editTime);
|
||||
}
|
||||
if (!m_isOrbiting && !m_isPanning && !m_isDollying) {
|
||||
m_isDrivingUsdCamPrim = false;
|
||||
@@ -292,7 +301,7 @@ pxr::GfCamera ViewportTile::ResolveCamera()
|
||||
pxr::UsdPrim camPrim = m_stage->GetPrimAtPath(camPath);
|
||||
if (camPrim && camPrim.IsA<pxr::UsdGeomCamera>()) {
|
||||
pxr::UsdGeomCamera usdCam(camPrim);
|
||||
gfCamera = usdCam.GetCamera(pxr::UsdTimeCode::Default());
|
||||
gfCamera = usdCam.GetCamera(m_displayTime);
|
||||
pxr::CameraUtilConformWindow(
|
||||
&gfCamera, pxr::CameraUtilMatchVertically, aspect);
|
||||
m_lastComputedGfCamera = gfCamera;
|
||||
@@ -576,7 +585,7 @@ void ViewportTile::HandleInput(bool isFocused, TransformManipulator& manipulator
|
||||
pxr::TfTokenVector purposes = {
|
||||
pxr::UsdGeomTokens->default_, pxr::UsdGeomTokens->proxy };
|
||||
pxr::UsdGeomBBoxCache bboxCache(
|
||||
pxr::UsdTimeCode::Default(), purposes, true);
|
||||
m_displayTime, purposes, true);
|
||||
pxr::GfRange3d combined;
|
||||
for (const auto& path : m_selectedSdfPaths) {
|
||||
pxr::UsdPrim prim = m_stage->GetPrimAtPath(path);
|
||||
@@ -585,7 +594,7 @@ void ViewportTile::HandleInput(bool isFocused, TransformManipulator& manipulator
|
||||
combined.UnionWith(bbox.ComputeAlignedRange());
|
||||
}
|
||||
if (combined.IsEmpty()) {
|
||||
pxr::UsdGeomXformCache xformCache(pxr::UsdTimeCode::Default());
|
||||
pxr::UsdGeomXformCache xformCache(m_displayTime);
|
||||
for (const auto& path : m_selectedSdfPaths) {
|
||||
pxr::UsdPrim prim = m_stage->GetPrimAtPath(path);
|
||||
if (!prim) continue;
|
||||
|
||||
Reference in New Issue
Block a user