📄 rtslid.m
字号:
function h = rtslid(fig,f,hh,varargin)
%RTSLID Slider widget that responds to dragging realtime
%
% h2 = RTSLID(h,@Fcn,h3) places a slider on the figure
% with handle h, and returns the handle to the slider
% in h2. The second argument is a pointer to a
% function that takes a two input arguments, which
% should be the function you wish to be responding to
% changes in the slider position. The first of these
% input arguments will be a number between 0 and 1
% (if using the default scale) that corresponds to the
% slider vertical position, while the second is the
% handle of the axes to that responds to the slider
% movement (as a result of Fnc). This handle should be
% passed to RTSLID as the third input argument h3.
%
% Alternatively instead of passing a function handle
% as the second argument, a set of commands can be
% passed as a string. In order to use the slider
% output value in such a set of commands, the lower
% case variable 'out' should be used which contains
% this number (Look at bottom of DEMO1.m for example).
%
% h2 = RTSLID(h,@fcn,h3,style) allows the user to
% specify the style of the slider by including an
% optional third input argument.
% The different styles affect the slider's response
% to mouse movement, and are:
%
% 0 - (Default) Jumps to the mouse pointer
% on click, and locks to the mouse on drag.
% 1 - Only moves with mouse drags.
%
% Additional parameters are passed as parameter pairs,
% ie. rtslid(h,@fcn,h3,'param1',v1,'param2',v2,'...).
% Inclusion of the fourth argument 'style' is optional.
% These parameter names are listed below (all parameter
% names are case insensitive) and all are optional:
%
% 'POSITION' - Control the position and size
% of the slider by passing a
% four element vector in the
% range [0 to 1] as a multiple
% of current figure size.
% Use [x y width height].
% {Default: [0.03 0.1 0.03 0.8]}
% 'BACK' - Either a string of the name
% of a valid colormap, or a 3-
% element RGB vector in the
% range [0 to 1].
% {Default: 'jet'}
% 'SCALE' - A two element vector of the
% lower and upper output limits
% for the slider.
% {Default: [0 1]}
% 'LABEL' - A string for the slider label.
% {Default: ''}
% 'DEF' - A default initial value (with
% respect to the SCALE), although
% does not cause output.
% {Default: 0.5}
% 'BUTMOT' - Additional mouse callback for
% WindowButtonMotionFcn of the
% slider figure, to allow other
% processes to use this callback.
% {Default: ''}
% 'MOUSEDOWN' - Additional mouse callback for
% WindowButtonDownFcn of the
% slider figure, to allow other
% processes to use this callback.
% {Default: ''}
% 'MOUSEUP' - Additional mouse callback for
% WindowButtonDownFcn of the
% slider figure, to allow other
% processes to use this callback.
% {Default: ''}
%
% matthew jones (matt_jones@fastmail.fm), 2004
DEFstyle = 0;
DEFback = 'jet';
DEFscale = [0 1];
DEFlabel = '';
DEFdef = 0.5;
style = DEFstyle;
back = DEFback;
scale = DEFscale;
label = DEFlabel;
def = DEFdef;
butmot = '';
mousedown = '';
mouseup = '';
if nargin>3, % Set the style and any other parameters
[style,args] = parseparams(varargin);
if (length(style)==0),
style = 0;
else
style = style{1};
end
try
for l=1:(length(args)/2),
inparam = args((l*2)-1);
switch upper(inparam{1}),
case 'POSITION' % Adjust the size and position of slider
inparam = args(l*2);
pos = inparam{1};
case 'BACK' % Change the background colour
inparam = args(l*2);
back = inparam{1};
case 'SCALE' % Change the output scale limits
inparam = args(l*2);
scale = inparam{1};
case 'LABEL' % Give the slider a label
inparam = args(l*2);
label = inparam{1};
case 'DEF' % Set the initial position
inparam = args(l*2);
def = inparam{1};
case 'BUTMOT' % Add extra WindowButtonMotionFcn commands
inparam = args(l*2);
butmot = inparam{1};
case 'MOUSEDOWN' % Add extra WindowButtonDownFcn commands
inparam = args(l*2);
mousedown = inparam{1};
case 'MOUSEUP' % Add extra WindowButtonUpFcn commands
inparam = args(l*2);
mouseup = inparam{1};
end
end
catch
error('Incorrect input arguments!');
end
end
def2 = (def-scale(1))*(1000/(scale(2)-scale(1))); % The initial position now in range [0 1000]
figure(fig);
params.fig = fig; % Set so that focus returns to slider figure ofter plotting
params.butmot = butmot;
params.mousedown = mousedown;
params.mouseup = mouseup;
params2 = get(fig,'UserData');
if (length(params2)==0), % If there are no sliders already,
% initialise the first elements of 'params'.
if exist('pos'), % Draw the slider on its own axes
h = axes('Position',pos);
else
h = axes('Position',[0.03 0.1 0.03 0.8]);
end
if ischar(back), % Any string wll cause the background to be 'jet'
try
eval(['colormap(''',back,''');']);
catch
error('If passing a string for background, string must be valid colormap!');
end
back = repmat(linspace(0,1,1000).',[1,10]);
imagesc(back);
else % Or construct an RGB matrix m for the background
m = ones(1000,10,3);
for l=1:3,
m(:,:,l) = back(l)*m(:,:,l);
end
image(m);
end
title(label);
% Make the slider look nice
set(h,'XTick',[],'XTickLabel','','YTick',[],'YTickLabel','','YDir','normal','LineWidth',2);
set(fig,'DoubleBuffer','on'); % Double buffering required for smooth display
% Draw the small black box that indicates current position
ind = patch([0 0 10 10],[def2-20 def2+20 def2+20 def2-20],[0.25 0.25 0.25]);axis tight;
params.mdown = 0; % Initialise mousedown state
params.ind = ind; % Save the handle to the position indicator
params.funhand{1} = f; % Save the function handle or string
params.h = h; % Save the handle to this slider
params.h2 = hh; % Save the handle to the plotting axes (for this slider)
if exist('scale'), % Set the output limits
params.scale{1} = scale;
else
params.scale{1} = DEFscale;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -