我是靠谱客的博主 完美仙人掌,最近开发中收集的这篇文章主要介绍matlab currentpoint,Matlab的axes的CurrentPoint的数据用的是什么格式?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

您好,看见您在其他帖子的回复 提到了handles一有变化,就要保存。我想到了困扰我已久的一个问题。

程序如下:function [] = GUI_25()

S.ln = [];  % This holds the handles to the points.

S.fh = figure('units','pixels',...

'position',[200 200 500 500],...

'menubar','none',...

'name','GUI_25',...

'numbertitle','off',...

'resize','off');

S.ax = axes('xlim',[0 1],'ylim',[0 1]);

title('Click to add points.  Right click for options.','fontw','bold')

S.cm = uicontextmenu;

S.um(1) = uimenu(S.cm,...

'label','Delete Points',...

'Callback', {@um1_call,S});

S.um(2) = uimenu(S.cm,...

'label','Rand Colors',...

'Callback', {@um2_call,S});

set(S.ax,'buttondownfcn',{@ax_bdfcn,S},'uicontextmenu',S.cm)

function [] = ax_bdfcn(varargin)

% Serves as the buttondownfcn for the axes.

S = varargin{3};  % Get the structure.

seltype = get(S.fh,'selectiontype'); % Right-or-left click?

L = length(S.ln);

if strmatch(seltype,'normal')

p = get(S.ax, 'currentpoint'); % Get the position of the mouse.

S.ln(L+1) = line(p(1),p(3),'Marker','+');  % Make our plot.

set(S.ln(L+1),'uicontextmenu',S.cm)  % So user can click a point too.

end

% Update structure.

set(S.ax,'ButtonDownFcn',{@ax_bdfcn,S})

set(S.um(:),{'callback'},{{@um1_call,S};{@um2_call,S}})

function [] = um1_call(varargin)

% Callback for uimenu to delete the points.

S = varargin{3};  % Get the structure.

delete(S.ln(:));  % Delete all the lines.

S.ln = [];  % And reset the structure.

set(S.ax,'ButtonDownFcn',{@ax_bdfcn,S})

function [] = um2_call(varargin)

% Callback for uimenu to change the colors of the points.

S = varargin{3};  % Get the structure.

L = length(S.ln);  % The number of points.

set(S.ln(:),{'color'},mat2cell(0+.75*rand(L,3),ones(1,L),3 ))  % Color mat.

在function [] = ax_bdfcn(varargin)函数里S.ln

发生了变化,就要在函数的结尾set(S.ax,'ButtonDownFcn',{@ax_bdfcn,S})

set(S.um(:),{'callback'},{{@um1_call,S};{@um2_call,S}})

将变化后的句柄结构体重新作为callback函数的新输入量有点类似您说的更新保存handles

我在set(S.ax,'ButtonDownFcn',{@ax_bdfcn,S})

set(S.um(:),{'callback'},{{@um1_call,S};{@um2_call,S}})

前面加上注释符号%后发现程序也确实无法正常运转。但是我从程序中看,觉得即使不用这样的语句,一定条件下程序也可正常执行。

我们假设不要在函数function [] = um1_call(varargin)中最后一句set(S.ax,'ButtonDownFcn',{@ax_bdfcn,S})

而ax_bdfcn函数主要执行的就是在坐标轴上的鼠标点击点的坐标表现出来,并通过S.ln(L+1) = line(p(1),p(3),'Marker','+')赋予S.ln。通过程序我们可以看到当舍去set(S.ax,'ButtonDownFcn',{@ax_bdfcn,S})后,在执行完um1_call后,即删除axes上已标记的点(S.ln=[]),在重新标记点(调用function [] = ax_bdfcn(varargin))依然能正常标记鼠标点击过的位置。可是我要再一次删除后面标记的点时,发现程序无法执行了,我猜想是因为第一次删除时 没有将变化的句柄结构体重新作为ax-bdfcn的输入参数。但是我觉得即使上次删除时S.ln的置零没有保存,在function [] = ax_bdfcn(varargin)依然可以S.ln不为零的基础上继续存储数据,而无论S如何,在 um1_call(varargin)函数里的delete(S.lnS.ln = [];依然是可以正常的对标记的点删除。可是程序报错恰恰是在delete(S.ln(:));

老师,你觉得为什么错了

有点长,十分感谢老师

最后

以上就是完美仙人掌为你收集整理的matlab currentpoint,Matlab的axes的CurrentPoint的数据用的是什么格式?的全部内容,希望文章能够帮你解决matlab currentpoint,Matlab的axes的CurrentPoint的数据用的是什么格式?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部