在图中用鼠标拖动轴:Matlab Gui Guide

时间:2017-02-26 08:35:49

标签: matlab matlab-guide

该类的目的是允许用户单击图像(即轴)并将其拖动到图形上。当检测到鼠标点击时,该功能检测鼠标位置所在的轴,并启动“windowbuttonmotionfcn”,调用函数“movit”。函数'movit'的目的是在鼠标按钮关闭时拖动鼠标移动时选择的轴。

    function Mclicked(this, src, event)
        % get location of mouse click on the gui
         set(gca,'units','pix') ;
         mousePositionData = get(gca, 'CurrentPoint')
         this.x = mousePositionData(1,1);
         this.y = mousePositionData(1,2);

        %get origin position of all axes within the figure
        set(gca,'units','pix') ;
        AxesHandle=findobj(gcf,'Type','axes');
        pt1 = get(AxesHandle,{'Position','tightinset'}); % [left bottom right top] 

        %get the axes that mouse as clicked on and it in Values as a mat
            set(gcf,'windowbuttonmotionfcn',@( src, event) movit(this,src, event));
            set(gcf,'windowbuttonupfcn',@( src, event) stopmovit(this, src, event));   
        end
    end

我在第一次点击变量x和y时存储了鼠标的原始位置。下面的算法在按钮关闭时获取鼠标的新位置,并计算这两个鼠标移动之间的差异/距离。添加此差异以获得轴的新位置。

    function movit(this, src, event)
        %get location of new mouse position on the gui
        set(gca,'units','pix') ;
        mousePositionData = get(gca, 'CurrentPoint')
        this.x2 = mousePositionData(1,1);
        this.y2 = mousePositionData(1,2);
        this.distancex= this.x2-this.x;
        this.distancey= this.y2-this.y;
        %get the new location of the image.
        this.x2=this.Values(1,1)+this.distancex;
        this.y2=this.Values(1,2)+this.distancey;

        set(gca,'Position',[this.x2 this.y2 this.h this.w]); %x y h w
        drawnow;
    end

我遇到的问题是轴不会移动到鼠标旁边。例如,当鼠标按钮向下并且鼠标向下或向上移动时,图像/轴向下移动并消失。它不会与鼠标光标一起移动。

我做了一个测试来验证set(gca,'Position',[...]); %x y h w是否正常工作是通过使用我增加1的计数器在图上移动并将值添加到原始位置。轴按预期移动并对用户可见。因此,set(gca,'Position',[...]); %x y h w工作正常。但是,我不确定错误是什么。我认为它与计算或我想要调用的一段代码有关。

1 个答案:

答案 0 :(得分:0)

线mousePositionData = get(gca, 'CurrentPoint')获取轴内鼠标位置的坐标。但是,我们需要在图形或gui中获得鼠标位置。因此,我将gca更改为gcf。

另外,我发现x和y坐标需要互换。 set(gca,'Position',[this.y2 this.x2 this.h this.w]); %x y h w

图像现在鼠标放在鼠标光标旁边。仍然需要进行微小的调整以完善它。