部分挂载以及controller代码,存在bug等待修复。
This commit is contained in:
@@ -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
Reference in New Issue
Block a user