From: Michael T H. <mic...@us...> - 2003-10-29 23:27:10
|
Update of /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/g3d In directory sc8-pr-cvs1:/tmp/cvs-serv24327/src/org/openscience/jmol/viewer/g3d Modified Files: Graphics3D.java Hermite3D.java Log Message: added classes PdbChain & PdbResidue + reimplemented Trace Index: Graphics3D.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/g3d/Graphics3D.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- Graphics3D.java 26 Oct 2003 14:15:36 -0000 1.39 +++ Graphics3D.java 29 Oct 2003 23:27:06 -0000 1.40 @@ -512,10 +512,10 @@ } - public void fillHermite(short colix, int diameter1, int diameter2, + public void fillHermite(short colix, int diameterBeg, int diameterMid, int diameterEnd, int x0, int y0, int z0, int x1, int y1, int z1, int x2, int y2, int z2, int x3, int y3, int z3) { - hermite3d.render(colix, diameter1, diameter2, + hermite3d.render(colix, diameterBeg, diameterMid, diameterEnd, x0, y0, z0, x1, y1, z1, x2, y2, z2, x3, y3, z3); } Index: Hermite3D.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/g3d/Hermite3D.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Hermite3D.java 13 Oct 2003 02:29:05 -0000 1.4 +++ Hermite3D.java 29 Oct 2003 23:27:06 -0000 1.5 @@ -46,16 +46,14 @@ final int[] xA = new int[16]; final int[] yA = new int[16]; final int[] zA = new int[16]; - final int[] dA = new int[16]; final float[] sA = new float[16]; final int[] xB = new int[16]; final int[] yB = new int[16]; final int[] zB = new int[16]; - final int[] dB = new int[16]; final float[] sB = new float[16]; int sp; - public void render(short colix, int diameter1, int diameter2, + public void render(short colix, int diameterBeg, int diameterMid, int diameterEnd, int x0, int y0, int z0, int x1, int y1, int z1, int x2, int y2, int z2, int x3, int y3, int z3) { g3d.setColix(colix); @@ -66,12 +64,13 @@ int yT2 = (y3 - y1) * 7 / 8; int zT2 = (z3 - z1) * 7 / 8; - sA[0] = 0; dA[0] = diameter1; + sA[0] = 0; xA[0] = x1; yA[0] = y1; zA[0] = z1; - sB[0] = 1; dB[0] = diameter2; + sB[0] = 1; xB[0] = x2; yB[0] = y2; zB[0] = z2; - int dDiameter = diameter2 - diameter1; sp = 0; + int dDiameterFirstHalf = 2 * (diameterMid - diameterBeg); + int dDiameterSecondHalf = 2 * (diameterEnd - diameterMid); do { int dx = xB[sp] - xA[sp]; int dy = yB[sp] - yA[sp]; @@ -80,38 +79,37 @@ // mth 2003 10 13 // I tried drawing short cylinder segments here, // but drawing spheres was faster - g3d.fillSphereCentered(colix, dA[sp], xA[sp], yA[sp], zA[sp]); + float s = sA[sp]; + int d =(s < 0.5 + ? diameterBeg + (int)(dDiameterFirstHalf * s) + : diameterMid + (int)(dDiameterSecondHalf * (s - 0.5))); + g3d.fillSphereCentered(colix, d, xA[sp], yA[sp], zA[sp]); --sp; } else { - float s = (sA[sp] + sB[sp]) / 2; - float s2 = s * s; - float s3 = s2 * s; - float h1 = 2*s3 - 3*s2 + 1; - float h2 = -2*s3 + 3*s2; - float h3 = s3 - 2*s2 + s; - float h4 = s3 - s2; + double s = (sA[sp] + sB[sp]) / 2; + double s2 = s * s; + double s3 = s2 * s; + double h1 = 2*s3 - 3*s2 + 1; + double h2 = -2*s3 + 3*s2; + double h3 = s3 - 2*s2 + s; + double h4 = s3 - s2; int x = (int) (h1*x1 + h2*x2 + h3*xT1 + h4*xT2); int y = (int) (h1*y1 + h2*y2 + h3*yT1 + h4*yT2); int z = (int) (h1*z1 + h2*z2 + h3*zT1 + h4*zT2); - int d = diameter1 + (int)(dDiameter * s); xB[sp+1] = xB[sp]; yB[sp+1] = yB[sp]; zB[sp+1] = zB[sp]; sB[sp+1] = sB[sp]; - dB[sp+1] = dB[sp]; xB[sp] = x; yB[sp] = y; zB[sp] = z; - sB[sp] = s; - dB[sp] = d; + sB[sp] = (float)s; ++sp; xA[sp] = x; yA[sp] = y; zA[sp] = z; - sA[sp] = s; - dA[sp] = d; + sA[sp] = (float)s; } } while (sp >= 0); - g3d.fillSphereCentered(colix, diameter2, x2, y2, z2); } } |