diff --git a/code/AssetLib/USD/USDLoader.cpp b/code/AssetLib/USD/USDLoader.cpp index b0179820e..c54265381 100644 --- a/code/AssetLib/USD/USDLoader.cpp +++ b/code/AssetLib/USD/USDLoader.cpp @@ -61,6 +61,7 @@ Copyright (c) 2006-2024, assimp team #include #include "USDLoader.h" +#include "USDLoaderUtil.h" static constexpr aiImporterDesc desc = { "USD Object Importer", @@ -79,8 +80,9 @@ namespace Assimp { using namespace std; // Constructor to be privately used by Importer -//USDImporter::USDImporter() { -//} +USDImporter::USDImporter() : + impl(USDImporterImplTinyusdz()) { +} // ------------------------------------------------------------------------------------------------ @@ -107,17 +109,11 @@ void USDImporter::InternReadFile( const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) { - DefaultLogger::create("AssimpLog.txt", Logger::VERBOSE); - if (isUsdc(pFile)) { - tinyusdz::USDLoadOptions options; - tinyusdz::Stage stage; - std::string warn, err; - bool ret = LoadUSDCFromFile(pFile, &stage, &warn, &err, options); - if (!ret) { - pScene = nullptr; - } - } -}; + impl.InternReadFile( + pFile, + pScene, + pIOHandler); +} } // namespace Assimp diff --git a/code/AssetLib/USD/USDLoader.h b/code/AssetLib/USD/USDLoader.h index 65c6f9590..3d6b58db7 100644 --- a/code/AssetLib/USD/USDLoader.h +++ b/code/AssetLib/USD/USDLoader.h @@ -49,12 +49,13 @@ Copyright (c) 2006-2024, assimp team #include #include #include -#include "tinyusdz.hh" + +#include "USDLoaderImplTinyusdz.h" namespace Assimp { class USDImporter : public BaseImporter { public: - USDImporter() = default; + USDImporter(); ~USDImporter() override = default; /// \brief Returns whether the class can handle the format of the given file. @@ -70,6 +71,7 @@ protected: aiScene *pScene, IOSystem *pIOHandler) override; private: + USDImporterImplTinyusdz impl; }; } // namespace Assimp diff --git a/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp b/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp new file mode 100644 index 000000000..197203357 --- /dev/null +++ b/code/AssetLib/USD/USDLoaderImplTinyusdz.cpp @@ -0,0 +1,87 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2024, assimp team + + All rights reserved. + + Redistribution and use of this software in source and binary forms, + with or without modification, are permitted provided that the following + conditions are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + * Neither the name of the assimp team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the assimp team. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + --------------------------------------------------------------------------- + */ + +/** @file USDLoader.cpp + * @brief Implementation of the USD importer class + */ + +#ifndef ASSIMP_BUILD_NO_USD_IMPORTER +#include + +// internal headers +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "USDLoaderImplTinyusdz.h" +#include "USDLoaderUtil.h" + +namespace Assimp { +using namespace std; + +void USDImporterImplTinyusdz::InternReadFile( + const std::string &pFile, + aiScene *pScene, + IOSystem *pIOHandler) { + DefaultLogger::create("AssimpLog.txt", Logger::VERBOSE); + if (isUsdc(pFile)) { + tinyusdz::USDLoadOptions options; + tinyusdz::Stage stage; + std::string warn, err; + bool ret = LoadUSDCFromFile(pFile, &stage, &warn, &err, options); + if (!ret) { + pScene = nullptr; + } + } +} + +} // namespace Assimp + +#endif // !! ASSIMP_BUILD_NO_USD_IMPORTER diff --git a/code/AssetLib/USD/USDLoaderImplTinyusdz.h b/code/AssetLib/USD/USDLoaderImplTinyusdz.h new file mode 100644 index 000000000..5ac99f241 --- /dev/null +++ b/code/AssetLib/USD/USDLoaderImplTinyusdz.h @@ -0,0 +1,66 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2024, assimp team + + All rights reserved. + + Redistribution and use of this software in source and binary forms, + with or without modification, are permitted provided that the + following conditions are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + + * Neither the name of the assimp team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the assimp team. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------- + */ + +/** @file USDLoader.h + * @brief Declaration of the USD importer class. + */ +#pragma once +#ifndef AI_USDLOADER_IMPL_TINYUSDZ_H_INCLUDED +#define AI_USDLOADER_IMPL_TINYUSDZ_H_INCLUDED + +#include +#include +#include +#include +#include "tinyusdz.hh" + +namespace Assimp { +class USDImporterImplTinyusdz { +public: + USDImporterImplTinyusdz() = default; + ~USDImporterImplTinyusdz() = default; + + void InternReadFile( + const std::string &pFile, + aiScene *pScene, + IOSystem *pIOHandler); +}; +} // namespace Assimp +#endif // AI_USDLOADER_IMPL_TINYUSDZ_H_INCLUDED diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 45b4dbe5f..d491535b4 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -815,6 +815,8 @@ ADD_ASSIMP_IMPORTER( 3D ADD_ASSIMP_IMPORTER( USD AssetLib/USD/USDLoader.cpp AssetLib/USD/USDLoader.h + AssetLib/USD/USDLoaderImplTinyusdz.cpp + AssetLib/USD/USDLoaderImplTinyusdz.h AssetLib/USD/USDLoaderUtil.cpp AssetLib/USD/USDLoaderUtil.h )