Programmatically Flip/Rotate Simulink Block

64 次查看(过去 30 天)
Hi,
I'd like to programmatically rotate/flip a simulink block - arbitrarily. Unfortunately, the 'orientation' property
seems to support specific orientations, only. Thus, no combination of e.g. 'y-mirror' and 90° clockwise rotation
seems to be possible.
Certainly, Simulink supports that via the 'Format' menue but I did not find an accessible block property for this.
Is there a way to access the 'Format/Flip Block' menu of Simulink via Matlab? I did not find a matching property in the slx model, but maybe I overlooked a possibility. Also, I was not able to send key commands to Simulink.
Any suggestions?
Many thanks in advance!

采纳的回答

Timo Dietz
Timo Dietz 2023-1-25
编辑:Timo Dietz 2023-1-25
I finally made it with the help of:
I activate Simulink, select the block to be manipulated and then send kesytrokes for rotating and flipping it.
Not he most elegant approach but it works for me.
Have a nice day!
  3 个评论
Philip Hackett
Philip Hackett 2023-6-19
编辑:Philip Hackett 2023-6-19
In fact it works with an open Simulink window, as in the linked example:
% where the block to be rotated is selected in the GUI
h = actxserver('WScript.Shell');
h.AppActivate('Simulink');
h.SendKeys('^r');
But the block to be rotated must be selected by a mouse click, so it is not a programmatic method that can be used to arrange a model without manual intervention. Setting gcb to the block of interest, as in this answer:
set_param(model, 'CurrentBlock', 'blockName');
does not have the same effect as clicking the block in the GUI.
Timo Dietz
Timo Dietz 2023-6-19
编辑:Timo Dietz 2023-6-19
What I'm actually doing is the following:
actX = actxserver('WScript.Shell');
newBlock = add_block([libraryBlock], [modelName], 'MakeNameUnique','on');
blockObj = get_param(newBlock, 'Object');
blockObj.Selected = 'on';
Now, the block is selected and its orientation can be changed w/o manual intervention, using ACTX as well as blockObj.Orientation:
blockObj.Orientation = 'up';
actX.AppActivate('Simulink'); % focus on Simulink
actX.SendKeys('^i'); % flip vertically

请先登录,再进行评论。

更多回答(2 个)

Jean Matthieu
Jean Matthieu 2023-1-24
编辑:Jean Matthieu 2023-1-24
Hi
set_param(gcb, 'Orientation', 'left')
--> Other keywords are up, right, down
Is that what you're looking for?
  1 个评论
Timo Dietz
Timo Dietz 2023-1-24
Thanks for your answer. Unfortunately, these orientation properties do not suffice since they do not cover all possible variations of rotating and mirroring.

请先登录,再进行评论。


Liam Tanner
Liam Tanner 2024-7-3
Hi,
a solution to this problem would be:
newBlock= add_block([libraryBlock], [modelName], 'MakeNameUnique', 'on', 'Position', pos);
set_param(newBlock, 'Orientation', 'down') % Orientation
set_param(newBlock, 'BlockMirror', 'on') % invert
set_param(newBlock, 'BlockRotation', 90) % rotate
I hope it helps ;)

类别

Help CenterFile Exchange 中查找有关 Get Started with Simulink 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by