drawing lines between nodes in a GUI
    3 次查看(过去 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 中查找有关 Data Exploration 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

