Files
3D_EDFM_SIM-X/docs/app_designer_binding_guide.md

168 lines
7.1 KiB
Markdown
Raw Permalink 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.
# App Designer Binding Guide
## Fastest Path
按原计划要最快跑通,建议只先做这一条主线:
1. 保持真正界面文件为 [EDFM_Simulator_App.mlapp](C:\Users\15715\Documents\code\edfm_gui\gui_support\app\EDFM_Simulator_App.mlapp)。
2. 不直接改解包后的 `.mlapp` 内容。
3. 用新加的控制器 [EDFMAppController.m](C:\Users\15715\Documents\code\edfm_gui\gui_support\app\EDFMAppController.m) 负责绑定。
4. 首先只保证 `case01` 的模板加载、配置导入导出、运行、结果导入导出、基础绘图跑通。
5. 其他 case 和更细的参数编辑体验留到下一轮。
原因很直接:现在仓库里后端已经有统一 `config``case01` 模板、`run_case(config)`、MAT 导入导出,缺的主要就是 `.mlapp` 的回调连接和控件同步。
## 我已经补了什么
新增了 [EDFMAppController.m](C:\Users\15715\Documents\code\edfm_gui\gui_support\app\EDFMAppController.m),负责:
- 启动默认加载 `case01`
- `New Config`
- 模板加载
- config 导入导出
- result 导入导出
- 从 UI 回写 `config`
-`config` 刷新 UI
- 调用 `run_case(config)`
- 基础结果摘要和绘图
- SP/DP 页签切换
- 三种流动模型页签切换
当前重点是让你现有 `.mlapp` 最快可运行,不是一次性把所有参数编辑体验做完。
## 你需要在 App Designer 里手动做的事
只在 [EDFM_Simulator_App.mlapp](C:\Users\15715\Documents\code\edfm_gui\gui_support\app\EDFM_Simulator_App.mlapp) 里做下面这些操作。
### 1. 添加控制器属性
在属性区加上:
```matlab
Controller EDFMAppController
```
如果已经有,就保留,不要改名。
### 2. 添加 startup 函数
在 Code View 里确认有:
```matlab
function startupApp(app)
app.Controller = EDFMAppController(app);
app.Controller.startup();
end
```
并确认构造函数里有:
```matlab
runStartupFcn(app, @(~,~)startupApp(app));
```
### 3. 绑定按钮回调
把这些控件分别绑定到这些方法:
- `NewConfigButton` -> `onNewConfig`
- `LoadTemplateButton` -> `onLoadTemplate`
- `ImportConfigButton` -> `onImportConfig`
- `ExportConfigButton` -> `onExportConfig`
- `RunButton` -> `onRun`
- `RunCurrentConfigButton` -> `onRun`
- `ImportResultButton` -> `onImportResult`
- `ExportResultButton` -> `onExportResult`
- `PlotResultButton` -> `onPlotResult`
对应方法:
```matlab
function onNewConfig(app)
app.Controller.newConfig();
end
function onLoadTemplate(app)
app.Controller.loadTemplate(app.TemplateDropDown.Value);
end
function onImportConfig(app)
app.Controller.importConfig();
end
function onExportConfig(app)
app.Controller.exportConfig();
end
function onRun(app)
app.Controller.runCurrentConfig();
end
function onImportResult(app)
app.Controller.importResults();
end
function onExportResult(app)
app.Controller.exportResults();
end
function onPlotResult(app)
app.Controller.plotResults();
end
```
### 4. 绑定模型切换回调
给下面两个下拉框绑定 `onModelChanged`
- `ModelFlowModelDropDown`
- `ModelGridModelDropDown`
方法:
```matlab
function onModelChanged(app)
if ~isempty(app.Controller)
app.Controller.syncModelTabs();
end
end
```
同时把:
- `ResultTypeDropDown``ValueChangedFcn`
绑定到 `onPlotResult`
### 5. 保持控件名不变
控制器默认依赖这些命名,不要在 App Designer 里随意改:
- 顶栏:`TemplateDropDown``LoadTemplateButton``ImportConfigButton``ExportConfigButton``RunButton``ImportResultButton``ExportResultButton``StatusLabel`
- 模型:`ModelFlagDropDown``ModelGridModelDropDown``ModelFlowModelDropDown`
- 网格:`GridDxTextArea``GridDyTextArea``GridDzTextArea``GridNTGTextArea`
- 裂缝:`FractureInputStyleDropDown``FractureInputTextArea``FractureLinesTextArea``FractureHeightsTextArea``FractureFlowBarrierFlagsTextArea`
- SP`SPBoundaryTextArea``SPInvalidLayerTextArea``SPMatrixKxTextArea``SPMatrixKyTextArea``SPMatrixKzTextArea``SPMatrixPoriTextArea``SPMatrixPrporEditField``SPMatrixCporEditField``SPRockDensityEditField``SPFractureKfTextArea``SPFractureWfTextArea``SPFracturePorfTextArea``SPFracturePrporEditField``SPFractureCporfEditField``SPStressFractureEditField``SPStressMatrixEditField``SPStressRefPressureEditField`
- DP`DPkxTextArea``DPkyTextArea``DPkzTextArea``DPkx_matrixLayerTextArea``DPky_matrixLayerTextArea``DPkz_matrixLayerTextArea``DPpori_matrixLayerTextArea``DPsigmaTextArea``DPNTGTextArea``DPprporEditField``DPcporEditField``DPKfTextArea``DPWfTextArea``DPPorfTextArea``DPprporfEditField``DPcporfEditField``DPstress_factor_fractureEditField``DPstress_factor_matrixEditField``DPstress_factor_ref_pressureEditField`
- 初始值和多组分主控件:`InitialPressureEditField``InitialSwEditField``InitialCsEditField``InitialCbEditField``InitStatusLabel``MCcs_NcTextArea``MCkr_nosurfTextArea``MCkr_surfTextArea``MCPCTextArea``MCcs_Nc_fractureTextArea``MCkr_nosurf_fractureTextArea``MCkr_surf_fractureTextArea``MCPC_fractureTextArea``MCp_grad_thresholdEditField``MCgas_propVLEditField``MCgas_propPLEditField``MCgas_propKnEditField``MCstress_factor_fractureEditField``MCstress_factor_matrixEditField``MCstress_factor_ref_pressureEditField``MCbeta_non_darcy_flowEditField``MCdensity_g_scEditField``MCgas_modelDropDown``MCprgEditField``MCBgiEditField``MCcgEditField``MCvgiEditField``MCcvgEditField``MCPprTextArea``MCBGTextArea``MCMUGTextArea``MCdensity_w_scEditField``MCprwEditField``MCBwiEditField``MCcwEditField``MCvwiEditField``MCcvwEditField`
- 井和排程:`Well1Table``FractureWellLocationTable``Well2Table``ScheduleTable``TimeTextArea``DtMinTextArea``DtMaxTextArea`
- 求解器:`YitaPEditField``YitaSEditField``OmegaEditField``NmaxEditField``EpsAveEditField``EpsMaxEditField`
- 运行和结果:`RunLogTextArea``RunProgressLabel``CurrentStageLabel``CurrentTimeLabel``CurrentDtLabel``ResultSummaryTextArea``ResultTypeDropDown``ResultAxes``ResultTab`
- 页签组:`TabGroup2``TabGroup3``GasWaterTab``OilWaterTab``MultiComponentTab``SPTab``DPTab`
## 第一轮验证怎么做
1. 在 App Designer 打开 [EDFM_Simulator_App.mlapp](C:\Users\15715\Documents\code\edfm_gui\gui_support\app\EDFM_Simulator_App.mlapp)。
2. 按上面的方式挂好属性、startup 和 callbacks。
3. 直接运行 app。
4. 看启动后是否自动加载 `case01`
5.`ModelFlowModelDropDown = 3` 时是否自动切到多组分页。
6. 不改参数直接点 `Run`,先验证统一链路能否起跑。
## 当前已知限制
- 模板仍然只有 `case01`
- 现在是“先跑通”的控制器,不是最终版用户体验。
- `UITable` 里嵌套 cell 和矩阵的编辑体验还比较原始。
- [launch_edfm_simulator_app.m](C:\Users\15715\Documents\code\edfm_gui\gui_support\app\launch_edfm_simulator_app.m) 目前仍指向手写 `.m` app,不适合你当前的 `.mlapp` 工作流,所以这一步先直接在 App Designer 里运行 `.mlapp`