drawing lines between nodes in a GUI
6 次查看(过去 30 天)
显示 更早的评论
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 个评论
Adam Danz
2020-2-6
The ginput allows the user to select the two nodes... have you looked into that documentation yet?
回答(1 个)
Adam Danz
2020-2-6
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);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Migrate GUIDE Apps 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!