Move a 2D object and track its position through a gui

10 views (last 30 days)
Raldi
Raldi on 10 Jul 2012
Hey everyone, i was wondering, is there a way to move a 2D object and track its new position after you have plotted them using your mouse. I dont want to draw a rectangle over an image as in some other questions i saw. What i want is, lets say i have two 2D objects
h1 = rectangle('Position',[0.59,0.35,3.75,1.37],...
'Curvature',[0.0,0.0],...
'LineWidth',2,'LineStyle','-',...
'FaceColor','g');
h2 = rectangle('Position',[1.59,5.35,2.75,4.37],...
'Curvature',[0.0,0.0],...
'LineWidth',2,'LineStyle','-',...
'FaceColor','g');
and a function that calculates the distance from their centers, i want do be able to move the one or the other using my mouse and the distance to be updated while i move them.
In my case i use this method to create some rectangles
for i = 1:compnum
rectangle('Position',[pos(i,1),pos(i,2),list(i,1),list(i,2)],...
'Curvature',[0,0],...
'LineWidth',2,'LineStyle','-')
daspect([1,1,1])
text(pos(i,1),pos(i,2),num2str(i))
end
where compos is a matrix that stores the position of the rectangles and list is a matrix with the dimentions they have.
Finally i use this code to print the distance of the two components
for i=1:compnum
text(compos(i,1),compos(i,2)+complist(i,2)/2,num2str(T(i)))
end
I thought it would be nice if i could merge all this into a single object and then be able to move it using my mouse.
Thanks in advance.
  1 Comment
Raldi
Raldi on 10 Jul 2012
I tried some functions with the best so far being
compnum = 2;
compos = [1,1;4,3];
complist = [3,1;4,3];
point1 = [compos(1,1)+complist(1,1)/2,compos(1,2)+complist(1,2)/2];
point2 = [compos(2,1)+complist(2,1)/2,compos(2,2)+complist(2,2)/2];
D = twopointdist(point1,point2)
xlim([0,10]),ylim([0,16])
for i = 1:compnum
% h(i) = rectangle('Position',[compos(i,1),compos(i,2),complist(i,1),complist(i,2)],...
% 'Curvature',[0,0],...
% 'LineWidth',2,'LineStyle','-')
h(i) = impositionrect(gca, [compos(i,1),compos(i,2),complist(i,1),complist(i,2)]);
daspect([1,1,1])
text(compos(i,1),compos(i,2),num2str(i))
text(compos(i,1),compos(i,2)+complist(i,2)/2,num2str(D))
end
But still i need to merge the text and somehow find a way to re-compute and re-display the distance each time i move one of them.

Sign in to comment.

Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!