⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 measure_newloc.m

📁 generate eye diagram from spice sim result
💻 M
字号:
% measure_newloc.m%% Acquire the new pointer location and highlight the nearest graph curve% data point.function measure_newlocglobal meas;sf = meas.sigfig;% See if we've moved over new axesaxh = overobj('axes');if ~isempty(axh)		% we are over axes  for i = 1:length(meas.ax)    measaxh(i) = meas.ax(i).h;  end  axi = find(measaxh == axh);  if ~isempty(axi) & ~isfield(meas, 'point')    meas.axi = axi;		% set current axes index to current axes  endend% Is there a current axes?if isfield(meas, 'axi')  if ~meas.axi    return  end  axi = meas.axi;else  returnend% Now we know there is a current axes. So find the closest line point% and display a marker and label on it.% Find current pointer location within the figure (in pixels)loc = get(0, 'PointerLocation');pxroot = loc(1);pyroot = loc(2);pxfig = pxroot - meas.fig.pxmin;pyfig = pyroot - meas.fig.pymin;% Now get pixel position within axespx = pxfig - meas.ax(axi).pxmin;py = pyfig - meas.ax(axi).pymin;% Figure out which section of data to look at% (speeds things up for large numbers of data points)pxsmin = px - meas.ax(axi).pxsize*0.05;pxsmax = px + meas.ax(axi).pxsize*0.05;% Scan all lines for point closest to pointerfor l = 1:length(meas.ax(axi).line)  i = find((meas.ax(axi).line(l).px >= pxsmin) & ...           (meas.ax(axi).line(l).px <= pxsmax));  if isempty(i)    i = 1:length(meas.ax(axi).line(l).px);  end  % Compute Euclidean distance to each point from current pointer location  dist = sqrt((meas.ax(axi).line(l).px(i)-px).^2 + ...              (meas.ax(axi).line(l).py(i)-py).^2);  % Select the minimum for this line  [mindist(l) imindist(l)] = min(dist);  % Convert index back to raw xdata array  imindist(l) = i(imindist(l));end% Find closest point to pointer[d, line] = min(mindist);% Extract the data% x  = get(meas.ax(axi).line(line).h, 'Xdata');% y  = get(meas.ax(axi).line(line).h, 'Ydata');xl = meas.ax(axi).line(line).x(imindist(line));yl = meas.ax(axi).line(line).y(imindist(line));% Store values in cursor data structuremeas.cursor.x = xl;meas.cursor.y = yl;% Delete old coordinate label, if it existsif isfield(meas.cursor, 'texth')  delete(meas.cursor.texth);  meas.cursor.texth = [];end% Delete old marker, if it existsif isfield(meas.cursor, 'markerh')  delete(meas.cursor.markerh);  meas.cursor.markerh = [];end% Delete old rubber band, if it existsif isfield(meas.cursor, 'rubberh')  delete(meas.cursor.rubberh);  meas.cursor.rubberh = [];end% Display point coordinatesif ~isfield(meas, 'point')				% no first point yet  string = strcat('[', num2eng(xl, sf),', ', num2eng(yl, sf), ']');  meas.cursor.texth = text(meas.ax(axi).textx, meas.ax(axi).texty, string);elseif ~((xl == meas.point(1).x) & (yl == meas.point(1).y))	% second point  dx = xl - meas.point(1).x;  dy = yl - meas.point(1).y;  string = strcat('[', num2eng(xl, sf),', ', num2eng(yl, sf), ']   dx=', num2eng(dx, sf), '   dy=', num2eng(dy, sf));  meas.cursor.texth = text(meas.ax(axi).textx, meas.ax(axi).texty, string);end% Put a marker on that pointaxes(meas.ax(axi).h);hold on;meas.cursor.markerh = plot(xl, yl, 'ro');% If a first point has been selected, draw a rubber band from% that point to this pointif isfield(meas, 'point')  meas.cursor.rubberh = plot([meas.point(1).x xl], [meas.point(1).y yl], 'r');end% Save points in case a button press happensmeas.curx = xl;meas.cury = yl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -