📄 createdata.m
字号:
case 'normal'
% === 左击鼠标=============
% 创建新数据
if ~strcmpi(get(hobject,'Tag'),'point'),
% 设立保存标志
h.saved=0;
set(hfigure,'UserData',h);
% 获取数据集是第1类,还是第2类的信息
class=get(h.puclass,'Value');
% 创建新数据点后,更新数据集
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');
% 将数据集传递给坐标轴对象axes1
set(h.axes1,'UserData',sets);
end
end % if ~strcmpi(
case 'alt'
% ===右击鼠标 ===
% 擦除数据点
if strcmpi(get(hobject,'tag'),'point')==1,
% 对象是数据点
pixelpos=[get(hobject,'XData');get(hobject,'YData')];
K=sum(sets.K);
for i=1:K,
pos=sets.X(:,i);
if pixelpos==pos,
% 更新数据集
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);
% 擦除数据点
set(hobject,'EraseMode','normal');
delete(hobject);
% 设置保存标志
h.saved=0;
set(hfigure,'UserData',h);
break;
end % if pixelpos
end % for
end % if strcmpi(get(hpixel,...
end % switch lower(get...
case 'load'
% == 产生标准的装载文件窗口====================================
% 从文件装载数据集,并显示在坐标系中
hfigure=varargin{1};
h=get(hfigure,'UserData');
% 获取数据集结构体
sets=get(h.axes1,'UserData');
loadit=1;
if h.saved==0,
answer=questdlg(...
'数据已经被改动,是否要继续此操作?',...
'警告',...
'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 a,
% 保存路径
file.name=name;
file.path=path;
file.pathname=pathname;
set(h.btsave,'UserData',file);
oldID=sets.id;
% 装载数据并保存
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
set(h.axes1,'UserData',sets);
% 设置任何可能发生的情况
h.currpoint=0;
h.currhandle=0;
h.saved=1;
set(hfigure,'UserData',h);
% 显示在桌面
createdata('redraw',hfigure);
% 打印标题即文件名
titletext=sprintf('File: %s',file.name);
set(h.title,'String',titletext);
else
errordlg('这个文件不包含满足要求的数据。','错误文件','modal');
end
end % if name ~= 0,
end % if loadit==1,
case 'save'
% == 产生标准的保存文件窗口====================================
% 准备保存数据集
% 获取句柄
hfigure=varargin{1};
h=get(hfigure,'UserData');
% 获取数据集
sets=get(h.axes1,'UserData');
% 是否需要保存 ?
if sum(sets.K)~=0,
% 获取当前文件名
file=get(h.btsave,'UserData');
% 产生保存窗口
[name,path]=uiputfile(file.pathname,'Save file');
% 检查用户是否按下“关闭”按钮 ?
if name ~= 0,
% 保存文件名
file.name=name;
file.path=path;
file.pathname=strcat(path,name);
set(h.btsave,'UserData',file);
% 打印标题即文件名
titletext=sprintf('File: %s',file.name);
set(h.title,'String',titletext);
% 删除空的数据集类
ssets=sets;
KL=size(sets.K,2);
NK=sum(sets.K);
% 保存数据集的属性
id=sets.id;
I=sets.I;
K=sets.K;
N=sets.N;
% 删除空的数据集
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
% 将数据集保存到文件
switch h.settype
case 'finite'
X=sets.X;
y=I;
save(file.pathname,'X','y');
end
% 设置保存标志
h.saved=1;
set(hfigure,'UserData',h);
end % if name ~= 0,
end % if sum(sets.K)~=0,
case 'ok'
% == 按下“创建完毕”按钮 ===================================================
% 获取句柄
hfigure=varargin{1};
h=get(hfigure,'UserData');
% 是否要关闭对话框?
closeit=1;
if h.saved==0,
% 数据没有保存
answer=questdlg(...
'数据已经被改动,是否要保存数据?',...
'警告',...
'Save','Don`t save','Cancel','Cancel');
% 根据用户的选择执行
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;
end
else
closeit=0;
end % if answer~=0,...else
end % if h.saved==0,
% 关闭对话框
if closeit==1,
% 获取变量的值
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'
% == “关闭”按钮 ===================================================
% 获取句柄
hfigure=varargin{1};
h=get(hfigure,'UserData');
closeit=1;
% 数据是否被改动 ?
if h.saved==0,
% 数据没有保存
answer=questdlg(...
'数据已经被改动,确实要关闭吗?',...
'警告',...
'Close','Cancel','Cancel');
% 根据用户的选择执行
if answer == 0 | strcmpi(answer,'Cancel')==1,
closeit=0;
end
end
if closeit==1,
close(hfigure);
end
case 'info'
% == 调用 Matlab help =========================================
helpwin(mfilename);
end
return;
%========================================
%定义getaxis函数
function [rect]=getaxis(handle)
rect=[get(handle,'XLim'),get(handle,'YLim'),get(handle,'ZLim')];
return;
%定义setaxis函数
function []=setaxis(handle,rect)
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 + -