/** * @file XNModelManager.h * @author jinchao * @brief 模型管理器类头文件 * @version 1.0 * @date 2024-11-06 * * @copyright Copyright (c) 2024 XN * */ #pragma once #include "XNBaseFrameObject.h" class XNModelObject; XNCLASS_PTR_DECLARE(XNModelObject) struct XNModelManagerPrivate; /** * @brief 模型管理器类 * @details 用于管理仿真系统中所有加载的模型,为模型分配唯一ID。其它组件或模型可以通过该唯一ID访问或控制该模型。 */ class XNModelManager : public XNBaseFrameObject { XN_METATYPE(XNModelManager, XNBaseFrameObject) XN_DECLARE_PRIVATE(XNModelManager) public: /** * @brief 模型管理器类默认构造函数 */ XNModelManager(); /** * @brief 模型管理器类默认析构函数 */ virtual ~XNModelManager(); protected: /** * @brief 模型管理器带参构造函数 * @param p:私有结构体指针 * @details 子类构造时调用此构造函数,传入子类的私有结构体指针 */ XNModelManager(PrivateType *p); public: /** * @brief 系统开始运行前的最后准备工作 * @details 系统运行前模型管理器做最后处理的接口 */ virtual bool PrepareForExecute() override; /** * @brief 初始化模型管理器 * @details 模型管理器的初始化接口 */ virtual bool Initialize() override; /** * @brief 加载模型 * @param modelPath: QString类型,模型动态链接库路径 * @param className: QString类型,模型类名 * @param modelVersion: QString类型,模型版本号 * @param initialType: UINT32类型,初始化类型 * @param threadID: UINT32类型,线程ID * @details 加载模型 */ void LoadModel(const std::string &modelPath, const std::string &className, const std::string &modelVersion, const std::string &planeName, uint32_t initialType, uint32_t threadID); /** * @brief 注册模型信息 * @return UINT32: 模型的全局唯一ID * @details 模型通过此接口注册自身,并获取自身全局唯一ID */ uint32_t RegisterModel(); /** * @brief 获取模型指针 * @param modelID: UINT32类型,模型全局唯一ID * @return XNModelObjectPtr: 模型基类指针 */ XNModelObjectPtr GetModel(uint32_t modelID); /** * @brief 注册模型函数 * @param ModelID: UINT32类型,模型全局唯一ID * @param fun: 函数指针 * @param freqGroup: UINT32类型,提交的函数运行频率组,0为基频,1为半频,2为1/4频,3为1/8频,4为1/16频,5为1/32频 * @param RunPos: UINT32类型,提交的函数运行节点号,<2^(freqGroup) * @param RunPriorty: UINT32类型,提交的函数运行优先级,99~0,优先级数值越大,优先级越高 */ void RegisterFunction(uint32_t id, XNCallBack fun, uint32_t threadID, uint32_t freqGroup, uint32_t RunPos, uint32_t RunPriorty); };