diff --git a/cmake/modules/FindUFE.cmake b/cmake/modules/FindUFE.cmake index 0972ba5b92..7a6fb738f9 100644 --- a/cmake/modules/FindUFE.cmake +++ b/cmake/modules/FindUFE.cmake @@ -267,3 +267,12 @@ if(UFE_INCLUDE_DIR AND EXISTS "${UFE_INCLUDE_DIR}/ufe/sceneSegmentHandler.h") message(STATUS "Maya has UFE SceneSegmentHandler's rootSceneSegmentRootPath interface") endif() endif() + +set(UFE_CAMERAHANDLER_HAS_FINDALL FALSE CACHE INTERNAL "findAll") +if(UFE_INCLUDE_DIR AND EXISTS "${UFE_INCLUDE_DIR}/ufe/cameraHandler.h") + file(STRINGS ${UFE_INCLUDE_DIR}/ufe/cameraHandler.h UFE_HAS_API REGEX "findAll") + if(UFE_HAS_API) + set(UFE_CAMERAHANDLER_HAS_FINDALL TRUE CACHE INTERNAL "ufeCameraHandlerHasFindAll") + message(STATUS "Maya has UFE CameraHandler's findAll interface") + endif() +endif() \ No newline at end of file diff --git a/lib/mayaUsd/ufe/CMakeLists.txt b/lib/mayaUsd/ufe/CMakeLists.txt index b82f3f3e75..a76e778848 100644 --- a/lib/mayaUsd/ufe/CMakeLists.txt +++ b/lib/mayaUsd/ufe/CMakeLists.txt @@ -155,6 +155,19 @@ if (NOT MAYA_APP_VERSION VERSION_GREATER 2025) ) endif() +if (UFE_CAMERAHANDLER_HAS_FINDALL) + target_compile_definitions(${PROJECT_NAME} + PRIVATE + UFE_CAMERAHANDLER_HAS_FINDALL=1 + ) +endif() + +if(UFE_CAMERAHANDLER_HAS_FINDALL) + target_sources(${PROJECT_NAME} + PRIVATE + ProxyShapeCameraHandler.cpp + ) +endif() if(CMAKE_UFE_V4_FEATURES_AVAILABLE) target_sources(${PROJECT_NAME} @@ -162,7 +175,6 @@ if(CMAKE_UFE_V4_FEATURES_AVAILABLE) UsdShaderNodeDef.cpp UsdShaderNodeDefHandler.cpp UsdUndoCreateFromNodeDefCommand.cpp - ProxyShapeCameraHandler.cpp UsdConnections.cpp UsdConnectionHandler.cpp UsdUINodeGraphNode.cpp @@ -243,12 +255,17 @@ if(CodeWrapperHandler IN_LIST UFE_PREVIEW_FEATURES) ) endif() +if(UFE_CAMERAHANDLER_HAS_FINDALL) + list(APPEND HEADERS + ProxyShapeCameraHandler.h + ) +endif() + if(CMAKE_UFE_V4_FEATURES_AVAILABLE) list(APPEND HEADERS UsdShaderNodeDef.h UsdShaderNodeDefHandler.h UsdUndoCreateFromNodeDefCommand.h - ProxyShapeCameraHandler.h UsdConnections.h UsdConnectionHandler.h UsdUINodeGraphNode.h diff --git a/lib/mayaUsd/ufe/Global.cpp b/lib/mayaUsd/ufe/Global.cpp index 46216aea86..39edddde2e 100644 --- a/lib/mayaUsd/ufe/Global.cpp +++ b/lib/mayaUsd/ufe/Global.cpp @@ -53,8 +53,11 @@ #include #endif -#ifdef UFE_V4_FEATURES_AVAILABLE +#if defined(UFE_V4_FEATURES_AVAILABLE) || (UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL) #include +#endif + +#ifdef UFE_V4_FEATURES_AVAILABLE #include #include #include @@ -276,7 +279,7 @@ MStatus initialize() runTimeMgr.setSceneSegmentHandler(g_MayaRtid, proxyShapeSceneSegmentHandler); #endif -#ifdef UFE_V4_FEATURES_AVAILABLE +#if defined(UFE_V4_FEATURES_AVAILABLE) || (UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL) // set up the ProxyShapeCameraHandler g_MayaCameraHandler = runTimeMgr.cameraHandler(g_MayaRtid); auto proxyShapeCameraHandler = ProxyShapeCameraHandler::create(g_MayaCameraHandler); diff --git a/lib/mayaUsd/ufe/ProxyShapeCameraHandler.cpp b/lib/mayaUsd/ufe/ProxyShapeCameraHandler.cpp index 300404df0e..7d6baf09e1 100644 --- a/lib/mayaUsd/ufe/ProxyShapeCameraHandler.cpp +++ b/lib/mayaUsd/ufe/ProxyShapeCameraHandler.cpp @@ -31,10 +31,14 @@ PXR_NAMESPACE_USING_DIRECTIVE namespace MAYAUSD_NS_DEF { namespace ufe { +#if UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL +MAYAUSD_VERIFY_CLASS_SETUP(Ufe::CameraHandler_v3_4, ProxyShapeCameraHandler); +#else MAYAUSD_VERIFY_CLASS_SETUP(Ufe::CameraHandler, ProxyShapeCameraHandler); +#endif // UFE_CAMERAHANDLER_HAS_FINDALL -ProxyShapeCameraHandler::ProxyShapeCameraHandler(const Ufe::CameraHandler::Ptr& mayaCameraHandler) - : Ufe::CameraHandler() +ProxyShapeCameraHandler::ProxyShapeCameraHandler(const CAMERAHANDLERBASE::Ptr& mayaCameraHandler) + : CAMERAHANDLERBASE() , _mayaCameraHandler(mayaCameraHandler) { } @@ -43,7 +47,8 @@ ProxyShapeCameraHandler::ProxyShapeCameraHandler(const Ufe::CameraHandler::Ptr& ProxyShapeCameraHandler::Ptr ProxyShapeCameraHandler::create(const Ufe::CameraHandler::Ptr& mayaCameraHandler) { - return std::make_shared(mayaCameraHandler); + auto mayaCameraHandlerBase = std::static_pointer_cast(mayaCameraHandler); + return std::make_shared(mayaCameraHandlerBase); } //------------------------------------------------------------------------------ diff --git a/lib/mayaUsd/ufe/ProxyShapeCameraHandler.h b/lib/mayaUsd/ufe/ProxyShapeCameraHandler.h index da4dc8722a..5cf13bc5f8 100644 --- a/lib/mayaUsd/ufe/ProxyShapeCameraHandler.h +++ b/lib/mayaUsd/ufe/ProxyShapeCameraHandler.h @@ -23,13 +23,19 @@ namespace MAYAUSD_NS_DEF { namespace ufe { +#if UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL +#define CAMERAHANDLERBASE Ufe::CameraHandler_v3_4 +#else +#define CAMERAHANDLERBASE Ufe::CameraHandler +#endif // UFE_CAMERAHANDLER_HAS_FINDALL + //! \brief Interface to create a ProxyShapeCameraHandler interface object. -class MAYAUSD_CORE_PUBLIC ProxyShapeCameraHandler : public Ufe::CameraHandler +class MAYAUSD_CORE_PUBLIC ProxyShapeCameraHandler : public CAMERAHANDLERBASE { public: typedef std::shared_ptr Ptr; - ProxyShapeCameraHandler(const Ufe::CameraHandler::Ptr&); + ProxyShapeCameraHandler(const CAMERAHANDLERBASE::Ptr&); MAYAUSD_DISALLOW_COPY_MOVE_AND_ASSIGNMENT(ProxyShapeCameraHandler); @@ -42,7 +48,7 @@ class MAYAUSD_CORE_PUBLIC ProxyShapeCameraHandler : public Ufe::CameraHandler Ufe::Selection find_(const Ufe::Path& path) const override; private: - Ufe::CameraHandler::Ptr _mayaCameraHandler; + CAMERAHANDLERBASE::Ptr _mayaCameraHandler; }; // ProxyShapeCameraHandler diff --git a/lib/usdUfe/ufe/CMakeLists.txt b/lib/usdUfe/ufe/CMakeLists.txt index 7e830545fa..69053e4c5d 100644 --- a/lib/usdUfe/ufe/CMakeLists.txt +++ b/lib/usdUfe/ufe/CMakeLists.txt @@ -107,6 +107,13 @@ if (UFE_HAS_NATIVE_TYPE_METADATA) ) endif() +if (UFE_CAMERAHANDLER_HAS_FINDALL) + target_compile_definitions(${PROJECT_NAME} + PRIVATE + UFE_CAMERAHANDLER_HAS_FINDALL=1 + ) +endif() + set(HEADERS Global.h SetVariantSelectionCommand.h diff --git a/lib/usdUfe/ufe/UsdCameraHandler.cpp b/lib/usdUfe/ufe/UsdCameraHandler.cpp index 7f884142ef..1c238ec737 100644 --- a/lib/usdUfe/ufe/UsdCameraHandler.cpp +++ b/lib/usdUfe/ufe/UsdCameraHandler.cpp @@ -31,7 +31,11 @@ PXR_NAMESPACE_USING_DIRECTIVE namespace USDUFE_NS_DEF { +#if UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL +USDUFE_VERIFY_CLASS_SETUP(Ufe::CameraHandler_v3_4, UsdCameraHandler); +#else USDUFE_VERIFY_CLASS_SETUP(Ufe::CameraHandler, UsdCameraHandler); +#endif // UFE_CAMERAHANDLER_HAS_FINDALL /*static*/ UsdCameraHandler::Ptr UsdCameraHandler::create() { return std::make_shared(); } @@ -53,7 +57,7 @@ Ufe::Camera::Ptr UsdCameraHandler::camera(const Ufe::SceneItem::Ptr& item) const return UsdCamera::create(usdItem); } -#ifdef UFE_V4_FEATURES_AVAILABLE +#if defined(UFE_V4_FEATURES_AVAILABLE) || (UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL) Ufe::Selection UsdCameraHandler::find_(const Ufe::Path& path) const { TF_VERIFY(path.runTimeId() == getUsdRunTimeId()); @@ -80,6 +84,6 @@ Ufe::Selection UsdCameraHandler::find( } return result; } -#endif +#endif // UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL } // namespace USDUFE_NS_DEF diff --git a/lib/usdUfe/ufe/UsdCameraHandler.h b/lib/usdUfe/ufe/UsdCameraHandler.h index d51fa1acd5..6c4552d820 100644 --- a/lib/usdUfe/ufe/UsdCameraHandler.h +++ b/lib/usdUfe/ufe/UsdCameraHandler.h @@ -25,7 +25,11 @@ namespace USDUFE_NS_DEF { //! \brief Interface to create a UsdCameraHandler interface object. +#if UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL +class USDUFE_PUBLIC UsdCameraHandler : public Ufe::CameraHandler_v3_4 +#else class USDUFE_PUBLIC UsdCameraHandler : public Ufe::CameraHandler +#endif // UFE_CAMERAHANDLER_HAS_FINDALL { public: typedef std::shared_ptr Ptr; @@ -40,12 +44,12 @@ class USDUFE_PUBLIC UsdCameraHandler : public Ufe::CameraHandler // Ufe::CameraHandler overrides Ufe::Camera::Ptr camera(const Ufe::SceneItem::Ptr& item) const override; -#ifdef UFE_V4_FEATURES_AVAILABLE +#if defined(UFE_V4_FEATURES_AVAILABLE) || (UFE_MAJOR_VERSION == 3 && UFE_CAMERAHANDLER_HAS_FINDALL) Ufe::Selection find_(const Ufe::Path& path) const override; static Ufe::Selection find(const Ufe::Path& stagePath, const Ufe::Path& searchPath, const PXR_NS::UsdPrim& prim); -#endif +#endif // UFE_CAMERAHANDLER_HAS_FINDALL }; // UsdCameraHandler