From: Miguel <mig...@us...> - 2005-05-17 00:55:36
|
Update of /cvsroot/jmol/Jmol/src/org/jmol/viewer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6247/src/org/jmol/viewer Modified Files: Surface.java SurfaceRenderer.java Log Message: more work on surfaces Index: Surface.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/jmol/viewer/Surface.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- Surface.java 16 May 2005 15:16:36 -0000 1.26 +++ Surface.java 16 May 2005 18:41:12 -0000 1.27 @@ -164,7 +164,6 @@ long timeBegin = System.currentTimeMillis(); if (radiusP > 0 && htToruses == null) htToruses = new Hashtable(); - System.out.println("atomCount=" + atomCount); for (int i = 0; i < atomCount; ++i) // make this loop count up if (bsSelected.get(i)) { setAtomI(i); @@ -177,6 +176,7 @@ } saveToruses(); long timeElapsed = System.currentTimeMillis() - timeBegin; + System.out.println("atomCount=" + atomCount); System.out.println("Surface construction time = " + timeElapsed + " ms"); } if (convexVertexMaps == null) @@ -287,7 +287,6 @@ private float distanceIJ2, distanceIK2, distanceJK2; void setAtomI(int indexI) { - System.out.println("setAtomI(" + indexI + ")"); this.indexI = indexI; atomI = frame.atoms[indexI]; centerI = atomI.point3f; @@ -476,7 +475,6 @@ Torus(int indexA, Point3f centerA, int indexB, Point3f centerB, Point3f center, float radius, boolean fullTorus) { - System.out.println("Torus " + indexA + ":" + indexB); this.ixI = indexA; this.ixJ = indexB; this.center = new Point3f(center); @@ -1204,7 +1202,6 @@ Cavity(Point3f probeCenter) { ixI = indexI; ixJ = indexJ; ixK = indexK; atI = atomI; atJ = atomJ; atK = atomK; - System.out.println("cavity " + ixI + ":" + ixJ + ":" + ixK); /* System.out.println(" atI=" + atI + " atJ=" + atJ + Index: SurfaceRenderer.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/jmol/viewer/SurfaceRenderer.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- SurfaceRenderer.java 16 May 2005 15:16:36 -0000 1.21 +++ SurfaceRenderer.java 16 May 2005 18:41:12 -0000 1.22 @@ -54,14 +54,15 @@ Surface surface = (Surface)shape; if (surface == null) return; + int renderingLevel = surface.geodesicRenderingLevel; geodesicVertexCount = surface.geodesicVertexCount; screensCache.alloc(geodesicVertexCount); geodesicFaceCount = - g3d.getGeodesicFaceCount(surface.geodesicRenderingLevel); + g3d.getGeodesicFaceCount(renderingLevel); geodesicFaceVertexes = - g3d.getGeodesicFaceVertexes(surface.geodesicRenderingLevel); + g3d.getGeodesicFaceVertexes(renderingLevel); geodesicFaceNormixes = - g3d.getGeodesicFaceNormixes(surface.geodesicRenderingLevel); + g3d.getGeodesicFaceNormixes(renderingLevel); Atom[] atoms = frame.atoms; int[][] convexVertexMaps = surface.convexVertexMaps; int[][] convexFaceMaps = surface.convexFaceMaps; @@ -83,7 +84,7 @@ int ixJ = torus.ixJ; renderTorus(torus, atoms[ixI], convexVertexMaps[ixI], - atoms[ixJ], convexVertexMaps[ixJ]); + atoms[ixJ], convexVertexMaps[ixJ], renderingLevel); } Surface.Cavity[] cavities = surface.cavities; for (int i = surface.cavityCount; --i >= 0; ) @@ -122,20 +123,31 @@ } } + Vector3f vectorIJ = new Vector3f(); + Vector3f vectorJI = new Vector3f(); + void renderTorus(Surface.Torus torus, Atom atomI, int[] vertexMapI, - Atom atomJ, int[] vertexMapJ) { + Atom atomJ, int[] vertexMapJ, int renderingLevel) { + if (vertexMapI == null || vertexMapJ == null) + return; + vectorIJ.sub(atomJ.point3f, atomI.point3f); + vectorJI.sub(atomI.point3f, atomJ.point3f); Point3i[] screensI = screensCache.lookup(atomI, vertexMapI); Point3i[] screensJ = screensCache.lookup(atomJ, vertexMapJ); - int lastVertexI = Bmp.getMaxMappedBit(vertexMapI) - 1; + int lastVertexI = + g3d.getClosestVisibleGeodesicVertexIndex(vectorIJ, vertexMapI, + renderingLevel); Point3i screenMaxI = screensI[lastVertexI]; - int lastVertexJ = Bmp.getMaxMappedBit(vertexMapJ) - 1; + int lastVertexJ = + g3d.getClosestVisibleGeodesicVertexIndex(vectorJI, vertexMapJ, + renderingLevel); Point3i screenMaxJ = screensJ[lastVertexJ]; g3d.fillCylinder(Graphics3D.PINK, Graphics3D.ENDCAPS_FLAT, 4, atomI.getScreenX(),atomI.getScreenY(),atomI.getScreenZ(), screenMaxJ.x, screenMaxJ.y, screenMaxJ.z); - + g3d.fillCylinder(Graphics3D.GREEN, Graphics3D.ENDCAPS_FLAT, 4, atomJ.getScreenX(),atomJ.getScreenY(),atomJ.getScreenZ(), screenMaxI.x, screenMaxI.y, screenMaxI.z); |