Method for determining height and width of a Simulink annotation

5 views (last 30 days)
or other text object, like a block name, block annotation ["AttributesFormatString"].
Inputs: Text & Font info (FontAngle, FontName, FontSize, FontWeight).
Outputs: height/width of bounding rectangle - in same units as the "position" parameter for a block.
Needed to allow check for overlapping text, adjusting block dimensions, etc.
Pretty clear such a function exists internal to Simulink (needed to draw text, draw borders around annotations, etc.) -- but damned if I can find it in R2013a.
  1 Comment
Douglas
Douglas on 29 Oct 2013
Edited: Douglas on 29 Oct 2013
OK - I found one method for an annotation or purely text string -
hdl = add_block(gcs, testString, 'Position', remotePos)
ob = get_param(hdl,'object')
bb = ob.getBounds;
wh = bb(3:4)-bb(1:2);
There's a couple wrinkles - need to strrep(...) any '/' chars in the string with '//' and any '\n' with char(10).
One problem this doesn't solve, however, is block annotations. Is there a method of getting the actual string that's displayed (after variable substitution?)
The 'AttributeFormatString" is just that, a format string. To estimate the bounding box, one needs to replace each format item %<ParamName> in the AttributesFormatString with the actual value of the parameter. Is this string available from the block via some method or parameter?
Or is it necessary for each Simulink user to write a snippet to identify instances of %<ParamName> in the AttributesFormatString and do the appropriate substitution? Tedious and introduces special cases - and, again - Simulink has already done this internally in order to display the block annotation text.

Sign in to comment.

Answers (1)

Zack Peters
Zack Peters on 29 Oct 2013
Hi Douglas,
In Simulink, annotations are classified by Simulink.Annotation objects. These can be programmatically located via the find_system command.
If you know any distinguishing features of the annotation that you are interested in then you can track down the object for that specific one and from there you should be able to modify the annotation object's properties using the methods demonstrated in the link above.
~Zack
  1 Comment
Douglas
Douglas on 29 Oct 2013
Zack,
Using ob.getBounds solved my problem for Simulink.Annotations, as I mentioned in my comment.
What I don't have is a clean solution for BLOCK Annotations -- eg. the text for a BLOCK that is generated by the 'AttributesFormatString'
I am using the term "Block Annotation" because this is the name of the Block Properties tab where a user can define the AttributesFormatString via the GUI [vs. programmatically]

Sign in to comment.

Categories

Find more on Programmatic Model Editing in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!