7.1 KiB
7.1 KiB
App Designer Binding Guide
Fastest Path
按原计划要最快跑通,建议只先做这一条主线:
- 保持真正界面文件为 EDFM_Simulator_App.mlapp。
- 不直接改解包后的
.mlapp内容。 - 用新加的控制器 EDFMAppController.m 负责绑定。
- 首先只保证
case01的模板加载、配置导入导出、运行、结果导入导出、基础绘图跑通。 - 其他 case 和更细的参数编辑体验留到下一轮。
原因很直接:现在仓库里后端已经有统一 config、case01 模板、run_case(config)、MAT 导入导出,缺的主要就是 .mlapp 的回调连接和控件同步。
我已经补了什么
新增了 EDFMAppController.m,负责:
- 启动默认加载
case01 New Config- 模板加载
- config 导入导出
- result 导入导出
- 从 UI 回写
config - 从
config刷新 UI - 调用
run_case(config) - 基础结果摘要和绘图
- SP/DP 页签切换
- 三种流动模型页签切换
当前重点是让你现有 .mlapp 最快可运行,不是一次性把所有参数编辑体验做完。
你需要在 App Designer 里手动做的事
只在 EDFM_Simulator_App.mlapp 里做下面这些操作。
1. 添加控制器属性
在属性区加上:
Controller EDFMAppController
如果已经有,就保留,不要改名。
2. 添加 startup 函数
在 Code View 里确认有:
function startupApp(app)
app.Controller = EDFMAppController(app);
app.Controller.startup();
end
并确认构造函数里有:
runStartupFcn(app, @(~,~)startupApp(app));
3. 绑定按钮回调
把这些控件分别绑定到这些方法:
NewConfigButton->onNewConfigLoadTemplateButton->onLoadTemplateImportConfigButton->onImportConfigExportConfigButton->onExportConfigRunButton->onRunRunCurrentConfigButton->onRunImportResultButton->onImportResultExportResultButton->onExportResultPlotResultButton->onPlotResult
对应方法:
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:
ModelFlowModelDropDownModelGridModelDropDown
方法:
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
第一轮验证怎么做
- 在 App Designer 打开 EDFM_Simulator_App.mlapp。
- 按上面的方式挂好属性、startup 和 callbacks。
- 直接运行 app。
- 看启动后是否自动加载
case01。 - 看
ModelFlowModelDropDown = 3时是否自动切到多组分页。 - 不改参数直接点
Run,先验证统一链路能否起跑。
当前已知限制
- 模板仍然只有
case01。 - 现在是“先跑通”的控制器,不是最终版用户体验。
UITable里嵌套 cell 和矩阵的编辑体验还比较原始。- launch_edfm_simulator_app.m 目前仍指向手写
.mapp,不适合你当前的.mlapp工作流,所以这一步先直接在 App Designer 里运行.mlapp。