Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 确定Stateflow子图表的大小_Matlab_Size_Simulink_Stateflow - Fatal编程技术网

Matlab 确定Stateflow子图表的大小

Matlab 确定Stateflow子图表的大小,matlab,size,simulink,stateflow,Matlab,Size,Simulink,Stateflow,我现在正在写一个ModelAdvisor检查,我需要知道子图表状态流状态或框的大小。但是“Stateflow.State”和“Stateflow.Box”对象只有一个“Position”属性,它给出了它们在父元素中的位置。我需要知道子图表本身的大小(它们的内容所在的位置)。如何获得此大小?Position属性是“Stateflow.State”在图表中的绝对位置。以下是一个示例: ___________________ |AA | |___________

我现在正在写一个ModelAdvisor检查,我需要知道子图表状态流状态或框的大小。但是“Stateflow.State”和“Stateflow.Box”对象只有一个“Position”属性,它给出了它们在父元素中的位置。我需要知道子图表本身的大小(它们的内容所在的位置)。如何获得此大小?

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
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的大小(不一定是位置),属性“位置”由左上角的坐标,状态的宽度和高度组成。