部分挂载以及controller代码,存在bug等待修复。

This commit is contained in:
kk
2026-03-16 23:16:10 +08:00
parent 0e8421ec4f
commit 6c1aaaa120
5 changed files with 5224 additions and 0 deletions
+167
View File
@@ -0,0 +1,167 @@
# 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`
File diff suppressed because it is too large Load Diff