新手笔记,如有错漏,恳请指正。(这篇笔记太难写了,全是步骤,大家凑合看吧。。)
要展示写好的函数或概念,有三种方式:直接给用户函数代码、实时编辑器制作简易APP、APP Designer 制作完善APP。从便捷性看,这三种方式,对用户的友好程度是递增的,对程序猿的友好度是递减的。
制作完善APP重点是要理清APP怎样与用户交互(通过回调 实现)。
这部分主要讲流程思路,知识细节见最后一节“基础知识点”或第一节“官方摘要”部分。
背景:已有迷宫创建函数Maze,功能是根据两个输入(迷宫大小、算法选择),提供两个可视输出(迷宫的图片、解法的图片)。这两个可视输出其实含有六个输出(迷宫图及迷宫x坐标、迷宫y坐标,解法图及解法x坐标、y坐标)。
1.为“New Maze”按钮添加回调。
2.改写Matlab给出的maze函数,使其成为“New Maze”按钮的回调。(参考本文“基础知识点”-“将图显示在指定坐标区”)
原始maze函数:
[wall,wx,wy] = amaze();
plot(wall,"XData",wx,"YData",wy,"NodeLabel",[])
改写后的maze函数:
[wall,wx,wy] = amaze();
plot(app.UIAxes,wall,"XData",wx,"YData",wy,"NodeLabel",[])
title(app.UIAxes,"Maze")
axis(app.UIAxes,"equal")
此时,点击按钮,可以显示迷宫了。
使用户输入指定范围的整数。
迷宫网格密度由Grid Size微调器输入。
这里补充一个背景信息。官网给出的amaze函数参数如下: amaze(n,branching,detail,shortest)。网格尺寸是amaze的第一个参数n。
function NewMaze(app, event)
gridsize = app.GridSizeSpinner.Value;
[wall,wx,wy] = amaze(gridsize);
plot(app.UIAxes,wall,"XData",wx,"YData",wy,"NodeLabel",[])
axis(app.UIAxes,"equal")
end
多按钮组组件的添加和设置方式和微调器换汤不换药。多按钮组对应amaze函数的第二个参数branching,图示和更新的代码如下:
gridsize = app.GridSizeSpinner.Value;
branchmode = app.BranchingModeButtonGroup.SelectedObject.Text;%注意一下按钮文本的获取方式
[wall,wx,wy] = amaze(gridsize,branchmode);
plot(app.UIAxes,wall,"XData",wx,"YData",wy,"NodeLabel",[])
axis(app.UIAxes,"equal")
和之前步骤类似
function DisplaysolutionCheckBoxValueChanged(app, event)
value = app.DisplaysolutionCheckBox.Value;
end
函数中的输出和输入用于沟通工作区和函数区的变量,如果变量暂不输出,那么使用app.这个操作让变量保存到属性中。
1新建属性;
2修改变量名称;
3将函数的输出给到属性中的新建变量。
1.添加if,设置当复选框勾选与否时的不同状态。详见注释。
function DisplaysolutionCheckBoxValueChanged(app, event)%在复选框回调函数中添加
value = app.DisplaysolutionCheckBox.Value;%自动生成的语句,用于获取复选框的选中状态
if value%这句也可以用if value == true,意思是当复选框被勾选的时候
app.solplot.Visible=true%解图可见
title(app.UIAxes,"length = " + app.slen)%改标题
else%否则
app.solplot.Visible=false%解图不可见
title(app.UIAxes,"Maze")%改标题
end
end
2.每次执行NewMaze函数时执行复选框的回调。
callbackfcnname(app,[]),复选框的回调函数中不使用事件信息,因此您可以使用任何内容作为第二个输入。当不使用事件信息时,通常需要使用空方括号 ([])。
function NewMaze(app, event)
gridsize = app.GridSizeSpinner.Value;
bmode = app.BranchingModeButtonGroup.SelectedObject.Text;
[wall,wx,wy,sol,sx,sy] = amaze(gridsize,bmode);
app.slen = numedges(sol);
plot(app.UIAxes,wall,"XData",wx,"YData",wy,"NodeLabel",[])
axis(app.UIAxes,"equal")
hold(app.UIAxes,"on")
app.solplot = plot(app.UIAxes,sol,"XData",sx,"YData",sy,"NodeLabel",[]);
hold(app.UIAxes,"off")
app.solplot.Visible = false;
DisplaysolutionCheckBoxValueChanged(app,[])
end
1.Enable禁用
2.在NewMaze中设置启用
添加重置按钮,功能为恢复到APP刚启动时的状态,包括:坐标区清空、标题改为Maze、复选框不可见、重置网格大小和分支模式。
cla(app.UIAxes)
title(app.UIAxes,"Maze")
app.DisplaysolutionCheckBox.Enable = false;
app.GridSizeSpinner.Value=5;
app.BranchingModeButtonGroup.SelectedObject=app.firstButton;
拖动网格布局到APP界面上,此时所有组件现在都位于app.GridLayout上,而不是app.UIFigure上。还调整了各个组件的位置,使它们在网格上对齐,从而让 App 更美观。
避免APP拉伸时按钮变形。
方式三:代码区更改:title(app.UIAxes,"Maze")
APP中进行某操作对应的函数。每个回调都有两个参数:app和event。
app可以调用APP中所有事的信息,event存储了导致回调的事件的信息。
app中,需要指定坐标区,以将图像显示在坐标区。
callbackfcnname(app,[]),复选框的回调函数中不使用事件信息,因此您可以使用任何内容作为第二个输入。当不使用事件信息时,通常需要使用空方括号 ([])。
微调器
右键,替换为
branchmode = app.BranchingModeButtonGroup.SelectedObject.Text
①新建属性;
②修改变量名称;
③将函数的输出给到属性中的新建变量。
cla(app.UIAxes)
app.DisplaysolutionCheckBox.Enable = "on";
或app.DisplaysolutionCheckBox.Enable = true;
网格布局-配置大小。
App 构建入门之旅 | 自定进度在线课程 - MATLAB & Simulink
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...