前言
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
效果还不错。学到了就点个赞吧。
如转载,请注明出处。