Matlab app designer: 模型一键匹配接口高度

前言

Matlab Simulink/Stateflow中经常会遇到接口较多的模块,增减port后破坏了原先连线的整齐美观,需要重新手动拉大拉小Block,匹配port的高度。我因此开发了一键等高的工具。

解决思路:

1. 获取Src模型输出port之间距离(Position),再将此距离写入到Dst模型的port 的position。

结果:失败。

原因:没有写入'PortConnectivity'的Position的权限。

2. 平时我们人为调整都是手动去拉大拉小,matlab会自动计算每个position的距离。

我们可以发现:port间距相同时,Subsystem的高会与port数量成正相关。因此我们可以通过设置成比例的block size,就可以等到相同或接近的port高度。

结果:Subsystem的size的高度与port数量成正比。

核心代码

Step1: 选中Src模型,点击‘GetSrcHigh’Button,该按钮的回调如下:

        function GetSrcHighButtonPushed(app, event)
            Src_port_handles = get_param(gcbh,'PortHandles');    %获取选中模型的Port句柄
            Src_outport_handles = Src_port_handles.Outport;    %获取Outport句柄
            app.Src_outport_Len = length(Src_outport_handles);    %计算模块Outport数量
             
            Src_Pos = get_param(gcbh, 'Position');    %获取源模型的位置
            app.Src_High = Src_Pos(4)-Src_Pos(2);     %获取源模型的高       
        end

Step2: 选中Dst模型,点击‘SetDstHigh’Button,该按钮的回调如下:

        % Button pushed function: SetDstHighButton
        function SetDstHighButtonPushed(app, event)
            Dst_port_handles = get_param(gcbh,'PortHandles');
            Dst_inport_handles = Dst_port_handles.Inport;    %获取Inport句柄
            app.Dst_Len_inport = length(Dst_inport_handles);    %计算模块Inport数量
            Dst_Pos = get_param(gcbh, 'Position');

            DstHigh = app.Src_High*(app.Dst_Len_inport/app.Src_outport_Len);    %port数量与block position中的高成正比
            Dst_Pos(4) = Dst_Pos(2) + DstHigh;
            set_param(gcbh, 'Position',Dst_Pos);
        end

效果还不错。学到了就点个赞吧。

如转载,请注明出处。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值