| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef MATERIAL_MATERIALMANAGER_H |
| #define MATERIAL_MATERIALMANAGER_H |
|
|
| #include <memory> |
|
|
| #include <filesystem> |
|
|
| #include <Base/Parameter.h> |
| #include <Mod/Material/MaterialGlobal.h> |
|
|
| #include "FolderTree.h" |
| #include "Materials.h" |
|
|
| #include "MaterialFilter.h" |
| #include "MaterialLibrary.h" |
|
|
| namespace fs = std::filesystem; |
|
|
| class QMutex; |
|
|
| namespace App |
| { |
| class Material; |
| } |
|
|
| namespace Materials |
| { |
| class MaterialManagerExternal; |
| class MaterialManagerLocal; |
| class MaterialFilter; |
| class MaterialFilterOptions; |
|
|
| class MaterialsExport MaterialManager: public Base::BaseClass, ParameterGrp::ObserverType |
| { |
| TYPESYSTEM_HEADER_WITH_OVERRIDE(); |
|
|
| public: |
| ~MaterialManager() override; |
|
|
| static MaterialManager& getManager(); |
|
|
| static void cleanup(); |
| static void refresh(); |
|
|
| |
| static std::shared_ptr<App::Material> defaultAppearance(); |
| static std::shared_ptr<Material> defaultMaterial(); |
| static QString defaultMaterialUUID(); |
|
|
| |
| bool useExternal() const { return _useExternal; } |
| std::shared_ptr<std::list<std::shared_ptr<MaterialLibrary>>> getLibraries(); |
| std::shared_ptr<std::list<std::shared_ptr<MaterialLibrary>>> getLocalLibraries(); |
| std::shared_ptr<MaterialLibrary> getLibrary(const QString& name) const; |
| void createLibrary(const QString& libraryName, |
| const QString& iconPath, |
| bool readOnly = true); |
| void createLocalLibrary(const QString& libraryName, |
| const QString& directory, |
| const QString& iconPath, |
| bool readOnly = true); |
| void renameLibrary(const QString& libraryName, const QString& newName); |
| void changeIcon(const QString& libraryName, const QString& iconPath); |
| void removeLibrary(const QString& libraryName); |
| std::shared_ptr<std::vector<LibraryObject>> |
| libraryMaterials(const QString& libraryName, bool local = false); |
| std::shared_ptr<std::vector<LibraryObject>> |
| libraryMaterials(const QString& libraryName, |
| const MaterialFilter& filter, |
| const MaterialFilterOptions& options, |
| bool local = false); |
| bool isLocalLibrary(const QString& libraryName); |
|
|
| |
| std::shared_ptr<std::list<QString>> |
| getMaterialFolders(const std::shared_ptr<MaterialLibrary>& library) const; |
| void createFolder(const std::shared_ptr<MaterialLibrary>& library, const QString& path); |
| void renameFolder(const std::shared_ptr<MaterialLibrary>& library, |
| const QString& oldPath, |
| const QString& newPath); |
| void deleteRecursive(const std::shared_ptr<MaterialLibrary>& library, const QString& path); |
|
|
| |
| std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> |
| getMaterialTree(const MaterialLibrary& library, |
| const Materials::MaterialFilter& filter) const; |
| std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> |
| getMaterialTree(const MaterialLibrary& library, |
| const Materials::MaterialFilter& filter, |
| const MaterialFilterOptions& options) const; |
| std::shared_ptr<std::map<QString, std::shared_ptr<MaterialTreeNode>>> |
| getMaterialTree(const MaterialLibrary& library) const; |
|
|
| |
| std::shared_ptr<std::map<QString, std::shared_ptr<Material>>> getLocalMaterials() const; |
| std::shared_ptr<Material> getMaterial(const QString& uuid) const; |
| static std::shared_ptr<Material> getMaterial(const App::Material& material); |
| std::shared_ptr<Material> getMaterialByPath(const QString& path) const; |
| std::shared_ptr<Material> getMaterialByPath(const QString& path, const QString& library) const; |
| std::shared_ptr<Material> getParent(const std::shared_ptr<Material>& material) const; |
| bool exists(const QString& uuid) const; |
| bool exists(const MaterialLibrary& library, const QString& uuid) const; |
| void remove(const QString& uuid) const; |
|
|
| void saveMaterial(const std::shared_ptr<MaterialLibrary>& library, |
| const std::shared_ptr<Material>& material, |
| const QString& path, |
| bool overwrite, |
| bool saveAsCopy, |
| bool saveInherited) const; |
|
|
| bool isMaterial(const fs::path& p) const; |
| bool isMaterial(const QFileInfo& file) const; |
|
|
| std::shared_ptr<std::map<QString, std::shared_ptr<Material>>> |
| materialsWithModel(const QString& uuid) const; |
| std::shared_ptr<std::map<QString, std::shared_ptr<Material>>> |
| materialsWithModelComplete(const QString& uuid) const; |
| void dereference(std::shared_ptr<Material> material) const; |
| void dereference() const; |
|
|
| |
| void OnChange(ParameterGrp::SubjectType& rCaller, ParameterGrp::MessageType Reason) override; |
|
|
| #if defined(BUILD_MATERIAL_EXTERNAL) |
| void migrateToExternal(const std::shared_ptr<Materials::MaterialLibrary>& library); |
| void validateMigration(const std::shared_ptr<Materials::MaterialLibrary>& library); |
|
|
| |
| static double materialHitRate(); |
| #endif |
|
|
| private: |
| MaterialManager(); |
|
|
| FC_DISABLE_COPY_MOVE(MaterialManager); |
|
|
| static void initManagers(); |
|
|
| static MaterialManager* _manager; |
|
|
| #if defined(BUILD_MATERIAL_EXTERNAL) |
| static std::unique_ptr<MaterialManagerExternal> _externalManager; |
| #endif |
| static std::unique_ptr<MaterialManagerLocal> _localManager; |
| static QMutex _mutex; |
| static bool _useExternal; |
|
|
| ParameterGrp::handle _hGrp; |
| }; |
|
|
| } |
|
|
| #endif |