2025-04-28 12:25:20 +08:00
|
|
|
|
/**
|
|
|
|
|
* @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;
|
2025-05-20 15:39:40 +08:00
|
|
|
|
XNCLASS_PTR_DECLARE(XNModelObject)
|
|
|
|
|
|
|
|
|
|
struct XNModelManagerPrivate;
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 模型管理器类
|
|
|
|
|
* @details 用于管理仿真系统中所有加载的模型,为模型分配唯一ID。其它组件或模型可以通过该唯一ID访问或控制该模型。
|
|
|
|
|
*/
|
|
|
|
|
class XNModelManager : public XNBaseFrameObject
|
|
|
|
|
{
|
2025-05-20 15:39:40 +08:00
|
|
|
|
XN_METATYPE(XNModelManager, XNBaseFrameObject)
|
|
|
|
|
XN_DECLARE_PRIVATE(XNModelManager)
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* @brief 模型管理器类默认构造函数
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
XNModelManager();
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 模型管理器类默认析构函数
|
|
|
|
|
*/
|
|
|
|
|
virtual ~XNModelManager();
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
/**
|
|
|
|
|
* @brief 模型管理器带参构造函数
|
|
|
|
|
* @param p:私有结构体指针
|
|
|
|
|
* @details 子类构造时调用此构造函数,传入子类的私有结构体指针
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
XNModelManager(PrivateType *p);
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
2025-05-20 15:39:40 +08:00
|
|
|
|
public:
|
2025-04-28 12:25:20 +08:00
|
|
|
|
/**
|
|
|
|
|
* @brief 系统开始运行前的最后准备工作
|
|
|
|
|
* @details 系统运行前模型管理器做最后处理的接口
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
virtual bool PrepareForExecute() override;
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 初始化模型管理器
|
|
|
|
|
* @details 模型管理器的初始化接口
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
virtual bool Initialize() override;
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 加载模型
|
|
|
|
|
* @param modelPath: QString类型,模型动态链接库路径
|
|
|
|
|
* @param className: QString类型,模型类名
|
|
|
|
|
* @details 加载模型
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
void LoadModel(const std::string &modelPath, const std::string &className, uint32_t initialType,
|
|
|
|
|
uint32_t threadID);
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 注册模型信息
|
|
|
|
|
* @return UINT32: 模型的全局唯一ID
|
|
|
|
|
* @details 模型通过此接口注册自身,并获取自身全局唯一ID
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
uint32_t RegisterModel();
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 获取模型指针
|
|
|
|
|
* @param modelID: UINT32类型,模型全局唯一ID
|
|
|
|
|
* @return XNModelObjectPtr: 模型基类指针
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
XNModelObjectPtr GetModel(uint32_t modelID);
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @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,优先级数值越大,优先级越高
|
|
|
|
|
*/
|
2025-05-20 15:39:40 +08:00
|
|
|
|
void RegisterFunction(uint32_t id, XNCallBack fun, uint32_t threadID, uint32_t freqGroup,
|
|
|
|
|
uint32_t RunPos, uint32_t RunPriorty);
|
2025-04-28 12:25:20 +08:00
|
|
|
|
};
|