2014-02-15 3 views
3

Я пытаюсь сделать в Matlab, GUI, что пользователь вводит точки и связь между ними. он также вводит фотографию карты (png-изображение) и масштаб для осей (ax x будет от 0 до масштаба). В конце (после ввода всех входных данных) я хочу показать пользователю изображение со всеми узлами и подключением к нему.matlab gui - нарисовать точки и линии на изображении

У меня есть 5 MatLab файлов - screen1.m, screen2.m, screen3.m, screen4.m, globalParams.m

в globalParams У меня есть глобальный Params, так что я могу использовать их с GUI экрана на экран графического интерфейса пользователя , на экране 1 пользователь вводит число узлов (например, 5), а также входит в карту. когда он нажимает кнопку «Далее», функция обратного вызова вызывает «screen2();». в screen2.m пользователь вводит координату (x, y), а когда он нажимает кнопку «Далее», функция обратного вызова вызывает «screen3();». на экране3 пользователь обновляет все соединения между всеми узлами. при завершении он нажимает кнопку «Готово», а функция обратного вызова вызывает «screen4». в screen4 я добавил в оси GUI, и там я сделал «imshow» .. , но реальная вещь, которую я хочу сделать, - это изменить оси, чтобы они были от 0 до шкалы (вместо 0 до 1), я хочу также (я сделал это с imshow), и последнее и самое важное, что я хочу нанести на изображение, это узлы и линии между ними (если пользователь добавляет соединение между узлом i в узел j, поэтому в изображение будет линией между ними, возможно, поставить линии и узлы с различными цветами, чтобы мы могли различать линии и узлы) в screen4 мы имеем:. xNodes и yNodes - 2 массивов для узлов «х "и" y ". ((xNodes (1), yNodes (1) является узлом 1). Также у нас есть Шкала и полныйPathName для изображения name. у нас также есть hopsMatrix это 2D-массив, если hopsMatrix (i, j) = 1 существует связь между i и j.

некоторый код:

в screen1, образ загрузки и numOfNodes и масштаба:

% --- 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, где у меня есть все входы, и я хочу, чтобы поместить узлы в карте (I не знаю, как это сделать, так что сейчас это код):

% --- 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); 

ответ

0

это решение кто-то дал мне .. Я поделюсь

% --- 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; 
imshow(fullPathName); 
global xNodes; 
global yNodes; 
global scale; 
global hopsMatrix; 

x_original=get(handles.axes1,'xlim'); 
y_original=get(handles.axes1,'ylim'); 
min_lim=min(x_original(2),y_original(2)); 
max_lim=max(x_original(1),y_original(1)); 
xlim([max_lim,min_lim]) 
ylim([max_lim,min_lim]) 
dist=min_lim-max_lim; 
set(handles.axes1) 
hold on 
plot((xNodes(:,1))*dist/scale+x_original(1),min_lim+y_original(1)-(yNodes(:,1))*dist/scale,'rx','markersize',8,'linewidth',2) 
[row,col] = find(hopsMatrix); 
for i=1:length(row) 
    plot((xNodes([row(i),1;col(i),1]))*dist/scale+x_original(1),min_lim+y_original(1)-(yNodes([row(i),1;col(i),1]))*dist/scale,'k','linewidth',2) 

end 
Смежные вопросы