From: <ha...@us...> - 2006-10-18 03:16:07
|
Revision: 5977 http://svn.sourceforge.net/jmol/?rev=5977&view=rev Author: hansonr Date: 2006-10-17 20:15:54 -0700 (Tue, 17 Oct 2006) Log Message: ----------- zoomTo # 1-second smooth zoom in (factor = 2) zoomTo out # 1-second smooth zoom out (factor = 1/2) zoomTo (atom) #1 second smooth pan to this atom if off it zoomTo (atom) #1 second smooth zoom in at this atom if at it zoomTo [time-sec] (atom) zoomTo [time-sec] (atom) zoom zoomTo [time-sec] (atom) +delta|-delta zoomTo [time-sec] (atom) *factor|/factor zoom is similar, but simpler with the following differences zoom # enable zoom zoom ON # enable zoom zoom OFF # disable zoom no automatic zooming in and out note that "set picking center" now uses "zoomTo" exclusively, and actuates "zoomTo out" if OFF the structure Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/MouseManager.java trunk/Jmol/src/org/jmol/viewer/PickingManager.java trunk/Jmol/src/org/jmol/viewer/Token.java trunk/Jmol/src/org/jmol/viewer/TransformManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-10-17 17:09:54 UTC (rev 5976) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-10-18 03:15:54 UTC (rev 5977) @@ -510,8 +510,11 @@ zap(); break; case Token.zoom: - zoom(); + zoom(false); break; + case Token.zoomTo: + zoom(true); + break; case Token.delay: delay(); break; @@ -1790,12 +1793,12 @@ if (statement[i++].tok != Token.leftbrace) coordinateExpected(); Point3f pt = new Point3f(); - for (int j = i; j + 1 < statementLength; j++) { + out: for (int j = i; j + 1 < statementLength; j++) { switch (statement[j].tok) { case Token.slash: coordinatesAreFractional = true; case Token.rightbrace: - break; + break out; } } if (coordinatesAreFractional && !allowFractional) @@ -1815,12 +1818,12 @@ if (statement[i++].tok != Token.leftbrace) coordinateExpected(); Point4f pt = new Point4f(); - for (int j = i; j + 1 < statementLength; j++) { + out: for (int j = i; j + 1 < statementLength; j++) { switch (statement[j].tok) { case Token.slash: coordinatesAreFractional = true; case Token.rightbrace: - break; + break out; } } if (coordinatesAreFractional) @@ -1947,7 +1950,7 @@ } float rotationRadius = 0; if (i != statementLength) { - center = atomCenterOrCoordinateParameter(i); + center = atomCenterOrCoordinateParameter(i); i = pcLastExpressionInstruction + 1; if (i != statementLength) rotationRadius = floatParameter(i++); @@ -3078,25 +3081,73 @@ viewer.zap(); } - void zoom() throws ScriptException { - // token has ondefault1 - if (statement[1].tok == Token.integer) { - int percent = statement[1].intValue; - if (percent < 5 || percent > Viewer.MAXIMUM_ZOOM_PERCENTAGE) - numberOutOfRange(5, Viewer.MAXIMUM_ZOOM_PERCENTAGE); - viewer.zoomToPercent(percent); + void zoom(boolean isZoomTo) throws ScriptException { + //zoom + if (statementLength == 1) { + if (isZoomTo) + viewer.moveTo(1, null, new Point3f(0, 0, 0), 0, viewer.getZoomPercentFloat()*2f, 0, 0, 0); + else + viewer.setZoomEnabled(true); return; } + //zoom on|off switch (statement[1].tok) { case Token.on: viewer.setZoomEnabled(true); - break; + return; case Token.off: viewer.setZoomEnabled(false); - break; - default: - booleanOrPercentExpected(); + return; } + float time = (isZoomTo ? 1f : 0f); + float zoom = viewer.getZoomPercentFloat(); + float factor = 0; + float radius = viewer.getRotationRadius(); + Point3f center = null; + Point3f currentCenter = viewer.getRotationCenter(); + int i = 1; + //zoomTo time-sec + if (isFloatParameter(i) && isZoomTo) + time = floatParameter(i++); + //zoom {x y z} or (atomno=3) + if (isAtomCenterOrCoordinateNext(i)) { + center = atomCenterOrCoordinateParameter(i); + i = pcLastExpressionInstruction + 1; + } + + //zoom/zoomTo percent|-factor|+factor|*factor|/factor + if (isFloatParameter(i)) + factor = floatParameter(i++); + if (factor < 0) + factor += zoom; + if (factor == 0) { + factor = zoom; + if (isFloatParameter(i+1)) { + float value = floatParameter(i+1); + switch (statement[i].tok) { + case Token.slash: + factor /= value; + break; + case Token.asterisk: + factor *= value; + break; + case Token.plus: + factor += value; + break; + default: + evalError(GT._("Invalid {0} command", "ZOOM")); + } + } else if (isZoomTo) { + // no factor -- check for no center (zoom out) or same center (zoom in) + if (center == null) + factor /= 2; + else if (currentCenter.distance(center) < 0.1) + factor *= 2; + } + } + if (factor < 5 || factor > Viewer.MAXIMUM_ZOOM_PERCENTAGE) + numberOutOfRange(5, Viewer.MAXIMUM_ZOOM_PERCENTAGE); + viewer.moveTo(time, center, new Point3f(0, 0, 0), 0, factor, 0, 0, radius); } void delay() throws ScriptException { Modified: trunk/Jmol/src/org/jmol/viewer/MouseManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MouseManager.java 2006-10-17 17:09:54 UTC (rev 5976) +++ trunk/Jmol/src/org/jmol/viewer/MouseManager.java 2006-10-18 03:15:54 UTC (rev 5977) @@ -428,7 +428,7 @@ while (++rotation <= 0) zoomLevel *= wheelClickFractionDown; } - viewer.zoomToPercent((int)(zoomLevel * 100 + 0.5f)); + viewer.zoomToPercent(zoomLevel * 100 + 0.5f); } } Modified: trunk/Jmol/src/org/jmol/viewer/PickingManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PickingManager.java 2006-10-17 17:09:54 UTC (rev 5976) +++ trunk/Jmol/src/org/jmol/viewer/PickingManager.java 2006-10-18 03:15:54 UTC (rev 5977) @@ -59,6 +59,8 @@ if (pickingMode == JmolConstants.PICKING_MEASURE || pickingStyleMeasure == JmolConstants.PICKINGSTYLE_MEASURE_ON) queuedAtomCount = 0; + if (pickingMode == JmolConstants.PICKING_CENTER) + viewer.script("zoomTo null null"); return; } @@ -120,7 +122,7 @@ viewer.script("set toggleLabel (atomindex="+atomIndex+")"); break; case JmolConstants.PICKING_CENTER: - viewer.script("center (atomindex=" + atomIndex+")"); + viewer.script("zoomTo (atomindex=" + atomIndex+")"); break; case JmolConstants.PICKING_SELECT_ATOM: applyMouseStyle("atomIndex="+atomIndex, shiftKey, alternateKey); Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2006-10-17 17:09:54 UTC (rev 5976) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2006-10-18 03:15:54 UTC (rev 5977) @@ -147,7 +147,8 @@ final static int wireframe = command | 44 | bool; final static int write = command | 45 | setparam; final static int zap = command | 46; - final static int zoom = command | 47 | showparam | bool; + final static int zoom = command | 47 | showparam | negnums | embeddedExpression; + final static int zoomTo = command | 48 | showparam | negnums | embeddedExpression; // openrasmol commands final static int depth = command | 50; final static int star = command | 51; @@ -531,7 +532,8 @@ "wireframe", new Token(wireframe, onDefault1, "wireframe"), "write", new Token(write, varArgCount, "write"), "zap", new Token(zap, 0, "zap"), - "zoom", new Token(zoom, onDefault1, "zoom"), + "zoom", new Token(zoom, varArgCount, "zoom"), + "zoomto", new Token(zoomTo, varArgCount, "zoomTo"), // openrasmol commands "depth", new Token(depth, 1, "depth"), "star", new Token(star, varArgCount, "star"), Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2006-10-17 17:09:54 UTC (rev 5976) +++ trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2006-10-18 03:15:54 UTC (rev 5977) @@ -1076,7 +1076,8 @@ Vector3f axis = new Vector3f(pt); initializeMoveTo(); if (degrees < 0.01f && degrees > -0.01f) { - matrixEnd.setIdentity(); + getRotation(matrixEnd); + //matrixEnd.setIdentity(); } else { if (axis.x == 0 && axis.y == 0 && axis.z == 0) { // invalid ... no rotation Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-10-17 17:09:54 UTC (rev 5976) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-10-18 03:15:54 UTC (rev 5977) @@ -488,7 +488,7 @@ public final static int MAXIMUM_ZOOM = 200; public final static int MAXIMUM_ZOOM_PERCENTAGE = MAXIMUM_ZOOM * 1000; - void zoomToPercent(int percent) { + void zoomToPercent(float percent) { transformManager.zoomToPercent(percent); refresh(1, "Viewer:zoomToPercent()"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |