From: <ha...@us...> - 2009-08-25 14:07:28
|
Revision: 11354 http://jmol.svn.sourceforge.net/jmol/?rev=11354&view=rev Author: hansonr Date: 2009-08-25 14:07:19 +0000 (Tue, 25 Aug 2009) Log Message: ----------- 11.8.1 good to go. Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java 2009-08-25 13:55:28 UTC (rev 11353) +++ branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java 2009-08-25 14:07:19 UTC (rev 11354) @@ -52,6 +52,8 @@ /* * FHI-AIMS geometry.in file format * + * http://www.fhi-berlin.mpg.de/aims + * * contributed by Joerg Meyer, j-...@so... * */ Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-25 13:55:28 UTC (rev 11353) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-25 14:07:19 UTC (rev 11354) @@ -2,7 +2,7 @@ # NOTE: Generally only bug fixes should be entered here. # NOTE: New features should be introduced in the trunk version 11.9.x -version=11.8.1_dev +version=11.8.1 # new feature: CASTEP (http://www.castep.org/) and AIMS readers # new feature: popup menu gives Symmetry operation display option This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-26 00:50:24
|
Revision: 11367 http://jmol.svn.sourceforge.net/jmol/?rev=11367&view=rev Author: hansonr Date: 2009-08-26 00:50:16 +0000 (Wed, 26 Aug 2009) Log Message: ----------- simpler symmetry operation calculation Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java Modified: branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-08-26 00:49:28 UTC (rev 11366) +++ branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-08-26 00:50:16 UTC (rev 11367) @@ -638,14 +638,16 @@ // use same tokenizing mechanism as in AimsReader.java to also recognize // AIMS geometry files with indented keywords - for ( int i = 0; i<lines.length; i++ ) { + for (int i = 0; i < lines.length; i++) { String[] tokens = Parser.getTokens(lines[i]); - //No -- can't do this -- it's incompatible with PDB + // No -- can't do this -- it's incompatible with PDB // for such files you will have to force the reader with "aims::" // if ( tokens[0].toLowerCase().startsWith("atom") ) return true; - if ( tokens.length > 0 && tokens[0].toLowerCase().startsWith("lattice_vector") ) return true; + if (tokens.length > 0 + && tokens[0].toLowerCase().startsWith("lattice_vector")) + return true; } - return false; + return false; } Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-08-26 00:49:28 UTC (rev 11366) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-08-26 00:50:16 UTC (rev 11367) @@ -447,8 +447,6 @@ // undo inversion for quaternion analysis (requires proper rotations only) - ptemp.set(1, 0, 0); - ptemp.scaleAdd(2, new Point3f(0, 1, 0), new Point3f(0, 0, 1)); p1.scaleAdd(-2, v01, p1); p2.scaleAdd(-2, v02, p2); p3.scaleAdd(-2, v03, p3); @@ -469,18 +467,7 @@ Vector3f ax1 = (Vector3f) info[1]; int ang1 = (int) Math.abs(approx(((Point3f) info[3]).x, 1)); float pitch1 = approx(((Point3f) info[3]).y); - info = (Object[]) Measure.computeHelicalAxis(null, Token.array, pt00, p0, - Quaternion.getQuaternionFrame(p0, p2, p3).div( - Quaternion.getQuaternionFrame(pt00, pt02, pt03))); - Vector3f ax2 = (Vector3f) info[1]; - int ang2 = (int) Math.abs(approx(((Point3f) info[3]).x, 1)); - info = (Object[]) Measure.computeHelicalAxis(null, Token.array, pt00, p0, - Quaternion.getQuaternionFrame(p0, p3, p1).div( - Quaternion.getQuaternionFrame(pt00, pt03, pt01))); - Vector3f ax3 = (Vector3f) info[1]; - int ang3 = (int) Math.abs(approx(((Point3f) info[3]).x, 1)); - if (haveinversion) { // redo inversion @@ -498,27 +485,15 @@ // ////////// determination of type of operation from first principles - boolean isinversion = false; - boolean ismirrorplane = false; Point3f ptinv = null; // inverted point for translucent frame Point3f ipt = null; // inversion center Point3f pt0 = null; // reflection center - boolean istranslation = (ang1 == 0 && ang2 == 0 && ang3 == 0); + boolean istranslation = (ang1 == 0); + boolean isrotation = !istranslation; + boolean isinversion = false; + boolean ismirrorplane = false; - // unit axes - - Vector3f n1 = new Vector3f(ax1); - Vector3f n2 = new Vector3f(ax2); - Vector3f n3 = new Vector3f(ax3); - n1.normalize(); - n2.normalize(); - n3.normalize(); - - boolean isrotation = !istranslation && approx(Math.abs(n1.dot(n2))) == 1 - && approx(Math.abs(n2.dot(n3))) == 1 - && approx(Math.abs(n3.dot(n1))) == 1; - if (isrotation || haveinversion) trans = null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-26 13:21:05
|
Revision: 11368 http://jmol.svn.sourceforge.net/jmol/?rev=11368&view=rev Author: hansonr Date: 2009-08-26 13:20:39 +0000 (Wed, 26 Aug 2009) Log Message: ----------- version=11.8.1 # code: refactoring of Measure/Graphics3D # bug fix: q1.dot(q2) Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java branches/v11_8/Jmol/src/org/jmol/modelset/AtomCollection.java branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java branches/v11_8/Jmol/src/org/jmol/modelsetbio/Helix.java branches/v11_8/Jmol/src/org/jmol/modelsetbio/Sheet.java branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java branches/v11_8/Jmol/src/org/jmol/shapespecial/Draw.java branches/v11_8/Jmol/src/org/jmol/shapespecial/Polyhedra.java branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java branches/v11_8/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java branches/v11_8/Jmol/src/org/jmol/util/Measure.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java branches/v11_8/Jmol/src/org/jmol/viewer/ScriptVariable.java Modified: branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -31,7 +31,6 @@ import javax.vecmath.Matrix4f; import javax.vecmath.Point3i; import javax.vecmath.Point3f; -import javax.vecmath.Point4f; import javax.vecmath.Tuple3f; import javax.vecmath.Vector3f; import javax.vecmath.Matrix3f; @@ -39,7 +38,6 @@ import org.jmol.api.JmolRendererInterface; import org.jmol.util.Logger; import org.jmol.util.TextFormat; -import org.jmol.viewer.JmolConstants; import org.jmol.viewer.Viewer; /** @@ -2737,242 +2735,6 @@ * normals and normal indexes -- normix * ***************************************************************/ - public static Point4f getPlaneThroughPoints(Point3f pointA, - Point3f pointB, - Point3f pointC, Vector3f vNorm, - Vector3f vAB, Vector3f vAC) { - float w = Graphics3D.getNormalThroughPoints(pointA, pointB, pointC, vNorm, vAB, vAC); - return new Point4f(vNorm.x, vNorm.y, vNorm.z, w); - } - - public static float distanceToPlane(Point4f plane, Point3f pt) { - return (plane == null ? Float.NaN - : (plane.x * pt.x + plane.y * pt.y + plane.z * pt.z + plane.w) - / (float) Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z - * plane.z)); - } - - public static float distanceToPlane(Point4f plane, float d, Point3f pt) { - return (plane == null ? Float.NaN : (plane.x * pt.x + plane.y - * pt.y + plane.z * pt.z + plane.w) / d); - } - - public static float distanceToPlane(Vector3f norm, float w, Point3f pt) { - return (norm == null ? Float.NaN - : (norm.x * pt.x + norm.y * pt.y + norm.z * pt.z + w) - / (float) Math.sqrt(norm.x * norm.x + norm.y * norm.y + norm.z - * norm.z)); - } - - public static void calcNormalizedNormal(Point3f pointA, Point3f pointB, - Point3f pointC, Vector3f vNormNorm, Vector3f vAB, Vector3f vAC) { - vAB.sub(pointB, pointA); - vAC.sub(pointC, pointA); - vNormNorm.cross(vAB, vAC); - vNormNorm.normalize(); - } - - public static float getDirectedNormalThroughPoints(Point3f pointA, - Point3f pointB, Point3f pointC, Point3f ptRef, Vector3f vNorm, - Vector3f vAB, Vector3f vAC) { - // for x = plane({atomno=1}, {atomno=2}, {atomno=3}, {atomno=4}) - float nd = getNormalThroughPoints(pointA, pointB, pointC, vNorm, vAB, vAC); - if (ptRef != null) { - Point3f pt0 = new Point3f(pointA); - pt0.add(vNorm); - float d = pt0.distance(ptRef); - pt0.set(pointA); - pt0.sub(vNorm); - if (d > pt0.distance(ptRef)) { - vNorm.scale(-1); - nd = -nd; - } - } - return nd; - } - - public static float getNormalThroughPoints(Point3f pointA, Point3f pointB, - Point3f pointC, Vector3f vNorm, Vector3f vAB, Vector3f vAC) { - // for Polyhedra - calcNormalizedNormal(pointA, pointB, pointC, vNorm, vAB, vAC); - // ax + by + cz + d = 0 - // so if a point is in the plane, then N dot X = -d - vAB.set(pointA); - float d = -vAB.dot(vNorm); - return d; - } - - public static void getNormalFromCenter(Point3f ptCenter, Point3f ptA, Point3f ptB, - Point3f ptC, boolean isOutward, Vector3f normal) { - // for Polyhedra - Point3f ptT = new Point3f(); - Point3f ptT2 = new Point3f(); - Vector3f vAB = new Vector3f(); - Vector3f vAC = new Vector3f(); - calcNormalizedNormal(ptA, ptB, ptC, normal, vAB, vAC); - //but which way is it? add N to A and see who is closer to Center, A or N. - ptT.set(ptA); - ptT.add(ptB); - ptT.add(ptC); - ptT.scale(1/3f); - ptT2.set(normal); - ptT2.scale(0.1f); - ptT2.add(ptT); - // A C Bob Hanson 2006 - // \ / - // \ / - // x pT is center of ABC; ptT2 is offset a bit from that - // | either closer to x (ok if not opaque) or further - // | from x (ok if opaque) - // B - // in the case of facet ABx, the "center" is really the OTHER point, C. - boolean doReverse = (isOutward && ptCenter.distance(ptT2) < ptCenter.distance(ptT) - || !isOutward && ptCenter.distance(ptT) < ptCenter.distance(ptT2)); - if (doReverse) - normal.scale(-1f); - } - - public void calcXYNormalToLine(Point3f pointA, Point3f pointB, - Vector3f vNormNorm) { - // vector in xy plane perpendicular to a line between two points RMH - Vector3f axis = new Vector3f(pointA); - axis.sub(pointB); - vNormNorm.cross(axis, JmolConstants.axisY); - vNormNorm.normalize(); - if (Float.isNaN(vNormNorm.x)) - vNormNorm.set(1, 0, 0); - } - - public static void projectOntoAxis (Point3f point, Point3f axisA, Vector3f axisUnitVector, Vector3f vectorProjection) { - vectorProjection.sub(point, axisA); - float projectedLength = vectorProjection.dot(axisUnitVector); - point.set(axisUnitVector); - point.scaleAdd(projectedLength, axisA); - vectorProjection.sub(point, axisA); - } - - public static void calcBestAxisThroughPoints(Point3f[] points, Point3f axisA, - Vector3f axisUnitVector, - Vector3f vectorProjection, - int nTriesMax) { - // just a crude starting point. - - int nPoints = points.length; - axisA.set(points[0]); - axisUnitVector.sub(points[nPoints - 1], axisA); - axisUnitVector.normalize(); - - /* - * We now calculate the least-squares 3D axis - * through the helix alpha carbons starting with Vo - * as a first approximation. - * - * This uses the simple 0-centered least squares fit: - * - * Y = M cross Xi - * - * minimizing R^2 = SUM(|Y - Yi|^2) - * - * where Yi is the vector PERPENDICULAR of the point onto axis Vo - * and Xi is the vector PROJECTION of the point onto axis Vo - * and M is a vector adjustment - * - * M = SUM_(Xi cross Yi) / sum(|Xi|^2) - * - * from which we arrive at: - * - * V = Vo + (M cross Vo) - * - * Basically, this is just a 3D version of a - * standard 2D least squares fit to a line, where we would say: - * - * y = m xi + b - * - * D = n (sum xi^2) - (sum xi)^2 - * - * m = [(n sum xiyi) - (sum xi)(sum yi)] / D - * b = [(sum yi) (sum xi^2) - (sum xi)(sum xiyi)] / D - * - * but here we demand that the line go through the center, so we - * require (sum xi) = (sum yi) = 0, so b = 0 and - * - * m = (sum xiyi) / (sum xi^2) - * - * In 3D we do the same but - * instead of x we have Vo, - * instead of multiplication we use cross products - * - * A bit of iteration is necessary. - * - * Bob Hanson 11/2006 - * - */ - - calcAveragePointN(points, nPoints, axisA); - - int nTries = 0; - while (nTries++ < nTriesMax - && findAxis(points, nPoints, axisA, axisUnitVector, vectorProjection) > 0.001) { - } - - /* - * Iteration here gets the job done. - * We now find the projections of the endpoints onto the axis - * - */ - - Point3f tempA = new Point3f(points[0]); - Graphics3D.projectOntoAxis(tempA, axisA, axisUnitVector, vectorProjection); - axisA.set(tempA); - } - - static float findAxis(Point3f[] points, int nPoints, Point3f axisA, - Vector3f axisUnitVector, Vector3f vectorProjection) { - Vector3f sumXiYi = new Vector3f(); - Vector3f vTemp = new Vector3f(); - Point3f pt = new Point3f(); - Point3f ptProj = new Point3f(); - Vector3f a = new Vector3f(axisUnitVector); - - float sum_Xi2 = 0; - float sum_Yi2 = 0; - for (int i = nPoints; --i >= 0;) { - pt.set(points[i]); - ptProj.set(pt); - Graphics3D.projectOntoAxis(ptProj, axisA, axisUnitVector, - vectorProjection); - vTemp.sub(pt, ptProj); - sum_Yi2 += vTemp.lengthSquared(); - vTemp.cross(vectorProjection, vTemp); - sumXiYi.add(vTemp); - sum_Xi2 += vectorProjection.lengthSquared(); - } - Vector3f m = new Vector3f(sumXiYi); - m.scale(1 / sum_Xi2); - vTemp.cross(m, axisUnitVector); - axisUnitVector.add(vTemp); - axisUnitVector.normalize(); - //check for change in direction by measuring vector difference length - vTemp.set(axisUnitVector); - vTemp.sub(a); - return vTemp.length(); - } - - - public static void calcAveragePoint(Point3f pointA, Point3f pointB, - Point3f pointC) { - pointC.set((pointA.x + pointB.x) / 2, (pointA.y + pointB.y) / 2, - (pointA.z + pointB.z) / 2); - } - - public static void calcAveragePointN(Point3f[] points, int nPoints, - Point3f averagePoint) { - averagePoint.set(points[0]); - for (int i = 1; i < nPoints; i++) - averagePoint.add(points[i]); - averagePoint.scale(1f / nPoints); - } - public short getNormix(Vector3f vector) { return normix3d.getNormix(vector.x, vector.y, vector.z, Normix3D.NORMIX_GEODESIC_LEVEL); Modified: branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -123,7 +123,6 @@ import org.jmol.util.*; import org.jmol.atomdata.AtomDataServer; -import org.jmol.g3d.Graphics3D; import org.jmol.jvxl.data.JvxlData; import org.jmol.jvxl.data.VolumeData; import org.jmol.jvxl.data.MeshData; @@ -1071,7 +1070,7 @@ Point3f ptb, Point3f ptc) { // ax + by + cz + d = 0 - float d = Graphics3D.getDirectedNormalThroughPoints(pta, ptb, ptc, ptRef, vNorm, vAB, vAC); + float d = Measure.getDirectedNormalThroughPoints(pta, ptb, ptc, ptRef, vNorm, vAB, vAC); return (vNorm.x * x + vNorm.y * y + d) / -vNorm.z; } Modified: branches/v11_8/Jmol/src/org/jmol/modelset/AtomCollection.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/AtomCollection.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/modelset/AtomCollection.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -42,6 +42,7 @@ import org.jmol.util.BitSetUtil; import org.jmol.util.Escape; import org.jmol.util.Logger; +import org.jmol.util.Measure; import org.jmol.util.Parser; import org.jmol.util.Quaternion; import org.jmol.util.TextFormat; @@ -1787,7 +1788,7 @@ BitSet bsResult = new BitSet(); for (int i = atomCount; --i >= 0;) { Atom atom = atoms[i]; - float d = Graphics3D.distanceToPlane(plane, atom); + float d = Measure.distanceToPlane(plane, atom); if (distance > 0 && d >= -0.1 && d <= distance || distance < 0 && d <= 0.1 && d >= distance || distance == 0 && Math.abs(d) < 0.01) bsResult.set(atom.atomIndex); Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -42,11 +42,11 @@ import org.jmol.api.SymmetryInterface; import org.jmol.bspt.Bspf; import org.jmol.bspt.CubeIterator; -import org.jmol.g3d.Graphics3D; import org.jmol.util.ArrayUtil; import org.jmol.util.BitSetUtil; import org.jmol.util.Escape; import org.jmol.util.Logger; +import org.jmol.util.Measure; import org.jmol.util.TextFormat; import org.jmol.viewer.JmolConstants; import org.jmol.viewer.Token; @@ -1449,7 +1449,7 @@ * plane.z); for (int i = atomCount; --i >= 0;) if (bs.get(i)) { - float twoD = -Graphics3D.distanceToPlane(plane, d, atoms[i]) * 2; + float twoD = -Measure.distanceToPlane(plane, d, atoms[i]) * 2; float x = norm.x * twoD; float y = norm.y * twoD; float z = norm.z * twoD; Modified: branches/v11_8/Jmol/src/org/jmol/modelsetbio/Helix.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelsetbio/Helix.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/modelsetbio/Helix.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -26,7 +26,7 @@ import javax.vecmath.Point3f; import javax.vecmath.Vector3f; -import org.jmol.g3d.Graphics3D; +import org.jmol.util.Measure; import org.jmol.viewer.JmolConstants; public class Helix extends ProteinStructure { @@ -46,9 +46,9 @@ } axisA = new Point3f(); axisUnitVector = new Vector3f(); - Graphics3D.calcBestAxisThroughPoints(points, axisA, axisUnitVector, vectorProjection, 4); + Measure.calcBestAxisThroughPoints(points, axisA, axisUnitVector, vectorProjection, 4); axisB = new Point3f(points[monomerCount]); - Graphics3D.projectOntoAxis(axisB, axisA, axisUnitVector, vectorProjection); + Measure.projectOntoAxis(axisB, axisA, axisUnitVector, vectorProjection); } /**************************************************************** Modified: branches/v11_8/Jmol/src/org/jmol/modelsetbio/Sheet.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelsetbio/Sheet.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/modelsetbio/Sheet.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -26,7 +26,7 @@ import javax.vecmath.Point3f; import javax.vecmath.Vector3f; -import org.jmol.g3d.Graphics3D; +import org.jmol.util.Measure; import org.jmol.viewer.JmolConstants; public class Sheet extends ProteinStructure { @@ -61,7 +61,7 @@ if (lowerNeighborIsHelixOrSheet()) { //System.out.println("ok"); } else { - Graphics3D + Measure .projectOntoAxis(tempA, axisA, axisUnitVector, vectorProjection); } Point3f tempB = new Point3f(); @@ -69,7 +69,7 @@ if (upperNeighborIsHelixOrSheet()) { //System.out.println("ok"); } else { - Graphics3D + Measure .projectOntoAxis(tempB, axisA, axisUnitVector, vectorProjection); } axisA = tempA; Modified: branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -29,6 +29,7 @@ import org.jmol.util.ArrayUtil; import org.jmol.util.Escape; +import org.jmol.util.Measure; import org.jmol.viewer.JmolConstants; import org.jmol.api.JmolRendererInterface; import org.jmol.g3d.*; @@ -188,7 +189,7 @@ int[] pi = polygonIndexes[i]; try { if (pi != null) { - Graphics3D.calcNormalizedNormal(vertices[pi[0]], vertices[pi[1]], + Measure.calcNormalizedNormal(vertices[pi[0]], vertices[pi[1]], vertices[pi[2]], vTemp, vAB, vAC); // general 10.? error here was not watching out for // occurrances of intersection AT a corner, leading to Modified: branches/v11_8/Jmol/src/org/jmol/shapespecial/Draw.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shapespecial/Draw.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/shapespecial/Draw.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -37,6 +37,7 @@ import org.jmol.util.BitSetUtil; import org.jmol.util.Escape; import org.jmol.util.Logger; +import org.jmol.util.Measure; import org.jmol.util.Point3fi; import org.jmol.util.TextFormat; import org.jmol.viewer.JmolConstants; @@ -685,7 +686,7 @@ float dist = 0; if (isArc || plane != null && isCircle) { if (plane != null) { - dist = Graphics3D.distanceToPlane(plane, ptList[0]); + dist = Measure.distanceToPlane(plane, ptList[0]); vAC.set(-plane.x, -plane.y, -plane.z); vAC.normalize(); if (dist < 0) @@ -726,7 +727,7 @@ Point3f center = new Point3f(); Vector3f normal = new Vector3f(); if (nVertices == 2 && plane != null) { - dist = Graphics3D.distanceToPlane(plane, ptList[0]); + dist = Measure.distanceToPlane(plane, ptList[0]); vAC.set(plane.x, plane.y, plane.z); vAC.normalize(); vAC.scale(-dist); @@ -748,10 +749,10 @@ nVertices = 4; } else if (nVertices >= 3 && !isPlane && isPerpendicular) { // normal to plane - Graphics3D.calcNormalizedNormal(ptList[0], ptList[1], ptList[2], + Measure.calcNormalizedNormal(ptList[0], ptList[1], ptList[2], normal, vAB, vAC); center = new Point3f(); - Graphics3D.calcAveragePointN(ptList, nVertices, center); + Measure.calcAveragePointN(ptList, nVertices, center); dist = (length == Float.MAX_VALUE ? ptList[0].distance(center) : length); normal.scale(dist); ptList[0].set(center); @@ -760,13 +761,13 @@ nVertices = 2; } else if (nVertices == 2 && isPerpendicular) { // perpendicular line to line or plane to line - Graphics3D.calcAveragePoint(ptList[0], ptList[1], center); + Measure.calcAveragePoint(ptList[0], ptList[1], center); dist = (length == Float.MAX_VALUE ? ptList[0].distance(center) : length); if (isPlane && length != Float.MAX_VALUE) dist /= 2f; if (isPlane && isRotated45) dist *= 1.4142f; - g3d.calcXYNormalToLine(ptList[0], ptList[1], normal); + Measure.calcXYNormalToLine(ptList[0], ptList[1], normal); normal.scale(dist); if (isPlane) { ptList[2] = new Point3f(center); @@ -778,7 +779,7 @@ // 0-------+--------1 // | // 2 - Graphics3D.calcNormalizedNormal(ptList[0], ptList[1], ptList[2], + Measure.calcNormalizedNormal(ptList[0], ptList[1], ptList[2], normal, vAB, vAC); normal.scale(dist); ptList[3] = new Point3f(center); @@ -794,10 +795,10 @@ // 3 2 if (isRotated45) { - Graphics3D.calcAveragePoint(ptList[0], ptList[1], ptList[0]); - Graphics3D.calcAveragePoint(ptList[1], ptList[2], ptList[1]); - Graphics3D.calcAveragePoint(ptList[2], ptList[3], ptList[2]); - Graphics3D.calcAveragePoint(ptList[3], pt, ptList[3]); + Measure.calcAveragePoint(ptList[0], ptList[1], ptList[0]); + Measure.calcAveragePoint(ptList[1], ptList[2], ptList[1]); + Measure.calcAveragePoint(ptList[2], ptList[3], ptList[2]); + Measure.calcAveragePoint(ptList[3], pt, ptList[3]); } nVertices = 4; } else { @@ -809,7 +810,7 @@ if (isArrow && nVertices != -2) isArrow = false; } else if (nVertices == 2 && length != Float.MAX_VALUE) { - Graphics3D.calcAveragePoint(ptList[0], ptList[1], center); + Measure.calcAveragePoint(ptList[0], ptList[1], center); normal.set(ptList[1]); normal.sub(center); normal.scale(0.5f / normal.length() * (length == 0 ? 0.01f : length)); @@ -912,7 +913,7 @@ m.vertices[p[1]]); n++; } else { - Graphics3D.calcNormalizedNormal(m.vertices[p[0]], + Measure.calcNormalizedNormal(m.vertices[p[0]], m.vertices[p[1]], m.vertices[p[2]], m.axes[i], m.vAB, m.vAC); n++; Modified: branches/v11_8/Jmol/src/org/jmol/shapespecial/Polyhedra.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -31,6 +31,7 @@ import org.jmol.util.Escape; import org.jmol.util.Logger; import org.jmol.util.ArrayUtil; +import org.jmol.util.Measure; import java.util.BitSet; import java.util.Hashtable; @@ -38,7 +39,6 @@ import javax.vecmath.Point3f; import javax.vecmath.Vector3f; -import org.jmol.g3d.Graphics3D; public class Polyhedra extends AtomShape { @@ -419,10 +419,10 @@ // if center is on the face, then we need a different point to // define the normal if (isFaceCentered) - Graphics3D.getNormalFromCenter(randomPoint, points[i], points[j], + Measure.getNormalFromCenter(randomPoint, points[i], points[j], points[k], false, normal); else - Graphics3D.getNormalFromCenter(points[ptCenter], points[i], + Measure.getNormalFromCenter(points[ptCenter], points[i], points[j], points[k], true, normal); normal.scale(isCollapsed && !isFaceCentered ? faceCenterOffset : 0.001f); @@ -443,7 +443,7 @@ planesT[ipt++] = (byte) i; planesT[ipt++] = (byte) j; planesT[ipt++] = (byte) nRef; - Graphics3D.getNormalFromCenter(points[k], points[i], points[j], + Measure.getNormalFromCenter(points[k], points[i], points[j], ptRef, false, normal); normixesT[planeCount++] = (isFaceCentered ? g3d .get2SidedNormix(normal) : g3d.getNormix(normal)); @@ -454,7 +454,7 @@ planesT[ipt++] = (byte) i; planesT[ipt++] = (byte) nRef; planesT[ipt++] = (byte) k; - Graphics3D.getNormalFromCenter(points[j], points[i], ptRef, + Measure.getNormalFromCenter(points[j], points[i], ptRef, points[k], false, normal); normixesT[planeCount++] = (isFaceCentered ? g3d .get2SidedNormix(normal) : g3d.getNormix(normal)); @@ -465,7 +465,7 @@ planesT[ipt++] = (byte) nRef; planesT[ipt++] = (byte) j; planesT[ipt++] = (byte) k; - Graphics3D.getNormalFromCenter(points[i], ptRef, points[j], + Measure.getNormalFromCenter(points[i], ptRef, points[j], points[k], false, normal); normixesT[planeCount++] = (isFaceCentered ? g3d .get2SidedNormix(normal) : g3d.getNormix(normal)); @@ -515,8 +515,8 @@ * */ Vector3f norm = new Vector3f(); - float w = Graphics3D.getNormalThroughPoints(pt1, pt2, pt3, norm, vAB, vAC); - float d = Graphics3D.distanceToPlane(norm, w, ptX); + float w = Measure.getNormalThroughPoints(pt1, pt2, pt3, norm, vAB, vAC); + float d = Measure.distanceToPlane(norm, w, ptX); return (Math.abs(d) < minDistanceForPlanarity); } Modified: branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -1104,11 +1104,11 @@ private void getClosestPoint(IsosurfaceMesh m, int imin, Point3f toPt, Point3f ptRet, Vector3f normalRet) { Point4f plane = m.getFacePlane(imin, normalRet); - float dist = Graphics3D.distanceToPlane(plane, toPt); + float dist = Measure.distanceToPlane(plane, toPt); normalRet.scale(-dist); ptRet.set(toPt); ptRet.add(normalRet); - dist = Graphics3D.distanceToPlane(plane, ptRet); + dist = Measure.distanceToPlane(plane, ptRet); if (m.centers[imin].distance(toPt) < ptRet.distance(toPt)) ptRet.set(m.centers[imin]); //System.out.println(ptRet); Modified: branches/v11_8/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -36,6 +36,7 @@ import org.jmol.g3d.Graphics3D; import org.jmol.util.ArrayUtil; import org.jmol.util.Logger; +import org.jmol.util.Measure; import org.jmol.viewer.Viewer; import org.jmol.jvxl.data.JvxlData; import org.jmol.jvxl.readers.JvxlReader; @@ -290,7 +291,7 @@ } Point4f getFacePlane(int i, Vector3f vNorm) { - return Graphics3D.getPlaneThroughPoints(vertices[polygonIndexes[i][0]], + return Measure.getPlaneThroughPoints(vertices[polygonIndexes[i][0]], vertices[polygonIndexes[i][1]], vertices[polygonIndexes[i][2]], vNorm, vAB, vAC); } Modified: branches/v11_8/Jmol/src/org/jmol/util/Measure.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/util/Measure.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/util/Measure.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -29,6 +29,7 @@ import javax.vecmath.Vector3f; import org.jmol.util.Escape; +import org.jmol.viewer.JmolConstants; import org.jmol.viewer.Token; final public class Measure { @@ -88,7 +89,7 @@ public static float computeAngle(Tuple3f pointA, Tuple3f pointB, Tuple3f pointC, boolean asDegrees) { Vector3f vectorBA = new Vector3f(); Vector3f vectorBC = new Vector3f(); - return Measure.computeAngle(pointA, pointB, pointC, vectorBA, vectorBC, asDegrees); + return computeAngle(pointA, pointB, pointC, vectorBA, vectorBC, asDegrees); } public static Object computeHelicalAxis(String id, int tokType, Point3f a, Point3f b, @@ -193,4 +194,239 @@ } } + public static Point4f getPlaneThroughPoints(Point3f pointA, + Point3f pointB, + Point3f pointC, Vector3f vNorm, + Vector3f vAB, Vector3f vAC) { + float w = getNormalThroughPoints(pointA, pointB, pointC, vNorm, vAB, vAC); + return new Point4f(vNorm.x, vNorm.y, vNorm.z, w); + } + + public static float distanceToPlane(Point4f plane, Point3f pt) { + return (plane == null ? Float.NaN + : (plane.x * pt.x + plane.y * pt.y + plane.z * pt.z + plane.w) + / (float) Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z + * plane.z)); + } + + public static float distanceToPlane(Point4f plane, float d, Point3f pt) { + return (plane == null ? Float.NaN : (plane.x * pt.x + plane.y + * pt.y + plane.z * pt.z + plane.w) / d); + } + + public static float distanceToPlane(Vector3f norm, float w, Point3f pt) { + return (norm == null ? Float.NaN + : (norm.x * pt.x + norm.y * pt.y + norm.z * pt.z + w) + / (float) Math.sqrt(norm.x * norm.x + norm.y * norm.y + norm.z + * norm.z)); + } + + public static void calcNormalizedNormal(Point3f pointA, Point3f pointB, + Point3f pointC, Vector3f vNormNorm, Vector3f vAB, Vector3f vAC) { + vAB.sub(pointB, pointA); + vAC.sub(pointC, pointA); + vNormNorm.cross(vAB, vAC); + vNormNorm.normalize(); + } + + public static float getDirectedNormalThroughPoints(Point3f pointA, + Point3f pointB, Point3f pointC, Point3f ptRef, Vector3f vNorm, + Vector3f vAB, Vector3f vAC) { + // for x = plane({atomno=1}, {atomno=2}, {atomno=3}, {atomno=4}) + float nd = getNormalThroughPoints(pointA, pointB, pointC, vNorm, vAB, vAC); + if (ptRef != null) { + Point3f pt0 = new Point3f(pointA); + pt0.add(vNorm); + float d = pt0.distance(ptRef); + pt0.set(pointA); + pt0.sub(vNorm); + if (d > pt0.distance(ptRef)) { + vNorm.scale(-1); + nd = -nd; + } + } + return nd; + } + + public static float getNormalThroughPoints(Point3f pointA, Point3f pointB, + Point3f pointC, Vector3f vNorm, Vector3f vAB, Vector3f vAC) { + // for Polyhedra + calcNormalizedNormal(pointA, pointB, pointC, vNorm, vAB, vAC); + // ax + by + cz + d = 0 + // so if a point is in the plane, then N dot X = -d + vAB.set(pointA); + float d = -vAB.dot(vNorm); + return d; + } + + public static void getNormalFromCenter(Point3f ptCenter, Point3f ptA, Point3f ptB, + Point3f ptC, boolean isOutward, Vector3f normal) { + // for Polyhedra + Point3f ptT = new Point3f(); + Point3f ptT2 = new Point3f(); + Vector3f vAB = new Vector3f(); + Vector3f vAC = new Vector3f(); + calcNormalizedNormal(ptA, ptB, ptC, normal, vAB, vAC); + //but which way is it? add N to A and see who is closer to Center, A or N. + ptT.set(ptA); + ptT.add(ptB); + ptT.add(ptC); + ptT.scale(1/3f); + ptT2.set(normal); + ptT2.scale(0.1f); + ptT2.add(ptT); + // A C Bob Hanson 2006 + // \ / + // \ / + // x pT is center of ABC; ptT2 is offset a bit from that + // | either closer to x (ok if not opaque) or further + // | from x (ok if opaque) + // B + // in the case of facet ABx, the "center" is really the OTHER point, C. + boolean doReverse = (isOutward && ptCenter.distance(ptT2) < ptCenter.distance(ptT) + || !isOutward && ptCenter.distance(ptT) < ptCenter.distance(ptT2)); + if (doReverse) + normal.scale(-1f); + } + + public static void calcXYNormalToLine(Point3f pointA, Point3f pointB, + Vector3f vNormNorm) { + // vector in xy plane perpendicular to a line between two points RMH + Vector3f axis = new Vector3f(pointA); + axis.sub(pointB); + vNormNorm.cross(axis, JmolConstants.axisY); + vNormNorm.normalize(); + if (Float.isNaN(vNormNorm.x)) + vNormNorm.set(1, 0, 0); + } + + public static void projectOntoAxis (Point3f point, Point3f axisA, Vector3f axisUnitVector, Vector3f vectorProjection) { + vectorProjection.sub(point, axisA); + float projectedLength = vectorProjection.dot(axisUnitVector); + point.set(axisUnitVector); + point.scaleAdd(projectedLength, axisA); + vectorProjection.sub(point, axisA); + } + + public static void calcBestAxisThroughPoints(Point3f[] points, Point3f axisA, + Vector3f axisUnitVector, + Vector3f vectorProjection, + int nTriesMax) { + // just a crude starting point. + + int nPoints = points.length; + axisA.set(points[0]); + axisUnitVector.sub(points[nPoints - 1], axisA); + axisUnitVector.normalize(); + + /* + * We now calculate the least-squares 3D axis + * through the helix alpha carbons starting with Vo + * as a first approximation. + * + * This uses the simple 0-centered least squares fit: + * + * Y = M cross Xi + * + * minimizing R^2 = SUM(|Y - Yi|^2) + * + * where Yi is the vector PERPENDICULAR of the point onto axis Vo + * and Xi is the vector PROJECTION of the point onto axis Vo + * and M is a vector adjustment + * + * M = SUM_(Xi cross Yi) / sum(|Xi|^2) + * + * from which we arrive at: + * + * V = Vo + (M cross Vo) + * + * Basically, this is just a 3D version of a + * standard 2D least squares fit to a line, where we would say: + * + * y = m xi + b + * + * D = n (sum xi^2) - (sum xi)^2 + * + * m = [(n sum xiyi) - (sum xi)(sum yi)] / D + * b = [(sum yi) (sum xi^2) - (sum xi)(sum xiyi)] / D + * + * but here we demand that the line go through the center, so we + * require (sum xi) = (sum yi) = 0, so b = 0 and + * + * m = (sum xiyi) / (sum xi^2) + * + * In 3D we do the same but + * instead of x we have Vo, + * instead of multiplication we use cross products + * + * A bit of iteration is necessary. + * + * Bob Hanson 11/2006 + * + */ + + calcAveragePointN(points, nPoints, axisA); + + int nTries = 0; + while (nTries++ < nTriesMax + && findAxis(points, nPoints, axisA, axisUnitVector, vectorProjection) > 0.001) { + } + + /* + * Iteration here gets the job done. + * We now find the projections of the endpoints onto the axis + * + */ + + Point3f tempA = new Point3f(points[0]); + projectOntoAxis(tempA, axisA, axisUnitVector, vectorProjection); + axisA.set(tempA); + } + + public static float findAxis(Point3f[] points, int nPoints, Point3f axisA, + Vector3f axisUnitVector, Vector3f vectorProjection) { + Vector3f sumXiYi = new Vector3f(); + Vector3f vTemp = new Vector3f(); + Point3f pt = new Point3f(); + Point3f ptProj = new Point3f(); + Vector3f a = new Vector3f(axisUnitVector); + + float sum_Xi2 = 0; + float sum_Yi2 = 0; + for (int i = nPoints; --i >= 0;) { + pt.set(points[i]); + ptProj.set(pt); + projectOntoAxis(ptProj, axisA, axisUnitVector, + vectorProjection); + vTemp.sub(pt, ptProj); + sum_Yi2 += vTemp.lengthSquared(); + vTemp.cross(vectorProjection, vTemp); + sumXiYi.add(vTemp); + sum_Xi2 += vectorProjection.lengthSquared(); + } + Vector3f m = new Vector3f(sumXiYi); + m.scale(1 / sum_Xi2); + vTemp.cross(m, axisUnitVector); + axisUnitVector.add(vTemp); + axisUnitVector.normalize(); + //check for change in direction by measuring vector difference length + vTemp.set(axisUnitVector); + vTemp.sub(a); + return vTemp.length(); + } + + public static void calcAveragePoint(Point3f pointA, Point3f pointB, + Point3f pointC) { + pointC.set((pointA.x + pointB.x) / 2, (pointA.y + pointB.y) / 2, + (pointA.z + pointB.z) / 2); + } + + public static void calcAveragePointN(Point3f[] points, int nPoints, + Point3f averagePoint) { + averagePoint.set(points[0]); + for (int i = 1; i < nPoints; i++) + averagePoint.add(points[i]); + averagePoint.scale(1f / nPoints); + } + } Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-26 13:20:39 UTC (rev 11368) @@ -4,6 +4,8 @@ version=11.8.1 +# code: refactoring of Measure/Graphics3D +# bug fix: q1.dot(q2) # new feature: CASTEP (http://www.castep.org/) and AIMS readers # new feature: popup menu gives Symmetry operation display option # new features for the 238th American Chemical Society National Meeting, Washington, D.C., Aug. 19, 2009 Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -54,6 +54,7 @@ import org.jmol.util.ColorEncoder; import org.jmol.util.Escape; import org.jmol.util.Logger; +import org.jmol.util.Measure; import org.jmol.util.Parser; import org.jmol.util.Point3fi; import org.jmol.util.Quaternion; @@ -1161,7 +1162,7 @@ break; case Token.distance: if (planeRef != null) - fv = Graphics3D.distanceToPlane(planeRef, atom); + fv = Measure.distanceToPlane(planeRef, atom); else fv = atom.distance(ptRef); break; @@ -3719,7 +3720,7 @@ JmolConstants.SHAPE_DRAW, "vertices"); if (points == null || points.length < 3) break; - return Graphics3D.getPlaneThroughPoints(points[0], points[1], + return Measure.getPlaneThroughPoints(points[0], points[1], points[2], new Vector3f(), vAB, vAC); case JmolConstants.SHAPE_ISOSURFACE: setShapeProperty(JmolConstants.SHAPE_ISOSURFACE, "thisID", id); @@ -3771,7 +3772,7 @@ Point3f pt3 = atomCenterOrCoordinateParameter(iToken); i = iToken; Vector3f plane = new Vector3f(); - float w = Graphics3D.getNormalThroughPoints(pt1, pt2, pt3, plane, vAB, + float w = Measure.getNormalThroughPoints(pt1, pt2, pt3, plane, vAB, vAC); Point4f p = new Point4f(plane.x, plane.y, plane.z, w); if (!isSyntaxCheck && Logger.debugging) { @@ -3817,7 +3818,7 @@ viewer.toCartesian(pt2); viewer.toCartesian(pt3); Vector3f plane = new Vector3f(); - float w = Graphics3D.getNormalThroughPoints(pt1, pt2, pt3, plane, vAB, vAC); + float w = Measure.getNormalThroughPoints(pt1, pt2, pt3, plane, vAB, vAC); Point4f p = new Point4f(plane.x, plane.y, plane.z, w); if (!isSyntaxCheck && Logger.debugging) Logger.info("defined plane: " + p); Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -786,17 +786,22 @@ Point3f pt1 = ptValue(x1); Point4f plane1 = planeValue(x1); if (tok == Token.dot) { - if (pt1 == null) + if (plane1 != null && plane2 != null) + // q1.dot(q2) assume quaternions + return addX(plane1.x * plane2.x + plane1.y * plane2.y + plane1.z * plane2.z + plane1.w * plane2.w); + // plane.dot(point) = + if (plane1 != null) pt1 = new Point3f(plane1.x, plane1.y, plane1.z); - if (pt2 == null) + // point.dot(plane) + if (plane2 != null) pt2 = new Point3f(plane2.x, plane2.y, plane2.z); return addX(pt1.x * pt2.x + pt1.y * pt2.y + pt2.z * pt2.z); } if (plane1 == null) - return addX(plane2 == null ? pt2.distance(pt1) : Graphics3D + return addX(plane2 == null ? pt2.distance(pt1) : Measure .distanceToPlane(plane2, pt1)); - return addX(Graphics3D.distanceToPlane(plane1, pt2)); + return addX(Measure.distanceToPlane(plane1, pt2)); } private Point3f ptValue(ScriptVariable x) throws ScriptException { @@ -1060,7 +1065,7 @@ Vector3f vAB = new Vector3f(); Vector3f vAC = new Vector3f(); Vector3f norm = new Vector3f(); - float nd = Graphics3D.getDirectedNormalThroughPoints(pt1, pt2, pt3, + float nd = Measure.getDirectedNormalThroughPoints(pt1, pt2, pt3, (args.length == 4 ? ptValue(args[3]) : null), norm, vAB, vAC); return addX(new Point4f(norm.x, norm.y, norm.z, nd)); default: Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptVariable.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptVariable.java 2009-08-26 00:50:16 UTC (rev 11367) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptVariable.java 2009-08-26 13:20:39 UTC (rev 11368) @@ -30,11 +30,11 @@ import javax.vecmath.Point4f; import javax.vecmath.Vector3f; -import org.jmol.g3d.Graphics3D; import org.jmol.modelset.Bond.BondSet; import org.jmol.util.ArrayUtil; import org.jmol.util.BitSetUtil; import org.jmol.util.Escape; +import org.jmol.util.Measure; import org.jmol.util.Parser; import org.jmol.util.Quaternion; import org.jmol.util.TextFormat; @@ -325,7 +325,7 @@ case point3f: return ((Point3f) x.value).distance(pt0); case point4f: - return Graphics3D.distanceToPlane((Point4f) x.value, pt0); + return Measure.distanceToPlane((Point4f) x.value, pt0); default: return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-28 15:53:42
|
Revision: 11380 http://jmol.svn.sourceforge.net/jmol/?rev=11380&view=rev Author: hansonr Date: 2009-08-28 15:53:30 +0000 (Fri, 28 Aug 2009) Log Message: ----------- version=11.8.2_dev # bug fix for MOReaders * NBO: --- note, "-" can be in column with " " causing tokenization failure Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/MOReader.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/MOReader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/MOReader.java 2009-08-27 13:09:10 UTC (rev 11379) +++ branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/MOReader.java 2009-08-28 15:53:30 UTC (rev 11380) @@ -313,7 +313,7 @@ ... TOTAL NUMBER OF BASIS SET SHELLS = 101 * - * NBO: + * NBO: --- note, "-" can be in column with " " causing tokenization failure * AO 1 2 3 4 5 6 7 8 ---------- ------- ------- ------- ------- ------- ------- ------- ------- @@ -331,9 +331,12 @@ Hashtable[] mos = null; Vector[] data = null; Vector coeffLabels = null; + int ptOffset = -1; + int fieldSize = 0; int nThisLine = 0; readLine(); int moCount = 0; + int nSkip = -1; if (line.indexOf("---") >= 0) readLine(); while (readLine() != null) { @@ -391,8 +394,15 @@ //read the data line: if (nThisLine == 0) { nThisLine = tokens.length; - if (tokens[0].equals("AO")) // NBOs + if (tokens[0].equals("AO")) { + //01234567890123456789 + // 480. Li31 (s) -7.3005 1.8135 -9.4655 -0.5137 -5.1614-23.4537-20.3894-37.6613 nThisLine--; + ptOffset = 16; + fieldSize = 8; + nSkip = 3; + // NBOs + } if (mos == null || nThisLine > mos.length) { mos = new Hashtable[nThisLine]; data = new Vector[nThisLine]; @@ -405,11 +415,17 @@ coeffLabels = new Vector(); continue; } - - int nSkip = tokens.length - nThisLine; + if (ptOffset < 0) { + nSkip = tokens.length - nThisLine; + for (int i = 0; i < nThisLine; i++) + data[i].addElement(tokens[i + nSkip]); + } else { + int pt = ptOffset; + for (int i = 0; i < nThisLine; i++, pt += fieldSize) + data[i].addElement(line.substring(pt, pt + fieldSize).trim()); + } coeffLabels.addElement(JmolAdapter.canonicalizeQuantumSubshellTag(tokens[nSkip - 1].toUpperCase())); - for (int i = 0; i < nThisLine; i++) - data[i].addElement(tokens[i + nSkip]); + line = ""; } energyUnits = "a.u."; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-27 13:09:10 UTC (rev 11379) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-28 15:53:30 UTC (rev 11380) @@ -4,6 +4,8 @@ version=11.8.2_dev +# bug fix for MOReaders * NBO: --- note, "-" can be in column with " " causing tokenization failure + # ----------------------------------------------------------------------------- #version=11.8.1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-29 17:34:40
|
Revision: 11390 http://jmol.svn.sourceforge.net/jmol/?rev=11390&view=rev Author: hansonr Date: 2009-08-29 17:34:32 +0000 (Sat, 29 Aug 2009) Log Message: ----------- version=11.8.2_dev # bug fix: popupMenu disabling nonfunctional Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/applet/Jmol.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java Modified: branches/v11_8/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/applet/Jmol.java 2009-08-29 14:21:24 UTC (rev 11389) +++ branches/v11_8/Jmol/src/org/jmol/applet/Jmol.java 2009-08-29 17:34:32 UTC (rev 11390) @@ -132,7 +132,6 @@ boolean mayScript; boolean haveDocumentAccess; - boolean needPopupMenu; boolean loading; String[] callbacks = new String[JmolConstants.CALLBACK_COUNT]; @@ -386,9 +385,8 @@ } // should the popupMenu be loaded ? - needPopupMenu = getBooleanValue("popupMenu", true); - if (needPopupMenu) - viewer.getProperty("DATA_API", "getPopupMenu", Boolean.FALSE); + if (!getBooleanValue("popupMenu", true)) + viewer.getProperty("DATA_API", "disablePopupMenu", null); loadNodeId(getValue("loadNodeId", null)); String loadParam; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-29 14:21:24 UTC (rev 11389) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-29 17:34:32 UTC (rev 11390) @@ -4,6 +4,7 @@ version=11.8.2_dev +# bug fix: popupMenu disabling nonfunctional # bug fix: acos, to be consistent, needs to deliver degrees, not radians # bug fix for MOReaders * NBO: --- note, "-" can be in column with " " causing tokenization failure Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java 2009-08-29 14:21:24 UTC (rev 11389) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java 2009-08-29 17:34:32 UTC (rev 11390) @@ -6772,6 +6772,7 @@ +"setMenu............." +"wrappedState........" +"spaceGroupInfo......" + +"disablePopupMenu...." ).indexOf(infoType)) { case 0: @@ -6809,6 +6810,9 @@ return "\n/**" + JmolConstants.EMBEDDED_SCRIPT_TAG + " \n" + getStateInfo() + "\n**/"; case 160: return getSpaceGroupInfo(null); + case 180: + global.disablePopupMenu = true; // no false here, because it's a one-time setting + return null; default: System.out.println("ERROR IN getProperty DATA_API: " + returnType); return null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-29 23:07:06
|
Revision: 11395 http://jmol.svn.sourceforge.net/jmol/?rev=11395&view=rev Author: hansonr Date: 2009-08-29 23:06:57 +0000 (Sat, 29 Aug 2009) Log Message: ----------- version=11.8.2_dev # bug fix: 2D mesh property not cleared Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java 2009-08-29 23:05:21 UTC (rev 11394) +++ branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java 2009-08-29 23:06:57 UTC (rev 11395) @@ -113,6 +113,7 @@ fillTriangles = true; showTriangles = false; //as distinct entitities frontOnly = false; + haveXyPoints = false; title = null; normixes = null; bitsets = null; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-29 23:05:21 UTC (rev 11394) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-29 23:06:57 UTC (rev 11395) @@ -4,6 +4,7 @@ version=11.8.2_dev +# bug fix: 2D mesh property not cleared # bug fix: popupMenu disabling nonfunctional # bug fix: acos, to be consistent, needs to deliver degrees, not radians # bug fix for MOReaders * NBO: --- note, "-" can be in column with " " causing tokenization failure This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-29 23:50:35
|
Revision: 11397 http://jmol.svn.sourceforge.net/jmol/?rev=11397&view=rev Author: hansonr Date: 2009-08-29 23:12:08 +0000 (Sat, 29 Aug 2009) Log Message: ----------- version=11.8.2_dev # bug fix: 2D mesh property not cleared Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java branches/v11_8/Jmol/src/org/jmol/g3d/Normix3D.java branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java Modified: branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java 2009-08-29 23:11:36 UTC (rev 11396) +++ branches/v11_8/Jmol/src/org/jmol/g3d/Graphics3D.java 2009-08-29 23:12:08 UTC (rev 11397) @@ -2735,6 +2735,8 @@ * normals and normal indexes -- normix * ***************************************************************/ + public static final short NORMIX_NULL = 9999; + public short getNormix(Vector3f vector) { return normix3d.getNormix(vector.x, vector.y, vector.z, Normix3D.NORMIX_GEODESIC_LEVEL); Modified: branches/v11_8/Jmol/src/org/jmol/g3d/Normix3D.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/g3d/Normix3D.java 2009-08-29 23:11:36 UTC (rev 11396) +++ branches/v11_8/Jmol/src/org/jmol/g3d/Normix3D.java 2009-08-29 23:12:08 UTC (rev 11397) @@ -244,10 +244,10 @@ // throw new NullPointerException(); } + private static byte nullIntensity = 50; byte getIntensity(short normix) { - if (normix < 0) - return intensities2Sided[~normix]; - return intensities[normix]; + return (normix == ~Graphics3D.NORMIX_NULL || normix == Graphics3D.NORMIX_NULL + ? nullIntensity : normix < 0 ? intensities2Sided[~normix] :intensities[normix]); } void setRotationMatrix(Matrix3f rotationMatrix) { Modified: branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java 2009-08-29 23:11:36 UTC (rev 11396) +++ branches/v11_8/Jmol/src/org/jmol/shape/Mesh.java 2009-08-29 23:12:08 UTC (rev 11397) @@ -144,8 +144,12 @@ public void initializeNormixes(int lighting, Vector3f[] vectorSums) { isTwoSided = (lighting == JmolConstants.FULLYLIT); normixes = new short[vertexCount]; - for (int i = vertexCount; --i >= 0;) - normixes[i] = g3d.getNormix(vectorSums[i]); + if (haveXyPoints) + for (int i = vertexCount; --i >= 0;) + normixes[i] = Graphics3D.NORMIX_NULL; + else + for (int i = vertexCount; --i >= 0;) + normixes[i] = g3d.getNormix(vectorSums[i]); this.lighting = JmolConstants.FRONTLIT; if (insideOut) invertNormixes(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-31 16:27:22
|
Revision: 11419 http://jmol.svn.sourceforge.net/jmol/?rev=11419&view=rev Author: hansonr Date: 2009-08-31 16:27:12 +0000 (Mon, 31 Aug 2009) Log Message: ----------- version=11.8.3_dev # bug fix: load append of file with ellipsoids causes array out of bounds exception Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java branches/v11_8/Jmol/src/org/jmol/modelset/ModelLoader.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-08-31 15:07:51 UTC (rev 11418) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-08-31 16:27:12 UTC (rev 11419) @@ -2855,9 +2855,7 @@ if (list == null) { strOperations = "\n no symmetry operations employed"; } else { - if (symTemp == null) - symTemp = (SymmetryInterface) Interface - .getOptionInterface("symmetry.Symmetry"); + getSymTemp(); symTemp.setSpaceGroup(false); strOperations = "\n" + list.length + " symmetry operations employed:"; infolist = new Object[list.length][]; @@ -2875,6 +2873,7 @@ info = new Hashtable(); } info.put("spaceGroupName", spaceGroup); + getSymTemp(); String data = symTemp.getSpaceGroupInfo(spaceGroup, cellInfo); if (infolist != null) { info.put("operations", infolist); @@ -2888,6 +2887,11 @@ return info; } + private void getSymTemp() { + if (symTemp == null) + symTemp = (SymmetryInterface) Interface.getOptionInterface("symmetry.Symmetry"); + } + public Object getSymmetryInfo(BitSet bsAtoms, String xyz, int op, Point3f pt, String id, int type) { Object ret = (type == Token.point ? (Object) new Point3f() : ""); int iModel = -1; @@ -2904,31 +2908,27 @@ SymmetryInterface uc = getUnitCell(iModel); if (uc == null) return ret; - SymmetryInterface sym; if (xyz == null) { String[] ops = uc.getSymmetryOperations(); if (ops == null || op < 1 || op > ops.length) return ret; xyz = ops[op - 1 ]; } - if (symTemp == null) - symTemp = (SymmetryInterface) Interface.getOptionInterface("symmetry.Symmetry"); - sym = symTemp; - sym.setSpaceGroup(false); - int iSym = sym.addSpaceGroupOperation("!" + xyz); + symTemp.setSpaceGroup(false); + int iSym = symTemp.addSpaceGroupOperation("!" + xyz); if (iSym < 0) return ret; - sym.setUnitCell(uc.getNotionalUnitCell()); + symTemp.setUnitCell(uc.getNotionalUnitCell()); pt = new Point3f(pt == null ? atoms[iAtom] : pt); if (type == Token.point) { uc.toFractional(pt); Point3f sympt = (Point3f)ret; - sym.newSpaceGroupPoint(iSym, pt, sympt, 0, 0, 0); - sym.toCartesian(sympt); + symTemp.newSpaceGroupPoint(iSym, pt, sympt, 0, 0, 0); + symTemp.toCartesian(sympt); return sympt; } // null id means "text info only" but here we want the draw commands - return (String)sym.getSymmetryOperationDescription(iSym, uc, pt, + return (String)symTemp.getSymmetryOperationDescription(iSym, uc, pt, (id == null ? "sym" : id))[3]; } Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelLoader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelLoader.java 2009-08-31 15:07:51 UTC (rev 11418) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelLoader.java 2009-08-31 16:27:12 UTC (rev 11419) @@ -706,12 +706,8 @@ bfactor100s = ArrayUtil.setLength(bfactor100s, newLength); if (partialCharges != null) partialCharges = ArrayUtil.setLength(partialCharges, newLength); - if (ellipsoids != null) { - Object[][] ellipsoids2 = new Object[newLength][]; - for (int i = 0; i < ellipsoids.length; i++) - ellipsoids2[i] = ellipsoids[i]; - ellipsoids = ellipsoids2; - } + if (ellipsoids != null) + ellipsoids = (Object[][]) ArrayUtil.setLength(ellipsoids, newLength); if (atomNames != null) atomNames = ArrayUtil.setLength(atomNames, newLength); if (atomTypes != null) Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-31 15:07:51 UTC (rev 11418) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-31 16:27:12 UTC (rev 11419) @@ -4,6 +4,7 @@ version=11.8.3_dev +# bug fix: load append of file with ellipsoids causes array out of bounds exception # bug fix: show spacegroup can cause null exception # bug fix: animation direction -1 not functional # bug fix: script lines 1-3 not functional This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-08-31 16:47:48
|
Revision: 11422 http://jmol.svn.sourceforge.net/jmol/?rev=11422&view=rev Author: hansonr Date: 2009-08-31 16:47:38 +0000 (Mon, 31 Aug 2009) Log Message: ----------- version=11.8.3_dev # bug fix: mmCIF misreads bfactor data Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java 2009-08-31 16:33:39 UTC (rev 11421) +++ branches/v11_8/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java 2009-08-31 16:47:38 UTC (rev 11422) @@ -631,7 +631,7 @@ atom.occupancy = (int) (floatOccupancy * 100); break; case B_ISO: - atom.bfactor = parseFloat(field) * 100f; + atom.bfactor = parseFloat(field) * (isPDB ? 1 : 100f); break; case COMP_ID: atom.group3 = field; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-31 16:33:39 UTC (rev 11421) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-08-31 16:47:38 UTC (rev 11422) @@ -4,6 +4,7 @@ version=11.8.3_dev +# bug fix: mmCIF misreads bfactor data # bug fix: load append of file with ellipsoids causes array out of bounds exception # bug fix: show spacegroup can cause null exception # bug fix: animation direction -1 not functional This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-01 04:30:08
|
Revision: 11430 http://jmol.svn.sourceforge.net/jmol/?rev=11430&view=rev Author: hansonr Date: 2009-09-01 04:30:00 +0000 (Tue, 01 Sep 2009) Log Message: ----------- version=11.8.3_dev # bug fix: show pointgroup can give wrong format after getproperty PointGroupInfo Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/symmetry/PointGroup.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/PointGroup.java 2009-09-01 04:25:23 UTC (rev 11429) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/PointGroup.java 2009-09-01 04:30:00 UTC (rev 11430) @@ -882,8 +882,7 @@ Object getInfo(int modelIndex, boolean asDraw, boolean asInfo, String type, int index, float scaleFactor) { - if (asInfo) - info = new Hashtable(); + info = (asInfo ? new Hashtable() : null); Vector3f v = new Vector3f(); Operation op; if (scaleFactor == 0) Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-01 04:25:23 UTC (rev 11429) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-01 04:30:00 UTC (rev 11430) @@ -4,6 +4,7 @@ version=11.8.3_dev +# bug fix: show pointgroup can give wrong format after getproperty PointGroupInfo # bug fix: mmCIF misreads bfactor data # bug fix: load append of file with ellipsoids causes array out of bounds exception # bug fix: show spacegroup can cause null exception This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-03 23:41:08
|
Revision: 11451 http://jmol.svn.sourceforge.net/jmol/?rev=11451&view=rev Author: hansonr Date: 2009-09-03 23:40:59 +0000 (Thu, 03 Sep 2009) Log Message: ----------- version=11.8.3 # bug fix: aims/castep readers Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/CastepReader.java branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java 2009-09-03 23:24:36 UTC (rev 11450) +++ branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/AimsReader.java 2009-09-03 23:40:59 UTC (rev 11451) @@ -21,7 +21,7 @@ */ /* - * Copyright (C) 2009 J. Meyer, FHI Berlin + * Copyright (C) 2009 Joerg Meyer, FHI Berlin * * Contact: me...@fh... * @@ -49,13 +49,14 @@ import java.io.BufferedReader; -/* - * FHI-AIMS geometry.in file format +/** + * FHI-AIMS (http://www.fhi-berlin.mpg.de/aims) geometry.in file format + * + * samples of relevant lines in geometry.in file are included as comments below + * + * @author Joerg Meyer, FHI Berlin 2009 (me...@fh...) + * @version 1.1 * - * http://www.fhi-berlin.mpg.de/aims - * - * contributed by Joerg Meyer, j-...@so... - * */ public class AimsReader extends AtomSetCollectionReader { @@ -76,7 +77,10 @@ if (tokens.length == 0) continue; - if (tokens[0].equalsIgnoreCase("atom")) { + /* +atom 2.750645380 2.750645380 25.000000000 Pd + */ + if (tokens[0].equals("atom")) { if (tokens.length != 5) { Logger.warn("cannot read line with AIMS atom data: " + line); } else { @@ -89,7 +93,10 @@ } } - if (tokens[0].equalsIgnoreCase("lattice_vector")) { + /* +lattice_vector 16.503872273 0.000000000 0.000000000 + */ + if (tokens[0].equals("lattice_vector")) { if (nLatticeVectors > 2) { Logger.warn("more than 3 AIMS lattice vectors found with line: " + line); } else { Modified: branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/CastepReader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/CastepReader.java 2009-09-03 23:24:36 UTC (rev 11450) +++ branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/CastepReader.java 2009-09-03 23:40:59 UTC (rev 11451) @@ -49,11 +49,13 @@ import java.io.BufferedReader; -/* - * CASTEP .cell file format - * - * contributed by Joerg Meyer, j-...@so... - * +/** + * CASTEP (http://www.castep.org) .cell file format + * + * relevant section of .cell file are included as comments below + * + * @author Joerg Meyer, FHI Berlin 2009 (me...@fh...) + * @version 1.1 */ public class CastepReader extends AtomSetCollectionReader { @@ -78,23 +80,53 @@ while (tokenizeCastepCell() > 0) { + if ((tokens.length >= 2) && (tokens[0].equalsIgnoreCase("%BLOCK"))) { /* - * unit cell can only be set later (to get symmetry properly - * initialized) ... + * unit cell can only be set later + * to get symmetry properly initialized - + * see below! */ + + /* +%BLOCK LATTICE_ABC +ang + 16.66566792 8.33283396 16.82438907 + 90.0 90.0 90.0 +%ENDBLOCK LATTICE_ABC + */ if (tokens[1].equalsIgnoreCase("LATTICE_ABC")) { readLatticeAbc(); } + /* +%BLOCK LATTICE_CART +ang + 16.66566792 0.0 0.0 + 0.0 8.33283396 0.0 + 0.0 0.0 16.82438907 +%ENDBLOCK LATTICE_CART + */ if (tokens[1].equalsIgnoreCase("LATTICE_CART")) { readLatticeCart(); } - /* ... while coordinates are (conveniently!) set immediately */ + + /* coordinates are set immediately */ + /* +%BLOCK POSITIONS_FRAC + Pd 0.0 0.0 0.0 +%ENDBLOCK POSITIONS_FRAC + */ if (tokens[1].equalsIgnoreCase("POSITIONS_FRAC")) { readPositionsFrac(); iHaveFractionalCoordinates = true; } + /* +%BLOCK POSITIONS_ABS +ang + Pd 0.00000000 0.00000000 0.00000000 +%ENDBLOCK POSITIONS_ABS + */ if (tokens[1].equalsIgnoreCase("POSITIONS_ABS")) { readPositionsAbs(); iHaveFractionalCoordinates = false; Modified: branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-09-03 23:24:36 UTC (rev 11450) +++ branches/v11_8/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-09-03 23:40:59 UTC (rev 11451) @@ -638,13 +638,12 @@ // use same tokenizing mechanism as in AimsReader.java to also recognize // AIMS geometry files with indented keywords + // "atom" is a VERY generic term. for (int i = 0; i < lines.length; i++) { String[] tokens = Parser.getTokens(lines[i]); - // No -- can't do this -- it's incompatible with PDB - // for such files you will have to force the reader with "aims::" - // if ( tokens[0].toLowerCase().startsWith("atom") ) return true; if (tokens.length > 0 - && tokens[0].toLowerCase().startsWith("lattice_vector")) + && (tokens[0].startsWith("atom") + || tokens[0].startsWith("lattice_vector"))) return true; } return false; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-03 23:24:36 UTC (rev 11450) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-03 23:40:59 UTC (rev 11451) @@ -4,6 +4,7 @@ version=11.8.3 +# bug fix: aims/castep readers # bug fix: "initialize" should not reset defaultDiretory # bug fix: compiler error for {xxx}.yy = n \n {xxx}.yy = n # bug fix: compiler error for literal -0 or -0.0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-04 04:24:08
|
Revision: 11456 http://jmol.svn.sourceforge.net/jmol/?rev=11456&view=rev Author: hansonr Date: 2009-09-04 04:23:59 +0000 (Fri, 04 Sep 2009) Log Message: ----------- version=11.8.3 # bug fix: file save from menu does not pull up dialog Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/api/JmolStatusListener.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties branches/v11_8/Jmol/src/org/jmol/viewer/StatusManager.java branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java Modified: branches/v11_8/Jmol/src/org/jmol/api/JmolStatusListener.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/api/JmolStatusListener.java 2009-09-04 04:23:08 UTC (rev 11455) +++ branches/v11_8/Jmol/src/org/jmol/api/JmolStatusListener.java 2009-09-04 04:23:59 UTC (rev 11456) @@ -68,7 +68,7 @@ * * @param fileName * @param type - * @param text_or_bytes + * @param text_or_bytes information or null indicates message AFTER Jmol creates the image * @param quality * @return null (canceled) or a message starting with OK or an error message */ Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-04 04:23:08 UTC (rev 11455) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-04 04:23:59 UTC (rev 11456) @@ -4,6 +4,7 @@ version=11.8.3 +# bug fix: file save from menu does not pull up dialog # bug fix: aims/castep readers # bug fix: "initialize" should not reset defaultDiretory # bug fix: compiler error for {xxx}.yy = n \n {xxx}.yy = n Modified: branches/v11_8/Jmol/src/org/jmol/viewer/StatusManager.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/StatusManager.java 2009-09-04 04:23:08 UTC (rev 11455) +++ branches/v11_8/Jmol/src/org/jmol/viewer/StatusManager.java 2009-09-04 04:23:59 UTC (rev 11456) @@ -612,14 +612,18 @@ /** * + * @param aFileName * @param fileName * @param type * @param text_or_bytes * @param quality - * @return null (canceled) or a message starting with OK or an error message + * @return "CANCELED" or null (not processed) or a message starting with OK or an error message + * also returns final filename as aFileName[0] + * */ - String createImage(String fileName, String type, Object text_or_bytes, + String createImage(String[] aFileName, String type, Object text_or_bytes, int quality) { + String fileName = aFileName[0]; if (fileName == null) // check for embedding program action return (jmolStatusListener == null ? null : jmolStatusListener .createImage(null, type, text_or_bytes, quality)); @@ -629,10 +633,10 @@ fileName = dialogAsk(quality == Integer.MIN_VALUE ? "save" : "saveImage", fileName); } + aFileName[0] = fileName; } - return (fileName == null // user canceled operation - || jmolStatusListener == null ? null : jmolStatusListener.createImage( - fileName, type, text_or_bytes, quality)); + return (fileName == null ? "CANCELED" : jmolStatusListener == null ? null : + jmolStatusListener.createImage(fileName, type, text_or_bytes, quality)); } Hashtable getRegistryInfo() { Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java 2009-09-04 04:23:08 UTC (rev 11455) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java 2009-09-04 04:23:59 UTC (rev 11456) @@ -7405,24 +7405,25 @@ boolean useDialog = (fileName.indexOf("?") == 0); if (useDialog) fileName = fileName.substring(1); + boolean forceDialog = (fileName.indexOf("?") == 0); + if (forceDialog) + fileName = fileName.substring(1); fileName = FileManager.setLocalPathForWritingFile(this, fileName); - if (isApplet) { + String[] aFileName = new String[] { (forceDialog || isApplet + && useDialog ? "?" : "") + fileName }; + err = statusManager + .createImage(aFileName, type, text_or_bytes, quality); + if (!isApplet && err == null) { // applet calls creatImage itself - err = statusManager.createImage((useDialog ? "?" : "") + fileName, - type, text_or_bytes, quality); - } else { // application can do it itself or allow Jmol to do it here - err = statusManager.createImage(fileName, type, text_or_bytes, quality); - if (err == null) { - JmolImageCreatorInterface c = (JmolImageCreatorInterface) Interface - .getOptionInterface("export.image.ImageCreator"); - c.setViewer(this); - err = (String) c.createImage(fileName, type, text_or_bytes, quality); - statusManager.createImage(err, type, null, quality); - } + JmolImageCreatorInterface c = (JmolImageCreatorInterface) Interface + .getOptionInterface("export.image.ImageCreator"); + c.setViewer(this); + err = (String) c.createImage(aFileName[0], type, text_or_bytes, + quality); + statusManager.createImage(new String[] { err }, type, null, quality); } } - // err may be null if user cancels operation involving dialog and "?" } catch (Throwable er) { Logger.error(setErrorMessage(err = "ERROR creating image: " + er)); } @@ -7430,7 +7431,8 @@ if (quality != Integer.MIN_VALUE) { resizeImage(saveWidth, saveHeight, true, false, true); } - return err; + return ("CANCELED".equals(err) ? null : err); + } private void setImageFontScaling(int width, int height) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-05 00:59:04
|
Revision: 11462 http://jmol.svn.sourceforge.net/jmol/?rev=11462&view=rev Author: hansonr Date: 2009-09-05 00:58:55 +0000 (Sat, 05 Sep 2009) Log Message: ----------- version=11.8.4_dev # bug fix: isosurface reading of contoured JVXL files defaults to "nomesh nofill" Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java 2009-09-05 00:10:01 UTC (rev 11461) +++ branches/v11_8/Jmol/src/org/jmol/shapesurface/Isosurface.java 2009-09-05 00:58:55 UTC (rev 11462) @@ -781,7 +781,7 @@ if (thisMesh.jvxlData.jvxlPlane != null) allowContourLines = false; if (thisMesh.jvxlData.nContours != 0 && thisMesh.jvxlData.nContours != -1) - explicitContours = true; + explicitContours = thisMesh.havePlanarContours = true; setPropertySuper("token", new Integer(explicitContours ? Token.nofill : Token.fill), null); setPropertySuper("token", new Integer(explicitContours ? Token.contourlines : Token.nocontourlines), null); thisMesh.colorCommand = "color $" + thisMesh.thisID + " " Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-05 00:10:01 UTC (rev 11461) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-05 00:58:55 UTC (rev 11462) @@ -4,6 +4,7 @@ version=11.8.4_dev +# bug fix: isosurface reading of contoured JVXL files defaults to "nomesh nofill" # ----------------------------------------------------------------------------- #version=11.8.3 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-05 16:44:17
|
Revision: 11470 http://jmol.svn.sourceforge.net/jmol/?rev=11470&view=rev Author: hansonr Date: 2009-09-05 16:44:10 +0000 (Sat, 05 Sep 2009) Log Message: ----------- version=11.8.4_dev # bug fix: symop() -- can now be used without "all." # and returns list of information for symop(3) or symop("x,y,z") instead of implied atom 0 0 0 # bug fix: isosurface reading of contoured JVXL files defaults to "nomesh nofill" Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-09-05 16:43:26 UTC (rev 11469) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-09-05 16:44:10 UTC (rev 11470) @@ -2893,7 +2893,20 @@ } public Object getSymmetryInfo(BitSet bsAtoms, String xyz, int op, Point3f pt, String id, int type) { - Object ret = (type == Token.point ? (Object) new Point3f() : ""); + Object ret; + switch (type) { + case Token.point: + ret = new Point3f(); + break; + case Token.array: + ret = new Object[]{}; + break; + case Token.list: + ret = new String[] {}; + break; + default: + ret = ""; + } int iModel = -1; if (bsAtoms == null) { iModel = viewer.getCurrentModelIndex(); @@ -2914,6 +2927,7 @@ return ret; xyz = ops[op - 1 ]; } + getSymTemp(); symTemp.setSpaceGroup(false); int iSym = symTemp.addSpaceGroupOperation("!" + xyz); if (iSym < 0) @@ -2928,8 +2942,40 @@ return sympt; } // null id means "text info only" but here we want the draw commands - return (String)symTemp.getSymmetryOperationDescription(iSym, uc, pt, - (id == null ? "sym" : id))[3]; + Object[] info = symTemp.getSymmetryOperationDescription(iSym, uc, pt, + (id == null ? "sym" : id)); + /* + * xyz (Jones-Faithful calculated from matrix) + * xyzOriginal (Provided by operation) + * description ("C2 axis", for example) + * draw commands + * translation vector (fractional) + * translation vector (cartesian) + * inversion point + * axis point + * axis vector + * angle of rotation + */ + if (type == Token.array) + return info; + if (type == Token.draw) + return (String)info[3]; + if (type == Token.list) { + String[] sinfo = new String[] { + (String) info[0], + (String) info[1], + (String) info[2], + // skipping DRAW commands here + Escape.escape((Vector3f)info[4]), + Escape.escape((Vector3f)info[5]), + Escape.escape((Point3f)info[6]), + Escape.escape((Point3f)info[7]), + Escape.escape((Vector3f)info[8]), + "" + info[9] + }; + return sinfo; + } + return (String) info[2]; // description only } protected void deleteModel(int modelIndex, int firstAtomIndex, int nAtoms, Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java 2009-09-05 16:43:26 UTC (rev 11469) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java 2009-09-05 16:44:10 UTC (rev 11470) @@ -218,10 +218,10 @@ return sb.toString(); } - String getXYZ(boolean allPositive) { - return SymmetryOperation.getXYZFromMatrix(seitzMatrix12ths, allPositive); - } - + String getXYZ(boolean allPositive) { + return SymmetryOperation.getXYZFromMatrix(seitzMatrix12ths, false, allPositive, true); + } + private void getRotationInfo(String code, int prevOrder, char prevAxisType) { this.inputCode = code; code += " "; Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java 2009-09-05 16:43:26 UTC (rev 11469) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java 2009-09-05 16:44:10 UTC (rev 11470) @@ -667,7 +667,7 @@ newOps[0].set(newOps[j]); for (int k = 0; k < nOps; k++) { operation.mul(newOps[j], operations[k]); - addSymmetry(SymmetryOperation.getXYZFromMatrix(operation, true), + addSymmetry(SymmetryOperation.getXYZFromMatrix(operation, false, true, true), operation); } } Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-09-05 16:43:26 UTC (rev 11469) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-09-05 16:44:10 UTC (rev 11470) @@ -179,17 +179,15 @@ if (Math.abs(v) < 0.00001f) v = 0; if (i % 4 == 3) - v = normalizeTwelfths((v < 0 ? -1 : 1) * (int)(Math.abs(v) * 12.001f)); + v = normalizeTwelfths((v < 0 ? -1 : 1) * Math.round(Math.abs(v))); temp[i] = v; } return true; } xyz += ","; - //Logger.debug(xyz.length() + " " + xyz); for (int i = 0; i < xyz.length(); i++) { ch = xyz.charAt(i); - //Logger.debug("char = " + ch + isDecimal); switch (ch) { case '\'': case ' ': @@ -234,7 +232,7 @@ strT += (x == 0 ? "" : x < 0 ? "-x" : strT.length() == 0 ? "x" : "+x"); strT += (y == 0 ? "" : y < 0 ? "-y" : strT.length() == 0 ? "y" : "+y"); strT += (z == 0 ? "" : z < 0 ? "-z" : strT.length() == 0 ? "z" : "+z"); - strT += xyzFraction(iValue, false); + strT += xyzFraction(iValue, false, true); strOut += (strOut == "" ? "" : ",") + strT; //note: when ptLatt[3] = -1, ptLatt[rowPt] MUST be 0. if (rowPt == 2) { @@ -292,7 +290,8 @@ return iValue; } - final static String getXYZFromMatrix(Matrix4f mat, boolean allPositive) { + final static String getXYZFromMatrix(Matrix4f mat, boolean is12ths, + boolean allPositive, boolean halfOrLess) { String str = ""; float[] row = new float[4]; for (int i = 0; i < 3; i++) { @@ -304,7 +303,8 @@ term += (row[1] < 0 ? "-" : "+") + "y"; if (row[2] != 0) term += (row[2] < 0 ? "-" : "+") + "z"; - term += xyzFraction(row[3], allPositive); + term += xyzFraction((is12ths ? row[3] : row[3] * 12), allPositive, + halfOrLess); if (term.length() > 0 && term.charAt(0) == '+') term = term.substring(1); str += "," + term; @@ -318,17 +318,18 @@ str = "-"; n12ths = -n12ths; } - return str + twelfths[((int) n12ths) % 12]; + return str + twelfths[(Math.round(n12ths)) % 12]; } private final static String[] twelfths = { "0", "1/12", "1/6", "1/4", "1/3", "5/12", "1/2", "7/12", "2/3", "3/4", "5/6", "11/12" }; - private final static String xyzFraction(float n12ths, boolean allPositive) { + private final static String xyzFraction(float n12ths, boolean allPositive, boolean halfOrLess) { + n12ths = Math.round(n12ths); if (allPositive) { while (n12ths < 0) n12ths += 12f; - } else if (n12ths > 6f) { + } else if (halfOrLess && n12ths > 6f) { n12ths -= 12f; } String s = twelfthsOf(n12ths); @@ -390,17 +391,49 @@ return vRot; } - private StringBuffer draw1; - private String drawid; - + public Object[] getProduct(SymmetryOperation op2, SymmetryInterface uc, Point3f pt00, String id) { + if (!isFinalized) + doFinalize(); + if (!op2.isFinalized) + op2.doFinalize(); + Matrix4f m = new Matrix4f(op2); + m.mul(this); + m.m03 = op2.m03 + m03; + m.m13 = op2.m13 + m13; + m.m23 = op2.m23 + m23; + m.m33 = 1; + return getDescription(m, "(" + op2.xyz + ") * (" + xyz + ")", uc, pt00, id); + } + + /** + * + * @param uc + * @param pt00 + * @param id + * @return Object[] containing: + * xyz (Jones-Faithful calculated from matrix) + * xyzOriginal (Provided by calling method) + * info ("C2 axis", for example) + * draw commands, + * translation vector (as a Poin3f) + * inversion point, + * axis point 0, + * axis vector, + * angle of rotation + */ public Object[] getDescription(SymmetryInterface uc, Point3f pt00, String id) { - if (!isFinalized) doFinalize(); + return getDescription(this, xyzOriginal, uc, pt00, id); + } + + private static Object[] getDescription(Matrix4f m, String xyzOriginal, + SymmetryInterface uc, Point3f pt00, + String id) { Vector3f vtemp = new Vector3f(); Point3f ptemp = new Point3f(); - Point3f ftrans = new Point3f(); - + Vector3f ftrans = new Vector3f(); + String xyz = getXYZFromMatrix(m, false, false, false); boolean typeOnly = (id == null); if (pt00 == null) pt00 = new Point3f(); @@ -421,10 +454,10 @@ uc.toFractional(p1); uc.toFractional(p2); uc.toFractional(p3); - transform(p0, p0); - transform(p1, p1); - transform(p2, p2); - transform(p3, p3); + m.transform(p0, p0); + m.transform(p1, p1); + m.transform(p2, p2); + m.transform(p3, p3); uc.toCartesian(p0); uc.toCartesian(p1); uc.toCartesian(p2); @@ -508,7 +541,6 @@ ipt.scale(0.5f); ptinv = p0; isinversion = true; - } else if (haveinversion) { /* @@ -522,18 +554,7 @@ * triangles: * * - * o - * / \ - * / \ i' - * / \ - * / i \ - *A/_________\A' - * \ / - * \ j / - * \ / - * \ / - * \ / - * x + * o / \ / \ i' / \ / i \A/_________\A' \ / \ j / \ / \ / \ / x * * Points i and j are at the centers of the triangles. Points A and A' are * the frame centers; an operation at point i, j, x, or o is taking A to @@ -595,8 +616,9 @@ if (pt0.distance(p0) > 0.1f) { trans = new Vector3f(p0); trans.sub(pt0); - ftrans.set(trans); - uc.toFractional(ftrans); + ptemp.set(trans); + uc.toFractional(ptemp); + ftrans.set(ptemp); } else { trans = null; } @@ -626,19 +648,25 @@ // get rid of unnecessary translations added to keep most operations // within cell 555 - ftrans.set(trans); - uc.toFractional(ftrans); - if (approx(ftrans.x) == 1) - ftrans.x = 0; - if (approx(ftrans.y) == 1) - ftrans.y = 0; - if (approx(ftrans.z) == 1) - ftrans.z = 0; + ptemp.set(trans); + uc.toFractional(ptemp); + ftrans.set(ptemp); + if (approx(ftrans.x) == 1) { + trans.x = ftrans.x = 0; + } + if (approx(ftrans.y) == 1) { + trans.y = ftrans.y = 0; + } + if (approx(ftrans.z) == 1) { + trans.z = ftrans.z = 0; + } } // time to get the description String info1 = ""; + StringBuffer draw1 = new StringBuffer(); + String drawid; if (isinversion) { ptemp.set(ipt); @@ -649,6 +677,9 @@ info1 = "" + (360 / ang1) + "-bar axis"; } else if (pitch1 != 0) { info1 = "" + (360 / ang1) + "-fold screw axis"; + ptemp.set(ax1); + uc.toFractional(ptemp); + info1 += "|translation: " + fcoord(ptemp); } else { info1 = "C" + (360 / ang1) + " axis"; } @@ -685,274 +716,318 @@ } Logger.info(xyz + ": " + info1); - if (typeOnly) - return new Object[] { xyz, xyzOriginal, info1, null, trans, ipt, pa1, - ax1, new Integer(ang1) }; + String cmds = null; + if (!typeOnly) { + drawid = "\ndraw ID " + id + "_"; - drawid = "\ndraw ID " + id + "_"; + // delete previous elements of this user-settable ID - // delete previous elements of this user-settable ID + draw1 = new StringBuffer(); - draw1 = new StringBuffer(); + Logger.debug("// " + xyzOriginal + "|" + xyz + "\n" + m + "\n" + info1); - Logger.debug("// " + xyzOriginal + "|" + xyzOriginal + "|" + xyz + "\n" - + (Matrix4f) this + "\n" + info1); + draw1.append("// " + xyzOriginal + "|" + xyz + "|" + info1 + "\n"); - draw1.append("// " + xyzOriginal + "|" + xyz + "|" + info1 + "\n"); + draw1.append(drawid).append("* delete"); - draw1.append(drawid).append("* delete"); + // draw the initial frame - // draw the initial frame + drawLine(draw1, drawid + "frame1X", 0.15f, pt00, pt01, "red"); + drawLine(draw1, drawid + "frame1Y", 0.15f, pt00, pt02, "green"); + drawLine(draw1, drawid + "frame1Z", 0.15f, pt00, pt03, "blue"); - drawLine("frame1X", 0.15f, pt00, pt01, "red"); - drawLine("frame1Y", 0.15f, pt00, pt02, "green"); - drawLine("frame1Z", 0.15f, pt00, pt03, "blue"); + // draw the final frame just a bit fatter and shorter, in case they + // overlap - // draw the final frame just a bit fatter and shorter, in case they overlap + ptemp.set(p1); + ptemp.sub(p0); + ptemp.scaleAdd(0.9f, ptemp, p0); + drawLine(draw1, drawid + "frame2X", 0.2f, p0, ptemp, "red"); + ptemp.set(p2); + ptemp.sub(p0); + ptemp.scaleAdd(0.9f, ptemp, p0); + drawLine(draw1, drawid + "frame2Y", 0.2f, p0, ptemp, "green"); + ptemp.set(p3); + ptemp.sub(p0); + ptemp.scaleAdd(0.9f, ptemp, p0); + drawLine(draw1, drawid + "frame2Z", 0.2f, p0, ptemp, "purple"); - ptemp.set(p1); - ptemp.sub(p0); - ptemp.scaleAdd(0.9f, ptemp, p0); - drawLine("frame2X", 0.2f, p0, ptemp, "red"); - ptemp.set(p2); - ptemp.sub(p0); - ptemp.scaleAdd(0.9f, ptemp, p0); - drawLine("frame2Y", 0.2f, p0, ptemp, "green"); - ptemp.set(p3); - ptemp.sub(p0); - ptemp.scaleAdd(0.9f, ptemp, p0); - drawLine("frame2Z", 0.2f, p0, ptemp, "purple"); + String color; - String color; + if (isrotation) { - if (isrotation) { + Point3f pt1 = new Point3f(); - Point3f pt1 = new Point3f(); + color = "red"; - color = "red"; + int ang = ang1; + float scale = 1.0f; + vtemp.set(ax1); - int ang = ang1; - float scale = 1.0f; + // draw the lines associated with a rotation - // draw the lines associated with a rotation - - if (haveinversion) { - pt1.set(pa1); - pt1.add(ax1); - ang = (int) Measure.computeTorsion(ptinv, pa1, pt1, p0, true); - if (pitch1 == 0) - pt1.set(ptinv); - scale = p0.distance(pt1); - draw1.append(drawid).append("rotLine1 ").append(Escape.escape(pt1)) - .append(Escape.escape(ptinv)).append(" color red"); - draw1.append(drawid).append("rotLine2 ").append(Escape.escape(pt1)) - .append(Escape.escape(p0)).append(" color red"); - } else if (pitch1 == 0) { - boolean isSpecial = (pt00.distance(p0) < 0.2f); - if (!isSpecial) { + if (haveinversion) { + pt1.set(pa1); + pt1.add(vtemp); + ang = (int) Measure.computeTorsion(ptinv, pa1, pt1, p0, true); + if (pitch1 == 0) + pt1.set(ptinv); + scale = p0.distance(pt1); + draw1.append(drawid).append("rotLine1 ").append(Escape.escape(pt1)) + .append(Escape.escape(ptinv)).append(" color red"); + draw1.append(drawid).append("rotLine2 ").append(Escape.escape(pt1)) + .append(Escape.escape(p0)).append(" color red"); + } else if (pitch1 == 0) { + boolean isSpecial = (pt00.distance(p0) < 0.2f); + if (!isSpecial) { + draw1.append(drawid).append("rotLine1 ") + .append(Escape.escape(pt00)).append(Escape.escape(pa1)).append( + " color red"); + draw1.append(drawid).append("rotLine2 ").append(Escape.escape(p0)) + .append(Escape.escape(pa1)).append(" color red"); + } + vtemp.scale(3); + ptemp.set(vtemp); + ptemp.scale(-1); + draw1.append(drawid).append("rotVector2 vector diameter 0.1 ") + .append(Escape.escape(pa1)).append(Escape.escape(ptemp)).append( + " color red"); + pt1.set(pa1); + ptemp.scaleAdd(1, pt1, vtemp); + ang = (int) Measure.computeTorsion(pt00, pa1, ptemp, p0, true); + if (ang == 0) + ang = ang1; + if (pitch1 == 0 && pt00.distance(p0) < 0.2) + pt1.scaleAdd(0.5f, pt1, vtemp); + } else { + // screw + color = "orange"; draw1.append(drawid).append("rotLine1 ").append(Escape.escape(pt00)) .append(Escape.escape(pa1)).append(" color red"); + ptemp.set(pa1); + ptemp.add(vtemp); draw1.append(drawid).append("rotLine2 ").append(Escape.escape(p0)) - .append(Escape.escape(pa1)).append(" color red"); + .append(Escape.escape(ptemp)).append(" color red"); + pt1.scaleAdd(0.5f, vtemp, pa1); + ang = (int) (Measure.computeTorsion(pt00, pa1, ptemp, p0, true) * 0.9); } - ax1.scale(3); - ptemp.set(ax1); - ptemp.scale(-1); - draw1.append(drawid).append("rotVector2 vector diameter 0.1 ").append( - Escape.escape(pa1)).append(Escape.escape(ptemp)).append( - " color red"); - pt1.set(pa1); - ptemp.scaleAdd(1, pt1, ax1); - ang = (int) Measure.computeTorsion(pt00, pa1, ptemp, p0, true); - if (ang == 0) - ang = ang1; - if (pitch1 == 0 && pt00.distance(p0) < 0.2) - pt1.scaleAdd(0.5f, pt1, ax1); - } else { - // screw - color = "orange"; - draw1.append(drawid).append("rotLine1 ").append(Escape.escape(pt00)) - .append(Escape.escape(pa1)).append(" color red"); - ptemp.set(pa1); - ptemp.add(ax1); - draw1.append(drawid).append("rotLine2 ").append(Escape.escape(p0)) - .append(Escape.escape(ptemp)).append(" color red"); - pt1.scaleAdd(0.5f, ax1, pa1); - ang = (int) (Measure.computeTorsion(pt00, pa1, ptemp, p0, true) * 0.9); - } - // draw arc arrow + // draw arc arrow - ptemp.set(pt1); - ptemp.add(ax1); - if (haveinversion && pitch1 != 0) { - draw1.append(drawid).append("rotRotLine1").append(Escape.escape(pt1)) - .append(Escape.escape(ptinv)).append(" color red"); - draw1.append(drawid).append("rotRotLine2").append(Escape.escape(pt1)) - .append(Escape.escape(p0)).append(" color red"); + ptemp.set(pt1); + ptemp.add(vtemp); + if (haveinversion && pitch1 != 0) { + draw1.append(drawid).append("rotRotLine1").append(Escape.escape(pt1)) + .append(Escape.escape(ptinv)).append(" color red"); + draw1.append(drawid).append("rotRotLine2").append(Escape.escape(pt1)) + .append(Escape.escape(p0)).append(" color red"); + } + draw1.append(drawid).append( + "rotRotArrow arrow width 0.10 scale " + scale + " arc ").append( + Escape.escape(pt1)).append(Escape.escape(ptemp)); + if (haveinversion) + ptemp.set(ptinv); + else + ptemp.set(pt00); + if (ptemp.distance(p0) < 0.1f) + ptemp.set((float) Math.random(), (float) Math.random(), (float) Math + .random()); + draw1.append(Escape.escape(ptemp)); + ptemp.set(0, ang, 0); + draw1.append(Escape.escape(ptemp)).append(" color red"); + // draw the main vector + + draw1.append(drawid).append("rotVector1 vector diameter 0.1 ").append( + Escape.escape(pa1)).append(Escape.escape(vtemp)).append("color ") + .append(color); } - draw1.append(drawid).append( - "rotRotArrow arrow width 0.10 scale " + scale + " arc ").append( - Escape.escape(pt1)).append(Escape.escape(ptemp)); - if (haveinversion) - ptemp.set(ptinv); - else - ptemp.set(pt00); - if (ptemp.distance(p0) < 0.1f) - ptemp.set((float) Math.random(), (float) Math.random(), (float) Math - .random()); - draw1.append(Escape.escape(ptemp)); - ptemp.set(0, ang, 0); - draw1.append(Escape.escape(ptemp)).append(" color red"); - // draw the main vector - draw1.append(drawid).append("rotVector1 vector diameter 0.1 ").append( - Escape.escape(pa1)).append(Escape.escape(ax1)).append("color ") - .append(color); - } + if (ismirrorplane) { - if (ismirrorplane) { + // indigo arrow across plane from pt00 to pt0 - // indigo arrow across plane from pt00 to pt0 + if (pt00.distance(pt0) > 0.2) + draw1.append(drawid).append("planeVector arrow ").append( + Escape.escape(pt00)).append(Escape.escape(pt0)).append( + " color indigo"); - if (pt00.distance(pt0) > 0.2) - draw1.append(drawid).append("planeVector arrow ").append( - Escape.escape(pt00)).append(Escape.escape(pt0)).append( - " color indigo"); + // faint inverted frame if trans is not null - // faint inverted frame if trans is not null + if (trans != null) { + ptemp.scaleAdd(-1, p0, p1); + ptemp.add(pt0); + drawLine(draw1, drawid + "planeFrameX", 0.15f, pt0, ptemp, + "translucent red"); + ptemp.scaleAdd(-1, p0, p2); + ptemp.add(pt0); + drawLine(draw1, drawid + "planeFrameY", 0.15f, pt0, ptemp, + "translucent green"); + ptemp.scaleAdd(-1, p0, p3); + ptemp.add(pt0); + drawLine(draw1, drawid + "planeFrameZ", 0.15f, pt0, ptemp, + "translucent blue"); + } - if (trans != null) { - ptemp.scaleAdd(-1, p0, p1); - ptemp.add(pt0); - drawLine("planeFrameX", 0.15f, pt0, ptemp, "translucent red"); - ptemp.scaleAdd(-1, p0, p2); - ptemp.add(pt0); - drawLine("planeFrameY", 0.15f, pt0, ptemp, "translucent green"); - ptemp.scaleAdd(-1, p0, p3); - ptemp.add(pt0); - drawLine("planeFrameZ", 0.15f, pt0, ptemp, "translucent blue"); - } + color = (trans == null ? "green" : "blue"); - color = (trans == null ? "green" : "blue"); + // ok, now HERE's a good trick. We use the Marching Cubes + // algorithm to find the intersection points of a plane and the unit + // cell. + // We expand the unit cell by 5% in all directions just so we are + // guaranteed to get cutoffs. - // ok, now HERE's a good trick. We use the Marching Cubes - // algorithm to find the intersection points of a plane and the unit cell. - // We expand the unit cell by 5% in all directions just so we are - // guaranteed to get cutoffs. - - Point3f[] vertices = new Point3f[8]; - TriangleServer ts = (TriangleServer) Interface - .getOptionInterface("jvxl.calc.TriangleData"); - Point3i[] offsets = ts.getCubeVertexOffsets(); - for (int i = 0; i < 8; i++) { - ptemp.set(offsets[i].x == 0 ? -0.05f : 1.05f, - offsets[i].y == 0 ? -0.05f : 1.05f, offsets[i].z == 0 ? -0.05f - : 1.05f); - uc.toCartesian(ptemp); - vertices[i] = new Point3f(ptemp); - } - vtemp.set(ax1); - vtemp.normalize(); - // ax + by + cz + d = 0 - // so if a point is in the plane, then N dot X = -d - float w = -vtemp.x * pa1.x - vtemp.y * pa1.y - vtemp.z * pa1.z; - Point4f plane = new Point4f(vtemp.x, vtemp.y, vtemp.z, w); - Vector v = ts.intersectPlane(plane, vertices, 3); - // returns triangles and lines - if (v != null) - for (int i = v.size(); --i >= 0;) { - Point3f[] pts = (Point3f[]) v.get(i); - draw1.append(drawid).append("planep").append(i).append( - Escape.escape(pts[0])).append(Escape.escape(pts[1])); - if (pts.length == 3) - draw1.append(Escape.escape(pts[2])); - draw1.append(" color translucent ").append(color); + Point3f[] vertices = new Point3f[8]; + TriangleServer ts = (TriangleServer) Interface + .getOptionInterface("jvxl.calc.TriangleData"); + Point3i[] offsets = ts.getCubeVertexOffsets(); + for (int i = 0; i < 8; i++) { + ptemp.set(offsets[i].x == 0 ? -0.05f : 1.05f, + offsets[i].y == 0 ? -0.05f : 1.05f, offsets[i].z == 0 ? -0.05f + : 1.05f); + uc.toCartesian(ptemp); + vertices[i] = new Point3f(ptemp); } + vtemp.set(ax1); + vtemp.normalize(); + // ax + by + cz + d = 0 + // so if a point is in the plane, then N dot X = -d + float w = -vtemp.x * pa1.x - vtemp.y * pa1.y - vtemp.z * pa1.z; + Point4f plane = new Point4f(vtemp.x, vtemp.y, vtemp.z, w); + Vector v = ts.intersectPlane(plane, vertices, 3); + // returns triangles and lines + if (v != null) + for (int i = v.size(); --i >= 0;) { + Point3f[] pts = (Point3f[]) v.get(i); + draw1.append(drawid).append("planep").append(i).append( + Escape.escape(pts[0])).append(Escape.escape(pts[1])); + if (pts.length == 3) + draw1.append(Escape.escape(pts[2])); + draw1.append(" color translucent ").append(color); + } - // and JUST in case that does not work, at least draw a circle + // and JUST in case that does not work, at least draw a circle - if (v == null || v.size() == 0) { - ptemp.set(pa1); - ptemp.add(ax1); - draw1.append(drawid).append("planeCircle scale 2.0 circle ").append( - Escape.escape(pa1)).append(Escape.escape(ptemp)).append( - " color translucent ").append(color).append(" mesh fill"); + if (v == null || v.size() == 0) { + ptemp.set(pa1); + ptemp.add(ax1); + draw1.append(drawid).append("planeCircle scale 2.0 circle ").append( + Escape.escape(pa1)).append(Escape.escape(ptemp)).append( + " color translucent ").append(color).append(" mesh fill"); + } } - } - if (haveinversion) { + if (haveinversion) { - // draw a faint frame showing the inversion + // draw a faint frame showing the inversion - draw1.append(drawid).append("invPoint diameter 0.4 ").append( - Escape.escape(ipt)); - draw1.append(drawid).append("invArrow arrow ") - .append(Escape.escape(pt00)).append(Escape.escape(ptinv)).append( - " color indigo"); - if (!isinversion) { - ptemp.set(ptinv); - ptemp.add(pt00); - ptemp.sub(pt01); - drawLine("invFrameX", 0.15f, ptinv, ptemp, "translucent red"); - ptemp.set(ptinv); - ptemp.add(pt00); - ptemp.sub(pt02); - drawLine("invFrameY", 0.15f, ptinv, ptemp, "translucent green"); - ptemp.set(ptinv); - ptemp.add(pt00); - ptemp.sub(pt03); - drawLine("invFrameZ", 0.15f, ptinv, ptemp, "translucent blue"); + draw1.append(drawid).append("invPoint diameter 0.4 ").append( + Escape.escape(ipt)); + draw1.append(drawid).append("invArrow arrow ").append( + Escape.escape(pt00)).append(Escape.escape(ptinv)).append( + " color indigo"); + if (!isinversion) { + ptemp.set(ptinv); + ptemp.add(pt00); + ptemp.sub(pt01); + drawLine(draw1, drawid + "invFrameX", 0.15f, ptinv, ptemp, + "translucent red"); + ptemp.set(ptinv); + ptemp.add(pt00); + ptemp.sub(pt02); + drawLine(draw1, drawid + "invFrameY", 0.15f, ptinv, ptemp, + "translucent green"); + ptemp.set(ptinv); + ptemp.add(pt00); + ptemp.sub(pt03); + drawLine(draw1, drawid + "invFrameZ", 0.15f, ptinv, ptemp, + "translucent blue"); + } } - } - // and display translation if still not {0 0 0} + // and display translation if still not {0 0 0} - if (trans != null) { - if (pt0 == null) - pt0 = new Point3f(pt00); - draw1.append(drawid).append("transVector vector ").append( - Escape.escape(pt0)).append(Escape.escape(trans)); - } + if (trans != null) { + if (pt0 == null) + pt0 = new Point3f(pt00); + draw1.append(drawid).append("transVector vector ").append( + Escape.escape(pt0)).append(Escape.escape(trans)); + } - // color the targeted atoms opaque and add another frame if necessary + // color the targeted atoms opaque and add another frame if necessary - draw1.append("\nvar pt00 = " + Escape.escape(pt00)); - draw1.append("\nvar p0 = " + Escape.escape(p0)); - draw1.append("\nif (within(0.2,p0).length == 0) {"); - draw1.append("\nvar set2 = within(0.2,p0.uxyz.xyz)"); - draw1.append("\nif (set2) {"); - draw1.append(drawid).append("cellOffsetVector arrow @p0 @set2 color grey"); - draw1.append(drawid).append( - "offsetFrameX diameter 0.20 @{set2.xyz} @{set2.xyz + ").append( - Escape.escape(v01)).append("*0.9} color red"); - draw1.append(drawid).append( - "offsetFrameY diameter 0.20 @{set2.xyz} @{set2.xyz + ").append( - Escape.escape(v02)).append("*0.9} color green"); - draw1.append(drawid).append( - "offsetFrameZ diameter 0.20 @{set2.xyz} @{set2.xyz + ").append( - Escape.escape(v03)).append("*0.9} color purple"); - draw1.append("\n}}\n"); + draw1.append("\nvar pt00 = " + Escape.escape(pt00)); + draw1.append("\nvar p0 = " + Escape.escape(p0)); + draw1.append("\nif (within(0.2,p0).length == 0) {"); + draw1.append("\nvar set2 = within(0.2,p0.uxyz.xyz)"); + draw1.append("\nif (set2) {"); + draw1.append(drawid) + .append("cellOffsetVector arrow @p0 @set2 color grey"); + draw1.append(drawid).append( + "offsetFrameX diameter 0.20 @{set2.xyz} @{set2.xyz + ").append( + Escape.escape(v01)).append("*0.9} color red"); + draw1.append(drawid).append( + "offsetFrameY diameter 0.20 @{set2.xyz} @{set2.xyz + ").append( + Escape.escape(v02)).append("*0.9} color green"); + draw1.append(drawid).append( + "offsetFrameZ diameter 0.20 @{set2.xyz} @{set2.xyz + ").append( + Escape.escape(v03)).append("*0.9} color purple"); + draw1.append("\n}}\n"); - String cmds = draw1.toString(); - draw1 = null; - drawid = null; - return new Object[] { xyz, xyzOriginal, info1, cmds, ftrans, ipt, pa1, ax1, - new Integer(ang1) }; + cmds = draw1.toString(); + draw1 = null; + drawid = null; + } + if (trans == null) + ftrans = null; + if (isrotation) { + if (haveinversion) { + } else if (pitch1 == 0) { + } else { + // screw + trans = new Vector3f(ax1); + ptemp.set(trans); + uc.toFractional(ptemp); + ftrans = new Vector3f(ptemp); + } + if (haveinversion && pitch1 != 0) { + } + } + if (ismirrorplane) { + if (trans != null) { + } + ang1 = 0; + } + if (haveinversion) { + if (isinversion) { + pa1 = null; + ax1 = null; + trans = null; + ftrans = null; + } + } else if (istranslation) { + pa1 = null; + ax1 = null; + } + + // and display translation if still not {0 0 0} + if (ax1 != null) + ax1.normalize(); + return new Object[] { xyz, xyzOriginal, info1, cmds, ftrans, trans, ipt, + pa1, ax1, new Integer(ang1) }; } - private void drawLine(String id, float diameter, Point3f pt0, Point3f pt1, + private static void drawLine(StringBuffer s, String id, float diameter, Point3f pt0, Point3f pt1, String color) { - draw1.append(drawid).append(id).append(" diameter ").append(diameter) + s.append(id).append(" diameter ").append(diameter) .append(Escape.escape(pt0)).append(Escape.escape(pt1)) .append(" color ").append(color); } - private String fcoord(Tuple3f p) { + private static String fcoord(Tuple3f p) { return fc(p.x) + " " + fc(p.y) + " " + fc(p.z); } - private String fc(float x) { + private static String fc(float x) { float xabs = Math.abs(x); int x24 = (int) approx(xabs * 24); if (x24%8 != 0) Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-05 16:43:26 UTC (rev 11469) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-05 16:44:10 UTC (rev 11470) @@ -4,6 +4,8 @@ version=11.8.4_dev +# bug fix: symop() -- can now be used without "all." +# and returns list of information for symop(3) or symop("x,y,z") instead of implied atom 0 0 0 # bug fix: isosurface reading of contoured JVXL files defaults to "nomesh nofill" # ----------------------------------------------------------------------------- Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-09-05 16:43:26 UTC (rev 11469) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-09-05 16:44:10 UTC (rev 11470) @@ -652,26 +652,28 @@ case Token.substructure: return evaluateSubstructure(args); case Token.symop: - return evaluateSymop(args); + return evaluateSymop(args, op.tok == Token.propselector); } return false; } - private boolean evaluateSymop(ScriptVariable[] args) throws ScriptException { + private boolean evaluateSymop(ScriptVariable[] args, boolean haveBitSet) throws ScriptException { if (args.length == 0) return false; - ScriptVariable x1 = getX(); + ScriptVariable x1 = (haveBitSet ? getX() : null); if (isSyntaxCheck) return addX(new Point3f()); - if (x1.tok != Token.bitset) + if (x1 != null && x1.tok != Token.bitset) return false; + BitSet bs = (x1 == null ? viewer.getModelAtomBitSet(-1, false) : (BitSet) x1.value); String xyz = (args[0].tok == Token.string ? ScriptVariable.sValue(args[0]) : null); int iOp = (xyz == null ? ScriptVariable.iValue(args[0]) : 0); Point3f pt = (args.length > 1 ? ptValue(args[1]) : null); - if (args.length < 3) - return addX((Point3f) viewer.getSymmetryInfo((BitSet) x1.value, xyz, iOp, pt, null, Token.point)); - return addX((String) viewer.getSymmetryInfo((BitSet) x1.value, xyz, iOp, pt, - ScriptVariable.sValue(args[2]), Token.draw)); + if (args.length == 2) + return addX((Point3f) viewer.getSymmetryInfo(bs, xyz, iOp, pt, null, Token.point)); + String desc = (args.length == 1 ? "" : ScriptVariable.sValue(args[2])); + return addX(viewer.getSymmetryInfo(bs, xyz, iOp, pt, + desc, desc.length() == 0 ? Token.list : Token.draw)); } private boolean evaluateBin(ScriptVariable[] args) throws ScriptException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-05 17:23:04
|
Revision: 11474 http://jmol.svn.sourceforge.net/jmol/?rev=11474&view=rev Author: hansonr Date: 2009-09-05 17:22:47 +0000 (Sat, 05 Sep 2009) Log Message: ----------- version=11.8.4_dev # bug fix: symop() -- can now be used without "all." # and returns list of information for symop(3) or symop("x,y,z") instead of implied atom 0 0 0 # * xyz (Jones-Faithful calculated from matrix) # * xyzOriginal (Provided by operation) # * description ("C2 axis", for example) # * draw commands # * translation vector (fractional) # * translation vector (cartesian) # * inversion point # * axis point # * axis vector # * angle of rotation Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-09-05 17:22:32 UTC (rev 11473) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-09-05 17:22:47 UTC (rev 11474) @@ -2893,50 +2893,38 @@ } public Object getSymmetryInfo(BitSet bsAtoms, String xyz, int op, Point3f pt, String id, int type) { - Object ret; - switch (type) { - case Token.point: - ret = new Point3f(); - break; - case Token.array: - ret = new Object[]{}; - break; - case Token.list: - ret = new String[] {}; - break; - default: - ret = ""; - } int iModel = -1; if (bsAtoms == null) { iModel = viewer.getCurrentModelIndex(); if (iModel < 0) - return ret; + return ""; bsAtoms = getModelAtomBitSet(iModel, false); } int iAtom = BitSetUtil.firstSetBit(bsAtoms); if (iAtom < 0) - return ret; + return ""; iModel = atoms[iAtom].modelIndex; SymmetryInterface uc = getUnitCell(iModel); if (uc == null) - return ret; + return ""; if (xyz == null) { String[] ops = uc.getSymmetryOperations(); if (ops == null || op < 1 || op > ops.length) - return ret; + return ""; xyz = ops[op - 1 ]; } getSymTemp(); symTemp.setSpaceGroup(false); int iSym = symTemp.addSpaceGroupOperation("!" + xyz); if (iSym < 0) - return ret; + return ""; symTemp.setUnitCell(uc.getNotionalUnitCell()); pt = new Point3f(pt == null ? atoms[iAtom] : pt); if (type == Token.point) { uc.toFractional(pt); - Point3f sympt = (Point3f)ret; + if (Float.isNaN(pt.x)) + return ""; + Point3f sympt = new Point3f(); symTemp.newSpaceGroupPoint(iSym, pt, sympt, 0, 0, 0); symTemp.toCartesian(sympt); return sympt; Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-09-05 17:22:32 UTC (rev 11473) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-09-05 17:22:47 UTC (rev 11474) @@ -664,7 +664,7 @@ // time to get the description - String info1 = ""; + String info1 = "identity"; StringBuffer draw1 = new StringBuffer(); String drawid; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-09-05 17:22:32 UTC (rev 11473) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-09-05 17:22:47 UTC (rev 11474) @@ -11161,10 +11161,12 @@ } center = (i + 1 == statementLength ? null : centerParameter(++i)); // draw ID xxx symop [n or "x,-y,-z"] [optional {center}] + BitSet bsAtoms = (tokAt(i) == Token.bitset + || tokAt(i) == Token.expressionBegin ? expression(i) : null); i = iToken + 1; checkLength(iToken + 1); if (!isSyntaxCheck) - runScript((String) viewer.getSymmetryInfo(null, xyz, iSym, center, + runScript((String) viewer.getSymmetryInfo(bsAtoms, xyz, iSym, center, thisId, Token.draw)); return; case Token.frame: Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-09-05 17:22:32 UTC (rev 11473) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptMathProcessor.java 2009-09-05 17:22:47 UTC (rev 11474) @@ -665,15 +665,17 @@ return addX(new Point3f()); if (x1 != null && x1.tok != Token.bitset) return false; - BitSet bs = (x1 == null ? viewer.getModelAtomBitSet(-1, false) : (BitSet) x1.value); + BitSet bs = (x1 != null ? (BitSet) x1.value + : args.length > 2 && args[1].tok == Token.bitset ? (BitSet) args[1].value + : viewer.getModelAtomBitSet(-1, false)); String xyz = (args[0].tok == Token.string ? ScriptVariable.sValue(args[0]) : null); int iOp = (xyz == null ? ScriptVariable.iValue(args[0]) : 0); Point3f pt = (args.length > 1 ? ptValue(args[1]) : null); if (args.length == 2) - return addX((Point3f) viewer.getSymmetryInfo(bs, xyz, iOp, pt, null, Token.point)); - String desc = (args.length == 1 ? "" : ScriptVariable.sValue(args[2])); + return addX(viewer.getSymmetryInfo(bs, xyz, iOp, pt, null, Token.point)); + String desc = (args.length == 1 ? "array" : ScriptVariable.sValue(args[2])); return addX(viewer.getSymmetryInfo(bs, xyz, iOp, pt, - desc, desc.length() == 0 ? Token.list : Token.draw)); + desc, desc.equalsIgnoreCase("array") ? Token.list : Token.draw)); } private boolean evaluateBin(ScriptVariable[] args) throws ScriptException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-07 22:35:55
|
Revision: 11505 http://jmol.svn.sourceforge.net/jmol/?rev=11505&view=rev Author: hansonr Date: 2009-09-07 22:35:48 +0000 (Mon, 07 Sep 2009) Log Message: ----------- version=11.8.5_dev # bug fix: (potential) draw symop could have incorrect glide Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-09-07 20:13:30 UTC (rev 11504) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2009-09-07 22:35:48 UTC (rev 11505) @@ -663,16 +663,18 @@ ptemp.set(trans); uc.toFractional(ptemp); - ftrans.set(ptemp); - if (approx(ftrans.x) == 1) { - trans.x = ftrans.x = 0; + if (approx(ptemp.x) == 1) { + ptemp.x = 0; } - if (approx(ftrans.y) == 1) { - trans.y = ftrans.y = 0; + if (approx(ptemp.y) == 1) { + ptemp.y = 0; } - if (approx(ftrans.z) == 1) { - trans.z = ftrans.z = 0; + if (approx(ptemp.z) == 1) { + ptemp.z = 0; } + ftrans.set(ptemp); + uc.toCartesian(ptemp); + trans.set(ptemp); } // fix angle based on direction of axis Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-07 20:13:30 UTC (rev 11504) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-07 22:35:48 UTC (rev 11505) @@ -4,6 +4,7 @@ version=11.8.5_dev +# bug fix: (potential) draw symop could have incorrect glide # ----------------------------------------------------------------------------- #version=11.8.4 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-08 05:09:54
|
Revision: 11507 http://jmol.svn.sourceforge.net/jmol/?rev=11507&view=rev Author: hansonr Date: 2009-09-08 05:09:43 +0000 (Tue, 08 Sep 2009) Log Message: ----------- version=11.8.5_dev # bug fix: isosurface not retrieving exact reference for jvxl files in state Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2009-09-07 22:57:20 UTC (rev 11506) +++ branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2009-09-08 05:09:43 UTC (rev 11507) @@ -327,10 +327,15 @@ if ("init" == propertyName) { initializeIsosurface(); - if (value instanceof Parameters) + if (value instanceof Parameters) { params = (Parameters) value; - else + } else { params.script = (String) value; + if (params.script.indexOf(";#") >= 0) { + // crude hack for ScriptEvaluator messing up + params.script = TextFormat.simpleReplace(params.script, ";#", "; #"); + } + } return false; //more to do } Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-07 22:57:20 UTC (rev 11506) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-08 05:09:43 UTC (rev 11507) @@ -4,6 +4,7 @@ version=11.8.5_dev +# bug fix: isosurface not retrieving exact reference for jvxl files in state # bug fix: (potential) draw symop could have incorrect glide # ----------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-19 20:56:39
|
Revision: 11531 http://jmol.svn.sourceforge.net/jmol/?rev=11531&view=rev Author: hansonr Date: 2009-09-19 20:56:27 +0000 (Sat, 19 Sep 2009) Log Message: ----------- critical bug fix: lcaoCartoon broken Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2009-09-17 18:56:38 UTC (rev 11530) +++ branches/v11_8/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2009-09-19 20:56:27 UTC (rev 11531) @@ -331,7 +331,7 @@ params = (Parameters) value; } else { params.script = (String) value; - if (params.script.indexOf(";#") >= 0) { + if (params.script != null && params.script.indexOf(";#") >= 0) { // crude hack for ScriptEvaluator messing up params.script = TextFormat.simpleReplace(params.script, ";#", "; #"); } Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-17 18:56:38 UTC (rev 11530) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-19 20:56:27 UTC (rev 11531) @@ -2,8 +2,10 @@ # NOTE: Generally only bug fixes should be entered here. # NOTE: New features should be introduced in the trunk version 11.9.x -version=11.8.6_dev +version=11.8.6 +# bug fix: lcaocartoon not working + # ----------------------------------------------------------------------------- #version=11.8.5 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-19 23:04:08
|
Revision: 11532 http://jmol.svn.sourceforge.net/jmol/?rev=11532&view=rev Author: hansonr Date: 2009-09-19 23:03:55 +0000 (Sat, 19 Sep 2009) Log Message: ----------- version=11.8.6 # bug fix: menu item for style does not respect bondMode Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties branches/v11_8/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java Modified: branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java 2009-09-19 20:56:27 UTC (rev 11531) +++ branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java 2009-09-19 23:03:55 UTC (rev 11532) @@ -316,12 +316,12 @@ { "bottom", Box( "moveto 1.0 front;moveto 2.0 bottom;delay 1" ) }, { "back", Box( "moveto 1.0 front;moveto 2.0 back;delay 1" ) }, - { "renderCpkSpacefill", "restrict not selected;select not selected;spacefill 100%;color cpk" }, - { "renderBallAndStick", "restrict not selected;select not selected;spacefill 20%;wireframe 0.15;color cpk" }, - { "renderSticks", "restrict not selected;select not selected;wireframe 0.3;color cpk" }, - { "renderWireframe", "restrict not selected;select not selected;wireframe on;color cpk" }, - { "PDBrenderCartoonsOnly", "restrict not selected;select not selected;cartoons on;color structure" }, - { "PDBrenderTraceOnly", "restrict not selected;select not selected;trace on;color structure" }, + { "renderCpkSpacefill", "restrict bonds not selected;select not selected;spacefill 100%;color cpk" }, + { "renderBallAndStick", "restrict bonds not selected;select not selected;spacefill 20%;wireframe 0.15;color cpk" }, + { "renderSticks", "restrict bonds not selected;select not selected;wireframe 0.3;color cpk" }, + { "renderWireframe", "restrict bonds not selected;select not selected;wireframe on;color cpk" }, + { "PDBrenderCartoonsOnly", "restrict bonds not selected;select not selected;cartoons on;color structure" }, + { "PDBrenderTraceOnly", "restrict bonds not selected;select not selected;trace on;color structure" }, { "atomNone", "cpk off" }, { "atom15", "cpk 15%" }, Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-19 20:56:27 UTC (rev 11531) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-19 23:03:55 UTC (rev 11532) @@ -4,6 +4,7 @@ version=11.8.6 +# bug fix: menu item for style does not respect bondMode # bug fix: lcaocartoon not working # ----------------------------------------------------------------------------- Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java 2009-09-19 20:56:27 UTC (rev 11531) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptCompilationTokenParser.java 2009-09-19 23:03:55 UTC (rev 11532) @@ -134,7 +134,12 @@ ltokenPostfix = new Vector(); itokenInfix = 0; Token tokenBegin = null; - for (int i = 0; i < firstToken && addNextToken(); i++) { + if (tokCommand == Token.restrict && tokAt(1) == Token.bonds) { + addNextToken(); + addNextToken(); + } else { + for (int i = 0; i < firstToken && addNextToken(); i++) { + } } while (moreTokens()) { if (isEmbeddedExpression) { Modified: branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-09-19 20:56:27 UTC (rev 11531) +++ branches/v11_8/Jmol/src/org/jmol/viewer/ScriptEvaluator.java 2009-09-19 23:03:55 UTC (rev 11532) @@ -3847,7 +3847,7 @@ int mad = 1; switch (getToken(1).tok) { case Token.only: - restrictSelected(false); + restrictSelected(false, false); break; case Token.on: break; @@ -4434,7 +4434,7 @@ minimize(); break; case Token.select: - select(); + select(1); break; case Token.translate: translate(); @@ -7003,13 +7003,14 @@ } private void restrict() throws ScriptException { - select(); + boolean isBond = (tokAt(1) == Token.bonds); + select(isBond ? 2 : 1); if (isSyntaxCheck) return; - restrictSelected(true); + restrictSelected(isBond, true); } - private void restrictSelected(boolean doInvert) { + private void restrictSelected(boolean isBond, boolean doInvert) { BitSet bsSelected = BitSetUtil.copy(viewer.getSelectionSet()); if (doInvert) viewer.invertSelection(); @@ -7023,7 +7024,9 @@ } BitSetUtil.andNot(bsSelected, viewer.getDeletedAtoms()); boolean bondmode = viewer.getBondSelectionModeOr(); - setBooleanProperty("bondModeOr", true); + + if (!isBond) + setBooleanProperty("bondModeOr", true); setShapeSize(JmolConstants.SHAPE_STICKS, 0); // also need to turn off backbones, ribbons, strands, cartoons @@ -7033,7 +7036,8 @@ setShapeProperty(JmolConstants.SHAPE_POLYHEDRA, "delete", null); viewer.setLabel(null); - setBooleanProperty("bondModeOr", bondmode); + if (!isBond) + setBooleanProperty("bondModeOr", bondmode); viewer.setSelectionSet(bsSelected); } @@ -7590,7 +7594,7 @@ } } - private void select() throws ScriptException { + private void select(int i) throws ScriptException { // NOTE this is called by restrict() if (statementLength == 1) { viewer.select(null, tQuiet || scriptLevel > scriptReportingLevel); @@ -7627,7 +7631,7 @@ checkLength(++iToken); bs = (BitSet) v; } else { - bs = expression(1); + bs = expression(i); } if (isSyntaxCheck) return; @@ -8112,7 +8116,7 @@ int tok = tokAt(1); switch (tok) { case Token.only: - restrictSelected(false); + restrictSelected(false, false); code = defOn; break; case Token.on: @@ -8631,7 +8635,7 @@ int ipt = 1; switch (getToken(1).tok) { case Token.only: - restrictSelected(false); + restrictSelected(false, false); code = 1; break; case Token.on: @@ -8690,7 +8694,7 @@ case Token.only: if (isSyntaxCheck) return; - restrictSelected(false); + restrictSelected(false, false); mad = -1; break; case Token.on: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-20 18:39:07
|
Revision: 11550 http://jmol.svn.sourceforge.net/jmol/?rev=11550&view=rev Author: hansonr Date: 2009-09-20 18:39:00 +0000 (Sun, 20 Sep 2009) Log Message: ----------- version=11.8.6 # bug fix: load trajectory not working properly Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/modelset/ModelSet.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelSet.java 2009-09-20 18:04:23 UTC (rev 11549) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelSet.java 2009-09-20 18:39:00 UTC (rev 11550) @@ -195,7 +195,7 @@ models[baseModel].selectedTrajectory = modelIndex; Point3f[] trajectory = (Point3f[]) trajectorySteps.get(modelIndex); BitSet bs = new BitSet(); - int iMax = iFirst + getAtomCountInModel(modelIndex); + int iMax = iFirst + getAtomCountInModel(baseModel); for (int pt = 0, i = iFirst; i < iMax && pt < trajectory.length && trajectory[pt]!= null; i++) { atoms[i].setFractionalCoord(trajectory[pt++]); atoms[i].modelIndex = (short) modelIndex; Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-20 18:04:23 UTC (rev 11549) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-20 18:39:00 UTC (rev 11550) @@ -4,6 +4,7 @@ version=11.8.6 +# bug fix: load trajectory not working properly # bug fix: animation/spin incompatibility problem # bug fix: initialize does not reset antialiasDisplay or set animation off # bug fix: getProperty("menu") does not work until a menu has been called up by user This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-20 19:23:01
|
Revision: 11554 http://jmol.svn.sourceforge.net/jmol/?rev=11554&view=rev Author: hansonr Date: 2009-09-20 19:22:55 +0000 (Sun, 20 Sep 2009) Log Message: ----------- version=11.8.6 # bug fix: syncScript broken Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/applet/JmolAppletRegistry.java branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java Modified: branches/v11_8/Jmol/src/org/jmol/applet/JmolAppletRegistry.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/applet/JmolAppletRegistry.java 2009-09-20 19:17:44 UTC (rev 11553) +++ branches/v11_8/Jmol/src/org/jmol/applet/JmolAppletRegistry.java 2009-09-20 19:22:55 UTC (rev 11554) @@ -89,29 +89,31 @@ } synchronized public static void findApplets(String appletName, - String mySyncId, - String excludeName, Vector apps) { - if (appletName.indexOf(",") >= 0) { + String mySyncId, + String excludeName, Vector apps) { + if (appletName != null && appletName.indexOf(",") >= 0) { String[] names = TextFormat.split(appletName, ","); for (int i = 0; i < names.length; i++) findApplets(names[i], mySyncId, excludeName, apps); return; } String ext = "__" + mySyncId + "__"; - if (appletName.equals("*") || appletName.equals(">")) { + if (appletName == null || appletName.equals("*") || appletName.equals(">")) { Enumeration keys = htRegistry.keys(); while (keys.hasMoreElements()) { appletName = (String) keys.nextElement(); - if (!appletName.equals(excludeName) && appletName.indexOf(ext) > 0) + if (!appletName.equals(excludeName) && appletName.indexOf(ext) > 0) { apps.addElement(appletName); + } } - } else { - if (appletName.indexOf("__") < 0) - appletName += ext; - if (!htRegistry.containsKey(appletName)) - appletName = "jmolApplet" + appletName; - if (!appletName.equals(excludeName) && htRegistry.containsKey(appletName)) - apps.addElement(appletName); + return; } + if (appletName.indexOf("__") < 0) + appletName += ext; + if (!htRegistry.containsKey(appletName)) + appletName = "jmolApplet" + appletName; + if (!appletName.equals(excludeName) && htRegistry.containsKey(appletName)) { + apps.addElement(appletName); + } } } Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java 2009-09-20 19:17:44 UTC (rev 11553) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Viewer.java 2009-09-20 19:22:55 UTC (rev 11554) @@ -3700,7 +3700,7 @@ // to pass it back to us or any other applet. if (allowSyncScript && statusManager.syncingScripts && strScript.indexOf("#NOSYNC;") < 0) - syncScript(strScript + " #NOSYNC;", "*"); + syncScript(strScript + " #NOSYNC;", null); if (eval.isExecutionPaused() && strScript.charAt(0) != '!') strScript = '!' + TextFormat.trim(strScript, "\n\r\t "); boolean isInterrupt = (strScript.length() > 0 && strScript.charAt(0) == '!'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-20 22:25:27
|
Revision: 11556 http://jmol.svn.sourceforge.net/jmol/?rev=11556&view=rev Author: hansonr Date: 2009-09-20 22:25:21 +0000 (Sun, 20 Sep 2009) Log Message: ----------- version=11.8.6 # bug fix: context menu View... broken when boundbox or unitcell are on Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java 2009-09-20 19:23:11 UTC (rev 11555) +++ branches/v11_8/Jmol/src/org/jmol/popup/PopupResourceBundle.java 2009-09-20 22:25:21 UTC (rev 11556) @@ -67,8 +67,9 @@ private Properties words = new Properties(); private static String Box(String cmd) { - return "if not(showBoundBox);if not(showUnitcell);boundbox on;"+cmd+";boundbox off;else;"+cmd+";endif;endif;"; + return "if (showBoundBox or showUnitcell) {"+cmd+"} else {boundbox on;"+cmd+";boundbox off}"; } + private static String[][] menuContents = { { "@COLOR", "black white red orange yellow green cyan blue indigo violet"}, Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-20 19:23:11 UTC (rev 11555) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-20 22:25:21 UTC (rev 11556) @@ -4,6 +4,7 @@ version=11.8.6 +# bug fix: context menu View... broken when boundbox or unitcell are on # bug fix: syncScript broken # bug fix: load trajectory not working properly # bug fix: animation/spin incompatibility problem This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-09-24 03:25:48
|
Revision: 11566 http://jmol.svn.sourceforge.net/jmol/?rev=11566&view=rev Author: hansonr Date: 2009-09-24 03:25:41 +0000 (Thu, 24 Sep 2009) Log Message: ----------- version=11.8.7_dev # bug fix: Hall symbol translation generates incorrect Jones-Faithful operation (missing translation) # -- Thank you, Sarah Mattler, WUSTL! Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java 2009-09-24 03:25:06 UTC (rev 11565) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/HallInfo.java 2009-09-24 03:25:41 UTC (rev 11566) @@ -219,7 +219,7 @@ } String getXYZ(boolean allPositive) { - return SymmetryOperation.getXYZFromMatrix(seitzMatrix12ths, false, allPositive, true); + return SymmetryOperation.getXYZFromMatrix(seitzMatrix12ths, true, allPositive, true); } private void getRotationInfo(String code, int prevOrder, char prevAxisType) { Modified: branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java 2009-09-24 03:25:06 UTC (rev 11565) +++ branches/v11_8/Jmol/src/org/jmol/symmetry/SpaceGroup.java 2009-09-24 03:25:41 UTC (rev 11566) @@ -667,7 +667,7 @@ newOps[0].set(newOps[j]); for (int k = 0; k < nOps; k++) { operation.mul(newOps[j], operations[k]); - addSymmetry(SymmetryOperation.getXYZFromMatrix(operation, false, true, true), + addSymmetry(SymmetryOperation.getXYZFromMatrix(operation, true, true, true), operation); } } Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-24 03:25:06 UTC (rev 11565) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-09-24 03:25:41 UTC (rev 11566) @@ -4,6 +4,9 @@ version=11.8.7_dev +# bug fix: Hall symbol translation generates incorrect Jones-Faithful operation (missing translation) +# -- Thank you, Sarah Mattler, WUSTL! + # ----------------------------------------------------------------------------- #version=11.8.6 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-10-07 21:56:52
|
Revision: 11582 http://jmol.svn.sourceforge.net/jmol/?rev=11582&view=rev Author: hansonr Date: 2009-10-07 21:56:44 +0000 (Wed, 07 Oct 2009) Log Message: ----------- version=11.8.8_dev # bug fix: unitcell offset {1 1 1}; select UNITCELL Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-10-01 18:26:13 UTC (rev 11581) +++ branches/v11_8/Jmol/src/org/jmol/modelset/ModelCollection.java 2009-10-07 21:56:44 UTC (rev 11582) @@ -1858,10 +1858,7 @@ SymmetryInterface unitcell = viewer.getCurrentUnitCell(); if (unitcell == null) return bs; - Point3f cell = new Point3f(unitcell.getFractionalOffset()); - cell.x += 1; - cell.y += 1; - cell.z += 1; + Point3f cell = new Point3f(1,1,1); for (int i = atomCount; --i >= 0;) if (isInLatticeCell(i, cell)) bs.set(i); Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-10-01 18:26:13 UTC (rev 11581) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-10-07 21:56:44 UTC (rev 11582) @@ -4,6 +4,8 @@ version=11.8.8_dev +# bug fix: unitcell offset {1 1 1}; select UNITCELL + # ----------------------------------------------------------------------------- #version=11.8.7 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-10-13 12:59:56
|
Revision: 11587 http://jmol.svn.sourceforge.net/jmol/?rev=11587&view=rev Author: hansonr Date: 2009-10-13 12:59:47 +0000 (Tue, 13 Oct 2009) Log Message: ----------- version=11.8.8_dev # bug fix: Gaussian 09 LOG file reader upgrade for MOs Modified Paths: -------------- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/GaussianReader.java branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/GaussianReader.java =================================================================== --- branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/GaussianReader.java 2009-10-13 12:58:43 UTC (rev 11586) +++ branches/v11_8/Jmol/src/org/jmol/adapter/readers/more/GaussianReader.java 2009-10-13 12:59:47 UTC (rev 11587) @@ -38,7 +38,7 @@ import org.jmol.util.Logger; /** - * Reader for Gaussian 94/98/03 output files. + * Reader for Gaussian 94/98/03/09 output files. * * 4/11/2009 -- hansonr -- added NBO support as extension of MOReader * @@ -187,7 +187,7 @@ calculationType = line.substring(31).trim(); return true; } - if (line.startsWith(" AO basis set:")) { + if (line.startsWith(" AO basis set")) { readBasis(); return true; } @@ -220,18 +220,29 @@ * @throws Exception If an error occurs **/ private void readSCFDone() throws Exception { - String tokens[] = getTokens(line,11); + String tokens[] = getTokens(line, 11); + if (tokens.length < 4) + return; energyKey = tokens[0]; - energyString = tokens[2]+" "+tokens[3]; + energyString = tokens[2] + " " + tokens[3]; // now set the names for the last equivalentAtomSets - atomSetCollection.setAtomSetNames(energyKey+" = " + energyString, equivalentAtomSets); + atomSetCollection.setAtomSetNames(energyKey + " = " + energyString, + equivalentAtomSets); // also set the properties for them - atomSetCollection.setAtomSetProperties(energyKey, energyString, equivalentAtomSets); + atomSetCollection.setAtomSetProperties(energyKey, energyString, + equivalentAtomSets); tokens = getTokens(readLine()); - atomSetCollection.setAtomSetProperties(tokens[0], tokens[2], equivalentAtomSets); - atomSetCollection.setAtomSetProperties(tokens[3], tokens[5], equivalentAtomSets); - tokens = getTokens(readLine()); - atomSetCollection.setAtomSetProperties(tokens[0], tokens[2], equivalentAtomSets); + if (tokens.length > 2) { + atomSetCollection.setAtomSetProperties(tokens[0], tokens[2], + equivalentAtomSets); + if (tokens.length > 5) + atomSetCollection.setAtomSetProperties(tokens[3], tokens[5], + equivalentAtomSets); + tokens = getTokens(readLine()); + } + if (tokens.length > 2) + atomSetCollection.setAtomSetProperties(tokens[0], tokens[2], + equivalentAtomSets); } /** Modified: branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-10-13 12:58:43 UTC (rev 11586) +++ branches/v11_8/Jmol/src/org/jmol/viewer/Jmol.properties 2009-10-13 12:59:47 UTC (rev 11587) @@ -4,6 +4,7 @@ version=11.8.8_dev +# bug fix: Gaussian 09 LOG file reader upgrade for MOs # bug fix: unitcell offset {1 1 1}; select UNITCELL # ----------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |