From 72fb0b26478eebc96316a4848bc7a87fea30fd5f Mon Sep 17 00:00:00 2001 From: Yves Boudreault Date: Fri, 27 May 2022 10:31:10 -0400 Subject: [PATCH 1/3] MAYA-123462 usdEditAsMaya set doesn't disappear when cancelling editing as Maya Undo was already working but not cancelling editing. It is now fixed. --- lib/mayaUsd/fileio/primUpdaterManager.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/mayaUsd/fileio/primUpdaterManager.cpp b/lib/mayaUsd/fileio/primUpdaterManager.cpp index 819fc2c01f..e7cd83d837 100644 --- a/lib/mayaUsd/fileio/primUpdaterManager.cpp +++ b/lib/mayaUsd/fileio/primUpdaterManager.cpp @@ -1156,6 +1156,28 @@ bool PrimUpdaterManager::discardPrimEdits(const Ufe::Path& pulledPath) return false; } + // Discard of the pull set if it is empty. + // + // Note: do not use the MFnSet API to discard it as it clears the redo stack + // and thus prevents redo. + MObject pullSetObj; + MStatus status = UsdMayaUtil::GetMObjectByName(kPullSetName, pullSetObj); + if (status == MStatus::kSuccess) { + MFnSet fnPullSet(pullSetObj); + MSelectionList members; + const bool flatten = true; + fnPullSet.getMembers(members, flatten); + + if(members.length() == 0) { + MString deleteSetCmd; + deleteSetCmd.format("lockNode -lock off \"^1s\";delete \"^1s\";", kPullSetName.asChar()); + MDGModifier& dgMod + = MDGModifierUndoItem::create("Discard edits pull set removal"); + dgMod.commandToExecute(deleteSetCmd); + dgMod.doIt(); + } + } + auto ufeUsdItem = Ufe::Hierarchy::createItem(pulledPath); auto hier = Ufe::Hierarchy::hierarchy(ufeUsdItem); if (TF_VERIFY(hier)) { From 7017e6fa54d2d620eb26c6b70802c76a84073364 Mon Sep 17 00:00:00 2001 From: Yves Boudreault Date: Fri, 27 May 2022 10:45:16 -0400 Subject: [PATCH 2/3] clang format fix --- lib/mayaUsd/fileio/primUpdaterManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mayaUsd/fileio/primUpdaterManager.cpp b/lib/mayaUsd/fileio/primUpdaterManager.cpp index e7cd83d837..6e030987a0 100644 --- a/lib/mayaUsd/fileio/primUpdaterManager.cpp +++ b/lib/mayaUsd/fileio/primUpdaterManager.cpp @@ -1168,11 +1168,11 @@ bool PrimUpdaterManager::discardPrimEdits(const Ufe::Path& pulledPath) const bool flatten = true; fnPullSet.getMembers(members, flatten); - if(members.length() == 0) { + if (members.length() == 0) { MString deleteSetCmd; - deleteSetCmd.format("lockNode -lock off \"^1s\";delete \"^1s\";", kPullSetName.asChar()); - MDGModifier& dgMod - = MDGModifierUndoItem::create("Discard edits pull set removal"); + deleteSetCmd.format( + "lockNode -lock off \"^1s\";delete \"^1s\";", kPullSetName.asChar()); + MDGModifier& dgMod = MDGModifierUndoItem::create("Discard edits pull set removal"); dgMod.commandToExecute(deleteSetCmd); dgMod.doIt(); } From a69e14931d9373be53191c17fb8b9382b7183c10 Mon Sep 17 00:00:00 2001 From: Yves Boudreault Date: Fri, 27 May 2022 14:06:36 -0400 Subject: [PATCH 3/3] Adding the test to the mergeToUsd --- lib/mayaUsd/fileio/primUpdaterManager.cpp | 49 +++++++++++++---------- lib/mayaUsd/fileio/primUpdaterManager.h | 1 + 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/lib/mayaUsd/fileio/primUpdaterManager.cpp b/lib/mayaUsd/fileio/primUpdaterManager.cpp index 6e030987a0..f62fd64461 100644 --- a/lib/mayaUsd/fileio/primUpdaterManager.cpp +++ b/lib/mayaUsd/fileio/primUpdaterManager.cpp @@ -956,6 +956,8 @@ bool PrimUpdaterManager::mergeToUsd( } } + discardPullSetIfEmpty(); + // Some updaters (like MayaReference) may be writing and changing the variant during merge. // This will change the hierarchy around pulled prim. Grab hierarchy from the parent. auto ufeUsdItem = Ufe::Hierarchy::createItem(pulledPath.pop()); @@ -1156,27 +1158,7 @@ bool PrimUpdaterManager::discardPrimEdits(const Ufe::Path& pulledPath) return false; } - // Discard of the pull set if it is empty. - // - // Note: do not use the MFnSet API to discard it as it clears the redo stack - // and thus prevents redo. - MObject pullSetObj; - MStatus status = UsdMayaUtil::GetMObjectByName(kPullSetName, pullSetObj); - if (status == MStatus::kSuccess) { - MFnSet fnPullSet(pullSetObj); - MSelectionList members; - const bool flatten = true; - fnPullSet.getMembers(members, flatten); - - if (members.length() == 0) { - MString deleteSetCmd; - deleteSetCmd.format( - "lockNode -lock off \"^1s\";delete \"^1s\";", kPullSetName.asChar()); - MDGModifier& dgMod = MDGModifierUndoItem::create("Discard edits pull set removal"); - dgMod.commandToExecute(deleteSetCmd); - dgMod.doIt(); - } - } + discardPullSetIfEmpty(); auto ufeUsdItem = Ufe::Hierarchy::createItem(pulledPath); auto hier = Ufe::Hierarchy::hierarchy(ufeUsdItem); @@ -1227,6 +1209,31 @@ bool PrimUpdaterManager::discardOrphanedEdits(const MDagPath& dagPath) return true; } +void PrimUpdaterManager::discardPullSetIfEmpty() +{ + // Discard of the pull set if it is empty. + // + // Note: do not use the MFnSet API to discard it as it clears the redo stack + // and thus prevents redo. + MObject pullSetObj; + MStatus status = UsdMayaUtil::GetMObjectByName(kPullSetName, pullSetObj); + if (status == MStatus::kSuccess) { + MFnSet fnPullSet(pullSetObj); + MSelectionList members; + const bool flatten = true; + fnPullSet.getMembers(members, flatten); + + if (members.length() == 0) { + MString deleteSetCmd; + deleteSetCmd.format( + "lockNode -lock off \"^1s\";delete \"^1s\";", kPullSetName.asChar()); + MDGModifier& dgMod = MDGModifierUndoItem::create("Discard edits pull set removal"); + dgMod.commandToExecute(deleteSetCmd); + dgMod.doIt(); + } + } +} + bool PrimUpdaterManager::duplicate( const Ufe::Path& srcPath, const Ufe::Path& dstPath, diff --git a/lib/mayaUsd/fileio/primUpdaterManager.h b/lib/mayaUsd/fileio/primUpdaterManager.h index ae7a9dd77d..dae9c70996 100644 --- a/lib/mayaUsd/fileio/primUpdaterManager.h +++ b/lib/mayaUsd/fileio/primUpdaterManager.h @@ -85,6 +85,7 @@ class PrimUpdaterManager : public PXR_NS::TfWeakBase bool discardPrimEdits(const Ufe::Path& path); bool discardOrphanedEdits(const MDagPath& dagPath); + void discardPullSetIfEmpty(); void onProxyContentChanged(const MayaUsdProxyStageObjectsChangedNotice& notice);