我现在正在编写Model Advisor检查,我需要知道子图状态Stateflow State或Box的大小。但是" Stateflow.State"和" Stateflow.Box"对象只有一个"位置"属性,它在父元素中给出它们的位置。我需要知道子图本身的大小(它们的内容所在的位置)。我怎样才能达到这个尺寸?
答案 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')
执行以下操作:
Simulink.Root
对象存储在r
。s
中。您可能需要优化搜索以检测所需的确切状态。sf
API检索第一个子图的位置.pos
,该位置由.subviewS
有很多关于每个Stateflow对象的信息。要进一步调查,您只需找到适当的对象(使用r.find()
)并使用sf('get', <object>.id)
。这将列出有关Stateflow对象<object>
的所有可用信息。