Java中的action函数干什么的_MATLAB自动化——实现Simulink环境中添加自定义菜单/右键菜单的功能...

6feb4827711873d94998743e64602a85.png

及时获取更多文章,欢迎关注个人微信公众号 AutoGeeker

1fbb29152fe8303bf1539a5dc6ef23fb.png

在使用Simulink开发过程中,为了提高效率,多会借助M脚本实现批量修改、自动化处理等工作。

今天要介绍的是如何将你编写好的各种M脚本,与Simulink进行深度结合,通过菜单选项就可以直接运行你的脚本,而不是通过run 命令或者打开脚本文件再运行。

例如我们把实现一些自动处理的脚本都集成到一个‘工具箱’里,暂且叫MyTool,先预览一下效果:

菜单栏添加MyTool

fc8bbb6c6b2ae595b1905240e2872dc1.png

右键菜单中添加MyTool

9bd9e646e1a9fe5e25d4b4cfb055b4ba.png

要实现上述功能,需要在MATLAB路径下,新建一个sl_customization函数,相关内容均可以在help中找到。除了添加自定义菜单外,在这个函数里其实还有可以自定义配置很多Simulink环境,有兴趣的可以仔细研究一下。

0bd44052d8fc4dd6c0d768509712ece5.png

下面介绍一下使用M脚本如何实现功能:

Step1——使用cm对象的addCustomMenuFcn函数,添加自定义菜单

新建m文件,命名为sl_customization,新建函数如下:

贴一个Help中的示例:

04d90561fbb16d2b387324d48b4e20cd.png

上述脚本功能就是在Simulink菜单栏Tool选项下,新添加自定义菜单。其中‘Simulink:ToolsMenu’是特定的字符串,表示Tools菜单对应的标签,要想知道不同的菜单选项对应的是什么标签,那就先要做以下操作

在MATLAB命令行中输入一下内容运行:

cm = sl_customization_manager;

cm.showWidgetIdAsToolTip=true;

Simulink的界面会变成如下,每个菜单后面都显示了对应的标签,当你不需要显示标签时,命令行输入cm.showWidgetIdAsToolTip=false;即可,当然你也可以在help文档下的Menu Tags列表

ade75774e457c39811208c58399e2c8b.png

我们可以看到原有的Tools菜单对应的标签是‘Simulink:ToolsMenu’

除此之外,如果你想直接自定义一个和Tools并列的菜单,而不是在Tools菜单之下,那对应的标签应当写成‘Simulink:MenuBar’,实现之后的效果就如前面介绍的预览效果。

相应的如果你想在右键菜单选项下新建,那对应的应该是‘Simulink:ContextMenu’

另外一个 getMyMenuItems 是自定义菜单对应的函数句柄,这个实际可根据自己的命名规则自行命名,往下看Step2中创建对应的函数。

Step2——自定义菜单创建函数

这里我们以文章开头的效果预览为例,新建一个MyTool菜单,该菜单下包含Test1和Test2两个子菜单,其中Test1又包含两个子菜单Test1_1和Test1_2....,

这一步主要是对自定义的主菜单进行创建,指定主菜单名称,相应的子菜单句柄,代码如下:

d4f453acb31f87cafcbdda609f42b5e8.png

因为MyTool下有两个子菜单,对于多级菜单需要将其定义成Container Schema Object,使用sl_container_schema进行创建

Container Schema Object中有两个属性必须进行定义

  • label属性:指定该菜单的显示名称,这里显示为‘MyTool’
  • childrenFcns属性 :指定子菜单对应的函数句柄

这里MyTool菜单包含多个子菜单,所以使用了Container Schema Object,如果你的MyTool菜单没有子菜单,即点击MyTool菜单选项后就执行相应的功能操作的话,就应当在这里直接使用Action Schema Object使用sl_action_schema创建,并指定callback属性,childrenFcns属性也就不存在。

可以下面参照Step3中的function schema=AddItem1(callbackInfo)

Step3——自定义菜单创建函数(包含多级子菜单)

这一步主要是对Step2中的具体的菜单句柄AddItem0和AddItem1进行创建,可以理解为对主菜单下子菜单的创建,示例代码如下:

b47fdff2ce04e64bdbf9824da14d9ae5.png

这里分两种情况,Test1菜单下还有两个子菜单,而Test2已经没有子菜单,点击Test2时即开始执行相应的功能操作

所以AddItem0中对Test1,使用sl_container_schema创建,与Step2中对MyTool的定义类似

  • label 属性:指定菜单名称
  • childrenFcns 属性:指定子菜单对应的函数句柄;

AddItem1中Test2, 需要Action Schema Object,使用sl_action_schema进行创建,并指定callback属性,即指定其菜单动作对应的回调函数。

因为上述Test1菜单下又有两个子菜单Test1Item1和Test1Item2,所以还需对这两个函数进行定义,定义方法和function schema=AddItem1(callbackInfo)类似,代码如下:

219dc2e022944ba0c8bcd77a8086ad8c.png

Step4——Action菜单回调函数

这一步主要是对菜单的Action回调函数进行创建,即具体指定点击菜单后执行什么样动作,示例代码如下:

6532005eb3d4010a9394c05b44ae67cd.png

这里方便演示,每个菜单对应的Action回调函数就写的比较简单,点击不同的菜单分别在命令窗口输出对应的提示符;如果你已经有比较成熟的脚本函数,就可以在Action函数中进行调用。

除了Action菜单 之外,其实还有Toggle菜单, 使用sl_toggle_schema进行创建,这种菜单即在点击该Toggle菜单后,相应的该菜单项显示会变化,比如前面打钩,选项凹陷等等,这里不做介绍。

另外,补充一个:

上述m脚本函数编写好后,保存,并确定已经在MATLAB文件路径下,命令行输入 sl_refresh_customizations

会对Simulink环境进行刷新,待刷新完成后,即可实现自定义菜单的显示;当然你也可以重新启动MATLAB实现刷新。

最终实现效果如下:

9be1ae3b89fbd41ca8ec366f1958a356.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值