From d0bb8ff644bde68243609f4efd89633cdf29d3c4 Mon Sep 17 00:00:00 2001 From: Lucas Gandel <lucas.gandel@kitware.com> Date: Thu, 13 Feb 2025 08:41:18 +0100 Subject: [PATCH] Allow specifying a custom path to look for controller models --- Rendering/OpenXR/vtkOpenXRRenderWindow.cxx | 20 ++++++++++++++++++++ Rendering/OpenXR/vtkOpenXRRenderWindow.h | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/Rendering/OpenXR/vtkOpenXRRenderWindow.cxx b/Rendering/OpenXR/vtkOpenXRRenderWindow.cxx index 8c9d6f806e2..71a33bab5c1 100644 --- a/Rendering/OpenXR/vtkOpenXRRenderWindow.cxx +++ b/Rendering/OpenXR/vtkOpenXRRenderWindow.cxx @@ -68,6 +68,12 @@ public: fileGlobber->SetDirectory(rootSearchDir.c_str()); fileGlobber->SetRecurse(true); fileGlobber->AddFileNames(modelsFile.c_str()); + if (!this->ModelsManifestDirectory.empty()) + { + std::string fullpath = + vtksys::SystemTools::JoinPath({ this->ModelsManifestDirectory, modelsFile }); + fileGlobber->AddFileNames(fullpath.c_str()); + } if (fileGlobber->GetNumberOfFileNames() <= 0) { vtkWarningWithObjectMacro( @@ -139,6 +145,8 @@ public: std::map<uint32_t, std::string> CurrentInteractionProfiles; std::map<std::string, std::map<uint32_t, std::string>> ProfileToModelMapping; + + std::string ModelsManifestDirectory; }; vtkStandardNewMacro(vtkOpenXRRenderWindow); @@ -542,4 +550,16 @@ void vtkOpenXRRenderWindow::SetCurrentInteractionProfile(uint32_t hand, const st } } +//------------------------------------------------------------------------------ +std::string& vtkOpenXRRenderWindow::GetModelsManifestDirectory() +{ + return this->Internal->ModelsManifestDirectory; +} + +//------------------------------------------------------------------------------ +void vtkOpenXRRenderWindow::SetModelsManifestDirectory(const std::string& path) +{ + this->Internal->ModelsManifestDirectory = path; +} + VTK_ABI_NAMESPACE_END diff --git a/Rendering/OpenXR/vtkOpenXRRenderWindow.h b/Rendering/OpenXR/vtkOpenXRRenderWindow.h index 7442f324495..35f9df001cc 100644 --- a/Rendering/OpenXR/vtkOpenXRRenderWindow.h +++ b/Rendering/OpenXR/vtkOpenXRRenderWindow.h @@ -140,6 +140,16 @@ public: std::string& GetCurrentInteractionProfile(uint32_t); void SetCurrentInteractionProfile(uint32_t, const std::string& profile); + ///@{ + /** + * Get/Set a custom path to look for the controllers models. + * Default is empty, only the parent of the directory containing the library/executable is + * checked. + */ + std::string& GetModelsManifestDirectory(); + void SetModelsManifestDirectory(const std::string& path); + ///@} + protected: vtkOpenXRRenderWindow(); ~vtkOpenXRRenderWindow() override; -- GitLab