function varargout = OceanMap(varargin)
%OceanMap - GUI: Manually input values of an m x n matrix and save as *.MAT file.
%
% Syntax:
% OCEANMAP, by itself, creates a new OCEANMAP or raises the existing
% singleton*.
%
% H = OCEANMAP returns the handle to a new OCEANMAP or the handle to
% the existing singleton*.
%
% OCEANMAP('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in OCEANMAP.M with the given input arguments.
%
% OCEANMAP('Property','Value',...) creates a new OCEANMAP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before OceanMap_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to OceanMap_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% Inputs:
% none
%
% Outputs:
% saved file (*.MAT) containing m x n array
%
% Example:
% Not really applicable- load the GUI and see!
%
% Notes:
% The number of rows and columns can be updated actively, without
% losing data already contained in the matrix
%
% You should call OceanMap from the command line, as clicking on the
% .fig file doesnt work: The ActiveX FlexArray doesn't initialise.
%
% Currently, Multidimensional Arrays are not supported... I'd be
% pleased to hear if anyone modifies the software for extra
% dimensions.
%
% The output matrix DOES NOT CONTAIN row and column numbers
%
% Background Information:
% OceanMap was originally created for the purpose of tracking a
% submersible vehicle using a grid painted onto the floor of a water
% tank. Technicians use this software to input the grid pattern
% painted and convert it to matrix form. Other software performed
% postprocessing to find the submarine's path by comparing grid
% numbers (recorded by the sub's onboard camera) and comparing them
% to the output matrix from OceanMap.
%
% Clearly, this software can be used for far less specialised purposes.
% Other m-files required:
% none
%
% Subfunctions:
% All create-fcns and callbacks etc associated with GUI Objects (see Help GUIDE)
% labelupdate(handles)
% - refreshes row/column numbering
% savethedamnfile(filename, savethismatrix)
% - saves file according to filename input in GUI
%
% Files required:
% OceanMap.m OceanMap.fig OceanMap_activex1
%
% See also:
% GridNav GUI file (for postprocessing of results)
% GUIDE, GUIDATA, GUIHANDLES
%
% Author: Thomas Clark, B.A.(Cantab) General Engineering
% email address: thc29@cam.ac.uk
% Created August 2005; Last revision: 25-August-2005
% Using Matlab 7.0.1.24704 (R14) Service Pack 1
%
% Thanks to Denis Gilbert (Maurice Lamontagne Institute, Dept. of Fisheries
% and Oceans Canada) for header file format (from www.mathworks.com).
%
% GUI Initialisation code Copyright 2002-2003 The MathWorks, Inc.
% --------------------------BEGIN CODE-------------------------------------------------------BEGIN CODE
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @OceanMap_OpeningFcn, ...
'gui_OutputFcn', @OceanMap_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% -------------------------OPENING FUNCTION----------------------------------------OPENING FUNCTION (inc. activex1)
% --- Executes just before OceanMap is made visible.-
function OceanMap_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 OceanMap (see VARARGIN)
% Choose default command line output for OceanMap
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes OceanMap wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% Initialising row and column numbers
labelupdate(handles);
% initialising global variables
global NUMROWS
NUMROWS = 200;
global NUMCOLS
NUMCOLS = 200;
% ------------------LABELLING UPDATE FUNCTION-------------------------------------------LABELLING UPDATE FUNCTION
function labelupdate(handles)
% Label the rows
set(handles.activex1,'Col',0);
for k=1:get(handles.activex1,'Rows')-1
set(handles.activex1,'Row',k);
set(handles.activex1,'Text',['Row ' num2str(k)]);
end;
% Label the Columns
k = 0;
set(handles.activex1,'Row',0);
set(handles.activex1,'Col',0);
set(handles.activex1,'Text','Column #:');
for k = 1:get(handles.activex1,'Cols')-1
set (handles.activex1,'Col',k);
set (handles.activex1,'Text',[num2str(k)]);
end;
% --- Outputs from this function are returned to the command line.
function varargout = OceanMap_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% ------------------FILENAME TEXT BOX 'EDIT 1'-------------------------------------------FILENAME EDIT TEXT BOX
function fileditbox_Callback(hObject, eventdata, handles)
% hObject handle to fileditbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of fileditbox as text
% str2double(get(hObject,'String')) returns contents of fileditbox as a double
global FILENAME;
FILENAME = get(hObject,'String');
% --- Executes during object creation, after setting all properties.
function fileditbox_CreateFcn(hObject, eventdata, handles)
% hObject handle to fileditbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
global FILENAME;
FILENAME = get(hObject,'String');
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% -------------------DATA EXPORT-----------------------------------------------------------------DATA EXPORT
% --- Executes on button press in exportbutton.
function exportbutton_Callback(hObject, eventdata, handles)
% hObject handle to exportbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Recalling the desired filename in double format from the Edit1 textbox
global FILENAME;
% Initialising the OceanMap storage matrix:
gridmatrix = zeros([get(handles.activex1,'rows')-1],...
[get(handles.activex1,'Cols')-1]);
% Obtaining and storing the OceanMap pattern (excluding row and col #s).
% N.B. Null entries returned as 0, Invalid Entries as NaN
% No imaginary numbers used. i,j, are scratch variables.
for i = 2:get(handles.activex1,'Cols') % For Loop 1
for j = 2:get(handles.activex1,'rows') % For Loop 2
set(handles.activex1,'Col',(i-1));
set(handles.activex1,'Row',(j-1));
gridmatrix((j-1),(i-1)) = get(handles.activex1,'Value');
end; % End For 2
end; %End For 1
savethefile(FILENAME,gridmatrix);
% Saving the variable gridmatrix in a .m file corresponding to the input
% filename.
function savethefile(filename,savethismatrix)
save(filename, 'savethismatrix');
% -------------------------OPTIONS PANEL------------------------------------------------------OPTIONS PANEL
function rowseditbox_Callback(hObject, eventdata, handles)
% hObject handle to rowseditbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of rowseditbox as text
% str2double(get(hObject,'String')) returns contents of rowseditbox as a double
global NUMROWS
NUMROWS = str2num(get(hObject,'String'))+1;
% --- Executes during object creation, after setting all properties.
function rowseditbox_CreateFcn(hObject, eventdata, handles)
% hObject handle to rowseditbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function colseditbox_Callback(hObject, eventdata, handles)
% hObject handle to colseditbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of colseditbox as text
% str2double(get(hObject,'String')) returns contents of colseditbox as a double
global NUMCOLS
NUMCOLS = str2num(get(hObject,'String'))+1;
% --- Executes during object creation, after setting all properties.
function colseditbox_CreateFcn(hObject, eventdata, handles)
% hObject handle to colseditbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in updatebutton.
function updatebutton_Callback(hObject, eventdata, handles)
% hObject handle to updatebutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Update the number of columns and rows in the table
global NUMCOLS
global NUMROWS
set(handles.activex1,'Rows', NUMROWS);
set(handles.activex1,'Cols', NUMCOLS);
labelupdate(handles);
% -------------------------END OF CODE-------------------------------------------------------END OF CODE
% --- If Enable == 'on', executes on mouse press in 5 pixel border.
% --- Otherwise, executes on mouse press in 5 pixel border or over exportbutton.
function exportbutton_ButtonDownFcn(hObject, eventdata, handles)
% hObject handle to exportbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)