KeyPressFcn无法在特定场合工作

时间:2013-07-19 09:56:27

标签: matlab matlab-figure

每当我获取新数据并绘制数据时,我都会看到KeyPressFcn。当我没有获得新数据时,KeyPressFcn似乎不再有效。但是,如果我按下相应的键,一旦我回到数据范围并再次开始获取数据,它就会关闭数字。

我真的很困惑为什么会这样。我的数据收集只在满足某个条件时才会发生,但更改KeyPressFcnexitflag是在我的while循环内部,并且应该在每次循环发生时发生,因此我不明白为什么它不会不要马上退出我的身材。这是代码,

disp('DICOM Slice Viewer');
disp('" ": exit on space key');
global kpressed;
kpressed = 0;

%init figure on screen
global Fig;
Fig=DICOM_SliceViewer_createFigure(1,DICOMparam);
set(Fig.fig,'KeyPressFcn','global kpressed; global Fig; kpressed = get(Fig.fig,''CurrentChar'');');

exitflag = 0;
while (exitflag == 0)
    Naviparam=Navi_acquire(Naviparam);
    Naviparam=Navi_calc_data(Naviparam);

    %calibration calculation !TO BE CHECKED!
    DICOMPos = DICOMparam.calib.navi2dicom*[Naviparam.data.Endo_RefOffsetPosVec;1];

    ixR=round(min(max(DICOMPos(1),1),DICOMparam.Sx));
    iyR=round(min(max(DICOMPos(2),1),DICOMparam.Sy));
    izR=round(min(max(DICOMPos(3),1),DICOMparam.Sz)); 

    if kpressed ~= 0
        switch kpressed
            case ' '
                exitflag = 1;
                disp('**** Exit DICOM Slice Viewer ****')
        end
        kpressed = 0;

    end

    if Naviparam.datastr(5:11)~='MISSING'
        %refresh plot with 3 standard cuts
        set(Fig.sub1im, 'cdata', reshape(DICOMparam.Vd(ixR,:,:),[DICOMparam.Sy DICOMparam.Sz]));
        set(Fig.sub2im, 'cdata', reshape(DICOMparam.Vd(:,iyR,:),[DICOMparam.Sx DICOMparam.Sz]));
        set(Fig.sub3im, 'cdata', reshape(DICOMparam.Vd(:,:,izR),[DICOMparam.Sx DICOMparam.Sy]));
        drawnow;
    end
end

close(Fig.fig);
clear global;

1 个答案:

答案 0 :(得分:0)

解决了我自己的问题!

我所做的只是将“drawow”移出if语句。这允许我绘制我的新数据,如果它被采用,但也允许在我相信的图中更新一些内部参数。