📄 gmviz_callback.m
字号:
function gmviz_callback(opcode)fig = gcf;ax = findobj(fig,'tag','Axes1');di = get(ax,'Userdata');axes(ax);if opcode == 6 % zoom out if di == 2 w = get(ax,'Xlim'); delta = (w(2) - w(1)) / 4; set(ax, 'Xlim', [(w(1)-delta),w(2)+delta]); w = get(ax,'Ylim'); delta = (w(2) - w(1)) / 4; set(ax, 'Ylim', [(w(1)-delta),w(2)+delta]); else ang = get(ax,'CameraViewAngle'); set(ax, 'CameraViewAngle',ang*1.25); endelseif opcode == 5 % zoom in if di == 2 w = get(ax,'Xlim'); delta = (w(2) - w(1)) / 6; set(ax, 'Xlim', [(w(1)+delta),w(2)-delta]); w = get(ax,'Ylim'); delta = (w(2) - w(1)) / 6; set(ax, 'Ylim', [(w(1)+delta),w(2)-delta]); else ang = get(ax,'CameraViewAngle'); set(ax, 'CameraViewAngle',ang*.8); endelseif opcode == 3 % left if di == 2 w = get(ax,'Xlim'); delta = (w(2) - w(1))/3; set(ax,'Xlim',[(w(1)-delta),(w(2)-delta)]); else lg = findobj(ax, 'tag', 'gmviz_light'); centroid = get(ax,'cameratarget'); campos = get(ax,'cameraposition'); displ = campos - centroid; rad = norm(displ); upvec = get(ax,'CameraUpVector'); leftvec = cross(displ,upvec); newpos = campos + .2*leftvec; newdispl = newpos - centroid; newdispl = rad * newdispl / norm(newdispl); newpos = centroid + newdispl; newupvec = cross(leftvec,newdispl); newupvec = newupvec / norm(newupvec); set(ax,'cameraposition', newpos); set(lg,'position', newpos); set(ax,'cameraupvector', newupvec); endelseif opcode == 4 % right if di == 2 w = get(ax,'Xlim'); delta = (w(2) - w(1))/3; set(ax,'Xlim',[(w(1)+delta),(w(2)+delta)]); else lg = findobj(ax, 'tag', 'gmviz_light'); centroid = get(ax,'cameratarget'); campos = get(ax,'cameraposition'); displ = campos - centroid; rad = norm(displ); upvec = get(ax,'CameraUpVector'); rightvec = -cross(displ,upvec); newpos = campos + .2*rightvec; newdispl = newpos - centroid; newdispl = rad * newdispl / norm(newdispl); newpos = centroid + newdispl; newupvec = -cross(rightvec,newdispl); newupvec = newupvec / norm(newupvec); set(ax,'cameraposition', newpos); set(lg,'position', newpos); set(ax,'cameraupvector', newupvec); endelseif opcode == 2 % down if di== 2 w = get(ax,'Ylim'); delta = (w(2) - w(1))/3; set(ax,'Ylim',[(w(1)-delta),(w(2)-delta)]); else lg = findobj(ax, 'tag', 'gmviz_light'); centroid = get(ax,'cameratarget'); campos = get(ax,'cameraposition'); displ = campos - centroid; rad = norm(displ); upvec = get(ax,'CameraUpVector'); newpos = campos -.2*upvec * rad; newdispl = newpos - centroid; newdispl = rad * newdispl / norm(newdispl); newpos = centroid + newdispl; newupvec = upvec - newdispl * (newdispl * upvec')/(rad^2); newupvec = newupvec / norm(newupvec); set(ax,'cameraposition', newpos); set(lg,'position', newpos); set(ax,'cameraupvector', newupvec); endelseif opcode == 1 % up if di == 2 w = get(ax,'Ylim'); delta = (w(2) - w(1))/3; set(ax,'Ylim',[(w(1)+delta),(w(2)+delta)]); else lg = findobj(ax, 'tag', 'gmviz_light'); centroid = get(ax,'cameratarget'); campos = get(ax,'cameraposition'); displ = campos - centroid; rad = norm(displ); upvec = get(ax,'CameraUpVector'); newpos = campos +.2*upvec * rad; newdispl = newpos - centroid; newdispl = rad * newdispl / norm(newdispl); newpos = centroid + newdispl; newupvec = upvec - newdispl * (newdispl * upvec')/(rad^2); newupvec = newupvec / norm(newupvec); set(ax,'cameraposition', newpos); set(lg,'position', newpos); set(ax,'cameraupvector', newupvec); endelseif opcode == 7 % dismiss delete(fig);else error('Unknown opcode in gmviz_callback')end% ------------------------------------------------------------------% Copyright (c) 1999 by Cornell University. All rights reserved.% See the accompanying file 'Copyright' for authorship information,% the terms of the license governing this software, and disclaimers% concerning this software.% ------------------------------------------------------------------% This file is part of the QMG software. % Version 2.0 of QMG, release date September 3, 1999% ------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -