确定 Stateflow 子图的大小

Determine size of Stateflow Subchart

我现在正在编写 Model Advisor 检查,我需要知道子图 Stateflow State 或 Box 的大小。但是 "Stateflow.State" 和 "Stateflow.Box" 对象只有一个 "Position" 属性,它给出了它们在父元素中的位置。我需要知道子图本身的大小(它们的内容所在的位置)。我怎样才能得到这个尺寸?

"Position"属性是"Stateflow.State"里面的绝对位置Chart.Here是一个例子:

___________________
|AA               |
|___________      |
||BB       |      |
||_________|      |
-------------------

AA = r.find('-isa', 'Stateflow.State', 'Name', 'AA').Position

AA = 330.0924  542.7458  157.4576   94.6164

BB = r.find('-isa', 'Stateflow.State', 'Name', 'BB').Position

BB = 334.5304  571.1490  115.7404   62.6628

我终于向 MathWorks 支持寻求解决方案并得到了这个答案:

[...] there is currently no API functionality to retrieve the size of the subchart in the subchart subviewer. Unfortunately there are no workarounds to access this information currently.

更新:最近了解到无证sfAPI。可以用它获取有关子图的信息。因此,您需要获取需要维度的州的 ID。这是一个例子:

r = sfroot;
s = r.find('-isa', 'Stateflow.State', '-and', 'IsSubchart', 1);
sf('get', s(1).id, '.subviewS.pos')

这会执行以下操作:

  1. Simulink.Root 对象存储在 r 中。
  2. 找到所有子图状态并将它们存储在s中。您可能需要优化搜索以检测您需要的确切州。
  3. 使用sfAPI获取第一个子图的位置.pos,用.subviewS
  4. 表示

有很多关于每个 Stateflow 对象的信息。要进一步调查,您只需要找到合适的对象(使用 r.find())并使用 sf('get', <object>.id)。这列出了有关 Stateflow 对象的所有可用信息 <object>.