0

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

4

2 回答 2

0

“Position”属性是“Stateflow.State”在图表中的绝对位置。这里是一个例子:

___________________
|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
于 2015-04-04T04:14:56.040 回答
0

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

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

更新:我最近了解了未记录的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第一个 Subchart 的位置,表示为.subviewS

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

于 2017-05-08T19:44:14.703 回答