我正在尝试用Matlab编写一个GUI,让用户输入点和它们之间的连接。用户还需要输入一张地图图片(png格式)和坐标轴的比例尺(例如,x轴范围为0到比例尺)。
最后(在用户输入所有内容后),我希望向用户显示带有所有节点和连接的图像。
我有5个Matlab文件 - screen1.m、screen2.m、screen3.m、screen4.m、globalParams.m。
在globalParams中,我有全局参数,因此我可以从屏幕GUI使用它们。在screen1中,用户输入节点数(例如5),并输入地图。当他按下“下一步”按钮时,回调函数调用“
但是,我真正想做的事情是将坐标轴更改为从0到比例尺(而不是从0到1),我还想放置图像(我用imshow实现了这一目标),最后也是最重要的一点是,我想在图像上放置节点和它们之间的线(如果用户添加了从节点i到节点j的连接,则图像中将有一条线连接它们。也许可以使用不同颜色来区分线和节点)。在screen4中,我们有:xNodes和yNodes-节点“x”和“y”轴的2个数组。(xNodes(1),yNodes(1)是节点1的位置)。此外,我们还有比例尺和图片的完整路径名fullPathName。我们还有一个hopsMatrix,它是一个二维数组-如果hopsMatrix(i,j)=1,则表示i到j之间有连接。
一些代码:
在screen1中,上传图像、节点数和比例尺:
我有5个Matlab文件 - screen1.m、screen2.m、screen3.m、screen4.m、globalParams.m。
在globalParams中,我有全局参数,因此我可以从屏幕GUI使用它们。在screen1中,用户输入节点数(例如5),并输入地图。当他按下“下一步”按钮时,回调函数调用“
screen2();
”。在screen2.m中,用户输入(x,y)坐标,当他按下“下一步”按钮时,回调函数调用“screen3();
”。在screen3中,用户更新所有节点之间的连接。完成后,他按下“完成”按钮,回调函数调用“screen4
”。在screen4中,我在GUI上添加了坐标轴,并在其中执行“imshow
”。但是,我真正想做的事情是将坐标轴更改为从0到比例尺(而不是从0到1),我还想放置图像(我用imshow实现了这一目标),最后也是最重要的一点是,我想在图像上放置节点和它们之间的线(如果用户添加了从节点i到节点j的连接,则图像中将有一条线连接它们。也许可以使用不同颜色来区分线和节点)。在screen4中,我们有:xNodes和yNodes-节点“x”和“y”轴的2个数组。(xNodes(1),yNodes(1)是节点1的位置)。此外,我们还有比例尺和图片的完整路径名fullPathName。我们还有一个hopsMatrix,它是一个二维数组-如果hopsMatrix(i,j)=1,则表示i到j之间有连接。
一些代码:
在screen1中,上传图像、节点数和比例尺:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global fullPathName;
[fileName pathName] = uigetfile({'*.png'},'File Selector');
fullPathName = strcat(pathName, fileName);
imshow(fullPathName);
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global numOfNodes;
global scale;
scale = str2num(get(handles.edit1, 'string'));
numOfNodes = str2num(get(handles.edit2, 'string'));
在screen4中,我有所有的输入,我想把节点放在地图上(我不知道该怎么做,所以现在这是代码):
% --- Executes just before screen4 is made visible.
function screen4_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to screen4 (see VARARGIN)
global fullPathName;
global xNodes;
global yNodes;
global scale;
global hopsMatrix;
img = imread(fullPathName);
imshow(fullPathName);