Matlab 确定Stateflow子图表的大小
我现在正在写一个ModelAdvisor检查,我需要知道子图表状态流状态或框的大小。但是“Stateflow.State”和“Stateflow.Box”对象只有一个“Position”属性,它给出了它们在父元素中的位置。我需要知道子图表本身的大小(它们的内容所在的位置)。如何获得此大小?Position属性是“Stateflow.State”在图表中的绝对位置。以下是一个示例:Matlab 确定Stateflow子图表的大小,matlab,size,simulink,stateflow,Matlab,Size,Simulink,Stateflow,我现在正在写一个ModelAdvisor检查,我需要知道子图表状态流状态或框的大小。但是“Stateflow.State”和“Stateflow.Box”对象只有一个“Position”属性,它给出了它们在父元素中的位置。我需要知道子图表本身的大小(它们的内容所在的位置)。如何获得此大小?Position属性是“Stateflow.State”在图表中的绝对位置。以下是一个示例: ___________________ |AA | |___________
___________________
|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
r = sfroot;
s = r.find('-isa', 'Stateflow.State', '-and', 'IsSubchart', 1);
sf('get', s(1).id, '.subviewS.pos')
最后,我向MathWorks支持部门寻求解决方案,得到了以下答案: […]目前没有API功能在subchart subviewer中检索subchart的大小。不幸的是,目前没有办法访问此信息 更新:我最近了解了未记录的
sf
API。可以使用它获取有关子图表的信息。因此,您需要获取需要维度的状态的ID。以下是一个例子:
___________________
|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
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
,该位置由.subview
关于每个Stateflow对象都有很多信息。要进一步研究,只需找到适当的对象(使用
r.find()
)并使用sf('get',.id)
。这列出了有关Stateflow对象的所有可用信息
您说得对。但我需要的是AA的大小,如果它是亚刻印的。那么BB的位置是Stateflow中的绝对位置。状态AA而不是图表。然后我需要你画的AA的大小(不一定是位置),属性“位置”由左上角的坐标,状态的宽度和高度组成。