From: Miguel <mig...@us...> - 2005-09-26 14:36:40
|
Update of /cvsroot/jmol/Jmol/src/org/jmol/viewer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23950/src/org/jmol/viewer Modified Files: JmolConstants.java SasurfaceRenderer.java Log Message: formal charge gradients are starting to crawl Index: JmolConstants.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/jmol/viewer/JmolConstants.java,v retrieving revision 1.100 retrieving revision 1.101 diff -u -r1.100 -r1.101 --- JmolConstants.java 26 Sep 2005 13:08:16 -0000 1.100 +++ JmolConstants.java 26 Sep 2005 14:36:24 -0000 1.101 @@ -1496,6 +1496,9 @@ 0xFF0000FF, // 7 }; + public final static int FORMAL_CHARGE_INDEX_WHITE = 4; + public final static int FORMAL_CHARGE_INDEX_MAX = argbsFormalCharge.length; + public final static short PARTIAL_CHARGE_COLIX_RED = (short)(FORMAL_CHARGE_COLIX_BLUE + 1); public final static short PARTIAL_CHARGE_COLIX_WHITE = Index: SasurfaceRenderer.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/jmol/viewer/SasurfaceRenderer.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- SasurfaceRenderer.java 25 Sep 2005 15:18:34 -0000 1.30 +++ SasurfaceRenderer.java 26 Sep 2005 14:36:24 -0000 1.31 @@ -51,12 +51,25 @@ Point3i[] probeScreens; int maxVertexCount; + short formalChargeColixWhite; void initRenderer() { maxVertexCount = g3d.getGeodesicVertexCount(Sasurface.MAX_GEODESIC_RENDERING_LEVEL); sasCache = new SasCache(viewer, 6, maxVertexCount); + formalChargeColixWhite = + g3d.getChangableColix(JmolConstants.FORMAL_CHARGE_COLIX_WHITE, + JmolConstants. + argbsFormalCharge[JmolConstants. + FORMAL_CHARGE_INDEX_WHITE]); + System.out.println(" formalChargeColixWhite=" + + Integer.toHexString(formalChargeColixWhite)); + + // hack ... this goes somewhere else + for (int i = JmolConstants.argbsFormalCharge.length; --i >= 0; ) + g3d.getChangableColix((short)(JmolConstants.FORMAL_CHARGE_COLIX_RED + i), + JmolConstants.argbsFormalCharge[i]); } void render() { @@ -456,6 +469,19 @@ torusColixes[i] = colixA; return; } + if (colixA < 0 && colixB < 0) { + short unmaskedA = Graphics3D.getChangableColixIndex(colixA); + short unmaskedB = Graphics3D.getChangableColixIndex(colixB); + if (unmaskedA >= JmolConstants.FORMAL_CHARGE_COLIX_RED && + unmaskedA <= JmolConstants.FORMAL_CHARGE_COLIX_BLUE && + unmaskedB >= JmolConstants.FORMAL_CHARGE_COLIX_RED && + unmaskedB <= JmolConstants.FORMAL_CHARGE_COLIX_BLUE) { + prepareFormalChargeTorusColixes(colixA, unmaskedA, colixB, unmaskedB, + outerPointCount); + return; + } + } + int halfRoundedUp = (outerPointCount + 1) / 2; // this will get overwritten if outerPointCount is even torusColixes[outerPointCount / 2] = colixA; @@ -464,4 +490,26 @@ torusColixes[i + halfRoundedUp] = colixB; } } + + void prepareFormalChargeTorusColixes(short colixA, short unmaskedA, + short colixB, short unmaskedB, + int outerPointCount) { + int delta = unmaskedB - unmaskedA; + int denominator = outerPointCount - 1; + boolean crossesZero = + ((unmaskedA > JmolConstants.FORMAL_CHARGE_COLIX_WHITE && + unmaskedB < JmolConstants.FORMAL_CHARGE_COLIX_WHITE) || + (unmaskedA < JmolConstants.FORMAL_CHARGE_COLIX_WHITE && + unmaskedB > JmolConstants.FORMAL_CHARGE_COLIX_WHITE)); + if (! crossesZero) { + for (int i = 0; i < outerPointCount; ++i) { + // use colixA because the translucent bit may be set + torusColixes[i] = (short)(colixA + (i * delta / denominator)); + } + return; + } + for (int i = outerPointCount; --i >= 0; ) { + torusColixes[i] = Graphics3D.WHITE; + } + } } |