确定 Stateflow 子图的大小
Determine size of Stateflow Subchart
我现在正在编写 Model Advisor 检查,我需要知道子图 Stateflow State 或 Box 的大小。但是 "Stateflow.State" 和 "Stateflow.Box" 对象只有一个 "Position" 属性,它给出了它们在父元素中的位置。我需要知道子图本身的大小(它们的内容所在的位置)。我怎样才能得到这个尺寸?
"Position"属性是"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
我终于向 MathWorks 支持寻求解决方案并得到了这个答案:
[...] there is currently no API functionality to retrieve the size of the subchart in the subchart subviewer. Unfortunately there are no workarounds to access this information currently.
更新:最近了解到无证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>
.
我现在正在编写 Model Advisor 检查,我需要知道子图 Stateflow State 或 Box 的大小。但是 "Stateflow.State" 和 "Stateflow.Box" 对象只有一个 "Position" 属性,它给出了它们在父元素中的位置。我需要知道子图本身的大小(它们的内容所在的位置)。我怎样才能得到这个尺寸?
"Position"属性是"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
我终于向 MathWorks 支持寻求解决方案并得到了这个答案:
[...] there is currently no API functionality to retrieve the size of the subchart in the subchart subviewer. Unfortunately there are no workarounds to access this information currently.
更新:最近了解到无证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>
.