admin管理员组

文章数量:1612060

问题描述:

在MATLAB官方帮助文件中,其中UIFigure的属性中有CurrentPoint选项,触发该属性需要通过 WindowButtonMotionFcn回调函数来实现。以二元素向量形式返回。该向量包含鼠标指针的 (x, y) 坐标,从图窗左下角开始测量。
但是在UIAxes属性里面也提到了CurrentPoint属性项,包含鼠标指针相对于坐标区的 (x,y,z) 坐标。返回的数组采用如下形式:
[xfront yfront zfront
xback  yback  zback]
这两点指示最后一次鼠标点击的位置。
但问题是如果在WindowButtonMotionFcn回调函数,如果你想直接利用app.UIAxes.CurrentPoint来获取坐标点时,总是会提示出错。此时如果你观察,其实UIAxes中根本没有CurrentPoint这一项。这个令人费解。

可以实现的办法

其实:官方帮助文件中也提到,程序是可以区分UIAxes内的坐标,还是UIAxes外的坐标,毕竟UIAxes控件是在UIFigure控件下的子控件。因此,可以实现的方法就是直接采用app.UIFigure.CurrentPoint获取当前的屏幕坐标点即可。而不用迷惑这个坐标是UIAxes的还是UIFigure的。

例程

function Main_UIFigureWindowButtonDown(app, event)
           
% % %  判断所选点目标非空,且落在当前"In&Ref"曲线上
            if ~isempty(event.Source.CurrentObject) && isequal(event.Source.CurrentObject.Tag,'In&Ref')
                app.ButtonDown = 1;
                app.Main_UIFigure.SelectionType = 'normal';
                app.a = app.Main_UIFigure.CurrentPoint;
                app.Screen_X = app.a(1);
                app.Screen_Y = app.a(2);
                [app.MapAxis_X, app.MapAxis_Y] = SelectPoint(app);
                app.X_Label.Text = num2str(app.MapAxis_X,3);
                app.Y_Label.Text = num2str(app.MapAxis_Y,3);
                app.Int_Flag = false;
            end
        end

这个程序实际上就是要在UIAxes控件内显示的波形上选点,然后映射到真实的曲线坐标上,此时对于“CurrentPoint”的争取用法就是调用app.Main_UIFigure.CurrentPoint 就可以了得到屏幕上UIAxes的当前坐标,然后再利用坐标映射程序映射到曲线坐标上即可。

问题:官方帮助文件中UIAxes属性内的CurrentPoint真正的用法是怎么回事呢,这个是我一直没有想明白的地方,还请高手指点迷津!!!

本文标签: 选点屏幕matlabcurrentpoint