MATLAB: How to programmatically rename Stateflow states that are grouped

boxgrouprenamesimulinkstatestateflow

From the command window I would like to rename all states that are in a Stateflow chart. I'll use the following built-in model as an example. In the chart there are two states, Off and On, that are grouped by the Heater box.
openExample('simulink_general/sldemo_boilerExample')
Screen Shot 2019-11-03 at 2.06.11 PM.png
I am receiving the error "Cannot change states inside a grouped state." when renaming the Off and On states because they are grouped by a box. If I simply double-click on the state name, I can easily rename via the usual Stateflow GUI, but I need to be able to do this in a script.
sys = 'sldemo_boiler';
rt = sfroot; % Get global Stateflow object
model = rt.find('-isa', 'Simulink.BlockDiagram', '-and', 'Name', sys); % Get the model
charts = model.find('-isa', 'Stateflow.Chart'); % Get the model's charts
c = charts(1); % The chart we are interested in
states = c.find('-isa', 'Stateflow.State'); % All states in the chart
state_off = states(1);
state_off.Name = 'NewName'; %% ERROR: Cannot change states inside a grouped state.
How can I rename these states? I considered just ungrouping the box by unsetting its IsGrouped parameter, but state objects don't have a parameter that tells me what object they are grouped by, so I can't trace up the hierarchy.

Best Answer

To handle this,
Box=c.find('Name', 'Heater');
Box.IsGrouped=false;
states(1).Name='NewName';
To handle it more generically (without nested boxes)
Box=c.find('-isa','Stateflow.Box');
Index=cell2mat(get(Box,'IsGrouped'));
Box=Box(Index);
set(Box,'IsGrouped',false);
%% Make needed changes
% recover the original flags
set(Box,'IsGrouped',true);