移动GUI轴中的imellipse时调用addNewPositionCallback

时间:2015-06-24 17:35:20

标签: matlab

我有一个“轮廓开始”按钮,其回调在imellipse的坐标处创建一个ginput对象。然后,我可以拖动imellipse以便通过addNewPositionCallback调整图像的轮廓。我计算imellipse和轮廓之间的交点,并相应地更新轮廓。

目前,我只能在点击“轮廓开始”按钮后更新轮廓,但是每当移动addNewPositionCallback时都希望调用imellipse,而不仅仅是第一个按下按钮后移动。我试图使用waitfor(),但它没有用。

带有imellipse的轴

image1

在轮廓开始按下按钮后通过imellipse调整的轮廓 image2

轮廓不再通过imellipse的移动来调整

image3

1 个答案:

答案 0 :(得分:0)

这是一个简单的演示,展示了如何为addNewPositionCallback imellipse方法实现函数。这是一个简单的演示,但你会明白这个想法。如果不清楚,请询问。

有一个用于绘制椭圆的按钮和一个用于显示椭圆位置的文本框(以显示它的工作原理:)。

function MoveEllipse
clc
clear
close all

%// Load demo data
I = imread('coins.png');

%// Create GUI
hFig = figure('Position',[100 100 400 400],'Units','normalized');

%// create axes with handle
handles.axes1 = axes('Position', [0.2 0.2 0.6 0.6]);

%// Create pusbutton to draw ellipse
handles.DrawEllipseButton= uicontrol('style', 'push','position', [40 40 100 30],'String','Draw ellipse', 'callback', @(s,e) DrawEllipse);

%// Create edit box to display position
handles.PositionBox = uicontrol('style', 'text','position', [150 30 150 60],'String','','BackgroundColor','w');

%// Show image
imshow(I)

guidata(hFig,handles);


%// Pushbutton callback to draw ellipse.
    function DrawEllipse

        hEllipse = imellipse(gca);

        addNewPositionCallback(hEllipse,@(x) GetEllipsePosition(x))

    end

%// Actual function called by the addNewPositionCallback method
    function GetEllipsePosition(pos)

        set(handles.PositionBox,'String',pos);

    end

end

按下按钮并移动椭圆后的示例屏幕截图:

enter image description here