📄 createdata.m
字号:
'ButtonDownFcn','createdata(''click'',gcf)',...
'Tag','ellipse',...
'UserData',mi);
end
end % if strcmpi(...
% set new values
set(h.edxaxis,'String',sprintf('[%s]',num2str(win(1:2))) );
set(h.edyaxis,'String',sprintf('[%s]',num2str(win(3:4))) );
for i=1:max(size(sets.K)),
txnum=sprintf(' %d ',i);
classes(i,1:size(txnum,2))=txnum;
end
set(h.puclass,'String',classes);
case 'setaxis'
% == Set axes according to edit line X-Axis and Y-Axis ==================
hfigure=varargin{1};
h = get(hfigure,'UserData'); % get handlers
xaxis=str2num(get(h.edxaxis,'String'));
yaxis=str2num(get(h.edyaxis,'String'));
if size(xaxis) ~= [1 2] | xaxis(2) <= xaxis(1),
errordlg('Bad X-Axis limits.','Error','modal');
elseif size(yaxis) ~= [1 2] | yaxis(2) <= yaxis(1),
errordlg('Bad Y-Axis limits.','Error','modal');
else
setaxis(h.axes1,[xaxis yaxis]);
%%% axis([xaxis yaxis]);
end
case 'click'
% == Mouse click handler =================================================
% get handlers
hfigure=varargin{1};
h=get(hfigure,'Userdata');
% get current pointer position
pointer=get(h.axes1,'CurrentPoint');
% get data sets structure
sets=get(h.axes1,'UserData');
% gco object invoked this function
hobject=gco;
clicktype = lower(get(hfigure,'SelectionType'));
switch clicktype
case 'normal'
% === Left mouse button =============
% Creat new point
%
if ~strcmpi(get(hobject,'Tag'),'point') & ~strcmpi(get(hobject,'Tag'),'ellipse'),
% set up saved flag
h.saved=0;
set(hfigure,'UserData',h);
% get class number
class=get(h.puclass,'Value');
% set update data set
sets.K(class)=sets.K(class)+1;
sets.I(sum(sets.K))=class;
switch h.settype
case 'finite'
sets.X=[sets.X,[pointer(1,1);pointer(1,2)]];
line(pointer(1,1),pointer(1,2), ...
'LineStyle','none', ...
'Marker','.', ...
'Color',XCOLORS(mod(class-1,MAXCOLOR)+1), ...
'MarkerSize',25, ...
'ButtonDownFcn','createdata(''click'',gcf)',...
'EraseMode','none',...
'Tag','point');
% store data set
set(h.axes1,'UserData',sets);
case 'gauss'
sets.MI=[sets.MI,[pointer(1,1);pointer(1,2)]];
sets.SIGMA=[sets.SIGMA,eye(2,2)];
set(h.txmi1,'String',sprintf('MI=[%.2f',pointer(1,1)));
set(h.txmi2,'String',sprintf(' %.2f]',pointer(1,2)));
% set cov matrix and draw ellipse
h.currpoint=size(sets.MI,2);
h.currhandle=0;
set(hfigure,'UserData',h);
set(h.axes1,'UserData',sets);
createdata('setcov',hfigure,0);
end
end % if ~strcmpi(
case 'open'
% == Double click ===
% get info about selected point
if strcmpi(h.settype,'gauss')==1 & strcmpi(get(hobject,'Tag'),'ellipse'),
% set selected point as currpoint
pixelpos=get(hobject,'UserData');
K=sum(sets.K);
for i=1:K,
if pixelpos==sets.MI(:,i),
h.currpoint=i;
h.currhandle=hobject;
sigma=sets.SIGMA(:,(i-1)*2+1:i*2);
mi=sets.MI(:,i);
% mi
set(h.txmi1,'String',sprintf('MI=[%.2f',mi(1)));
set(h.txmi2,'String',sprintf(' %.2f]',mi(2)));
% show cov. matrix
set(h.edxx,'String',sigma(1,1));
set(h.edxy,'String',sigma(1,2));
set(h.edyx,'String',sigma(2,1));
set(h.edyy,'String',sigma(2,2));
set(hfigure,'UserData',h);
break;
end
end
end % if ~strcmpi(get(...
case 'alt'
% === Right mouse button ===
% erase point
if strcmpi(get(hobject,'tag'),'point')==1,
% object is point
pixelpos=[get(hobject,'XData');get(hobject,'YData')];
K=sum(sets.K);
for i=1:K,
pos=sets.X(:,i);
if pixelpos==pos,
% update data sets
sets.K(sets.I(i))=sets.K(sets.I(i))-1;
sets.I=[sets.I(:,1:i-1),sets.I(:,i+1:K)];
sets.X=[sets.X(:,1:i-1),sets.X(:,i+1:K)];
set(h.axes1,'UserData',sets);
% erase point
set(hobject,'EraseMode','normal');
delete(hobject);
% set up saved flag
h.saved=0;
set(hfigure,'UserData',h);
break;
end % if pixelpos
end % for
elseif strcmpi(get(hobject,'tag'),'ellipse')==1,
% object is ellipse
pixelpos=get(hobject,'UserData');
K=sum(sets.K);
for i=1:K,
pos=sets.MI(:,i);
if pixelpos==pos,
% update data sets
sets.K(sets.I(i))=sets.K(sets.I(i))-1;
sets.I=[sets.I(:,1:i-1),sets.I(:,i+1:K)];
sets.MI=[sets.MI(:,1:i-1),sets.MI(:,i+1:K)];
sets.SIGMA=[sets.SIGMA(:,1:(i-1)*2),sets.SIGMA(:,i*2+1:K*2)];
h.currpoint=0;
h.currhandle=0;
set(h.axes1,'UserData',sets);
% erase point
set(hobject,'EraseMode','normal');
delete(hobject);
% set up saved flag
h.saved=0;
set(hfigure,'UserData',h);
break;
end % if pixelpos
end % for i=1:K,
end % if strcmpi(get(hpixel,...
end % switch lower(get...
case 'load'
% == Invokes stadard load file window ====================================
% loads data from file and then puts them on the desktop.
hfigure=varargin{1};
h=get(hfigure,'UserData');
% get data sets structure
sets=get(h.axes1,'UserData');
loadit=1;
if h.saved==0,
answer=questdlg(...
'Data set was changed. Do you want to continue?',...
'Warning',...
'Continue','Cancel','Cancel');
if answer==0 | strcmpi(answer,'Cancel'),
loadit=0;
end
end
if loadit==1,
[name,path]=uigetfile('*.mat','Load data set');
if name ~= 0,
pathname=strcat(path,name);
if strcmpi(sets.id, ID_FINITE), a = check2ddata(pathname); end
if strcmpi(sets.id, ID_NORMAL), a = check2dgauss(pathname); end
% if checkdat(pathname,sets.id,sets.N,0)==1,
if a,
% store path
file.name=name;
file.path=path;
file.pathname=pathname;
set(h.btsave,'UserData',file);
oldID=sets.id;
% load data set and store it
sets=load(file.pathname);
sets.id = oldID;
sets.I = sets.y;
sets.N=2;
for ii=1:max(sets.I),
sets.K(ii)=length(find(sets.I==ii));
end
if strcmpi(sets.id, ID_NORMAL),
sets.MI = sets.Mean;
sets.SIGMA=[];
for ii=1:size(sets.Mean,2),
sets.SIGMA=[sets.SIGMA, sets.Cov(:,:,ii)];
end
end
set(h.axes1,'UserData',sets);
% set everything possible...
h.currpoint=0;
h.currhandle=0;
h.saved=1;
set(hfigure,'UserData',h);
% and put it on the desktop
createdata('redraw',hfigure);
% print title
titletext=sprintf('File: %s',file.name);
set(h.title,'String',titletext);
else
errordlg('This file does not contain required data.','Bad file','modal');
end
end % if name ~= 0,
end % if loadit==1,
case 'save'
% == Invokes standard save file window ====================================
% and prepares data for saving.
% get handlers
hfigure=varargin{1};
h=get(hfigure,'UserData');
% get data set
sets=get(h.axes1,'UserData');
% is there something to save ?
if sum(sets.K)~=0,
% get current file name
file=get(h.btsave,'UserData');
% invoke save window
[name,path]=uiputfile(file.pathname,'Save file');
% Have user pushed down close button or save button ?
if name ~= 0,
% store file name
file.name=name;
file.path=path;
file.pathname=strcat(path,name);
set(h.btsave,'UserData',file);
% print title
titletext=sprintf('File: %s',file.name);
set(h.title,'String',titletext);
% remove classes which have zero length
ssets=sets;
KL=size(sets.K,2);
NK=sum(sets.K);
% following vars are to be saved
id=sets.id;
I=sets.I;
K=sets.K;
N=sets.N;
% remove zero's clases
i=1;
while i <= KL,
if K(i)==0,
for j=1:NK,
if I(j) > i,
I(j)=I(j)-1;
end
end
K=[K(1:i-1),K(i+1:KL)];
KL=KL-1;
else
i=i+1;
end
end
% save data set to the file
switch h.settype
case 'finite'
X=sets.X;
y=I;
save(file.pathname,'X','y');
case 'gauss'
Mean=sets.MI;
y=I;
for jj=1:size(Mean,2),
Cov(:,:,jj)=sets.SIGMA(:,(jj-1)*2+1:jj*2);
end
save(file.pathname,'Mean','Cov','y');
end
% set up saved flag
h.saved=1;
set(hfigure,'UserData',h);
end % if name ~= 0,
end % if sum(sets.K)~=0,
case 'ok'
% == OK button handler ===================================================
% get nadlers
hfigure=varargin{1};
h=get(hfigure,'UserData');
% is dialog to be closed ?
closeit=1;
if h.saved==0,
% data have not saved.
answer=questdlg(...
'Data set was changed. Do you want to save data?',...
'Warning',...
'Save','Don`t save','Cancel','Cancel');
% decide along to the answer
if answer ~= 0,
switch lower(answer)
case 'save'
createdata('save',hfigure);
h=get(hfigure,'UserData');
closeit=h.saved;
case 'cancel'
closeit=0;
case 'don`t save'
close(hfigure,hfigure);
return;
% closeit=1;
end
else
closeit=0;
end % if answer~=0,...else
end % if h.saved==0,
% close dialog
if closeit==1,
% if some data was created invoke function given in arguments
sets=get(h.axes1,'UserData');
command=get(h.btok,'UserData');
file=get(h.btsave,'UserData');
if sum(sets.K)~=0 & size(command,2) > 2,
feval(command{3},command{4:size(command,2)},file.path,file.name);
end
close(hfigure);
end
case 'close'
% == Close button handler ===================================================
% get nadlers
hfigure=varargin{1};
h=get(hfigure,'UserData');
closeit=1;
% data set changed ?
if h.saved==0,
% data have not saved.
answer=questdlg(...
'Data set was changed. Do you want to close?',...
'Warning',...
'Close','Cancel','Cancel');
% decide along to the answer
if answer == 0 | strcmpi(answer,'Cancel')==1,
closeit=0;
end
end
if closeit==1,
close(hfigure);
end
case 'info'
% == Call standard Matlab info box =========================================
helpwin(mfilename);
end
return;
%========================================
function [rect]=getaxis(handle)
% function [rect]=getaxis(handle)
%
% GETAXIS returns a row vector containing the scaling for
% the plot with a given handle.
%
% See also AXIS.
%
rect=[get(handle,'XLim'),get(handle,'YLim'),get(handle,'ZLim')];
return;
function []=setaxis(handle,rect)
% function []=setaxis(handle,rect)
%
% SETAXIS sets scaling for the x- and y-axes
% on the plot with a given handle.
%
% See also AXIS.
%
set(handle,'XLim',rect(1:2));
set(handle,'YLim',rect(3:4));
if size(rect,2)>=6,
set(handle,'ZLim',rect(5:6));
end
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -