/*****************************************************************//** * @file GraphProviderManager.h * @brief 三维数据管理类。 * * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 *********************************************************************/ #ifndef __GRAPHPROVIDERMANAGER_H__ #define __GRAPHPROVIDERMANAGER_H__ #include #include "GraphDataProviderAPI.h" #include #include #include #include "FITK_Kernel/FITKCore/FITKCoreMacros.h" // 前置声明 namespace Comp { class FITKGraph3DWindowVTK; } namespace GraphData { class GraphProviderBase; class GraphModelProvider; class GraphMarkProvider; } namespace GraphData { /** * @brief 管理所有三维数据分装类。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-03-27 */ class GRAPHDATAPROVIDERAPI GraphProviderManager : public QObject { Q_OBJECT public: /** * @brief 获取单例实例。[静态] * @return 实例 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ static GraphProviderManager* getInstance(); /** * @brief 手动销毁。[静态] * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ static void Delete(); /** * @brief 获取三维模型可视化对象分装类,没有则初始化。 * @param graphWidget:可视化窗口 * @return 三维模型数据分装类指针 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ GraphModelProvider* getModelProvider(Comp::FITKGraph3DWindowVTK* graphWidget); /** * @brief 获取符号可视化对象分装类,没有则初始化。 * @param graphWidget:可视化窗口 * @return 符号可视化对象分装类指针 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-07-26 */ GraphMarkProvider* getMarkProvider(Comp::FITKGraph3DWindowVTK* graphWidget); /** * @brief 在所有算例数据管理尝试寻找该数据ID对应的可视化对象并刷新,如果不存在则跳出。 * @param dataId:需要更新的数据ID * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ void updateObjectById(int dataId); /** * @brief 根据当前拾取类型与方法初始化演员属性。 * @param pickObjType:拾取对象类型 * @param pickMethod:拾取方法 * @param dataObjId:生效数据ID(-1则对所有数据生效)[缺省] * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-07-19 */ void setActorStateByPickInfo(int pickObjType, int pickMethod, int dataObjId = -1); private: /** * @brief 构造函数。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ GraphProviderManager(); /** * @brief 析构函数。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ ~GraphProviderManager(); /** * @brief 析构数据管理器。 * @param provider:数据管理器[引用] * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ template void deleteProvider(T*& provider) { if (provider) { delete provider; } provider = nullptr; } /** * @brief 批量析构数据管理器。 * @param providers:数据管理器列表[引用] * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ template void deleteProviders(QList& providers) { // 清除数据管理指针。 for (T* obj : providers) { if (obj) { delete obj; } } providers.clear(); } private: /** * @brief 静态实例。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ static GraphProviderManager* s_instance; /** * @brief 静态锁。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ static QMutex m_mutex; /** * @brief 三维窗口中算例的三维模型可视化对象分装类。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-06-12 */ GraphModelProvider* m_modelProvider{ nullptr }; /** * @brief 三维窗口中算例的符号可视化对象分装类。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-07-26 */ GraphMarkProvider* m_markProvider{ nullptr }; }; } // namespace GraphData #endif // __GRAPHPROVIDERMANAGER_H__