⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winextractor.m

📁 基于matlab的反演程序,用于地球物理勘探中射线追踪及偏移成像程序.
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -