connect two uicontrol object with a line

Asked by Christoph on 5 Jun 2012
Latest activity Commented on by Sean de Wolski on 15 Jun 2012

Hi,

I'm trying to get a nice and tidy GUI with a veriable number of uicontrol objects. To get a clean and clear layout I want to connect several objects with a simple line or path. Has anybody an idea how to implement this?

Thanks for your response, CN

0 Comments

Christoph

Products

No products are associated with this question.

4 Answers

Answer by Sean de Wolski on 5 Jun 2012
Accepted answer

You could use an invisible axes in the background and draw line objects. For example:

fig = figure('units','pix');
pos = get(fig,'position');
ax = axes('units','pix','outerposition',[0 0 pos([3 4])],...
    'position',[0 0 pos([3 4])],'parent',fig,'visible','off','xlim',...
    [0 pos(3)],'ylim',[0 pos(4)]);
h(3) = uicontrol('units','pix','position',[300 10 100 100],'style','push');
h(2) = uicontrol('units','pix','position',[10 10 100 100],'style','push');
h(1) = uicontrol('units','pix','position',[300 300 100 100],'style','push');
pos = get(h,'position');
for ii = 1:length(h)-1
line('xdata',[pos{ii}(1)+pos{ii}(3)/2, pos{ii+1}(1)+pos{ii}(3)/2],...
    'ydata',[pos{ii}(2)+pos{ii}(4)/2, pos{ii+1}(2)+pos{ii}(4)/2],'parent',ax)
end

7 Comments

Christoph on 11 Jun 2012

well..this condition wasn't posed by me but my supervisor.

Christoph on 15 Jun 2012

Hi Sean,

just wan't to let you know that I found a solution. I figured out that for my purposes the uicontrol-objects aren't needed. I created a various number of text-objects in the axes-class which use the ButtonDownFcn-Property as Callback to show substructures or the cells of the structure. Connecting each object with a line was pretty easy in the axes class.

The idea of scrolling I implemented with the help of a slider, which sets the index of vector which contains all visible objects.

Last but not least I but uicontrol checkboxes on every node in figure coordinates to set or reset the concerned structure or cell.

Now I got one last question: Whats the drawback of an object with a ButtonDownFcn-Callback in axes-class compared with an uicontrol-object with a Callback. To me it seems they both do the same things, but maybe on a different way.

Nevertheless thanks for your great support and ideas,
CN

Sean de Wolski on 15 Jun 2012

There are a few things that are different I believe.
-The uicontrol callbacks will fire if you are zooming or panning, this is not true for a buttondownfcn which is disabled while in one of these interactive modes.
-The buttondownfcn fires when the button goes down, the callbacks fire when it comes up.

There are probably a few other things though I can't think of them right now.

Sean de Wolski
Answer by Image Analyst on 5 Jun 2012

Did you try the line() function? I usually use it on axes, but it might work on your main figure also.

2 Comments

Walter Roberson on 5 Jun 2012

line() can only be used in axes. The routines that can create graphical items that are not in axes seem to all be named starting with "ui": uicontrol(), uitab(), uitable(), uipanel()

Christoph on 6 Jun 2012

Thats totally right. Even patch doesn't work in different class then axes.

Image Analyst
Answer by Walter Roberson on 5 Jun 2012

You need to create an axes in order to draw the line.

My recollection is that uicontrol() objects take graphical precedence over axes (that is, if you have a uicontrol() that is positioned in an area where the axes happens to be, the control will show up on top.)

1 Comment

Sean de Wolski on 5 Jun 2012

@Walter, this is recollection is true!

Walter Roberson
Answer by Adam Kaas on 5 Jun 2012

I'm guessing there is a more efficient way, but you could always get a picture of the path you want either online or make it using MSpaint or some other software and insert it as an axes. Are you using GUIDE?

1 Comment

Christoph on 6 Jun 2012

No, I'm not using guide. I don't want a static GUI. All I want to do is just a simple navigation tree to read and set several values of a struct with a large number of substructs just as know from windows explorer.

Adam Kaas

Contact us