Revision: 18395 http://sourceforge.net/p/jmol/code/18395 Author: hansonr Date: 2013-07-01 22:25:55 +0000 (Mon, 01 Jul 2013) Log Message: ----------- removing iso sort for now
Modified Paths: -------------- trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java trunk/Jmol/src/org/jmol/util/Tensor.java Modified: trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java 2013-07-01 20:25:10 UTC (rev 18394) +++ trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java 2013-07-01 22:25:55 UTC (rev 18395) @@ -84,6 +84,8 @@ private final P3i s0 = new P3i(); private final P3i s1 = new P3i(); private final P3i s2 = new P3i(); + + private float maxLength; private final static float toRadians = (float) Math.PI/180f; private final static float[] cossin = new float[36]; @@ -188,10 +190,14 @@ private void renderOne(Ellipsoid e) { center = e.center; + maxLength = 0; for (int i = 3; --i >= 0;) { - factoredLengths[i] = e.getLength(i); - if (factoredLengths[i] < 0.02f) - factoredLengths[i] = 0.02f; // for extremely flat ellipsoids, we need at least some length + float f = e.getLength(i); + if (f < 0.02f) + f = 0.02f; // for extremely flat ellipsoids, we need at least some length + if (f > maxLength) + maxLength = f; + factoredLengths[i] = f; } axes = e.tensor.eigenVectors; setMatrices(); @@ -292,7 +298,7 @@ Math.round (s0.y + pt1.y * perspectiveFactor * 1.05f), Math.round(pt1.z * 1.05f + s0.z)); } dx = 2 + (int) viewer.scaleToScreen(s0.z, - Math.round((Float.isNaN(factoredLengths[0]) ? 1.0f : factoredLengths[0]) * 1000)); + Math.round((Float.isNaN(maxLength) ? 1.0f : maxLength) * 1000)); } private void renderBall() { Modified: trunk/Jmol/src/org/jmol/util/Tensor.java =================================================================== --- trunk/Jmol/src/org/jmol/util/Tensor.java 2013-07-01 20:25:10 UTC (rev 18394) +++ trunk/Jmol/src/org/jmol/util/Tensor.java 2013-07-01 22:25:55 UTC (rev 18395) @@ -104,6 +104,7 @@ public boolean forThermalEllipsoid; public int eigenSignMask = 7; // signs of eigenvalues; bits 2,1,0 set to 1 if > 0 private float typeFactor = 1; // an ellipsoid scaling factor depending upon type + private boolean sortIso; // added only after passing // the tensor to ModelLoader: @@ -125,7 +126,7 @@ switch ((";............." + ";eigenvalues.." + ";eigenvectors." + ";asymmetric..." + ";symmetric...." + ";trace........" + ";haeberlen...." + ";eulerzyz....." + ";eulerzxz....." - + ";quaternion..." + ";indices......" + ";type.........") + + ";quaternion..." + ";indices......" + ";string......." + ";type.........") .indexOf(infoType) / 14) { case 1: return eigenValues; @@ -169,6 +170,8 @@ case 10: // return new int[] { modelIndex, atomIndex1, atomIndex2 }; case 11: + return this.toString(); + case 12: return type; default: return null; @@ -294,8 +297,9 @@ || Math.abs(t.eigenVectors[1].dot(t.eigenVectors[2])) > 0.0001f || Math.abs(t.eigenVectors[2].dot(t.eigenVectors[0])) > 0.0001f) return null; - sortAndNormalize(t.eigenVectors, t.eigenValues); - return t.setType("other"); + t.setType("other"); + t.sortAndNormalize(); + return t; } /** @@ -319,9 +323,9 @@ mat[0][2] = mat[2][0] = coefs[4] / 2; //XZ mat[1][2] = mat[2][1] = coefs[5] / 2; //YZ Eigen.getUnitVectors(mat, t.eigenVectors, t.eigenValues); - sortAndNormalize(t.eigenVectors, t.eigenValues); - t.typeFactor = ADP_FACTOR; - return t.setType("adp"); + t.setType("adp"); + t.sortAndNormalize(); + return t; } /** @@ -375,8 +379,8 @@ t.eigenVectors = vectors; for (int i = 0; i < 3; i++) t.eigenVectors[i].normalize(); - sortAndNormalize(t.eigenVectors, t.eigenValues); t.setType(type); + t.sortAndNormalize(); t.eigenSignMask = (t.eigenValues[0] >= 0 ? 1 : 0) + (t.eigenValues[1] >= 0 ? 2 : 0) + (t.eigenValues[2] >= 0 ? 4 : 0); return t; @@ -393,6 +397,7 @@ isIsotropic = false; altType = null; typeFactor = 1; + sortIso = false; switch (iType = getType(type)) { case TYPE_ISO: @@ -427,28 +432,29 @@ } } - private static int[] sortOrder = { 1, 0, 2 }; + private static int[] isoOrder = { 1, 0, 2 }; /** - * sorts EigenVectors by + * Understand that sorting EigenVectors by * * |sigma_3 - sigma_iso| >= |sigma_1 - sigma_iso| >= |sigma_2 - sigma_iso| * + * will result sigma_3 < sigma_1 sometimes, and then truncated ellipsoids * - * @param eigenVectors - * @param eigenValues + * */ - private static void sortAndNormalize(V3[] eigenVectors, float[] eigenValues) { + private void sortAndNormalize() { // first sorted 3 2 1, then 1 and 2 are switched using the sortOrder above. Object[][] o = new Object[][] { - new Object[] { eigenVectors[0], Float.valueOf(eigenValues[0]) }, - new Object[] { eigenVectors[1], Float.valueOf(eigenValues[1]) }, - new Object[] { eigenVectors[2], Float.valueOf(eigenValues[2]) } }; - float sigmaIso = (eigenValues[0] + eigenValues[1] + eigenValues[2]) / 3f; + new Object[] { V3.newV(eigenVectors[0]), Float.valueOf(eigenValues[0]) }, + new Object[] { V3.newV(eigenVectors[1]), Float.valueOf(eigenValues[1]) }, + new Object[] { V3.newV(eigenVectors[2]), Float.valueOf(eigenValues[2]) } }; + float sigmaIso = (sortIso ? (eigenValues[0] + eigenValues[1] + eigenValues[2]) / 3f : 0); Arrays.sort(o, getTensorSort(sigmaIso)); for (int i = 0; i < 3; i++) { - eigenValues[i] = ((Float) o[sortOrder[i]][1]).floatValue(); - eigenVectors[i] = (V3) o[sortOrder[i]][0]; + int pt = (sortIso ? isoOrder[i] : i); + eigenValues[i] = ((Float) o[pt][1]).floatValue(); + eigenVectors[i] = (V3) o[pt][0]; eigenVectors[i].normalize(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits