绘制橡皮线

橡皮线的一端是固定的,另一端的位置在绘制过程中可以变化。所以绘制时看起来就像牵引一根一端固定的橡皮线。

绘制橡皮线需要记录鼠标的击键次数,鼠标按下时,击键次数为1,用当前点初始化橡皮线的起点和终点,并创建直线段。移动鼠标时,将鼠标当前点作为橡皮线的终点,以异或模式画线。鼠标再次按下时,击键次数为2,以正常模式绘制当前位置的橡皮线,并将击键次数变量归0,准备下一次绘制。下面给出一段绘制橡皮线的MATLAB程序。

code.matlab
function Interplot
global istep
global xdata
global ydata
istep=0;        % istep记录击键次数
axis([0 3 0 3]);
set(gcf,'pointer','cross');
set(gcf,'WindowButtonDownFcn',@WindowButtonDown);
set(gcf,'WindowButtonMotionFcn',@WindowButtonMotion);
% 按下鼠标键时
function WindowButtonDown(hObject,eventdata,handles)
global istep
global xdata
global ydata
global h
istep=istep+1;    % 击键次数加1
p=get(gca,'currentpoint');    % 获取当前点的坐标
if(istep==1)      % 如果击键次数为1
    % 用当前点初始化直线段的起点和终点
    xdata(1)=p(1);
    ydata(1)=p(3);
    xdata(2)=p(1);
    ydata(2)=p(3);
    % 创建直线段对象,用异或模式画线
    % 返回直线段对象的句柄
    h=line(xdata,ydata,'EraseMode','xor');
elseif(istep==2)    % 如果击键次数为2
    % 将当前点设置为直线段终点
    xdata(2)=p(1);
    ydata(2)=p(3);
    % 改变直线段的终点属性
    % 用正常模式重绘直线段
    set(h,'XData',xdata,'YData',ydata,'EraseMode','normal')
    istep=0;    %将istep归0
end
% 移动鼠标时
function WindowButtonMotion(hObject, eventdata, handles)
global istep
global xdata
global ydata
global h
p=get(gca,'currentpoint');   % 记录鼠标的当前位置
if(istep==1)                 % 如果istep等于1
    % 将当前点设置为直线段终点
    xdata(2)=p(1);
    ydata(2)=p(3);
    % 改变直线段的终点属性,
    % 用异或模式重绘直线段
    set(h,'XData',xdata,'YData',ydata)
end

运行该程序时首先打开一个空白的图形窗口,在窗口中移动鼠标时,会显示坐标系,在坐标系中单击并拖动鼠标,可以绘制橡皮线。图8-1中绘制了3条直线段。

Document Image
\[\]

图8-1 交互绘制橡皮线