获取坐标轴上当前点坐标,目前我知道有三种方法,现总结如下:
1. 在 figure1_windowbuttondown(GUI 建立之后默认的 Tag 为 figure1)
函数中,用currentpoint =
get(handles.axes1, 'CurrentPoint'); 可以返回一个行向量, 表示鼠标位置当前的横纵坐标( axes1
是当前坐标轴的Tag, 也可以写gca )。
2. 在 axes1_Buttondown
函数中使用currentpoint = get(hObject,
'CurrentPoint');
3. 使用 ginput()
函数,具体用法可以查用户手册, 或者参考xiaojidan2011的博客:
http://blog.csdn.net/xiaojidan2011/article/details/7969793。
下面说下三种方法的特色:
1.
第一种方法(figure1_windowbuttondown函数)非常直观,但是有个缺陷,比如说我要在
axes1 上画一条垂直于坐标轴的直线,只要我单击左键直线就能画出来。这个时候就需要获得当前点的坐标。若是在 axes1
上单击左键,直线可以画出来,这是我想要的效果没错;但是当我点击 axes1
轴以外的区域时,它也能在坐标轴上画出一条线,这就让我无语了。目前不知道有什么好的解决办法 (限于该函数)。
2.(axes1_Buttondown
函数)这是我寻求上面提到的问题的解决办法,同样的代码复制到这个函数中,可以避免单击其他区域仍然在
axes1
画线的尴尬;当时我通过这个函数解决了上述问题时,心中涌现一种难以言喻的兴奋,但是当我点击右键时它也画出了一条线时,心突然变得凄凉,下一刻就删掉了这个函数;现在来看,自己太傻了,在这个函数中只要加上这样一句代码就可以判断是否单击的为左键:
if
strcmp(get(handles.figure1,'SelectionType'), 'normal')
(不要忘了写end)
这里的 handles.figure1 不能改为 hObject(表示当前坐标轴),
否则会出错。当时我就是写成 hObject,
然后一直没想通到底是为什么错;也许一件事情做久了应该停下来休息一下,我当时一直在想这些问题,搞不好思维就僵化了,然后几天不去管这些事情,莫名其妙地就找到了解决方法。
3.
(ginput函数)我在放弃前两种方法后,就选择它了。但当我写完代码使用它时,惊呆我了,干嘛出现一个十字光标!!!这特么太影响美观了吧,反正目前我是不需要这种东西。
掂量再三,最后还是选用方法一去解决我的问题,不过在总结的时候,发现方法二解决了左右键的问题,等下还是去修改一下代码吧。
注意:
在第二种方法( axes1_Buttondown 函数 )中,
有一个值得注意的问题,就是当你在坐标轴上画了图,或者是导入了图片,不论你怎么点击,就是获得不了当前点的坐标。那是因为这个图形对象将坐标轴对象给覆盖了,这个时候你需要的是获得在图形上的坐标,具体方法我似乎成功过,下次再总结,可以到论坛上查询有关问题,很多高手为我们指明了方向。