确定Stateflow子图的大小

时间:2015-02-28 06:34:20

标签: matlab size simulink stateflow

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

2 个答案:

答案 0 :(得分:0)

"职位"属性是" 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

答案 1 :(得分:0)

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

  

[...]目前没有API功能来检索子图子查看器中子图的大小。遗憾的是,目前没有解决方法来访问此信息。

更新:我最近了解了未记录的sf API。可以使用它获取有关子图的信息。因此,您需要获取需要维度的状态的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. 使用sf API检索第一个子图的位置.pos,该位置由.subviewS
  4. 表示

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