部分挂载以及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