Revision: 5141
Author: hansonr
Date: 2006-05-18 18:36:34 -0700 (Thu, 18 May 2006)
ViewCVS: http://svn.sourceforge.net/jmol/?rev=5141&view=rev
Log Message:
-----------
bob200603 introduces fractional coordinates.
xyz coordinates in the form {x,y,z} now accept fractions:
{1/2, 0, 1/2}
and apply to the unit cell system, when appropriate.
A 1 in the denominator is optional, so
{0.5/, 0, 0.5/}
also refers to the crystallographic fractional coordinate system.
Note that only one "/" is necessary:
{0.5/, 0, 0.5}
is still fractional coordinates.
So, we have:
center {1/2, 0, 1/2}
#center on the ac face
draw axis1 150 {0/,0,0} {1/,1,1}
#draw an axis through {0,0,0} to {1,1,1}, centered between those
points and 150% of their distance long.
draw plane1 {0/,0,0} {1/,0,0}, {1/,1,1}
#draw a plane through these points
draw plane1 {0,0,0/} {1,0,0/}, {1,1,0/}, {0,1,0/}
#draw a plane through these points
etc.
Modified Paths:
--------------
branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java
branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java
branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java 2006-05-18
19:49:28 UTC (rev 5140)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java 2006-05-19
01:36:34 UTC (rev 5141)
@@ -1380,47 +1380,54 @@
if (statement[1].tok == Token.leftbrace) {
//center { x y z }
Point3f pt = getCoordinate(1);
+ if (coordinatesAreFractional)
+ viewer.convertFractionalCoordinates(pt);
viewer.setNewRotationCenter(pt);
return;
}
viewer.setCenterBitSet(expression(statement, 1), true);
}
-
+
+ boolean coordinatesAreFractional;
Point3f getCoordinate(int i) throws ScriptException {
- Token token = statement[i++];
+ coordinatesAreFractional = false;
+ // syntax: {1/2, 1/2, 1/3} or {0.5/, 0.5, 0.5}
+ // ONE fractional sign anywhere is enough to make ALL fractional;
+ // denominator of 1 can be implied;
+ // commas not necessary if denominator is present or not a fraction
+ if (statement[i++].tok != Token.leftbrace)
+ coordinateExpected();
Point3f pt = new Point3f();
- while (true) {
- if (token.tok != Token.leftbrace)
- break;
-
- token = statement[i++];
- if (token.tok != Token.integer && token.tok != Token.decimal)
- break;
- pt.x = floatValue(token);
+ for (int j = i; j + 1 < statement.length; j++) {
+ switch (statement[j].tok) {
+ case Token.slash:
+ coordinatesAreFractional = true;
+ case Token.rightbrace:
+ break;
+ }
+ }
+ pt.x = coordinateValue(i);
+ pt.y = coordinateValue(++pcLastExpressionInstruction);
+ pt.z = coordinateValue(++pcLastExpressionInstruction);
+ if (statement[++pcLastExpressionInstruction].tok != Token.rightbrace)
+ coordinateExpected();
+ return pt;
+ }
- token = statement[i++];
- if (token.tok == Token.opOr)
- token = statement[i++];
- if (token.tok != Token.integer && token.tok != Token.decimal)
- break;
- pt.y = floatValue(token);
-
- token = statement[i++];
- if (token.tok == Token.opOr)
- token = statement[i++];
- if (token.tok != Token.integer && token.tok != Token.decimal)
- break;
- pt.z = floatValue(token);
-
- token = statement[i];
- if (token.tok != Token.rightbrace)
- break;
- pcLastExpressionInstruction = i;
- return pt;
+ float coordinateValue(int i) throws ScriptException {
+ // includes support for fractional coordinates
+ float val = floatParameter(i++);
+ Token token = statement[i];
+ if (token.tok == Token.slash) {
+ token = statement[++i];
+ if (token.tok == Token.integer || token.tok == Token.decimal) {
+ val /= floatParameter(i++);
+ token = statement[i];
+ }
}
- coordinateExpected();
- return null; //can't get here
+ pcLastExpressionInstruction = (token.tok == Token.opOr ? i : i - 1);
+ return val;
}
float floatValue(Token token) {
@@ -1907,7 +1914,7 @@
break;
case Token.leftbrace:
// {X, Y, Z}
- Point3f pt = getCoordinate(i);
+ Point3f pt = getCoordinate(i); //fractional spin?
i = pcLastExpressionInstruction;
if (isAxisAngle) {
if (axesOrientationRasmol)
@@ -2420,7 +2427,9 @@
break;
case Token.leftbrace:
// {X, Y, Z}
- Point3f pt = getCoordinate(i);
+ Point3f pt = getCoordinate(i); //fractional dipole point?
+ if (coordinatesAreFractional)
+ viewer.convertFractionalCoordinates(pt);
i = pcLastExpressionInstruction;
propertyName = (iHaveCoord ? "endCoord" : "startCoord");
propertyValue = pt;
@@ -3482,6 +3491,8 @@
if (statement[2].tok == Token.leftbrace) {
// {X, Y, Z}
pt = getCoordinate(2);
+ if (coordinatesAreFractional)
+ viewer.convertFractionalCoordinates(pt);
i = pcLastExpressionInstruction + 1;
} else {
pt = new Point3f(floatParameter(i++), floatParameter(i++),
@@ -3671,6 +3682,8 @@
case Token.leftbrace:
// {X, Y, Z}
Point3f pt = getCoordinate(i);
+ if (coordinatesAreFractional)
+ viewer.convertFractionalCoordinates(pt);
i = pcLastExpressionInstruction;
propertyName = "coord";
propertyValue = pt;
@@ -3856,6 +3869,8 @@
pt.z = floatParameter(4);
} else if (statement[2].tok == Token.leftbrace) {
pt = getCoordinate(2);
+ if (coordinatesAreFractional)
+ viewer.convertFractionalCoordinates(pt);
}
viewer.setCenter(relativeTo, pt);
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java 2006-05-18
19:49:28 UTC (rev 5140)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java 2006-05-19
01:36:34 UTC (rev 5141)
@@ -2671,4 +2671,14 @@
//System.out.println(pt);
}
}
+
+ void convertFractionalCoordinates(int modelIndex, Point3f pt) {
+ if (modelIndex < 0)
+ modelIndex = 0;
+ if (modelIndex >= cellInfo.length || cellInfo[modelIndex] == null) return;
+System.out.print(pt+"--->");
+ cellInfo[modelIndex].transform(pt);
+ System.out.println(pt);
+ }
+
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
2006-05-18 19:49:28 UTC (rev 5140)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
2006-05-19 01:36:34 UTC (rev 5141)
@@ -1425,4 +1425,10 @@
return false;
}
+ void convertFractionalCoordinates(int modelIndex, Point3f pt) {
+ frame.convertFractionalCoordinates(modelIndex, pt);
+ return;
+ }
+
+
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java 2006-05-18
19:49:28 UTC (rev 5140)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java 2006-05-19
01:36:34 UTC (rev 5141)
@@ -1392,7 +1392,11 @@
BitSet findAtomsInRectangle(Rectangle rectRubberBand) {
return modelManager.findAtomsInRectangle(rectRubberBand);
}
-
+
+ void convertFractionalCoordinates(Point3f pt) {
+ modelManager.convertFractionalCoordinates(getDisplayModelIndex(), pt);
+ }
+
Point3f getCenter() {
return modelManager.getRotationCenter();
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Jmol-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-commits