diff --git a/lib/+artoa/+controller/+edit/+pressure/applyStatusToAllPoints.m b/lib/+artoa/+controller/+edit/+pressure/applyStatusToAllPoints.m new file mode 100644 index 0000000000000000000000000000000000000000..c78d3239b01a62d35edb23d72684c9d5f58e3701 --- /dev/null +++ b/lib/+artoa/+controller/+edit/+pressure/applyStatusToAllPoints.m @@ -0,0 +1,21 @@ +function [] = applyStatusToAllPoints(pStatus) +%APPLYSTATUSTOALLPOINTS Applies the given status to all points. +% Applies given status to all points. +% +% Parameters: +% pStatusCode (int) The status code that will be applied to the +% selected data. + +global artoaWorkspace artoaGui; + +%% Set status +artoaWorkspace.statusPressure(:) = pStatus; + +%% Update gui +artoa.controller.edit.updateAvailablePlots(); +artoa.controller.updateMenuButtons(); + +[artoaGui.editPressure, artoaWorkspace.editPressure] = ... + artoa.controller.edit.clearSelection(artoaGui.editPressure, artoaWorkspace.editPressure); +end + diff --git a/lib/+artoa/+controller/+edit/+pressure/applyStatusToAllVisible.m b/lib/+artoa/+controller/+edit/+pressure/applyStatusToAllVisible.m new file mode 100644 index 0000000000000000000000000000000000000000..1a6e02aa667b32de0f78d9af88bb88a7cd4c409d --- /dev/null +++ b/lib/+artoa/+controller/+edit/+pressure/applyStatusToAllVisible.m @@ -0,0 +1,31 @@ +function [] = applyStatusToAllVisible(pStatusCode) +%APPLYSTATUSTOALLVISIBLE Applies the given status code to the visible points. +% Applies the given status to the workspace variable. +% +% Parameters: +% pStatusCode (int) The status code that will be applied to the +% selected data. +% + +global artoaWorkspace artoaGui; + +%% Get all visible points +x_boundary = artoaGui.figures.editPressure.CurrentAxes.XLim; +y_boundary = artoaGui.figures.editPressure.CurrentAxes.YLim; + +selection = inpolygon( ... + artoaWorkspace.rafosDate, ... + artoaWorkspace.pressure, ... + [x_boundary(1) x_boundary(2) x_boundary(2) x_boundary(1) x_boundary(1)], ... + [y_boundary(1) y_boundary(1) y_boundary(2) y_boundary(2) y_boundary(1)] ... +); + +%% Set status +artoaWorkspace.statusPressure(selection) = pStatusCode; + +%% Update gui +artoa.controller.edit.updateAvailablePlots(); +artoa.controller.updateMenuButtons(); + +end + diff --git a/lib/+artoa/+controller/+edit/+pressure/applyStatusToSelectedPoints.m b/lib/+artoa/+controller/+edit/+pressure/applyStatusToSelectedPoints.m index e8625a718faf07b86450df6918050d9397f8b8a0..19d00d2418e2fda55687152d5d271e7de74a7682 100644 --- a/lib/+artoa/+controller/+edit/+pressure/applyStatusToSelectedPoints.m +++ b/lib/+artoa/+controller/+edit/+pressure/applyStatusToSelectedPoints.m @@ -14,14 +14,14 @@ global artoaWorkspace artoaGui; %% Check if selection exists -if ~isfield(artoaWorkspace.editPressure, 'selectedPoints') ... - || isempty(artoaWorkspace.editPressure.selectedPoints) +if ~isfield(artoaWorkspace.editPressure, 'userSelection') ... + || isempty(artoaWorkspace.editPressure.userSelection) warndlg('You need to select data by using the "Pick" button first!', 'No data selected'); return; end %% Set status -artoaWorkspace.statusPressure(artoaWorkspace.editPressure.selectedPoints) = pStatusCode; +artoaWorkspace.statusPressure(artoaWorkspace.editPressure.userSelection) = pStatusCode; %% Update gui artoa.controller.edit.updateAvailablePlots(); diff --git a/lib/+artoa/+controller/+edit/+pressure/dropSelection.m b/lib/+artoa/+controller/+edit/+pressure/dropSelection.m new file mode 100644 index 0000000000000000000000000000000000000000..9ffc01c95645e18a17c1ffabb37a879db69b88f4 --- /dev/null +++ b/lib/+artoa/+controller/+edit/+pressure/dropSelection.m @@ -0,0 +1,16 @@ +function [] = dropSelection() +%DROPSELECTION Summary of this function goes here +% Detailed explanation goes here + +global artoaGui artoaWorkspace; + +if artoa.controller.edit.dataPointsSelected(artoaWorkspace.editPressure) + if strcmp(questdlg('Reset current selection?', 'Confirmation', 'Yes', 'Cancel', 'Cancel'), 'Cancel') + return; + end + % reset the line and all required fields + [artoaGui.editPressure, artoaWorkspace.editPressure] = artoa.controller.edit.clearSelection(artoaGui.editPressure, artoaWorkspace.editPressure); +end + +end + diff --git a/lib/+artoa/+controller/+edit/+pressure/pickPoint.m b/lib/+artoa/+controller/+edit/+pressure/pickPoint.m new file mode 100644 index 0000000000000000000000000000000000000000..addaa25b0667d3f73b70e74ed9b5bc558d829e28 --- /dev/null +++ b/lib/+artoa/+controller/+edit/+pressure/pickPoint.m @@ -0,0 +1,32 @@ +function [] = pickPoint() +%PICKPOINT Lets the user pick a point in the plot. +% Selection can be aborted by using the right mouse button. + +global artoaGui artoaWorkspace; + +%% Check if polygon is already selected + +artoa.controller.edit.pressure.dropSelection(); + +%% Select point by mouse + +[dx, dy, button] = ginput(1); + +% find closest match +% calculate distance +distance = sqrt((artoaWorkspace.rafosDate - dx).^2 + (artoaWorkspace.pressure - dy).^2); +[~, index] = min(distance); +x_closest = artoaWorkspace.rafosDate(index); +y_closest = artoaWorkspace.pressure(index); + +if button ~= 1 + return; +end + +hold on; +artoaGui.editPressure.userSelection = scatter(x_closest, y_closest, 50, [1 1 1]); +hold off; +artoaWorkspace.editPressure.userSelection = index; + +end + diff --git a/lib/+artoa/+controller/+edit/+pressure/pickPolygon.m b/lib/+artoa/+controller/+edit/+pressure/pickPolygon.m index a61ab171ffa082d6e3b69c5fcb85be3881bc508e..63946199c3c8188934e11312b4206959f02f591f 100644 --- a/lib/+artoa/+controller/+edit/+pressure/pickPolygon.m +++ b/lib/+artoa/+controller/+edit/+pressure/pickPolygon.m @@ -8,22 +8,16 @@ function [] = pickPolygon() global artoaGui artoaWorkspace; -%% Check if polygon is already selected +%% Check if selection is already selected -if artoa.controller.edit.dataPointsSelected(artoaWorkspace.editPressure) - if strcmp(questdlg('Reset current line and pick a new one?', 'Confirmation', 'Yes', 'Cancel', 'Cancel'), 'Cancel') - return; - end - % reset the line and all required fields - [artoaGui.editPressure, artoaWorkspace.editPressure] = artoa.controller.edit.clearSelection(artoaGui.editPressure, artoaWorkspace.editPressure); -end +artoa.controller.edit.pressure.dropSelection(); %% Select polygon by mouse x = []; y = []; % draw the line that will be extended on every click -artoaGui.editPressure.selectedPolygon = line( ... +artoaGui.editPressure.userSelection = line( ... NaN, NaN, 'Color', [1 1 1], 'LineStyle', '-' ... ); @@ -41,7 +35,7 @@ while button == 1 continue; end % update the line - set(artoaGui.editPressure.selectedPolygon, 'XData', x, 'YData', y); + set(artoaGui.editPressure.userSelection, 'XData', x, 'YData', y); [dx, dy, button] = ginput(1); end @@ -54,10 +48,10 @@ else return; end % update the line -set(artoaGui.editPressure.selectedPolygon, 'XData', x, 'YData', y); +set(artoaGui.editPressure.userSelection, 'XData', x, 'YData', y); % store the selected points in the workspace for editing -artoaWorkspace.editPressure.selectedPoints = inpolygon( ... +artoaWorkspace.editPressure.userSelection = inpolygon( ... artoaWorkspace.rafosDate, ... artoaWorkspace.pressure, ... x, ... diff --git a/lib/+artoa/+controller/+edit/+temperature/applyStatusToAllPoints.m b/lib/+artoa/+controller/+edit/+temperature/applyStatusToAllPoints.m new file mode 100644 index 0000000000000000000000000000000000000000..535f34e4e9c35d7fb9f038f07e7454eea55155af --- /dev/null +++ b/lib/+artoa/+controller/+edit/+temperature/applyStatusToAllPoints.m @@ -0,0 +1,21 @@ +function [] = applyStatusToAllPoints(pStatus) +%APPLYSTATUSTOALLPOINTS Applies the given status to all points. +% Applies given status to all points. +% +% Parameters: +% pStatusCode (int) The status code that will be applied to the +% selected data. + +global artoaWorkspace artoaGui; + +%% Set status +artoaWorkspace.statusTemperature(:) = pStatus; + +%% Update gui +artoa.controller.edit.updateAvailablePlots(); +artoa.controller.updateMenuButtons(); + +[artoaGui.editTemperature, artoaWorkspace.editTemperature] = ... + artoa.controller.edit.clearSelection(artoaGui.editTemperature, artoaWorkspace.editTemperature); +end + diff --git a/lib/+artoa/+controller/+edit/+temperature/applyStatusToAllVisible.m b/lib/+artoa/+controller/+edit/+temperature/applyStatusToAllVisible.m new file mode 100644 index 0000000000000000000000000000000000000000..be52ac6ab9559d1f03dec35f01c1372a776ce05b --- /dev/null +++ b/lib/+artoa/+controller/+edit/+temperature/applyStatusToAllVisible.m @@ -0,0 +1,31 @@ +function [] = applyStatusToAllVisible(pStatusCode) +%APPLYSTATUSTOALLVISIBLE Applies the given status code to the visible points. +% Applies the given status to the workspace variable. +% +% Parameters: +% pStatusCode (int) The status code that will be applied to the +% selected data. +% + +global artoaWorkspace artoaGui; + +%% Get all visible points +x_boundary = artoaGui.figures.editTemperature.CurrentAxes.XLim; +y_boundary = artoaGui.figures.editTemperature.CurrentAxes.YLim; + +selection = inpolygon( ... + artoaWorkspace.rafosDate, ... + artoaWorkspace.temperature, ... + [x_boundary(1) x_boundary(2) x_boundary(2) x_boundary(1) x_boundary(1)], ... + [y_boundary(1) y_boundary(1) y_boundary(2) y_boundary(2) y_boundary(1)] ... +); + +%% Set status +artoaWorkspace.statusTemperature(selection) = pStatusCode; + +%% Update gui +artoa.controller.edit.updateAvailablePlots(); +artoa.controller.updateMenuButtons(); + +end + diff --git a/lib/+artoa/+controller/+edit/+temperature/applyStatusToSelectedPoints.m b/lib/+artoa/+controller/+edit/+temperature/applyStatusToSelectedPoints.m index 0a694751360d05984a3333184410ed520d5c5545..b5e345f0e6e4fca953df8949c7ac0a87d9011e65 100644 --- a/lib/+artoa/+controller/+edit/+temperature/applyStatusToSelectedPoints.m +++ b/lib/+artoa/+controller/+edit/+temperature/applyStatusToSelectedPoints.m @@ -14,14 +14,14 @@ global artoaWorkspace artoaGui; %% Check if selection exists -if ~isfield(artoaWorkspace.editTemperature, 'selectedPoints') ... - || isempty(artoaWorkspace.editTemperature.selectedPoints) +if ~isfield(artoaWorkspace.editTemperature, 'userSelection') ... + || isempty(artoaWorkspace.editTemperature.userSelection) warndlg('You need to select data by using the "Pick" button first!', 'No data selected'); return; end %% Set status -artoaWorkspace.statusTemperature(artoaWorkspace.editTemperature.selectedPoints) = pStatusCode; +artoaWorkspace.statusTemperature(artoaWorkspace.editTemperature.userSelection) = pStatusCode; %% Update gui artoa.controller.edit.updateAvailablePlots(); diff --git a/lib/+artoa/+controller/+edit/+temperature/dropSelection.m b/lib/+artoa/+controller/+edit/+temperature/dropSelection.m new file mode 100644 index 0000000000000000000000000000000000000000..bce2559edd0a57c682c433048fa6e5cb7bf1d552 --- /dev/null +++ b/lib/+artoa/+controller/+edit/+temperature/dropSelection.m @@ -0,0 +1,16 @@ +function [] = dropSelection() +%DROPSELECTION Summary of this function goes here +% Detailed explanation goes here + +global artoaGui artoaWorkspace; + +if artoa.controller.edit.dataPointsSelected(artoaWorkspace.editTemperature) + if strcmp(questdlg('Reset current selection?', 'Confirmation', 'Yes', 'Cancel', 'Cancel'), 'Cancel') + return; + end + % reset the line and all required fields + [artoaGui.editTemperature, artoaWorkspace.editTemperature] = artoa.controller.edit.clearSelection(artoaGui.editTemperature, artoaWorkspace.editTemperature); +end + +end + diff --git a/lib/+artoa/+controller/+edit/+temperature/pickPoint.m b/lib/+artoa/+controller/+edit/+temperature/pickPoint.m new file mode 100644 index 0000000000000000000000000000000000000000..50eb98e77295ca71a91608c8d44c09e071d9a083 --- /dev/null +++ b/lib/+artoa/+controller/+edit/+temperature/pickPoint.m @@ -0,0 +1,32 @@ +function [] = pickPoint() +%PICKPOINT Lets the user pick a point in the plot. +% Selection can be aborted by using the right mouse button. + +global artoaGui artoaWorkspace; + +%% Check if polygon is already selected + +artoa.controller.edit.temperature.dropSelection(); + +%% Select point by mouse + +[dx, dy, button] = ginput(1); + +% find closest match +% calculate distance +distance = sqrt((artoaWorkspace.rafosDate - dx).^2 + (artoaWorkspace.temperature - dy).^2); +[~, index] = min(distance); +x_closest = artoaWorkspace.rafosDate(index); +y_closest = artoaWorkspace.temperature(index); + +if button ~= 1 + return; +end + +hold on; +artoaGui.editTemperature.userSelection = scatter(x_closest, y_closest, 50, [1 1 1]); +hold off; +artoaWorkspace.editTemperature.userSelection = index; + +end + diff --git a/lib/+artoa/+controller/+edit/+temperature/pickPolygon.m b/lib/+artoa/+controller/+edit/+temperature/pickPolygon.m index 1907ddfc1b36ba33be5682fd5a263e36e85a8c40..aca9d5d1853e34e69e7b4859305b4b1529538f7e 100644 --- a/lib/+artoa/+controller/+edit/+temperature/pickPolygon.m +++ b/lib/+artoa/+controller/+edit/+temperature/pickPolygon.m @@ -23,7 +23,7 @@ x = []; y = []; % draw the line that will be extended on every click -artoaGui.editTemperature.selectedPolygon = line( ... +artoaGui.editTemperature.userSelection = line( ... NaN, NaN, 'Color', [1 1 1], 'LineStyle', '-' ... ); @@ -41,7 +41,7 @@ while button == 1 continue; end % update the line - set(artoaGui.editTemperature.selectedPolygon, 'XData', x, 'YData', y); + set(artoaGui.editTemperature.userSelection, 'XData', x, 'YData', y); [dx, dy, button] = ginput(1); end @@ -54,10 +54,10 @@ else return; end % update the line -set(artoaGui.editTemperature.selectedPolygon, 'XData', x, 'YData', y); +set(artoaGui.editTemperature.userSelection, 'XData', x, 'YData', y); % store the selected points in the workspace for editing -artoaWorkspace.editTemperature.selectedPoints = inpolygon( ... +artoaWorkspace.editTemperature.userSelection = inpolygon( ... artoaWorkspace.rafosDate, ... artoaWorkspace.temperature, ... x, ... diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/applySoundSourceToSelectedPoints.m b/lib/+artoa/+controller/+edit/+timeOfArrival/applySoundSourceToSelectedPoints.m index 77026a9fce3f7451f458911b8259d8cc298ad28d..eab9e185058e25b8c09a7b404982442083c94558 100644 --- a/lib/+artoa/+controller/+edit/+timeOfArrival/applySoundSourceToSelectedPoints.m +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/applySoundSourceToSelectedPoints.m @@ -34,7 +34,7 @@ end % update sound source of selected points artoaWorkspace.toaData.soundSource( ... - artoaWorkspace.editTimeOfArrival.selectedPoints ... + artoaWorkspace.editTimeOfArrival.userSelection ... ) = soundsources(index); diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/dropSelection.m b/lib/+artoa/+controller/+edit/+timeOfArrival/dropSelection.m new file mode 100644 index 0000000000000000000000000000000000000000..eeca4132831bab36b87104285a8944b9167a8bcd --- /dev/null +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/dropSelection.m @@ -0,0 +1,16 @@ +function [] = dropSelection() +%DROPSELECTION Summary of this function goes here +% Detailed explanation goes here + +global artoaGui artoaWorkspace; + +if artoa.controller.edit.dataPointsSelected(artoaWorkspace.editTimeOfArrival) + if strcmp(questdlg('Reset current selection?', 'Confirmation', 'Yes', 'Cancel', 'Cancel'), 'Cancel') + return; + end + % reset the line and all required fields + [artoaGui.editTimeOfArrival, artoaWorkspace.editTimeOfArrival] = artoa.controller.edit.clearSelection(artoaGui.editTimeOfArrival, artoaWorkspace.editTimeOfArrival); +end + +end + diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/pickPoint.m b/lib/+artoa/+controller/+edit/+timeOfArrival/pickPoint.m new file mode 100644 index 0000000000000000000000000000000000000000..e6173cb06b3c3c42267498bca3104265a59ee014 --- /dev/null +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/pickPoint.m @@ -0,0 +1,32 @@ +function [] = pickPoint() +%PICKPOINT Lets the user pick a point in the plot. +% Selection can be aborted by using the right mouse button. + +global artoaGui artoaWorkspace; + +%% Check if polygon is already selected + +artoa.controller.edit.timeOfArrival.dropSelection(); + +%% Select point by mouse + +[dx, dy, button] = ginput(1); + +% find closest match +% calculate distance +distance = sqrt((artoaWorkspace.toaData.toaDate - dx).^2 + (artoaWorkspace.toaData.toa - dy).^2); +[~, index] = min(distance); +x_closest = artoaWorkspace.toaData.toaDate(index); +y_closest = artoaWorkspace.toaData.toa(index); + +if button ~= 1 + return; +end + +hold on; +artoaGui.editTimeOfArrival.userSelection = scatter(x_closest, y_closest, 50, [1 1 1]); +hold off; +artoaWorkspace.editTimeOfArrival.userSelection = index; + +end + diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/pickPolygon.m b/lib/+artoa/+controller/+edit/+timeOfArrival/pickPolygon.m index c0d0fe4b7b55be738f15734adecc8c0d9fba959b..0b7e3ba08b959cdba90481bc02c5ecab567a57cf 100644 --- a/lib/+artoa/+controller/+edit/+timeOfArrival/pickPolygon.m +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/pickPolygon.m @@ -10,20 +10,14 @@ global artoaGui artoaWorkspace; %% Check if polygon is already selected -if artoa.controller.edit.dataPointsSelected(artoaWorkspace.editTimeOfArrival) - if strcmp(questdlg('Reset current line and pick a new one?', 'Confirmation', 'Yes', 'Cancel', 'Cancel'), 'Cancel') - return; - end - % reset the line and all required fields - [artoaGui.editTimeOfArrival, artoaWorkspace.editTimeOfArrival] = artoa.controller.edit.clearSelection(artoaGui.editTimeOfArrival, artoaWorkspace.editTimeOfArrival); -end +artoa.controller.edit.timeOfArrival.dropSelection(); %% Select polygon by mouse x = []; y = []; % draw the line that will be extended on every click -artoaGui.editTimeOfArrival.selectedPolygon = line( ... +artoaGui.editTimeOfArrival.userSelection = line( ... NaN, NaN, 'Color', [1 1 1], 'LineStyle', '-' ... ); @@ -41,7 +35,7 @@ while button == 1 continue; end % update the line - set(artoaGui.editTimeOfArrival.selectedPolygon, 'XData', x, 'YData', y); + set(artoaGui.editTimeOfArrival.userSelection, 'XData', x, 'YData', y); [dx, dy, button] = ginput(1); end @@ -54,10 +48,10 @@ else return; end % update the line -set(artoaGui.editTimeOfArrival.selectedPolygon, 'XData', x, 'YData', y); +set(artoaGui.editTimeOfArrival.userSelection, 'XData', x, 'YData', y); % store the selected points in the workspace for editing -artoaWorkspace.editTimeOfArrival.selectedPoints = inpolygon( ... +artoaWorkspace.editTimeOfArrival.userSelection = inpolygon( ... artoaWorkspace.toaData.toaDate, ... artoaWorkspace.toaData.toa, ... x, ... diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/plot.m b/lib/+artoa/+controller/+edit/+timeOfArrival/plot.m index b4bc6aaaf0f922b2d2040e05fac0ea08f8f2fd7b..ce713b21eb57f31d4ee7d29f0de390ecb5f38dfe 100644 --- a/lib/+artoa/+controller/+edit/+timeOfArrival/plot.m +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/plot.m @@ -91,7 +91,7 @@ set(titleHandle, 'Color', 'blue'); % set x and y label xlabel(artoaGui.figures.editTimeOfArrival.CurrentAxes, 'Message Date', 'FontSize', 10); -ylabel(artoaGui.figures.editTimeOfArrival.CurrentAxes, 'Time of arrival', 'FontSize', 10); +ylabel(artoaGui.figures.editTimeOfArrival.CurrentAxes, 'Time of arrival rel. to window start time', 'FontSize', 10); hold off; diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/resetShiftToa.m b/lib/+artoa/+controller/+edit/+timeOfArrival/resetShiftToa.m new file mode 100644 index 0000000000000000000000000000000000000000..37bd31621ac251149d114d860086438434eb770e --- /dev/null +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/resetShiftToa.m @@ -0,0 +1,22 @@ +function [] = resetShiftToa() +%SHIFTTOA Summary of this function goes here +% Detailed explanation goes here + +global artoaGui artoaWorkspace artoaDataInput; + +%% Ask for reset +if strcmp(questdlg('Reset shift?', 'Confirmation', 'Yes', 'Cancel', 'Cancel'), 'Cancel') + return; +end + + +artoaWorkspace.toaData.toa = artoaDataInput.toaData.toa; + +[artoaGui.editTimeOfArrival, artoaWorkspace.editTimeOfArrival] = ... + artoa.controller.edit.clearSelection(artoaGui.editTimeOfArrival, artoaWorkspace.editTimeOfArrival); + +artoa.controller.edit.updateAvailablePlots(); + + +end + diff --git a/lib/+artoa/+controller/+edit/+timeOfArrival/shiftToaSelection.m b/lib/+artoa/+controller/+edit/+timeOfArrival/shiftToa.m similarity index 71% rename from lib/+artoa/+controller/+edit/+timeOfArrival/shiftToaSelection.m rename to lib/+artoa/+controller/+edit/+timeOfArrival/shiftToa.m index 25c3d5becffddc7ac77160d9ce5873b67319c34a..54c3c5e217fb6d9f3fcc2dfbe2d9e73152a8fa5d 100644 --- a/lib/+artoa/+controller/+edit/+timeOfArrival/shiftToaSelection.m +++ b/lib/+artoa/+controller/+edit/+timeOfArrival/shiftToa.m @@ -1,16 +1,9 @@ -function [] = shiftToaSelection() +function [] = shiftToa() %SHIFTTOA Summary of this function goes here % Detailed explanation goes here global artoaGui artoaWorkspace; -%% Select polygon - -if ~artoa.controller.edit.dataPointsSelected(artoaWorkspace.editTimeOfArrival) - warndlg('You need to select data by using the "Pick" button first!', 'No data selected'); - return; -end - %% Ask for shift value answer = inputdlg({'Enter shift value:'}, 'Shift TOAs', [1 35], {'0'}); diff --git a/lib/+artoa/+controller/+edit/clearSelection.m b/lib/+artoa/+controller/+edit/clearSelection.m index 721e7ea322a6f0eeac46d2080e6575e7309a498c..4b8e802b376055f31bd965793de132fa2baa7d66 100644 --- a/lib/+artoa/+controller/+edit/clearSelection.m +++ b/lib/+artoa/+controller/+edit/clearSelection.m @@ -5,15 +5,15 @@ function [guiHandle, workspaceStruct] = clearSelection(pGuiHandle, pWorkspaceStr guiHandle = pGuiHandle; workspaceStruct = pWorkspaceStruct; -%% Remove polygon from gui -if isfield(guiHandle, 'selectedPolygon') - delete(guiHandle.selectedPolygon); - guiHandle = rmfield(guiHandle, 'selectedPolygon'); +%% Remove selection from gui +if isfield(guiHandle, 'userSelection') + delete(guiHandle.userSelection); + guiHandle = rmfield(guiHandle, 'userSelection'); end -%% Remove the polygon field from workspace -if (isfield(workspaceStruct, 'selectedPoints')) - workspaceStruct = rmfield(workspaceStruct, 'selectedPoints'); +%% Remove the selection field from workspace +if (isfield(workspaceStruct, 'userSelection')) + workspaceStruct = rmfield(workspaceStruct, 'userSelection'); end end diff --git a/lib/+artoa/+controller/+edit/dataPointsSelected.m b/lib/+artoa/+controller/+edit/dataPointsSelected.m index d126a9928f004bdefef5884900b9519eaa407a9c..b5205015e19c177338beb92f9580a4b0727b8141 100644 --- a/lib/+artoa/+controller/+edit/dataPointsSelected.m +++ b/lib/+artoa/+controller/+edit/dataPointsSelected.m @@ -6,7 +6,7 @@ function [dataIsSelected] = dataPointsSelected(pHandle) dataIsSelected = false; %% Check required fields -if ~isfield(pHandle, 'selectedPoints') || isempty(pHandle.selectedPoints) +if ~isfield(pHandle, 'userSelection') || isempty(pHandle.userSelection) return; end diff --git a/lib/+artoa/+controller/+file/saveInterim.m b/lib/+artoa/+controller/+file/saveInterim.m index bbedf13263224c89287d5bc05f4bc1ae2b433b34..432b95e52fd183daba86647717e30a0d8158c291 100644 --- a/lib/+artoa/+controller/+file/saveInterim.m +++ b/lib/+artoa/+controller/+file/saveInterim.m @@ -14,7 +14,7 @@ filter = artoa.data.getMember(artoaDataInput, {'ini', 'filemask', 'interim'}, '* filepath = fullfile(pathname, filename); if isfile(filepath) - save(filename, 'artoaWorkspace', 'artoaDataInput', 'artoaDataOutput'); + save(filepath, 'artoaWorkspace', 'artoaDataInput', 'artoaDataOutput'); else warning([mfilename ': Save interim file failed because the selected file is not a file!']); end diff --git a/lib/+artoa/+controller/copyRfbToWorkspace.m b/lib/+artoa/+controller/copyRfbToWorkspace.m index a1b94025a80805c89ef785196b2554867d77d424..c04e6f2fab7d2e5d84be91217c01358bdf89ff55 100644 --- a/lib/+artoa/+controller/copyRfbToWorkspace.m +++ b/lib/+artoa/+controller/copyRfbToWorkspace.m @@ -55,6 +55,9 @@ artoaWorkspace.toaData.soundSource = cell( ... 1 ... ); +% Copy the original toaData object to the input, so that it easily can be +% restored later on +artoaDataInput.toaData = artoaWorkspace.toaData; %% TEMPERATURE artoaWorkspace.temperature = artoaDataInput.rfb.DATA(:, artoaDataInput.rfb.VARIABLE_LIST.temperature); diff --git a/lib/+artoa/+gui/+edit/pressure.m b/lib/+artoa/+gui/+edit/pressure.m index bf5e4c3ca613733e56e4d2da8a34d4663a693070..c949d8e10307ebbb321ec67b952c714040bda4c9 100644 --- a/lib/+artoa/+gui/+edit/pressure.m +++ b/lib/+artoa/+gui/+edit/pressure.m @@ -34,85 +34,149 @@ set(gca, 'Position', [0.13 0.11 0.706 0.815]); left = .85; width = .14; -buttonHeight = .05; -artoaGui.editPressure.frameControls = uipanel( ... - 'Title', 'Data', ... +%% PICK +pickButtonHeight = .25; + +artoaGui.editPressure.frameControlsPick = uipanel( ... + 'Title', 'Pick', ... 'Units', 'normalized', ... 'BackgroundColor', 'white', ... - 'Position', [left .11 width .815] ... + 'Position', [left .72 width .2] ... ); -artoaGui.editPressure.buttonPick = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Pick', ... +artoaGui.editPressure.buttonPickPolygon = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsPick, ... + 'String', 'Polygon', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .9 .69 buttonHeight], ... + 'Position', [.156 .65 .69 pickButtonHeight], ... 'CallBack', 'artoa.controller.edit.pressure.pickPolygon();' ... ); +artoaGui.editPressure.buttonPickPoint = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsPick, ... + 'String', 'Point', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .35 .69 pickButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.pickPoint();' ... +); + +artoaGui.editPressure.buttonDropSelection = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsPick, ... + 'String', 'Drop', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .05 .69 pickButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.dropSelection();' ... +); + +%% APPLY +applyButtonHeight = .25; + +artoaGui.editPressure.frameControlsApply = uipanel( ... + 'Title', 'Apply', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .5 width .2] ... +); + artoaGui.editPressure.buttonApply = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Apply', ... + 'Parent', artoaGui.editPressure.frameControlsApply, ... + 'String', 'Selected', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .85 .69 buttonHeight], ... + 'Position', [.156 .65 .69 applyButtonHeight], ... 'CallBack', 'artoa.controller.edit.pressure.applyStatusToSelectedPoints(1);' ... ); -artoaGui.editPressure.buttonReset = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Reset', ... +artoaGui.editPressure.buttonApplyAllVisible = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsApply, ... + 'String', 'All visible', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .8 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.pressure.applyStatusToSelectedPoints(0);' ... + 'Position', [.156 .35 .69 applyButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.applyStatusToAllVisible(1);' ... ); -artoaGui.editPressure.buttonDelete = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Delete', ... +artoaGui.editPressure.buttonApplyAll = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsApply, ... + 'String', 'All', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .7 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.pressure.applyStatusToSelectedPoints(2);' ... + 'Position', [.156 .05 .69 applyButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.applyStatusToAllPoints(1);' ... ); -artoaGui.editPressure.buttonApplyAll = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Apply all', ... + +%% RESET +resetButtonHeight = .25; + +artoaGui.editPressure.frameControlsReset = uipanel( ... + 'Title', 'Reset', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .28 width .2] ... +); + +artoaGui.editPressure.buttonReset = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsReset, ... + 'String', 'Selected', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .5 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.pressure.applyStatusToAllPointsExceptDeleted(1);' ... + 'Position', [.156 .65 .69 resetButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.applyStatusToSelectedPoints(0);' ... ); -artoaGui.editPressure.buttonResetAll = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Reset all', ... +artoaGui.editPressure.buttonResetAllVisible = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsReset, ... + 'String', 'All visible', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .45 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.pressure.applyStatusToAllPointsExceptDeleted(0);' ... + 'Position', [.156 .35 .69 resetButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.applyStatusToAllVisible(0);' ... ); -artoaGui.editPressure.buttonReplot = uicontrol( ... - 'Parent', artoaGui.editPressure.frameControls, ... - 'String', 'Replot', ... +artoaGui.editPressure.buttonResetAll = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsReset, ... + 'String', 'All', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .05 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.pressure.plot();' ... + 'Position', [.156 .05 .69 resetButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.applyStatusToAllPoints(0);' ... ); +%% DELETE +deleteButtonHeight = .4; + +artoaGui.editPressure.frameControlsDelete = uipanel( ... + 'Title', 'Delete', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .11 width .15] ... +); + +artoaGui.editPressure.buttonDelete = uicontrol( ... + 'Parent', artoaGui.editPressure.frameControlsDelete, ... + 'String', 'Selected', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .3 .69 deleteButtonHeight], ... + 'CallBack', 'artoa.controller.edit.pressure.applyStatusToSelectedPoints(2);' ... +); +%% Enable zoom +zoom on; end diff --git a/lib/+artoa/+gui/+edit/temperature.m b/lib/+artoa/+gui/+edit/temperature.m index 10e685ad29cd7b694c00ff195cc012547d5ed06a..94e559dc9559a3d9b3c30c94b9b55681b185ace9 100644 --- a/lib/+artoa/+gui/+edit/temperature.m +++ b/lib/+artoa/+gui/+edit/temperature.m @@ -34,84 +34,149 @@ set(gca, 'Position', [0.13 0.11 0.706 0.815]); left = .85; width = .14; -buttonHeight = .05; -artoaGui.editTemperature.frameControls = uipanel( ... - 'Title', 'Data', ... +%% PICK +pickButtonHeight = .25; + +artoaGui.editTemperature.frameControlsPick = uipanel( ... + 'Title', 'Pick', ... 'Units', 'normalized', ... 'BackgroundColor', 'white', ... - 'Position', [left .11 width .815] ... + 'Position', [left .72 width .2] ... ); -artoaGui.editTemperature.buttonPick = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Pick', ... +artoaGui.editTemperature.buttonPickPolygon = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsPick, ... + 'String', 'Polygon', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .9 .69 buttonHeight], ... + 'Position', [.156 .65 .69 pickButtonHeight], ... 'CallBack', 'artoa.controller.edit.temperature.pickPolygon();' ... ); +artoaGui.editTemperature.buttonPickPoint = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsPick, ... + 'String', 'Point', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .35 .69 pickButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.pickPoint();' ... +); + +artoaGui.editTemperature.buttonDropSelection = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsPick, ... + 'String', 'Drop', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .05 .69 pickButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.dropSelection();' ... +); + +%% APPLY +applyButtonHeight = .25; + +artoaGui.editTemperature.frameControlsApply = uipanel( ... + 'Title', 'Apply', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .5 width .2] ... +); + artoaGui.editTemperature.buttonApply = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Apply', ... + 'Parent', artoaGui.editTemperature.frameControlsApply, ... + 'String', 'Selected', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .85 .69 buttonHeight], ... + 'Position', [.156 .65 .69 applyButtonHeight], ... 'CallBack', 'artoa.controller.edit.temperature.applyStatusToSelectedPoints(1);' ... ); -artoaGui.editTemperature.buttonReset = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Reset', ... +artoaGui.editTemperature.buttonApplyAllVisible = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsApply, ... + 'String', 'All visible', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .8 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.temperature.applyStatusToSelectedPoints(0);' ... + 'Position', [.156 .35 .69 applyButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.applyStatusToAllVisible(1);' ... ); -artoaGui.editTemperature.buttonDelete = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Delete', ... +artoaGui.editTemperature.buttonApplyAll = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsApply, ... + 'String', 'All', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .7 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.temperature.applyStatusToSelectedPoints(2);' ... + 'Position', [.156 .05 .69 applyButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.applyStatusToAllPoints(1);' ... ); -artoaGui.editTemperature.buttonApplyAll = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Apply all', ... +%% RESET +resetButtonHeight = .25; + +artoaGui.editTemperature.frameControlsReset = uipanel( ... + 'Title', 'Reset', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .28 width .2] ... +); + +artoaGui.editTemperature.buttonReset = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsReset, ... + 'String', 'Selected', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .5 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.temperature.applyStatusToAllPointsExceptDeleted(1);' ... + 'Position', [.156 .65 .69 resetButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.applyStatusToSelectedPoints(0);' ... +); + +artoaGui.editTemperature.buttonResetAllVisible = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsReset, ... + 'String', 'All visible', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .35 .69 resetButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.applyStatusToAllVisible(0);' ... ); artoaGui.editTemperature.buttonResetAll = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Reset all', ... + 'Parent', artoaGui.editTemperature.frameControlsReset, ... + 'String', 'All', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .45 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.temperature.applyStatusToAllPointsExceptDeleted(0);' ... + 'Position', [.156 .05 .69 resetButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.applyStatusToAllPoints(0);' ... +); + +%% DELETE +deleteButtonHeight = .4; + +artoaGui.editTemperature.frameControlsDelete = uipanel( ... + 'Title', 'Delete', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .11 width .15] ... ); -artoaGui.editTemperature.buttonReplot = uicontrol( ... - 'Parent', artoaGui.editTemperature.frameControls, ... - 'String', 'Replot', ... +artoaGui.editTemperature.buttonDelete = uicontrol( ... + 'Parent', artoaGui.editTemperature.frameControlsDelete, ... + 'String', 'Selected', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .05 .69 buttonHeight], ... - 'CallBack', 'artoa.controller.edit.temperature.plot();' ... + 'Position', [.156 .3 .69 deleteButtonHeight], ... + 'CallBack', 'artoa.controller.edit.temperature.applyStatusToSelectedPoints(2);' ... ); +%% Enable zoom +zoom on; + end diff --git a/lib/+artoa/+gui/+edit/timeOfArrival.m b/lib/+artoa/+gui/+edit/timeOfArrival.m index 893c5cf0962fa2391ae4458c8307ee55244a1373..9b98175cf6a5fc2c27709269b539c9ef60351902 100644 --- a/lib/+artoa/+gui/+edit/timeOfArrival.m +++ b/lib/+artoa/+gui/+edit/timeOfArrival.m @@ -34,45 +34,71 @@ set(gca, 'Position', [0.13 0.11 0.706 0.815]); left = .85; width = .14; -buttonHeight = .05; -buttonMarginLeftRight = .005; -%% Data frame -artoaGui.editTimeOfArrival.frameControls = uipanel( ... - 'Title', 'Data', ... +%% Selection frame +artoaGui.editTimeOfArrival.frameControlsSelect = uipanel( ... + 'Title', 'Select', ... 'Units', 'normalized', ... 'BackgroundColor', 'white', ... - 'Position', [left .6 width .3] ... + 'Position', [left .6 width .2] ... ); -artoaGui.editTimeOfArrival.buttonPick = uicontrol( ... - 'Parent', artoaGui.editTimeOfArrival.frameControls, ... - 'String', 'Pick', ... +artoaGui.editTimeOfArrival.buttonPickPolygon = uicontrol( ... + 'Parent', artoaGui.editTimeOfArrival.frameControlsSelect, ... + 'String', 'Polygon', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .75 .69 .2], ... + 'Position', [.156 .7 .69 .2], ... 'CallBack', 'artoa.controller.edit.timeOfArrival.pickPolygon();' ... ); -artoaGui.editTimeOfArrival.buttonShift = uicontrol( ... - 'Parent', artoaGui.editTimeOfArrival.frameControls, ... - 'String', 'Shift', ... +artoaGui.editTimeOfArrival.buttonPickPoint = uicontrol( ... + 'Parent', artoaGui.editTimeOfArrival.frameControlsSelect, ... + 'String', 'Point', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .5 .69 .2], ... - 'CallBack', 'artoa.controller.edit.timeOfArrival.shiftToaSelection();' ... + 'Position', [.156 .4 .69 .2], ... + 'CallBack', 'artoa.controller.edit.timeOfArrival.pickPoint();' ... ); -artoaGui.editTimeOfArrival.buttonReplot = uicontrol( ... - 'Parent', artoaGui.editTimeOfArrival.frameControls, ... - 'String', 'Replot', ... +artoaGui.editTimeOfArrival.buttonDropSelection = uicontrol( ... + 'Parent', artoaGui.editTimeOfArrival.frameControlsSelect, ... + 'String', 'Drop', ... 'Style', 'PushButton', ... 'FontSize', 8, ... 'Units', 'normalized', ... - 'Position', [.156 .05 .69 .2], ... - 'CallBack', 'artoa.controller.edit.timeOfArrival.plot();' ... + 'Position', [.156 .1 .69 .2], ... + 'CallBack', 'artoa.controller.edit.timeOfArrival.dropSelection();' ... +); + +%% Shift frame +artoaGui.editTimeOfArrival.frameControlsShift = uipanel( ... + 'Title', 'Shift', ... + 'Units', 'normalized', ... + 'BackgroundColor', 'white', ... + 'Position', [left .35 width .2] ... +); + +artoaGui.editTimeOfArrival.buttonShiftApply = uicontrol( ... + 'Parent', artoaGui.editTimeOfArrival.frameControlsShift, ... + 'String', 'Apply', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .6 .69 .3], ... + 'CallBack', 'artoa.controller.edit.timeOfArrival.shiftToa();' ... +); + +artoaGui.editTimeOfArrival.buttonShiftResetSelection = uicontrol( ... + 'Parent', artoaGui.editTimeOfArrival.frameControlsShift, ... + 'String', 'Reset', ... + 'Style', 'PushButton', ... + 'FontSize', 8, ... + 'Units', 'normalized', ... + 'Position', [.156 .2 .69 .3], ... + 'CallBack', 'artoa.controller.edit.timeOfArrival.resetShiftToa();' ... ); %% Sound source frame @@ -104,6 +130,8 @@ artoaGui.editTimeOfArrival.buttonDelete = uicontrol( ... 'CallBack', 'artoa.controller.edit.timeOfArrival.removeSoundSourceFromSelectedPoints();' ... ); +%% Enable zoom +zoom on; end