Skip to content

Commit 1e556a3

Browse files
committed
connect Maya time to USD Imaging SceneIndex
1 parent 50a1883 commit 1e556a3

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

lib/mayaUsd/sceneIndex/proxyShapeSceneIndexPlugin.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
#include <maya/MObjectHandle.h>
6666
#include <maya/MSelectionList.h>
6767
#include <maya/MString.h>
68+
#include <maya/MEventMessage.h>
6869
#include <ufe/rtid.h>
6970

7071
PXR_NAMESPACE_OPEN_SCOPE
@@ -282,9 +283,13 @@ MayaUsdProxyShapeSceneIndex::MayaUsdProxyShapeSceneIndex(
282283
TfWeakPtr<MayaUsdProxyShapeSceneIndex> ptr(this);
283284
TfNotice::Register(ptr, &MayaUsdProxyShapeSceneIndex::StageSet);
284285
TfNotice::Register(ptr, &MayaUsdProxyShapeSceneIndex::ObjectsChanged);
286+
287+
_timeChangeCallbackId = MEventMessage::addEventCallback("timeChanged", onTimeChanged, this);
285288
}
286289

287-
MayaUsdProxyShapeSceneIndex::~MayaUsdProxyShapeSceneIndex() { }
290+
MayaUsdProxyShapeSceneIndex::~MayaUsdProxyShapeSceneIndex() {
291+
MMessage::removeCallback(_timeChangeCallbackId);
292+
}
288293

289294
MayaUsdProxyShapeSceneIndexRefPtr MayaUsdProxyShapeSceneIndex::New(
290295
MayaUsdProxyShapeBase* proxyShape,
@@ -296,6 +301,22 @@ MayaUsdProxyShapeSceneIndexRefPtr MayaUsdProxyShapeSceneIndex::New(
296301
sceneIndexChainLastElement, usdImagingStageSceneIndex, proxyShape));
297302
}
298303

304+
void MayaUsdProxyShapeSceneIndex::onTimeChanged(void* data)
305+
{
306+
auto* instance = reinterpret_cast<MayaUsdProxyShapeSceneIndex*>(data);
307+
if (!TF_VERIFY(instance)) {
308+
return;
309+
}
310+
instance->UpdateTime();
311+
}
312+
313+
void MayaUsdProxyShapeSceneIndex::UpdateTime()
314+
{
315+
if (_usdImagingStageSceneIndex && _proxyShape) {
316+
_usdImagingStageSceneIndex->SetTime(_proxyShape->getTime());
317+
}
318+
}
319+
299320
Ufe::Path MayaUsdProxyShapeSceneIndex::InterpretRprimPath(
300321
const HdSceneIndexBaseRefPtr& sceneIndex,
301322
const SdfPath& path)
@@ -339,6 +360,8 @@ void MayaUsdProxyShapeSceneIndex::Populate()
339360
#endif
340361
_populated = true;
341362
}
363+
// Set the initial time
364+
UpdateTime();
342365
}
343366
}
344367
}

lib/mayaUsd/sceneIndex/proxyShapeSceneIndexPlugin.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
#include <ufe/path.h>
3535

36+
#include <maya/MMessage.h>
37+
3638
#include <memory>
3739

3840
//////////////////////////////////////////////////////////////// MayaUsdProxyShapeSceneIndexPlugin
@@ -92,6 +94,8 @@ class MayaUsdProxyShapeSceneIndex : public HdSingleInputFilteringSceneIndexBase
9294

9395
virtual ~MayaUsdProxyShapeSceneIndex();
9496

97+
void UpdateTime();
98+
9599
private:
96100
void ObjectsChanged(const MayaUsdProxyStageObjectsChangedNotice& notice);
97101

@@ -113,9 +117,12 @@ class MayaUsdProxyShapeSceneIndex : public HdSingleInputFilteringSceneIndexBase
113117
const HdSceneIndexObserver::DirtiedPrimEntries& entries) override final;
114118

115119
private:
120+
static void onTimeChanged(void* data);
121+
116122
UsdImagingStageSceneIndexRefPtr _usdImagingStageSceneIndex;
117123
MayaUsdProxyShapeBase* _proxyShape { nullptr };
118124
std::atomic_bool _populated { false };
125+
MCallbackId _timeChangeCallbackId;
119126
};
120127
} // namespace MAYAUSD_NS_DEF
121128

0 commit comments

Comments
 (0)