Access Objects in Your Stateflow Chart
The objects in the Stateflow® API represent the graphical and nongraphical objects of a Stateflow chart. For example, the API objects Stateflow.State
and Stateflow.Transition
represent states
and transitions in a Stateflow chart. For more information, see Overview of the Stateflow API.
Find Objects in a Chart
With the find
function, you can locate an
API object by specifying search criteria. You can combine criteria such as:
The type of object
The name of a property or function
A property name and value
For example, this command searches the Simulink.Root
object and returns every Stateflow.State
object with the name
On
:
onState = find(sfroot,"-isa","Stateflow.State",Name="On")
If more than one object meets the search criteria, find
returns an array of qualifying objects. For example, if more than one chart is open,
this command returns an array of Stateflow.Chart
objects:
chartArray = find(sfroot,"-isa","Stateflow.Chart")
Find Objects at Specific Levels of Containment
By default, the find
function finds objects at all depths
of containment within an object. For example, suppose that ch
is a Stateflow.Chart
object that corresponds to this chart. The
chart contains a parent state A
with two child states,
A1
and A2
. For more information on
this example, see Create Charts by Using a MATLAB Script.
Calling the find
function to find all the states in this
chart returns an array with three Stateflow.State
objects:
states = find(ch,"-isa","Stateflow.State"); get(states,"Name")
ans = 3×1 cell array {'A'} {'A1'} {'A2'}
To limit the maximum containment depth of a search, use the
"-depth"
argument as part of your search criteria. For
example, to find the only Stateflow.State
object at the first
level of containment in ch
,
enter:
sA = find(ch,"-isa","Stateflow.State","-depth",1); sA.Name
ans = 'A'
Similarly, you can call the find
function to search for
states in the first level of containment in the Stateflow.State
object sA
. In this case, the search includes the zeroth level
of containment, which is the searched object
itself:
states = find(sA,"-isa","Stateflow.State","-depth",1); get(states,"Name")
ans = 3×1 cell array {'A'} {'A1'} {'A2'}
To exclude state A
from the search results, call the
MATLAB® function setdiff
:
childStates = setdiff(states,sA);
get(childStates,"Name")
ans = 2×1 cell array {'A1'} {'A2'}
Navigate the Stateflow Hierarchy
After you access an API object, you can use the getChildren
and getParent
functions to navigate
through the Stateflow hierarchy and identify the children that the object contains or the
parent that contains the object.
Find Child Objects
To find the children of an API object, call the
getChildren
function. For instance, suppose that
ch
is the Stateflow.Chart
object that
corresponds to the chart in the previous example. Calling the
getChildren
function on ch
returns
an array that contains a Stateflow.State
object and a
Stateflow.Transition
object.
children = getChildren(ch); arrayfun(@class,children,UniformOutput=false)
ans = 2×1 cell array {'Stateflow.State' } {'Stateflow.Transition'}
The first element in the array is a Stateflow.State
object
that corresponds to state
A
.
state = children(1); state.Name
ans = 'A'
The second element in the array is a Stateflow.Transition
object that corresponds to the default transition into state
A
.
children(2).Source
ans = []
children(2).Destination.Name
ans = 'A'
Similarly, calling the getChildren
function on the state
returns an array that contains two Stateflow.State
objects and
two Stateflow.Transition
objects.
grandchildren = getChildren(state); arrayfun(@class,grandchildren,UniformOutput=false)
ans = 4×1 cell array {'Stateflow.State' } {'Stateflow.State' } {'Stateflow.Transition'} {'Stateflow.Transition'}
The first and second elements in this array are
Stateflow.State
objects that correspond to the states
A1
and
A2
.
grandchildren(1).Name
ans = 'A1'
grandchildren(2).Name
ans = 'A2'
The third and fourth elements in grandchildren
are
Stateflow.Transition
objects that correspond to the
transitions into states A1
and between state
A1
and A2
,
respectively.
grandchildren(3).Source
ans = []
grandchildren(3).Destination.Name
ans = 'A1'
grandchildren(4).Source.Name
ans = 'A1'
grandchildren(4).Destination.Name
ans = 'A2'
Find Parent Object
To find the parent of an API object, call the getParent
function. For instance, suppose that sA1
is the
Stateflow.State
object that corresponds to state
A1
in the previous example. Calling the
getParent
function on sA1
returns
the Stateflow.State
object that corresponds to state
A
:
parent = getParent(sA1); parent.Name
ans = 'A'
Similarly, calling the getParent
function on
parent
returns the Stateflow.Chart
object that corresponds to the
chart:
grandparent = getParent(parent); grandparent.Name
ans = 'Chart'
Retrieve Recently Selected Objects
You can retrieve the most recently selected objects in a chart by calling the
sfgco
function. This function
returns a single object or an array of objects, depending on your selection.
For instance, suppose that you select the transition from state
A1
to state A2
in the previous example.
Calling sfgco
returns the corresponding Stateflow.Transition
object:
tr = sfgco; str = str = "Transition from "+tr.Source.Name+" to "+tr.Destination.Name
str = "Transition from A1 to A2"
Similarly, if you simultaneously select the three states in the chart, calling
sfgco
returns an array of Stateflow.State
objects.
states = sfgco;
get(states,"Name")
ans = 3×1 cell array {'A'} {'A1'} {'A2'}
Note
When you use sfgco
to access multiple objects, the order
of the objects in the array depends on the order in which you select the
objects.