📄 measure_init.m
字号:
function measure_init% measure_init%% For the current figure, set up the "meas" data structure for efficient% operations.global meas;% Get the current figure's handlemeas.fig.h = gcf;% Make pointer a watch so the user knows there's something going on.ptr = get(meas.fig.h, 'Pointer');set(meas.fig.h, 'Pointer', 'watch');% Get size and position of figurepos = get(meas.fig.h, 'Position');meas.fig.pxmin = pos(1);meas.fig.pymin = pos(2);meas.fig.pxsize = pos(3);meas.fig.pysize = pos(4);% Find the axesaxh = findobj(meas.fig.h, 'Type', 'axes');% Get info for each onefor a = 1:length(axh) ah = axh(a); meas.ax(a).h = ah; % Get size and position of axes units = get(ah, 'Units'); set(ah, 'Units', 'pixels'); pos = round(get(ah, 'Position')); meas.ax(a).pxmin = pos(1); meas.ax(a).pymin = pos(2); meas.ax(a).pxsize = pos(3); meas.ax(a).pysize = pos(4); set(ah, 'Units', units); % Get x and y limits of axes xlim = get(ah, 'XLim'); meas.ax(a).xmin = xlim(1); meas.ax(a).xmax = xlim(2); ylim = get(ah, 'YLim'); meas.ax(a).ymin = ylim(1); meas.ax(a).ymax = ylim(2); meas.ax(a).xsize = meas.ax(a).xmax - meas.ax(a).xmin; meas.ax(a).ysize = meas.ax(a).ymax - meas.ax(a).ymin; % Pull the scale type (linear or log) meas.ax(a).xscale = get(ah, 'XScale'); meas.ax(a).yscale = get(ah, 'YScale'); % Find the lines lineh = findobj(ah, 'Type', 'line'); % Get the data for each of the lines for l = 1:length(lineh) lh = lineh(l); meas.ax(a).line(l).h = lh; meas.ax(a).line(l).xorig = get(lh, 'Xdata')'; meas.ax(a).line(l).yorig = get(lh, 'Ydata')'; % Thresh out only those data points within the current x axis limits % (speeds things up for large data sets) i = find((meas.ax(a).line(l).xorig >= meas.ax(a).xmin) & ... (meas.ax(a).line(l).xorig <= meas.ax(a).xmax)); meas.ax(a).line(l).x = meas.ax(a).line(l).xorig(i); meas.ax(a).line(l).y = meas.ax(a).line(l).yorig(i); % Now stuff this truncated data back into the plot's data structure % (needed to speed up plot re-draws) set(meas.ax(a).line(l).h, 'Xdata', meas.ax(a).line(l).x); set(meas.ax(a).line(l).h, 'Ydata', meas.ax(a).line(l).y); % Compute x pixel positions of each point within axes if strcmp(meas.ax(a).xscale, 'linear') f = meas.ax(a).pxsize/meas.ax(a).xsize; meas.ax(a).line(l).px = (meas.ax(a).line(l).x - meas.ax(a).xmin)*f; else % log scale f = meas.ax(a).pxsize/log10(meas.ax(a).xmax/meas.ax(a).xmin); meas.ax(a).line(l).px = log10(meas.ax(a).line(l).x/meas.ax(a).xmin)*f; end % Compute y pixel positions of each point within axes if strcmp(meas.ax(a).yscale, 'linear') f = meas.ax(a).pysize/meas.ax(a).ysize; meas.ax(a).line(l).py = (meas.ax(a).line(l).y - meas.ax(a).ymin)*f; else f = meas.ax(a).pysize/log10(meas.ax(a).ymax/meas.ax(a).ymin); meas.ax(a).line(l).py = log10(meas.ax(a).line(l).y/meas.ax(a).ymin)*f; end end % line loop % Figure out where the coordinate display should go if strcmp(meas.ax(a).xscale, 'linear') meas.ax(a).textx = meas.ax(a).xmin + 0.05*meas.ax(a).xsize; else meas.ax(a).textx = meas.ax(a).xmin*1.05^log10(meas.ax(a).xmax/meas.ax(a).xmin); end if strcmp(meas.ax(a).yscale, 'linear') meas.ax(a).texty = meas.ax(a).ymax + 0.05*meas.ax(a).ysize; else meas.ax(a).texty = meas.ax(a).ymax*1.05^log10(meas.ax(a).ymax/meas.ax(a).ymin); endend % axes loop% Restore pointer shape set(meas.fig.h, 'Pointer', ptr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -