diff --git a/lib/mayaUsd/commands/baseExportCommand.cpp b/lib/mayaUsd/commands/baseExportCommand.cpp index b92523fca3..7a347e6b3b 100644 --- a/lib/mayaUsd/commands/baseExportCommand.cpp +++ b/lib/mayaUsd/commands/baseExportCommand.cpp @@ -226,7 +226,10 @@ MSyntax MayaUSDExportCommand::createSyntax() kExcludeExportTypesFlag, UsdMayaJobExportArgsTokens->excludeExportTypes.GetText(), MSyntax::kString); - syntax.makeFlagMultiUse((kExcludeExportTypesFlag)); + syntax.makeFlagMultiUse(kExcludeExportTypesFlag); + + syntax.addFlag( + kDefaultPrimFlag, UsdMayaJobExportArgsTokens->defaultPrim.GetText(), MSyntax::kString); // These are additional flags under our control. syntax.addFlag( diff --git a/lib/mayaUsd/commands/baseExportCommand.h b/lib/mayaUsd/commands/baseExportCommand.h index 5ae84ecaa8..308493012b 100644 --- a/lib/mayaUsd/commands/baseExportCommand.h +++ b/lib/mayaUsd/commands/baseExportCommand.h @@ -94,6 +94,7 @@ class MAYAUSD_CORE_PUBLIC MayaUSDExportCommand : public MPxCommand static constexpr auto kCustomLayerData = "cld"; static constexpr auto kMetersPerUnit = "mpu"; static constexpr auto kExcludeExportTypesFlag = "eet"; + static constexpr auto kDefaultPrimFlag = "dp"; // Short and Long forms of flags defined by this command itself: static constexpr auto kAppendFlag = "a"; diff --git a/lib/mayaUsd/fileio/functorPrimWriter.cpp b/lib/mayaUsd/fileio/functorPrimWriter.cpp index 47e72fbdc1..3eee232e52 100644 --- a/lib/mayaUsd/fileio/functorPrimWriter.cpp +++ b/lib/mayaUsd/fileio/functorPrimWriter.cpp @@ -56,7 +56,8 @@ void UsdMaya_FunctorPrimWriter::Write(const UsdTimeCode& usdTime) const UsdMayaPrimWriterArgs args( GetDagPath(), _GetExportArgs().exportRefsAsInstanceable, - _GetExportArgs().excludeExportTypes); + _GetExportArgs().excludeExportTypes, + _GetExportArgs().defaultPrim); UsdMayaPrimWriterContext ctx(usdTime, GetUsdPath(), GetUsdStage()); diff --git a/lib/mayaUsd/fileio/jobs/jobArgs.cpp b/lib/mayaUsd/fileio/jobs/jobArgs.cpp index 9bdf615fd8..3dc51e5750 100644 --- a/lib/mayaUsd/fileio/jobs/jobArgs.cpp +++ b/lib/mayaUsd/fileio/jobs/jobArgs.cpp @@ -666,6 +666,7 @@ UsdMayaJobExportArgs::UsdMayaJobExportArgs( , includeAPINames(extractTokenSet(userArgs, UsdMayaJobExportArgsTokens->apiSchema)) , jobContextNames(extractTokenSet(userArgs, UsdMayaJobExportArgsTokens->jobContext)) , excludeExportTypes(extractTokenSet(userArgs, UsdMayaJobExportArgsTokens->excludeExportTypes)) + , defaultPrim(extractString(userArgs, UsdMayaJobExportArgsTokens->defaultPrim)) , chaserNames(extractVector(userArgs, UsdMayaJobExportArgsTokens->chaser)) , allChaserArgs(_ChaserArgs(userArgs, UsdMayaJobExportArgsTokens->chaserArgs)) , customLayerData(_CustomLayerData(userArgs, UsdMayaJobExportArgsTokens->customLayerData)) @@ -1017,6 +1018,7 @@ const VtDictionary& UsdMayaJobExportArgs::GetDefaultDictionary() d[UsdMayaJobExportArgsTokens->customLayerData] = std::vector(); d[UsdMayaJobExportArgsTokens->metersPerUnit] = 0.0; d[UsdMayaJobExportArgsTokens->excludeExportTypes] = std::vector(); + d[UsdMayaJobExportArgsTokens->defaultPrim] = std::string(); // plugInfo.json site defaults. // The defaults dict should be correctly-typed, so enable @@ -1107,6 +1109,7 @@ const VtDictionary& UsdMayaJobExportArgs::GetGuideDictionary() d[UsdMayaJobExportArgsTokens->staticSingleSample] = _boolean; d[UsdMayaJobExportArgsTokens->geomSidedness] = _string; d[UsdMayaJobExportArgsTokens->excludeExportTypes] = _stringVector; + d[UsdMayaJobExportArgsTokens->defaultPrim] = _string; }); return d; diff --git a/lib/mayaUsd/fileio/jobs/jobArgs.h b/lib/mayaUsd/fileio/jobs/jobArgs.h index 20ade7dce4..b267cc6db6 100644 --- a/lib/mayaUsd/fileio/jobs/jobArgs.h +++ b/lib/mayaUsd/fileio/jobs/jobArgs.h @@ -64,6 +64,7 @@ TF_DECLARE_PUBLIC_TOKENS( (compatibility) \ (defaultCameras) \ (defaultMeshScheme) \ + (defaultPrim) \ (defaultUSDFormat) \ (eulerFilter) \ (exportBlendShapes) \ @@ -250,6 +251,7 @@ struct UsdMayaJobExportArgs const TfToken::Set includeAPINames; const TfToken::Set jobContextNames; const TfToken::Set excludeExportTypes; + const std::string defaultPrim; using ChaserArgs = std::map; const std::vector chaserNames; diff --git a/lib/mayaUsd/fileio/jobs/writeJob.cpp b/lib/mayaUsd/fileio/jobs/writeJob.cpp index 047f12a0f8..77250f10fe 100644 --- a/lib/mayaUsd/fileio/jobs/writeJob.cpp +++ b/lib/mayaUsd/fileio/jobs/writeJob.cpp @@ -556,7 +556,10 @@ bool UsdMaya_WriteJob::_FinishWriting() UsdGeomSetStageMetersPerUnit(mJobCtx.mStage, mJobCtx.mArgs.metersPerUnit); } - if (usdRootPrim) { + if (!mJobCtx.mArgs.defaultPrim.empty()) { + defaultPrim = TfToken(mJobCtx.mArgs.defaultPrim); + mJobCtx.mStage->GetRootLayer()->SetDefaultPrim(defaultPrim); + } else if (usdRootPrim) { // We have already decided above that 'usdRootPrim' is the important // prim for the export... usdVariantRootPrimPath mJobCtx.mStage->GetRootLayer()->SetDefaultPrim(defaultPrim); diff --git a/lib/mayaUsd/fileio/primWriterArgs.cpp b/lib/mayaUsd/fileio/primWriterArgs.cpp index c8464d2a1f..a3ec3d67b5 100644 --- a/lib/mayaUsd/fileio/primWriterArgs.cpp +++ b/lib/mayaUsd/fileio/primWriterArgs.cpp @@ -24,10 +24,12 @@ PXR_NAMESPACE_OPEN_SCOPE UsdMayaPrimWriterArgs::UsdMayaPrimWriterArgs( const MDagPath& dagPath, const bool exportRefsAsInstanceable, - const TfToken::Set& excludeExportTypes) + const TfToken::Set& excludeExportTypes, + const std::string& defaultPrim) : _dagPath(dagPath) , _exportRefsAsInstanceable(exportRefsAsInstanceable) , _excludeExportTypes(excludeExportTypes) + , _defaultPrim(defaultPrim) { } diff --git a/lib/mayaUsd/fileio/primWriterArgs.h b/lib/mayaUsd/fileio/primWriterArgs.h index a06b2c4710..264e49a3ec 100644 --- a/lib/mayaUsd/fileio/primWriterArgs.h +++ b/lib/mayaUsd/fileio/primWriterArgs.h @@ -41,7 +41,8 @@ class UsdMayaPrimWriterArgs UsdMayaPrimWriterArgs( const MDagPath& dagPath, const bool exportRefsAsInstanceable, - const TfToken::Set& excludeExportTypes); + const TfToken::Set& excludeExportTypes, + const std::string& defaultPrim); /// \brief returns the MObject that should be exported. MAYAUSD_CORE_PUBLIC @@ -70,6 +71,7 @@ class UsdMayaPrimWriterArgs MDagPath _dagPath; bool _exportRefsAsInstanceable; TfToken::Set _excludeExportTypes; + std::string _defaultPrim; }; PXR_NAMESPACE_CLOSE_SCOPE