The purpose of the class is to allow the user to click on an image(i.e axes) and drag it across the figure. When a mouse click is detected, the function detects which axes the mouse location lies within and initiates 'windowbuttonmotionfcn' which calls up a function 'movit'. The purpose of function 'movit' is to drag the axes selected as the mouse moves while the mouse button is down.
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 store 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
I stored the original position of the mouse when it was first clicked in variable x and y. The algorithm below gets the new position of the mouse when the button is down and calculates the difference/distance between these two mouse movements. This difference is added to get the new position of the axes.
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
The problem I am experiencing is that the axes does not move adjacent to the mouse. For example, when the mouse button is down and the mouse is moving down or even up, the image/axes moves downwards and disappears. It does not move alongside the mouse cursor.
I did a test to verify if the set(gca,'Position',[…]); %x y h w is working correctly by moving across the figure using a counter which I increased by 1 and added the value to the original position. The axes moved as expected and visible to the user.Therefore, set(gca,'Position',[…]); %x y h wworks fine. However, I am unsure what the error is . I assume its related to the calculations or a piece of code that I suppose to call up.
Best Answer