1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
function test
% =======================================================
%% DESCRIPTION:
% =======================================================
% Création des objets graphiques
% ------------------------------
% Création de la fenêtre
FgMain = figure( ...
'NumberTitle', 'off', ...
'DockControl', 'off', ...
'Menubar', 'none', ...
'Toolbar', 'none', ...
'Name', 'Teste de mise à jour d''interface', ...
'Units', 'pixels', ...
'Position', [0 0 500 400], ...
'Tag', 'FgMain', ...
'CloseRequestFcn', @(obj,evt)LocalClose(obj));
movegui(FgMain, 'center');
% Création de l'axe
AxMain = axes( ...
'Parent', FgMain, ...
'Units', 'pixels', ...
'Position', [90 90 400 300], ...
'XTick', [], ...
'YTick', [], ...
'XLim', [-10,10], ...
'XLimMode', 'manual', ...
'YLim', [-10,10], ...
'YLimMode', 'manual', ...
'NextPlot', 'add', ...
'Box', 'on', ...
'Tag', 'AxMain');
% Création d'un slider en dessous de l'axe X
SlHorizontal = uicontrol( ...
'Parent', FgMain, ...
'Style', 'slider', ...
'Units', 'pixels', ...
'Position', [90 50 400 20], ...
'Min', -180, ...
'Max', 180, ...
'SliderStep', [0.01,0.1], ...
'Tag', 'SlHorizontal');
% Création du text pour afficher la valeur du slider horizontal
StHorizontalSlider = uicontrol( ...
'Parent', FgMain, ...
'Style', 'text', ...
'BackgroundColor', get(FgMain, 'Color'), ...
'Units', 'pixels', ...
'Position', [90 25 400 20], ...
'Tag', 'StHorizontalSlider');
% Création d'un slider à côté de l'axe Y
SlVertical = uicontrol( ...
'Parent', FgMain, ...
'Style', 'slider', ...
'Units', 'pixels', ...
'Position', [50 90 20 300], ...
'Min', -180, ...
'Max', 180, ...
'SliderStep', [0.01,0.1], ...
'Tag', 'SlVertical');
% Création du text pour afficher la valeur du slider vertical
StVerticalSlider = uicontrol( ...
'Parent', FgMain, ...
'Style', 'text', ...
'BackgroundColor', get(FgMain, 'Color'), ...
'Units', 'pixels', ...
'Position', [10 230 40 20], ...
'Tag', 'StVerticalSlider');
% Création du timer pour exécuter la fonction de mise à jour
TmPeriodFcn = timer( ...
'TimerFcn', @(obj,evt)UpdateFcn(FgMain), ...
'BusyMode', 'Queue',...
'ExecutionMode', 'FixedRate', ...
'Period', 0.1, ...
'Tag', 'TmPeriodFcn');
% Démarrage du timer
start(TmPeriodFcn);
%% ======================================================
function UpdateFcn(hObject)
% =======================================================
%% DESCRIPTION: Fonction de mise à jour de l'interface
% =======================================================
% Définition des constantes des objets graphiques
base_length = 6;
h_length = 6;
v_length = 6;
% Récupération de la structure des handles de la figure
handles = guihandles(hObject);
% Récupération des valeurs des sliders
x_value = get(handles.SlHorizontal, 'Value');
y_value = get(handles.SlVertical, 'Value');
% Affichage des valeurs des sliders
set(handles.StHorizontalSlider, 'String', sprintf('%.2f',x_value));
set(handles.StVerticalSlider, 'String', sprintf('%.2f',y_value));
% Test d'existence de la ligne de base
if ~isfield(handles, 'LnBase')
% Création de la ligne (puisqu'elle n'existe pas)
handles.LnBase = plot(handles.AxMain, ...
(base_length/2 * [-1,1]), [0,0], '-b', ...
'LineWidth', 2, ...
'Tag', 'LnBase');
end
% Calcul des positions pour la ligne commandé par le slider horizontal
h_pos_x = base_length/2 + h_length * cos(x_value*pi/180);
h_pos_y = 0 + h_length * sin(x_value*pi/180);
% Test d'existence de la ligne "horizontale"
if ~isfield(handles, 'LnHorizontal')
% Création de la ligne (puisqu'elle n'existe pas)
handles.LnHorizontal = plot(handles.AxMain, ...
[base_length/2,h_pos_x], [0,h_pos_y], '-r', ...
'LineWidth', 2, ...
'Tag', 'LnHorizontal');
else
% Mise à jour de la ligne
set(handles.LnHorizontal, ...
'XData', [base_length/2,h_pos_x], ...
'YData', [0,h_pos_y]);
end
% Calcul des positions pour la ligne commandé par le slider vertical
v_pos_x = -base_length/2 - v_length * cos(y_value*pi/180);
v_pos_y = 0 + v_length * sin(y_value*pi/180);
% Test d'existence de la ligne "vericale"
if ~isfield(handles, 'LnVertical')
% Création de la ligne (puisqu'elle n'existe pas)
handles.LnVertical = plot(handles.AxMain, ...
[v_pos_x,-base_length/2], [v_pos_y,0], '-g', ...
'LineWidth', 2, ...
'Tag', 'LnVertical');
else
% Mise à jour de la ligne
set(handles.LnVertical, ...
'XData', [v_pos_x,-base_length/2], ...
'YData', [v_pos_y,0]);
end
%% ======================================================
function LocalClose(hObject)
% =======================================================
%% DESCRIPTION: Stoppe et supprime le slider puis ferme la fenêtre
% =======================================================
% Récupération de la structure de handles
handles = guihandles(hObject);
% Stoppe et supprime les timers
stop(timerfindall());
delete(timerfindall());
% Fermeture de la fenêtre
delete(hObject);
%% ====================================================== |