# 图形组件类
本文介绍模型视图管理类、模型树数据类、模型参数面板类、仿真曲线视图类和模型仿真设置控件等 API。
# MwMoGraphicsViewController
模型视图管理类,负责显示模型的图标视图,组件视图和文本视图,并提供模型编辑功能。
| 函数名 | 简介 |
|---|---|
| CloseMoWindow | 关闭模型窗口 |
| OpenMoWindow | 打开模型窗口 |
| CloseCurrentWindow | 关闭当前窗口 |
| CloseAllWindow | 关闭所有窗口 |
| SetMdiInterface | 设置视图接口 |
| SetClassDirty | 设置脏标 |
| GetCurrentClassKey | 获取当前模型key |
| SaveCurrentWindow | 保存当前模型 |
| SigUpdate | 模型视图更新信号 |
| SigClassDirtyChanged | 脏标变化信号 |
| SigAppendClass | 添加模型信号 |
| SigRemoveClass | 移除模型信号 |
| SigReplaceClass | 替换模型信号 |
# 公共类型
enum MwModelicaLayer
{
MLAYER_ICON,
MLAYER_DIAGRAM,
MLAYER_TEXT,
MLAYER_DOCUMENT,
MLAYER_UNKNOW
}
| 功能 | 模型视图层次 |
|---|---|
| 参数 | MLAYER_ICON 模型图标图层 MLAYER_DIAGRAM 模型组件图层 MLAYER_TEXT 模型文本图层 MLAYER_DOCUMENT 模型帮助图层 MLAYER_UNKNOW |
enum mogv::MoGvEvent::Type
{
None = 0,
SelectChanged,
ComponentLevelChanged,
ViewChanged,
MoWindowChanged,
ActivateWindowChanged,
ModelDataChanged,
ModelAppended,
ModelRemoved
}
| 功能 | 模型视图活动 |
|---|---|
| 参数 | None 不合法的活动 SelectChanged 组件选择变化 ComponentLevelChanged 组件层次变化 ViewChanged 视图变化 MoWindowChanged 模型窗口切换 ActivateWindowChanged 活动窗口变化 ModelDataChanged 模型数据变化 ModelAppended 模型打开或新建 ModelRemoved 卸载顶层模型或删除嵌套模型 |
# 公共函数
# CloseMoWindow
关闭模型窗口。
语法
/** * @brief 关闭模型窗口 * @param [in] main_key 模型key */ void CloseMoWindow(MWint main_key)说明
关闭模型窗口。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized(); mo_controller->CloseMoWindow(mo_key);
# OpenMoWindow
打开模型窗口。
语法
/** * @brief 打开模型窗口 * @param[in] key 需要打开的模型key * @param[in] in_new_tab 是否在新窗口中打开模型 * @param[in] layer 打开模型的图层 */ void OpenMoWindow(MWint key, bool in_new_tab = false, MwModelicaLayer layer = MLAYER_UNKNOW)说明
打开模型窗口。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized();
# CloseCurrentWindow
关闭当前模型窗口。
语法
void CloseCurrentWindow()说明
关闭当前模型窗口。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized(); mo_controller->CloseCurrentWindow();
# CloseAllWindow
关闭所有模型窗口。
语法
void CloseAllWindow()说明
关闭所有模型窗口。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized(); mo_controller->CloseAllWindow();
# SetMdiInterface
设置视图接口类。
语法
/** * @brief 设置试图接口类 * @param [in]mdi 视图接口 */ void SetMdiInterface(MwMdiInterface *mdi)说明
设置视图接口类,创建模型控制器后需调用该接口设置一个模型视图。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized();
# SetClassDirty
设置模型脏标志。
语法
/** * @brief 设置模型脏标志 * @param [in]class_key 模型key * @param [in]dirty 是否设置脏标 */ void SetClassDirty(MWint class_key, bool dirty)说明
设置模型脏标志,当中央视图的模型发送改变后,可调用该接口将模型树设置为脏标。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized(); mo_controller->SetClassDirty(mo_key,true);
# GetCurrentClassKey
获取当前窗口的模型 key。
语法
MWint GetCurrentClassKey()说明
获取当前窗口的模型 key。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized(); MWint cur_key = mo_controller->GetCurrentClassKey();
# SaveCurrentWindow
保存当前窗口的模型。
语法
/** * @brief 保存当前模型 * @param [in] close_window 是否关闭窗口 * @param [in] show_error_dlg 是否弹出错误提示对话框(如果模型保存失败) */ bool SaveCurrentWindow( bool close_window = false, bool show_error_dlg = true)说明
保存当前窗口的模型。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); class_manager->GetMoHandler()->OpenFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MWint mo_key = class_manager->GetMoHandler()->GetTopClassInFile(L"C:/Users/TR/Documents/MWORKS/WorkSpace/PID_Controller.mo"); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwMoWindowMdi *mo_mdi = new MwMoWindowMdi(mo_controller); mo_controller->SetMdiInterface(mo_mdi); mo_controller->OpenMoWindow(mo_key); main_win.setCentralWidget(mo_mdi); main_win.showMaximized(); mo_controller->SaveCurrentWindow();
# 信号
# SigUpdate
模型视图更新信号,报告模型视图中发生的行为以供其他面板刷新。
语法
/* ** @brief 操作ClassBrowser/ModelicaWindow(ModelicaView)/PropertyPanel等面板 * @param [in]mo_event 模型视图行为类型 * @param [in]class_key_list 模型视图的行为操作对象key列表 ** @note触发UpdateType类型的信号,激活连接信号的面板同步刷新 */ void SigUpdate(mogv::MoGvEvent mo_event, Qlist<MWint> class_key_list)说明
模型视图更新信号,报告模型视图中发生的行为以供其他面板刷新。
# SigClassDirtyChanged
模型脏标志变化信号。
语法
void SigClassDirtyChanged(MWint class_key)说明
模型脏标志变化信号。
# SigAppendClass
内核添加模型信号。
- 语法
void SigAppendClass(MWint key)
说明
内核添加模型信号。
# SigRemoveClass
内核移除模型信号。
语法
void SigRemoveClass(MWint key)说明
内核移除模型信号。
# SigReplaceClass
内核替换模型信号。
语法
void SigReplaceClass(MWint key)说明
内核替换模型信号。
# MwMoWindowMdi
中央视图控件,负责管理模型视图窗口,创建后设置到 mo_controller 中。
# MwMoClassTreeModel
模型树数据类,用于将内核的模型数据操作同步到界面模型中,将 model 设置到 QTreeView 中使用。
| 函数名 | 简介 |
|---|---|
| SetClassifyName | 设置分类 |
| AppendTopClass | 增加顶层模型 |
| GetTopItems | 获取所有顶层节点 |
| InsertClass | 插入模型 |
| RemoveClass | 移除模型 |
# 公共函数
# SetClassifyName
设置顶层分类节点
语法
/** * @brief 设置分类 * @param[in] name_list 分类名称列表 */ void SetClassifyName(const QstringList &name_list)说明
设置顶层分类节点,为模型树设置分类,默认分类是“模型库”和“用户模型”。
示例
QMainWindow main_win; MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); MwMoClassTreeModel *tree_model = new MwMoClassTreeModel(class_manager); QTreeView *tree_view = new QTreeView; tree_view->setModel(tree_model); main_win.setCentralWidget(tree_view); main_win.showMaximized(); tree_model->SetClassifyName(QStringList() << QStringLiteral("分类1") << QStringLiteral("分类2") << QStringLiteral("分类3"));
# AppendTopClass
添加顶层模型。
语法
/** * @brief 添加顶层模型 * @param [in]key 模型key * @param [in]classify_name 类型名 */ void AppendTopClass(MWint key, const Qstring &classify_name)说明
添加顶层模型。
示例
QMainWindow main_win; MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); class_manager->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1"); MWint lib_key = class_manager->GetMoHandler()->GetKeyByTypeName("Modelica"); MwMoClassTreeModel *tree_model = new MwMoClassTreeModel(class_manager); QTreeView *tree_view = new QTreeView; tree_view->setModel(tree_model); tree_model->SetClassifyName(QStringList() << QStringLiteral("模型库")); main_win.setCentralWidget(tree_view); main_win.showMaximized(); tree_model->AppendTopClass(lib_key, QStringLiteral("模型库"));tree_model->AppendTopClass(lib_key, QStringLiteral("用户模型"));
# GetTopItems
获取所有顶层节点。
语法
Qlist<QStandardItem*> GetTopItems()说明
获取所有顶层节点。
示例
QList<QStandardItem*> lst_item = tree_model->GetTopItems(); QStringList lst_item_name; for (auto item : lst_item) { qDebug() << item->data(NameRole).value<QString>(); }
# InsertClass
在指定节点下插入模型。
语法
/** * @brief 插入模型 * @param [in]key 模型key * @param [in]parent_item 父节点 */ void InsertClass(MWint key, QstandardItem *parent_item)说明
在指定节点下插入模型,插入节点时,模型树会自动刷新。
示例
调用 MwMoClassTreeModel 的 InsertClass 接口,参数 1 设置为 PID_Controller 模型键值,参数 2 设置为 Modelica 模型树顶层节点。
tree_model->InsertClass(mo_key, lib_item);
# RemoveClass
移除模型。
语法
void RemoveClass(MWint key)说明
移除模型,模型视图中心和模型浏览树会自动进行移除刷新。
示例
调用 MwMoClassTreeModel 的 InsertClass 接口,参数 1 设置为 PID_Controller 模型键值,参数 2 设置为 Modelica 模型树顶层节点。
tree_model->RemoveClass(lib_key);
# MwModelParameterTabWidget
模型参数面板类,能够显示选中模型或组件参数,并且支持对各种类型的参数进行编辑,能够与中央视图进行联动。
| 函数名 | 简介 |
|---|---|
| GetParamEditMode | 获取参数编辑模式 |
| SlotUpdate | 更新面板 |
# 公共类型
enum MwParamEditMode
{
PEM_Panel,
PEM_Dialog
}
| 功能 | 参数编辑模式 |
|---|---|
| 参数 | PEM_Panel 面板模式 PEM_Dialog 对话框模式 |
# 公共函数
# GetParamEditMode
获取参数编辑模式。
语法
MwParamEditMode GetParamEditMode()说明
获取参数编辑模式。
示例
QMainWindow main_win; MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); MwMoGraphicsViewController *mo_controller = new MwMoGraphicsViewController(class_manager); MwModelParameterTabWidget *param_wgt = new MwModelParameterTabWidget(mo_controller, PEM_Dialog); main_win.setCentralWidget(param_wgt); main_win.showMaximized(); MwParamEditMode edit_mode = param_wgt->GetParamEditMode();
# 公共槽函数
# SlotUpdate
响应模型视图模块更新信号,刷新参数面板。
语法
void SlotUpdate(mogv::MoGvEvent mo_event, Qlist<MWint> ckass_key_list)说明
响应模型视图模块更新信号,刷新参数面板。
# MwSimPlotWindow
仿真曲线视图类,用于显示仿真变量曲线。
| 函数名 | 简介 |
|---|---|
| GetPlotWinIndex | 获取曲线ID |
| AddCurveToCurrentView | 添加变量到曲线图 |
| SigWindowClosed | 窗口关闭信号 |
# GetPlotWinIndex
获取曲线窗口编号。
语法
size_t GetPlotWinIndex()说明
获取曲线窗口编号,每个曲线窗口存在唯一 ID,通过获取 ID 号可定位到曲线窗口。
示例
MwClassManager *class_manager = new MwClassManager; class_manager->Initialize(); MwSimPlotWindow *plot_win = new MwSimPlotWindow(2, true, class_manager); size_t win_index = plot_win->GetPlotWinIndex();
# AddCurveToCurrentView
添加变量曲线到当前视图中。
语法
/** * @brief 增加变量曲线到当前视图 * @param [in]curve_name 曲线名称 * @param [in]data 曲线数据 * @return 返回曲线 */ MwPlotCurve* AddCurveToCurrentView( const QString &curve_name, MwAbstractData *data)说明
添加变量曲线到当前视图中,通过传入变量的名称和当前结果数据,即可创建变量曲线。
示例
调用MwSimPlotWindow的AddCurveToCurrentView接口,参数1设置为PI.u_m,参数2设置为(MwAbstractData*)sim_data
plot_win->AddCurveToCurrentView("PI.u_m", (MwAbstractData*)sim_data);
# SigWindowClosed
窗口关闭信号。
语法
void SigWindowClosed(MwSimPlotWindow *plot_win)说明
窗口关闭信号。
# MwSimConfigWidget
模型仿真设置控件,用于显示和修改模型仿真设置。
| 函数名 | 简介 |
|---|---|
| GetSimConfig | 获取仿真设置 |
模块描述:模型仿真设置控件,用于显示和修改模型仿真设置。
模块使用:
MwExperimentData exp_data;
MwSimConfigWidget sim_config_wgt = new MwSimConfigWidget(exp_data, &main_win);
# 公共类型
struct MwExperimentData
{
MWdouble startTime;
MWdouble stopTime;
MWdouble intervalLength;
MWcint numberOfIntervals;
std::string algorithm;
MWdouble tolerance;
MWdouble fixedOrInitStepSize;
std::vector<std::pair<MWdouble, MWdouble>> pieceWiseStep;
}
| 功能 | 仿真配置 |
|---|---|
| 参数 | startTime 仿真开始时间 stopTime 仿真终止时间 intervalLength 仿真输出步长 numberOfIntervals 仿真输出步数 algorithm 积分算法 tolerance 精度 fixedOrInitStepSize 初始积分步长 pieceWiseStep 分段固定积分步长数组 |
# GetSimConfig
获取界面上得仿真设置。
语法
/** * @brief 求解器仿真条件对象 */ void GetSimConfig(MwExperimentData *sim_config)说明
获取界面上得仿真设置。
示例
MwSimConfigWidget *sim_config_wgt = new MwSimConfigWidget(new MwExperimentData); QDialog dlg; QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(sim_config_wgt); dlg.setLayout(layout); sim_config_wgt->GetSimConfig(&exp_data);