📄 winextractor.m
字号:
hmsg=getfield(fighandles,'Message');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
if(isempty(smpls)|isempty(centpt))
% canceling
dataout=[];
else
ydat=get(centpt,'ydata');
ydat=find(ydat(1)==y);
dataout.midpoint=ydat;
dataout.samples=abs(smpls);
end
delete(gcf);
% Axes Slider Conotrl
%---------------------
function WE_slider(hObject, eventdata, handles)
% This controls the slider for the axes
% not activated yet
% Pulling Data out
udat=get(gcf,'userdata');
figdata=getfield(udat,'Data');
trc=getfield(figdata,'Trace');
y=getfield(figdata,'Y');
smpls=getfield(figdata,'Sample');
midpt=getfield(figdata,'Midpoint');
fighandles=getfield(udat,'Handles');
hsliderx=getfield(fighandles,'SliderX');
hslidery=getfield(fighandles,'SliderY');
hmsg=getfield(fighandles,'Message');
hzoom=getfield(fighandles,'Zoom');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
xdat=sort([1.2 -1.2]);
ydat=sort([y(1) y(end)]);
xlim=get(gca,'xlim');
ylim=get(gca,'ylim');
ckslide=get(gcbo,'tag');
switch ckslide
case 'Y' % Vertical Slider
verval=get(hslidery,'value');
udat=get(hslidery,'userdata');
dy=verval-udat{2};
newylim=ylim-dy;
if(newylim(1)<=ydat(1))
dlim=ylim(2)-ylim(1);
newylim=[ydat(1) ydat(1)+dlim];
y1=ydat(end)-(newylim(1)-ydat(1));
y2=ydat(1)+(ydat(end)-newylim(2));
udat{2}=y2+(y1-y2)/2;
elseif(newylim(2)>=ydat(end))
dlim=ylim(2)-ylim(1);
newylim=[ydat(end)-dlim ydat(end)];
y1=ydat(end)-(newylim(1)-ydat(1));
y2=ydat(1)+(ydat(end)-newylim(2));
udat{2}=y2+(y1-y2)/2;
else
udat{2}=udat{2}+dy;
end
set(gca,'ylim',newylim);
set(hslidery,'value',udat{2},'userdata',udat);
case 'X' % Horizontal Slider
horval=get(hsliderx,'value');
udat=get(hsliderx,'userdata');
dx=horval-udat{2};
newxlim=xlim+dx;
if(newxlim(1)<=xdat(1))
dlim=xlim(2)-xlim(1);
newxlim=[xdat(1) xdat(1)+dlim];
elseif(newxlim(2)>=xdat(end))
dlim=xlim(2)-xlim(1);
newxlim=[xdat(end)-dlim xdat(end)];
else
end
udat{2}=(newxlim(2)-newxlim(1))/2+newxlim(1);
set(gca,'xlim',newxlim);
set(hsliderx,'value',udat{2},'userdata',udat);
end
% Continue
%----------
function WE_Continue(hObject, eventdata, handles)
% Accepting
uiresume;
% Cancel
%--------
function WE_Cancel(hObject, eventdata, handles)
% Canceling Window extractor
% Pulling Data out
udat=get(gcf,'userdata');
figdata=getfield(udat,'Data');
trc=getfield(figdata,'Trace');
y=getfield(figdata,'Y');
smpls=getfield(figdata,'Sample');
midpt=getfield(figdata,'Midpoint');
fighandles=getfield(udat,'Handles');
hmsg=getfield(fighandles,'Message');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
checkwuser=questdlg('Do you want to cancel?','Cancel Winextractor',...
'Yes','No','Yes');
switch checkwuser
case 'Yes'
figdata.Sample=[];
figdata.centpt=[];
udat.Data=figdata;
set(gcf,'userdata',udat);
uiresume;
case 'No'
stringinfo='Action Canceled';
set(hmsg,'string',stringinfo,'backgroundcolor',[1 1 1]);
end
% Zoom
%------
function WE_Zoom(hObject, eventdata, handles)
% Will control zooming in and out of figure
% Pulling Data out
udat=get(gcf,'userdata');
figdata=getfield(udat,'Data');
trc=getfield(figdata,'Trace');
y=getfield(figdata,'Y');
smpls=getfield(figdata,'Sample');
midpt=getfield(figdata,'Midpoint');
fighandles=getfield(udat,'Handles');
hmsg=getfield(fighandles,'Message');
hzoom=getfield(fighandles,'Zoom');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
nm=get(hzoom,'string');
switch nm
case 'Un-Zoom'
set(gca,'ylim',[y(1) y(end)],'xlim',[-1.2 1.2]);
set(hzoom,'string','Zoom');
stringinfo='Un-Zoomed';
selboxinit('winextractor(''ZOOM'');');
col=[1 1 1];
case 'Zoom'
set(hzoom,'string','Zoom');
% using selboxinit... which should change to something else one
% day.
selboxinit('winextractor(''ZOOM'');');
stringinfo='Zooming has been enabled';
col=[1 1 1];
case '*Zoom*'
% was something... now is not
case 'XXX'
end
set(hmsg,'string',stringinfo,'backgroundcolor',col);
% Line button down
%---------------------
function WE_LineButtonDown(hObject, eventdata, handles)
% Pulling Data out
udat=get(gcf,'userdata');
figdata=getfield(udat,'Data');
trc=getfield(figdata,'Trace');
y=getfield(figdata,'Y');
smpls=getfield(figdata,'Sample');
midpt=getfield(figdata,'Midpoint');
fighandles=getfield(udat,'Handles');
hmsg=getfield(fighandles,'Message');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
pt=get(gca,'currentpoint');
set(get(gca,'children'),'erasemode','xor');
checktag=get(gco,'tag');
switch checktag
case 'MIDPOINT'
case 'TOP'
case 'BOTTOM'
end
set(gcf,'windowbuttonmotionfcn',@WE_WindowButtonMotion);
set(gcf,'windowbuttonupfcn',@WE_WindowButtonUp);
set(gca,'userdata',pt);
% Window Button Motion Function
%-------------------------------
function WE_WindowButtonMotion(hObject, eventdata, handles)
% Pulling Data out
udat=get(gcf,'userdata');
figdata=getfield(udat,'Data');
trc=getfield(figdata,'Trace');
y=getfield(figdata,'Y');
smpls=getfield(figdata,'Sample');
midpt=getfield(figdata,'Midpoint');
lockto=getfield(figdata,'LockTo');
fighandles=getfield(udat,'Handles');
hmsg=getfield(fighandles,'Message');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
ylm=get(gca,'ylim');
oldpt=get(gca,'userdata');
newpt=get(gca,'currentpoint');
checktag=get(gco,'tag');
% not allowing point to go off of axes
if(newpt(1,2)<ylm(1))
nm=find(ylm(1)>=y);
elseif(newpt(1,2)>ylm(2))
nm=find(ylm(2)>=y);
else
nm=find(newpt(1,2)>=y);
end
if(isempty(nm))
nm=length(y);
else
nm=nm(end);
end
switch checktag
case 'MIDPOINT'
if(~strcmp(lockto,'open'))
% locking only to points requested by user
dataout=nodefind(trc,nm,lockto);
if(isempty(dataout))
return
end
nm=dataout;
end
nmtp=sort([(nm-smpls) 1 length(y)]);
nmtp=nmtp(2);
nmbt=sort([(nm+smpls) 1 length(y)]);
nmbt=nmbt(2);
nmctx=[trc(nm) trc(nm)];
nmcty=[y(nm) y(nm)];
newsmpls=smpls;
case 'TOP'
nmtp=nm;
nmbt=sort([(nmtp+2*smpls+1) 1 length(y)]);
nmbt=nmbt(2);
nmctx=get(centpt,'xdata');
nmcty=get(centpt,'ydata');
nm=find(nmcty(1)>=y);
newsmpls=(nm(end)-nmtp);
case 'BOTTOM'
nmbt=nm;
nmctx=get(centpt,'xdata');
nmcty=get(centpt,'ydata');
nmxx=find(nmcty(1)>=y);
nmtp=sort([(nmbt-2*smpls-1) 1 length(y)]);
nmtp=nmtp(2);
newsmpls=(nmbt-nmxx(end));
end
set(centpt,'xdata',nmctx,'ydata',nmcty);
set(topln,'ydata',[y(nmtp) y(nmtp)]);
set(botln,'ydata',[y(nmbt) y(nmbt)]);
figdata.Sample=newsmpls;
udat.Data=figdata;
set(gcf,'userdata',udat);
% Window Button Up Function
%---------------------------
% Pulling Data out
udat=get(gcf,'userdata');
figdata=getfield(udat,'Data');
trc=getfield(figdata,'Trace');
y=getfield(figdata,'Y');
smpls=getfield(figdata,'Sample');
midpt=getfield(figdata,'Midpoint');
fighandles=getfield(udat,'Handles');
hmsg=getfield(fighandles,'Message');
topln=getfield(fighandles,'Top');
botln=getfield(fighandles,'Bottom');
centpt=getfield(fighandles,'Center');
%--------------------------------
function WE_WindowButtonUp(hObject, eventdata, handles)
set(get(gca,'children'),'erasemode','normal');
checktag=get(gco,'tag');
switch checktag
case 'MIDPOINT'
case 'TOP'
case 'BOTTOM'
end
set(gcf,'windowbuttonupfcn','');
set(gcf,'windowbuttonmotionfcn','');
set(gcf,'windowbuttondownfcn','');
selboxinit('winextractor(''ZOOM'');');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -