Revision: 18568 http://sourceforge.net/p/jmol/code/18568 Author: hansonr Date: 2013-08-14 13:27:57 +0000 (Wed, 14 Aug 2013) Log Message: ----------- ___JmolVersion="13.3.4_dev_2013.08.14"
FEATURE CHANGE: set wireframeRotation expanded to include bioshapes and isosurfaces Modified Paths: -------------- trunk/Jmol/src/org/jmol/render/MeshRenderer.java trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java trunk/Jmol/src/org/jmol/renderbio/CartoonRenderer.java trunk/Jmol/src/org/jmol/renderbio/MeshRibbonRenderer.java trunk/Jmol/src/org/jmol/renderbio/RibbonsRenderer.java trunk/Jmol/src/org/jmol/renderbio/RocketsRenderer.java trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java trunk/Jmol/src/org/jmol/renderbio/TraceRenderer.java trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/render/MeshRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/render/MeshRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/render/MeshRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -134,7 +134,8 @@ private boolean doRender; protected boolean volumeRender; protected BS bsPolygons; - protected boolean isTranslucentInherit; + protected boolean isTranslucentInherit; + protected boolean wireframeOnly; private boolean setVariables() { if (mesh.visibilityFlags == 0) @@ -170,7 +171,8 @@ bsPolygons = (isGhostPass ? mesh.bsSlabGhost : selectedPolyOnly ? mesh.bsSlabDisplay : null); - frontOnly = !viewer.getSlabEnabled() && mesh.frontOnly + wireframeOnly = (!isExport && viewer.getBoolean(T.wireframerotation) && viewer.getInMotion(true)); + frontOnly = wireframeOnly || !viewer.getSlabEnabled() && mesh.frontOnly && !mesh.isTwoSided && !selectedPolyOnly; screens = viewer.allocTempScreens(vertexCount); if (frontOnly) @@ -214,10 +216,10 @@ if (!g3d.setColix(isGhostPass ? mesh.slabColix : colix)) return; if (mesh.showPoints || mesh.polygonCount == 0) - renderPoints(); - if (isGhostPass ? mesh.slabMeshType == T.mesh : mesh.drawTriangles) + renderPoints(); + if (wireframeOnly || (isGhostPass ? mesh.slabMeshType == T.mesh : mesh.drawTriangles)) renderTriangles(false, mesh.showTriangles, false); - if (isGhostPass ? mesh.slabMeshType == T.fill : mesh.fillTriangles) + if (!wireframeOnly && (isGhostPass ? mesh.slabMeshType == T.fill : mesh.fillTriangles)) renderTriangles(true, mesh.showTriangles, generateSet); } @@ -360,24 +362,25 @@ exportSurface(colix); } - protected void drawTriangle(P3i screenA, short colixA, - P3i screenB, short colixB, - P3i screenC, short colixC, int check, int diam) { - if (antialias || diam != 1) { - if (antialias) - diam <<= 1; - if ((check & 1) == 1) - g3d.fillCylinderXYZ(colixA, colixB, GData.ENDCAPS_OPEN, diam, - screenA.x, screenA.y, screenA.z, screenB.x, screenB.y, screenB.z); - if ((check & 2) == 2) - g3d.fillCylinderXYZ(colixB, colixC, GData.ENDCAPS_OPEN, diam, - screenB.x, screenB.y, screenB.z, screenC.x, screenC.y, screenC.z); - if ((check & 4) == 4) - g3d.fillCylinderXYZ(colixA, colixC, GData.ENDCAPS_OPEN, diam, - screenA.x, screenA.y, screenA.z, screenC.x, screenC.y, screenC.z); - } else { - g3d.drawTriangle3C(screenA, colixA, screenB, colixB, screenC, colixC, check); + protected void drawTriangle(P3i screenA, short colixA, P3i screenB, + short colixB, P3i screenC, short colixC, + int check, int diam) { + if (wireframeOnly || !antialias && diam == 1) { + g3d.drawTriangle3C(screenA, colixA, screenB, colixB, screenC, colixC, + check); + return; } + if (antialias) + diam <<= 1; + if ((check & 1) == 1) + g3d.fillCylinderXYZ(colixA, colixB, GData.ENDCAPS_OPEN, diam, screenA.x, + screenA.y, screenA.z, screenB.x, screenB.y, screenB.z); + if ((check & 2) == 2) + g3d.fillCylinderXYZ(colixB, colixC, GData.ENDCAPS_OPEN, diam, screenB.x, + screenB.y, screenB.z, screenC.x, screenC.y, screenC.z); + if ((check & 4) == 4) + g3d.fillCylinderXYZ(colixA, colixC, GData.ENDCAPS_OPEN, diam, screenA.x, + screenA.y, screenA.z, screenC.x, screenC.y, screenC.z); } protected int checkNormals(short nA, short nB, short nC) { Modified: trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -110,7 +110,6 @@ needTranslucent = false; boolean TF = (!isExport && viewer.getBoolean(T.wireframerotation) && viewer.getInMotion(true)); - System.out.println(viewer.getBoolean(T.wireframerotation) + " bioshaperend " + viewer.getInMotion(true)); if (TF != wireframeOnly) invalidateMesh = true; wireframeOnly = TF; Modified: trunk/Jmol/src/org/jmol/renderbio/CartoonRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/CartoonRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/CartoonRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -42,8 +42,15 @@ @Override protected void renderBioShape(BioShape bioShape) { + if (wireframeOnly) { + if (wingVectors == null || isCarbohydrate) + renderTrace(); + else + renderMeshRibbon(); + return; + } newRockets = true; - if (bioShape.wingVectors == null || isCarbohydrate) + if (wingVectors == null || isCarbohydrate) return; getScreenControlPoints(); if (isNucleic) { @@ -67,7 +74,7 @@ calcScreenControlPoints(cordMidPoints); controlPoints = cordMidPoints; } - render1(); + renderRockets(); viewer.freeTempPoints(cordMidPoints); viewer.freeTempScreens(ribbonTopScreens); viewer.freeTempScreens(ribbonBottomScreens); @@ -101,7 +108,7 @@ } @Override - protected void render1() { + protected void renderRockets() { boolean lastWasSheet = false; boolean lastWasHelix = false; ProteinStructure previousStructure = null; @@ -143,10 +150,10 @@ lastWasHelix = isHelix; } if (renderAsRockets || !renderArrowHeads) - renderRockets(); + renderCartoonRockets(); } - private void renderRockets() { + private void renderCartoonRockets() { // doing the cylinders separately because we want to connect them if we can. // Key structures that must render properly Modified: trunk/Jmol/src/org/jmol/renderbio/MeshRibbonRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/MeshRibbonRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/MeshRibbonRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -30,11 +30,15 @@ @Override protected void renderBioShape(BioShape bioShape) { + renderMeshRibbon(); + } + + protected void renderMeshRibbon() { if (!setStrandCount()) return; - float offset = ((strandCount >> 1) * strandSeparation) + baseOffset; + float offset = ((strandCount >> 1) * strandSeparation) + baseStrandOffset; render2Strand(false, offset, offset); - render1(); + renderStrands(); } protected void render2Strand(boolean doFill, float offsetTop, float offsetBottom) { Modified: trunk/Jmol/src/org/jmol/renderbio/RibbonsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/RibbonsRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/RibbonsRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -33,6 +33,10 @@ protected void renderBioShape(BioShape bioShape) { if (wingVectors == null) return; + if (wireframeOnly) { + renderMeshRibbon(); + return; + } render2Strand(true, isNucleic ? 1f : 0.5f, isNucleic ? 0f : 0.5f); } } Modified: trunk/Jmol/src/org/jmol/renderbio/RocketsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/RocketsRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/RocketsRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -37,7 +37,7 @@ import org.jmol.util.V3; -public class RocketsRenderer extends BioShapeRenderer { +public class RocketsRenderer extends MeshRibbonRenderer { //private final static float MIN_CONE_HEIGHT = 0.05f; @@ -48,6 +48,10 @@ protected void renderBioShape(BioShape bioShape) { if (!(bioShape.bioPolymer instanceof AlphaPolymer)) return; + if (wireframeOnly) { + renderMeshRibbon(); + return; + } boolean val = !viewer.getBoolean(T.rocketbarrels); if (renderArrowHeads != val) { bioShape.falsifyMesh(); @@ -56,7 +60,7 @@ calcRopeMidPoints(newRockets); calcScreenControlPoints(cordMidPoints); controlPoints = cordMidPoints; - render1(); + renderRockets(); viewer.freeTempPoints(cordMidPoints); } @@ -99,7 +103,7 @@ } } - protected void render1() { + protected void renderRockets() { tPending = false; for (int i = bsVisible.nextSetBit(0); i >= 0; i = bsVisible .nextSetBit(i + 1)) { Modified: trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -29,48 +29,52 @@ import org.jmol.shapebio.Strands; import org.jmol.util.P3i; -public class StrandsRenderer extends BioShapeRenderer { +public class StrandsRenderer extends TraceRenderer { protected int strandCount; protected float strandSeparation; - protected float baseOffset; + protected float baseStrandOffset; @Override protected void renderBioShape(BioShape bioShape) { + renderStrandShape(); + } + + protected void renderStrandShape() { if (!setStrandCount()) return; - render1(); + renderStrands(); } - + protected boolean setStrandCount() { if (wingVectors == null) return false; - strandCount = viewer.getStrandCount(((Strands) shape).shapeID); + strandCount = (shape instanceof Strands ? viewer.getStrandCount(((Strands) shape).shapeID) : 10); strandSeparation = (strandCount <= 1) ? 0 : 1f / (strandCount - 1); - baseOffset = ((strandCount & 1) == 0 ? strandSeparation / 2 + baseStrandOffset = ((strandCount & 1) == 0 ? strandSeparation / 2 : strandSeparation); return true; } - protected void render1() { + protected void renderStrands() { P3i[] screens; for (int i = strandCount >> 1; --i >= 0;) { - float f = (i * strandSeparation) + baseOffset; + float f = (i * strandSeparation) + baseStrandOffset; screens = calcScreens(f); - render1Strand(screens); + renderStrand(screens); viewer.freeTempScreens(screens); screens = calcScreens(-f); - render1Strand(screens); + renderStrand(screens); viewer.freeTempScreens(screens); } if (strandCount % 2 == 1) { screens = calcScreens(0f); - render1Strand(screens); + renderStrand(screens); viewer.freeTempScreens(screens); } } - private void render1Strand(P3i[] screens) { + private void renderStrand(P3i[] screens) { for (int i = bsVisible.nextSetBit(0); i >= 0; i = bsVisible.nextSetBit(i + 1)) renderHermiteCylinder(screens, i); } Modified: trunk/Jmol/src/org/jmol/renderbio/TraceRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/renderbio/TraceRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/renderbio/TraceRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -31,6 +31,10 @@ @Override protected void renderBioShape(BioShape bioShape) { + renderTrace(); + } + + protected void renderTrace() { getScreenControlPoints(); for (int i = bsVisible.nextSetBit(0); i >= 0; i = bsVisible.nextSetBit(i + 1)) renderHermiteConic(i, false); Modified: trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2013-08-14 13:27:57 UTC (rev 18568) @@ -52,7 +52,8 @@ private Boolean showKey; private boolean hasColorRange; private int meshScale = -1; - + private int mySlabValue; + private int globalSlabValue; @Override protected boolean render() { @@ -60,32 +61,20 @@ } protected boolean renderIso() { - needTranslucent = false; - iShowNormals = viewer.getTestFlag(4); - showNumbers = viewer.getTestFlag(3); - isosurface = (Isosurface) shape; - // exporters will do two passes here if there is translucency - // first pass is #2 (translucent), then #1 (opaque). - exportPass = (isExport ? 2 : 0); - isNavigationMode = viewer.getBoolean(T.navigationmode); - int mySlabValue = Integer.MAX_VALUE; - int slabValue = g3d.getSlab(); - showKey = (viewer.getBoolean(T.isosurfacekey) ? Boolean.TRUE : null); - if (isNavigationMode) - mySlabValue = (int) viewer.getNavigationOffset().z; - isosurface.keyXy = null; - meshScale = -1; + + setGlobals(); + for (int i = isosurface.meshCount; --i >= 0;) { imesh = (IsosurfaceMesh) isosurface.meshes[i]; if (imesh.connections != null && !viewer.getModelSet().atoms[imesh.connections[0]].isVisible(0)) continue; hasColorRange = false; - if (renderMeshSlab(mySlabValue, slabValue)) { + if (renderMeshSlab()) { if (!isExport) renderInfo(); if (isExport && isGhostPass) { exportPass = 1; - renderMeshSlab(mySlabValue, slabValue); + renderMeshSlab(); exportPass = 2; } } @@ -93,6 +82,22 @@ return needTranslucent; } + private void setGlobals() { + needTranslucent = false; + iShowNormals = viewer.getTestFlag(4); + showNumbers = viewer.getTestFlag(3); + isosurface = (Isosurface) shape; + // exporters will do two passes here if there is translucency + // first pass is #2 (translucent), then #1 (opaque). + exportPass = (isExport ? 2 : 0); + isNavigationMode = viewer.getBoolean(T.navigationmode); + showKey = (viewer.getBoolean(T.isosurfacekey) ? Boolean.TRUE : null); + isosurface.keyXy = null; + meshScale = -1; + globalSlabValue = g3d.getSlab(); + mySlabValue = (isNavigationMode ? (int) viewer.getNavigationOffset().z : Integer.MAX_VALUE); + } + protected void renderInfo() { if (hasColorRange && imesh.colorEncoder != null && Boolean.TRUE == showKey) showKey(); @@ -150,8 +155,9 @@ isosurface.keyXy[1] = (y + dy) / factor; } - private boolean renderMeshSlab(int mySlabValue, int slabValue) { + private boolean renderMeshSlab() { volumeRender = (imesh.jvxlData.colorDensity && imesh.jvxlData.allowVolumeRender); + int thisSlabValue = mySlabValue; if (!isNavigationMode) { int meshSlabValue = imesh.jvxlData.slabValue; if (meshSlabValue != Integer.MIN_VALUE @@ -162,7 +168,7 @@ pt2f.scale(0.5f); // center viewer.transformPt3f(pt2f, pt2f); float r = viewer.scaleToScreen((int)pt2f.z, Math.round(points[0].distance(points[1]) * 500f)); - mySlabValue = Math.round(pt2f.z + r * (1 - meshSlabValue / 50f)); + thisSlabValue = Math.round(pt2f.z + r * (1 - meshSlabValue / 50f)); } } boolean tcover = g3d.getTranslucentCoverOnly(); @@ -170,10 +176,10 @@ thePlane = imesh.jvxlData.jvxlPlane; vertexValues = imesh.vertexValues; boolean isOK; - if (mySlabValue != Integer.MAX_VALUE && imesh.jvxlData.isSlabbable) { - g3d.setSlab(mySlabValue); + if (thisSlabValue != Integer.MAX_VALUE && imesh.jvxlData.isSlabbable) { + g3d.setSlab(thisSlabValue); isOK = renderMesh(imesh); - g3d.setSlab(slabValue); + g3d.setSlab(globalSlabValue); } else { isOK = renderMesh(imesh); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2013-08-14 11:48:10 UTC (rev 18567) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2013-08-14 13:27:57 UTC (rev 18568) @@ -13,6 +13,8 @@ ___JmolVersion="13.3.4_dev_2013.08.14" +FEATURE CHANGE: set wireframeRotation expanded to include bioshapes and isosurfaces +bug fix: isosurface slab not allowing two different slabs for two diffrent isosurfaces bug fix: set wireframeRotation not working ("inMotion" flag not properly read in Viewer). bug fix: screen repaints were being requested far too frequently This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Get 100% visibility into Java/.NET code with AppDynamics Lite! It's a free troubleshooting tool designed for production. Get down to code-level detail for bottlenecks, with <2% overhead. Download for free and get started troubleshooting in minutes. http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits