我现在正在编写 Model Advisor 检查,我需要知道子图 Stateflow State 或 Box 的大小。但是“Stateflow.State”和“Stateflow.Box”对象只有一个“Position”属性,它给出了它们在父元素中的位置。我需要知道子图本身的大小(它们的内容所在的位置)。我怎样才能得到这个尺寸?
问问题
388 次
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 功能可以在子图子查看器中检索子图的大小。不幸的是,目前没有访问此信息的解决方法。
更新:我最近了解了未记录的sf
API。可以使用它获取有关子图表的信息。因此,您需要获取需要维度的州的 ID。这是一个例子:
r = sfroot;
s = r.find('-isa', 'Stateflow.State', '-and', 'IsSubchart', 1);
sf('get', s(1).id, '.subviewS.pos')
这将执行以下操作:
- 将
Simulink.Root
对象存储在r
. - 找到所有子图状态并将它们存储在
s
. 您可能需要细化搜索以检测您需要的确切状态。 - 使用
sf
API 获取.pos
第一个 Subchart 的位置,表示为.subviewS
有大量关于每个 Stateflow 对象的信息。要进一步调查,您只需要找到合适的对象(使用r.find()
)并使用sf('get', <object>.id)
。这列出了有关 Stateflow 对象的所有可用信息<object>
。
于 2017-05-08T19:44:14.703 回答