📄 cmbrowse.m
字号:
node.children(k).evalstr = [node.evalstr node.children(k).name];
node.children(k).class = evalin('base', ...
['class(' node.children(k).evalstr ')']);
node.children(k).path = [node.path k];
node.children(k).children = [];
end
else
names = fieldnames(node_var);
if ~isempty(names)
for k = 1:length(names)
node.children(k).name = ['.' names{k}];
node.children(k).evalstr = [node.evalstr '.' names{k}];
node.children(k).class = evalin('base', ...
['class(' node.children(k).evalstr ')']);
node.children(k).path = [node.path k];
node.children(k).children = [];
end
else
refresh = 0;
end
end
end
case 'cell'
node_var = evalin('base',node.evalstr);
if isempty(node_var) | ...
(length(size(node_var)) > 2) | (sum(size(node_var) > 1) > 1)
refresh = 0;
else
for k = 1:length(node_var)
node.children(k).name = ['{' num2str(k) '}'];
node.children(k).evalstr = [node.evalstr node.children(k).name];
node.children(k).class = evalin('base', ...
['class(' node.children(k).evalstr ')']);
node.children(k).path = [node.path k];
node.children(k).children = [];
end
end
otherwise
refresh = 0;
end
set_node(fig,path,node);
end
if refresh
refresh_tree_display(fig)
end
end
set_browser_data(fig,'previous_select',current_select);
refresh_content_display(fig)
return
% -----------------------------------------------------------------------------
function refresh_tree_display(fig)
content_display = findobj(fig,'Tag','Content Display');
set(content_display,'String','<please wait...>');
drawnow
listbox = findobj(fig,'Tag','Hierachy Display');
set(listbox,'Enable','inactive')
set(listbox,'UserData',{})
tree = get_browser_data(fig,'tree');
for k = 1:length(tree)
display_tree(fig,tree(k));
end
list = get(listbox,'UserData');
set(listbox,'String',list)
set(listbox,'Enable','on')
return
% -----------------------------------------------------------------------------
function refresh_content_display(fig)
content = findobj(fig,'Tag','Content Display');
listbox = findobj(fig,'Tag','Hierachy Display');
val = get(listbox,'Value');
path = get_browser_data(fig,['map{' num2str(val) '}']);
node = get_node(fig,path);
if ~isempty(node.children)
set(content,'String','<not available>')
else
node_var = evalin('base',node.evalstr);
node_class = node.class;
if length(size(node_var)) > 2
node_class = 'multidimensional';
end
switch node_class
case 'double'
if isempty(node_var)
set(content,'String','<empty>')
else
set(content,'String',double2cellstr(node_var));
end
case 'char'
if isempty(node_var)
set(content,'String','<empty>')
else
str = {};
for k = 1:size(node_var,1)
str{length(str)+1} = sprintf('''%s''',node_var(k,:));
end
set(content,'String',str)
end
case 'linearcon'
set(content,'String',linearcon2cellstr(node_var))
case 'region'
set(content,'String',region2cellstr(node_var))
case 'vertices'
set(content,'String',vertices2cellstr(node_var))
case 'polyhedron'
set(content,'String',polyhedron2cellstr(node_var))
case {'struct','cell'}
if isempty(node_var)
set(content,'String','<empty>')
else
set(content,'String','<not available>')
end
otherwise,
if isempty(node_var)
set(content,'String','<empty>')
else
set(content,'String','<not supported>')
end
end
end
return
% -----------------------------------------------------------------------------
function set_browser_data(fig,field,val)
browser_data = get(fig,'UserData');
eval(['browser_data.' field ' = val;'])
set(fig,'UserData',browser_data);
return
% -----------------------------------------------------------------------------
function val = get_browser_data(fig,field)
browser_data = get(fig,'UserData');
eval(['val = browser_data.' field ';'])
return
% -----------------------------------------------------------------------------
function out = double2cellstr(n)
str = num2str(n);
out = {};
for k = 1:size(str,1)
out{k} = ['[' str(k,:) ']'];
end
return
% -----------------------------------------------------------------------------
function str = linearcon2cellstr(con)
[CE,dE,CI,dI] = linearcon_data(con);
if isempty(CE) & isempty(CI)
str = sprintf('<empty>');
return
end
str = {};
Cstr = num2str([CE; CI]);
dstr = num2str([dE; dI]);
for k = 1:length(dE)
str{length(str)+1} = sprintf('[%s]x = %s',Cstr(k,:),dstr(k,:));
end
for k = 1:length(dI)
str{length(str)+1} = sprintf('[%s]x <= %s', ...
Cstr(k+length(dE),:),dstr(k+length(dE),:));
end
return
% -----------------------------------------------------------------------------
function str = region2cellstr(s)
nstate = get_region_param(s,'nstate');
str = {};
str{length(str)+1} = ...
sprintf('total number of states: %d',nstate);
str{length(str)+1} = sprintf('states in region: ');
if isempty(s)
str{length(str)+1} = '';
str{length(str)+1} = 'none';
elseif isuniverse(s)
str{length(str)+1} = '';
str{length(str)+1} = 'all';
else
line = '';
count = 0;
for k = 1:nstate
if isinregion(s,k)
count = count + 1;
if count > 1
line = [line ' '];
end
if (rem(count-1,20) == 0)
str{length(str)+1} = line;
line = '';
end
line = [line sprintf('%d',k)];
end
end
if ~isempty(line)
str{length(str)+1} = line;
end
end
return
% -----------------------------------------------------------------------------
function str = vertices2cellstr(v)
if isempty(v)
str = '<empty>';
else
str = {};
for k = 1:length(v)
str{length(str)+1} = sprintf('v%d = %s''',k,mat2str(v(k)'));
end
end
% -----------------------------------------------------------------------------
function str = polyhedron2cellstr(p)
CE = get_param(p,'CE');
dE = get_param(p,'dE');
CI = get_param(p,'CI');
dI = get_param(p,'dI');
VE = get_param(p,'VE');
VI = get_param(p,'VI');
if isempty(dE) & isempty(dI)
str = '<empty>';
return
end
str = {};
if ~isempty(dE)
str{length(str)+1} = sprintf('Equality Constraints');
str{length(str)+1} = sprintf('--------------------');
for k = 1:length(dE)
n = CE(k,:); b = dE(k);
str{length(str)+1} = [sprintf('Constraint %d: ',k) ...
mat2str(n) 'x = ' mat2str(b)];
str{length(str)+1} = sprintf('Vertices:');
for l = 1:length(VE{k})
str{length(str)+1} = [sprintf(' v%d = %s''',l,mat2str(VE{k}(l)')) ...
sprintf(' cTv = %f',n*VE{k}(l))];
end
end
end
if ~isempty(dI)
if ~isempty(dE)
str{length(str)+1} = '';
end
str{length(str)+1} = sprintf('Inequality Constraints');
str{length(str)+1} = sprintf('----------------------');
for k = 1:length(dI)
n = CI(k,:); b = dI(k);
str{length(str)+1} = [sprintf('Constraint %d: ',k+length(dE)) ...
mat2str(n) 'x <= ' mat2str(b)];
str{length(str)+1} = sprintf('Vertices:');
for l = 1:length(VI{k})
str{length(str)+1} = [sprintf(' v%d = %s''',l,mat2str(VI{k}(l)')) ...
sprintf(' cTv = %f',n*VI{k}(l))];
end
end
end
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -