| 1 | /**************************************************************************************** |
| 2 | |
| 3 | Copyright (C) 2015 Autodesk, Inc. |
| 4 | All rights reserved. |
| 5 | |
| 6 | Use of this software is subject to the terms of the Autodesk license agreement |
| 7 | provided at the time of installation or download, or which otherwise accompanies |
| 8 | this software in either electronic or hard copy form. |
| 9 | |
| 10 | ****************************************************************************************/ |
| 11 | |
| 12 | //! \file fbxutils.h |
| 13 | #ifndef _FBXSDK_CORE_BASE_UTILITIES_H_ |
| 14 | #define _FBXSDK_CORE_BASE_UTILITIES_H_ |
| 15 | |
| 16 | #include <fbxsdk/fbxsdk_def.h> |
| 17 | |
| 18 | #include <fbxsdk/core/base/fbxstring.h> |
| 19 | #include <fbxsdk/core/base/fbxstatus.h> |
| 20 | |
| 21 | #include <fbxsdk/fbxsdk_nsbegin.h> |
| 22 | |
| 23 | #ifndef FBXSDK_ENV_WINSTORE |
| 24 | /** Retrieve the environment variable value. |
| 25 | * \return A new string containing the environment variable value. */ |
| 26 | FBXSDK_DLL FbxString FbxGetEnv(const char* pEnvVar); |
| 27 | |
| 28 | /** Get the application directory |
| 29 | * \return The application directory. */ |
| 30 | FBXSDK_DLL FbxString FbxGetApplicationDirectory(); |
| 31 | #endif |
| 32 | |
| 33 | /** Retrieve the system temporary folder path name. |
| 34 | * \return A new string containing the system temporary folder path name. */ |
| 35 | FBXSDK_DLL FbxString FbxGetSystemTempPath(); |
| 36 | |
| 37 | /** Override the system temporary folder path name. |
| 38 | * \param pPathUTF8 The system temporary folder to use for override. */ |
| 39 | FBXSDK_DLL void FbxSetSystemTempPath(const char* pPathUTF8); |
| 40 | |
| 41 | /** Retrieve the working directory of the system in UTF8 format. |
| 42 | * \return A string that contain the current working directory of the system. */ |
| 43 | FBXSDK_DLL FbxString FbxGetCurrentWorkPath(); |
| 44 | |
| 45 | /** Change the working directory of the system. */ |
| 46 | FBXSDK_DLL void FbxSetCurrentWorkPath(const char* pPath_UTF8); |
| 47 | |
| 48 | class FBXSDK_DLL FbxPathUtils |
| 49 | { |
| 50 | public: |
| 51 | /** Bind together a root path with a file path. |
| 52 | * \param pRootPath The root path that will get binded to the file path. |
| 53 | * \param pFilePath The file path to bind to the root path. |
| 54 | * \param pCleanPath If true, the resulting path will be cleaned via FbxPathUtils::Clean(). |
| 55 | * \return Both paths binded together forming a new file path. |
| 56 | * \remark If the file path is already a full valid path, pFilePath is returned. |
| 57 | */ |
| 58 | static FbxString Bind(const char* pRootPath, const char* pFilePath, bool pCleanPath=true); |
| 59 | |
| 60 | /** Extract the folder name from the given file path. |
| 61 | * \param pFilePath The given file path. |
| 62 | * \return The folder name. If there isn't any '\\' or '/' in the given file path, it will return pFilePath. |
| 63 | */ |
| 64 | static FbxString GetFolderName(const char* pFilePath); |
| 65 | |
| 66 | /** Extract file name from the given file path. |
| 67 | * \param pFilePath The given file path. |
| 68 | * \param pWithExtension Decide the file name with extension or without extension. |
| 69 | * If it is true, return the file name with extension; |
| 70 | * if it is false, return the file name without extension. |
| 71 | */ |
| 72 | static FbxString GetFileName(const char* pFilePath, bool pWithExtension=true); |
| 73 | |
| 74 | /** Extract the file extension in the given file path. |
| 75 | * \param pFilePath The file path to extract the extension. |
| 76 | * \return The file extension without the '.' character. |
| 77 | * \remark Return empty string if the file path doesn't contain a valid extension. |
| 78 | */ |
| 79 | static FbxString GetExtensionName(const char* pFilePath); |
| 80 | |
| 81 | /** Change or append a file extension to the specified file path. |
| 82 | * \param pFilePath The file path to change the file extension |
| 83 | * \param pExtension The extension to change or append to the file path. |
| 84 | * \return The file path with the file extension changed/added. |
| 85 | * \remark If the file path doesn't end with a valid file name, pFilePath is returned. |
| 86 | */ |
| 87 | static FbxString ChangeExtension(const char* pFilePath, const char* pExtension); |
| 88 | |
| 89 | //! Test if the given path is relative path, if it is return true. |
| 90 | static bool IsRelative(const char* pPath); |
| 91 | |
| 92 | /** Get the given new path's relative path to the given root path. |
| 93 | * \param pRootPath The given root path |
| 94 | * \param pNewPath The given new path. If it is only file name, the default directory is work directory. |
| 95 | * \return The relative path. |
| 96 | * \remarks If the given two paths have the same drive, the function will turn '\\' in the relative path to '/'. |
| 97 | */ |
| 98 | static FbxString GetRelativePath(const char* pRootPath, const char* pNewPath); |
| 99 | |
| 100 | //! Get the given new path's relative path to the given root path. |
| 101 | static FbxString GetRelativeFilePath(const char* pRootPath, const char* pNewFilePath); |
| 102 | |
| 103 | /** Get the full path of given path (if the given path is relative path, |
| 104 | * it will take current directory as default root path.) |
| 105 | */ |
| 106 | static FbxString Resolve(const char* pRelPath); |
| 107 | |
| 108 | //! Clean the redundant and useless denotations in given path name. |
| 109 | static FbxString Clean(const char* pPath); |
| 110 | |
| 111 | /** Generate full safe file path name you can use to create new file. |
| 112 | * \param pFolder The folder where the file name should be attempted to be created. |
| 113 | * \param pPrefix The prefix of generated file name. |
| 114 | * \return A valid file path that can safely be used to create a new file. |
| 115 | */ |
| 116 | static FbxString GenerateFileName(const char* pFolder, const char* pPrefix); |
| 117 | |
| 118 | /** Verify if the specified folder path exist. |
| 119 | * \param pFolderPathUTF8 The folder path to test its existance. |
| 120 | * \return True if the folder path exist, false otherwise. |
| 121 | * \remark This function work for relative paths. It will search from the current work path. */ |
| 122 | static bool Exist(const char* pFolderPathUTF8); |
| 123 | |
| 124 | /** Create the specified folder path if it doesn't exist. |
| 125 | * \param pFolderPathUTF8 The folder path to create, in UTF8 encoding. |
| 126 | * \return True if folder path already exist, or if it was successfully created, false otherwise. |
| 127 | * \remark This function will create multiple folders if needed, and it also work for relative paths. */ |
| 128 | static bool Create(const char* pFolderPathUTF8); |
| 129 | |
| 130 | /** Delete the specified folder path and all its content recursively. |
| 131 | * \param pFolderPathUTF8 The folder path to delete, in UTF8 encoding. |
| 132 | * \return True if folder path was successfully deleted, false otherwise. |
| 133 | * \remark This function work for relative paths. It will search from the current work path. */ |
| 134 | static bool Delete(const char* pFolderPathUTF8); |
| 135 | |
| 136 | #ifndef FBXSDK_ENV_WINSTORE |
| 137 | /** Verify if the folder contains items or not. |
| 138 | * \param pFolderPath_UTF8 The folder path to test if it contains items. |
| 139 | * \return True if the folder contain any kind of entry type. */ |
| 140 | static bool IsEmpty(const char* pFolderPath_UTF8); |
| 141 | #endif |
| 142 | }; |
| 143 | |
| 144 | /** Global accessor to an FbxStatus object. |
| 145 | * This object is not used internally by the FBX SDK. It is provided for convenience and its usage is shown in the custom reader/writers samples. */ |
| 146 | class FBXSDK_DLL FbxStatusGlobal |
| 147 | { |
| 148 | public: |
| 149 | static FbxStatus& GetRef() |
| 150 | { |
| 151 | if( !mStatusPtr ) |
| 152 | { |
| 153 | mStatusPtr = FbxNew<FbxStatus>(); |
| 154 | } |
| 155 | return *mStatusPtr; |
| 156 | } |
| 157 | |
| 158 | private: |
| 159 | FbxStatusGlobal(){ mStatusPtr = NULL; } |
| 160 | ~FbxStatusGlobal(){ FbxDelete<FbxStatus>(mStatusPtr); } |
| 161 | static FbxStatusGlobal sgFbxStatusGlobal; |
| 162 | static FbxStatus* mStatusPtr; |
| 163 | }; |
| 164 | |
| 165 | |
| 166 | #include <fbxsdk/fbxsdk_nsend.h> |
| 167 | |
| 168 | #endif /* _FBXSDK_CORE_BASE_UTILITIES_H_ */ |
| 169 | |