XNSim/XNCore/XNModelManager.h
2025-04-28 12:25:20 +08:00

119 lines
3.5 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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;
class XNModelManagerPrivate;
/**
* @brief 模型管理器类
* @details 用于管理仿真系统中所有加载的模型为模型分配唯一ID。其它组件或模型可以通过该唯一ID访问或控制该模型。
*/
class XNModelManager : public XNBaseFrameObject
{
/**
* @brief 使用禁止复制类宏定义自身禁止复制
*/
Q_OBJECT
Q_DECLARE_PRIVATE(XNModelManager)
Q_DISABLE_COPY(XNModelManager)
public:
/**
* @brief 模型管理器类默认构造函数
*/
explicit XNModelManager(QObject *parent = nullptr);
/**
* @brief 模型管理器类默认析构函数
*/
virtual ~XNModelManager();
protected:
/**
* @brief 模型管理器带参构造函数
* @param p:私有结构体指针
* @details 子类构造时调用此构造函数,传入子类的私有结构体指针
*/
XNModelManager(XNModelManagerPrivate &dd, QObject *parent = nullptr);
public slots:
/**
* @brief 系统开始运行前的最后准备工作
* @details 系统运行前模型管理器做最后处理的接口
*/
virtual void OnPrepareForExecute() override;
/**
* @brief 初始化模型管理器
* @details 模型管理器的初始化接口
*/
virtual void OnInitialize() override;
/**
* @brief 加载模型
* @param modelPath: QString类型模型动态链接库路径
* @param className: QString类型模型类名
* @details 加载模型
*/
void OnLoadModel(const QString &modelPath, const QString &className);
/**
* @brief 设置仿真系统运行基频
* @param dBaseFreq: double类型频率值单位Hz
* @details 仿真系统所有线程以此基频的 1 或 1/2 或 1/4 或 1/8 或 1/16 或 1/32 倍运行
*/
void OnSetBaseFreq(const double &dBaseFreq);
public:
/**
* @brief 注册模型信息
* @return UINT32: 模型的全局唯一ID
* @details 模型通过此接口注册自身并获取自身全局唯一ID
*/
quint32 RegisterModel();
/**
* @brief 获取模型指针
* @param modelID: UINT32类型模型全局唯一ID
* @return XNModelObjectPtr: 模型基类指针
*/
XNModelObject *GetModel(quint32 modelID);
public slots:
/**
* @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类型提交的函数运行优先级990优先级数值越大优先级越高
*/
void OnRegisterFunction(quint32 id, XNCallBack fun, quint32 freqGroup, quint32 RunPos,
quint32 RunPriorty);
signals:
/**
* @brief 注册函数信号
* @param id: 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类型提交的函数运行优先级990优先级数值越大优先级越高
*/
void RegisterFunction(quint32 id, XNCallBack fun, quint32 freqGroup, quint32 RunPos,
quint32 RunPriorty);
void InitializeSuccess();
void PrepareForExecuteSuccess();
};