drawing lines between nodes in a GUI

Hey,
I would like to know if it is possible to add nodes to a user interface from GUIDE in matlab. I would like to place 24 nodes and the user would to be able to connect any two nodes in the interface. Can this be done?

4 个评论

Sure, graphs can be plotted in guide axes.
For the user interaction, see ginput()
I would like the user to select two nodes and then a line should be drawn between those two nodes.
The ginput allows the user to select the two nodes... have you looked into that documentation yet?
You've edited the question and it no longer asks how to connect two selected nodes with a new edge which is what my solution does.

请先登录,再进行评论。

回答(1 个)

Here's a demo that will get you started. You will have to tweak it to work for your data and your requirements.
You'll have to a button or define some kind of event that will prompt the user to select two nodes on the plot. That prompt should evoke a callback function that plots the graph, uses ginput to allow the user to select 2 nodes, and then replots the updated graph with the added edge.
% Plot the original graph
A(:,end) = 0;
names = {'alpha' 'beta' 'gamma' 'delta'};
G = graph(A,names,'upper','omitselfloops');
cla(handles.axes1)
ph = plot(handles.axes1, G);
axis equal
% prompt user to select 2 nodes
% cross hairs will appear allowing the user to click
% ANYWHERE on the GUI figure.
xy = ginput(2);
% find nearest nodes to each mouse click
% It would be wise to monitor the DISTANCE output and if it's greater than some value,
% you should reject the selection. The Distance is the distance between the mouse click
% and the nearest node.
nearestNodeIdx = nan(size(xy,1),1);
for i = 1:size(xy,1)
[distance, nearestNodeIdx(i)] = min(pdist2(xy(i,:), [ph.XData.', ph.YData.']));
end
% add edge to graph
H = addedge(G,nearestNodeIdx(1),nearestNodeIdx(2),0);
% Clear current graph and re-plot the updated one.
% Note that the graph may have changed orientation or shape.
delete(ph)
ph = plot(handles.axes1, H);

类别

帮助中心File Exchange 中查找有关 Annotations 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by