Revision: 18305
          http://sourceforge.net/p/jmol/code/18305
Author:   hansonr
Date:     2013-06-07 19:15:26 +0000 (Fri, 07 Jun 2013)
Log Message:
-----------
___JmolVersion="13.1.17"

TODO: PyMOL uniqueAtomSettings for selected atom settings

new feature: set translucent
 -- default TRUE : translucent objects are fully translucent
 -- FALSE: translucent object are opaque to other translucent objects
 

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
    trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java
    trunk/Jmol/src/org/jmol/export/Export3D.java
    trunk/Jmol/src/org/jmol/exportjs/Export3D.java
    trunk/Jmol/src/org/jmol/g3d/Graphics3D.java
    trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java
    trunk/Jmol/src/org/jmol/script/T.java
    trunk/Jmol/src/org/jmol/shape/AtomShape.java
    trunk/Jmol/src/org/jmol/shapebio/BioShapeCollection.java
    trunk/Jmol/src/org/jmol/util/GData.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/viewer/StateManager.java
    trunk/Jmol/src/org/jmol/viewer/Viewer.java

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java       
2013-06-06 22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java       
2013-06-07 19:15:26 UTC (rev 18305)
@@ -199,7 +199,6 @@
       id = JC.SHAPE_BALLS;
       break;
     case JC.SHAPE_BALLS:
-      color = "colorballs";
       break;
     case JC.SHAPE_TRACE:
     case JC.SHAPE_BACKBONE:
@@ -219,6 +218,16 @@
     }
 
     switch (id) {
+    case JC.SHAPE_DOTS:
+    case JC.SHAPE_BALLS:
+    case JC.SHAPE_STARS:
+    case JC.SHAPE_ELLIPSOIDS: // not implemented
+      if (info instanceof Object[]) {
+        sm.loadShape(id);
+        sm.setShapePropertyBs(id, "params", info, bsAtoms);
+        return;        
+      }
+      break;
     case JC.SHAPE_MEASURES:
       if (modelIndex < 0)
         return;

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java    2013-06-06 
22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java    2013-06-07 
19:15:26 UTC (rev 18305)
@@ -59,7 +59,8 @@
     "labels","nb_spheres",
     "cartoon","ribbon","lines",
     "mesh","dots","dashes",
-    "nonbonded"};//',"slice"};
+    "nonbonded","cell","cgo","callback","extent",
+    "slice","angles","dihedrals","ellipsoid","volume"};
 
 
   final static int REP_STICKS = 0;
@@ -74,14 +75,7 @@
   final static int REP_DOTS = 9; // dots; also used for objMap
   final static int REP_DASHES = 10;  // for measurements
   final static int REP_NONBONDED = 11;
-  final static int REP_MAX = 12;
-
-  // a continuation of PyMOL.REP_xxx
-  final static int REP_JMOL_TRACE = 12;
-  final static int REP_JMOL_PUTTY = 13;
-  final static int REP_JMOL_MAX = 14;
-
-  // ???
+  
   final static int REP_CELL = 12; // for objMesh, objSurface
   final static int REP_CGO = 13; // for sculpt mode, objAlignment, objCGO
   final static int REP_CALLBACK = 14; // for objCallback
@@ -89,8 +83,17 @@
   final static int REP_SLICE = 16; // for objSlice
   final static int REP_ANGLES = 17;
   final static int REP_DIHEDRALS = 18;
+  final static int REP_ELLIPSOID = 19;
+  final static int REP_VOLUME = 20;
 
+  final static int REP_MAX = 21;
 
+  // a continuation of PyMOL.REP_xxx
+  final static int REP_JMOL_TRACE = 21;
+  final static int REP_JMOL_PUTTY = 22;
+  final static int REP_JMOL_MAX = 23;
+
+  // ???
   
   // flag 24: 
   
@@ -6242,18 +6245,22 @@
 
   public static float getDefaultSetting(int i, int pymolVersion) {
     switch (i) {
-    case stick_color:
-      return -1;
     case label_size:
       return 14;
+    case line_color:
+    case stick_color:
     case label_distance_digits:
     case label_angle_digits:
     case label_dihedral_digits:
+    case ellipsoid_color:
       return -1;
     case ray_pixel_scale:
+    case ellipsoid_scale:
       return 1;
     default:
       Logger.info("PyMOL " + pymolVersion + " does not have setting " + i);
+      //$FALL-THROUGH$
+    case ellipsoid_transparency:
       return 0;
     }
   }

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2013-06-06 22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2013-06-07 19:15:26 UTC (rev 18305)
@@ -1025,6 +1025,9 @@
     int flags = intAt(a, 24);
     //System.out.println(atomCount + " " + group3 + " " + serNo + " " + 
Integer.toHexString(flags));
     boolean bonded = (intAt(a, 25) != 0);
+    
+    // repurposing vectorX,Y,Z
+    
     int uniqueID = (a.size() > 40 && intAt(a, 40) == 1 ? intAt(a, 32) : -1);
     atom.vectorX = uniqueID;
     atom.vectorY = cartoonType;
@@ -1034,7 +1037,7 @@
     }
     //if (uniqueID > 0)
       //pymolScene.setUnique(uniqueID, atom);
-    pymolScene.setAtomColor(uniqueID, atomColor);
+    pymolScene.setAtomColor(atomColor);
     processAtom2(atom, serNo, x, y, z, formalCharge);
 
     // set pymolScene bit sets and create labels
@@ -1261,13 +1264,15 @@
       uniqueIDs[i] = getUniqueID(i);
       sequenceNumbers[i] = getSequenceNumber(i);
       radii[i] = getVDW(i);
-      if (lastAtomChain != atoms[i].chainID || lastAtomSet != 
atoms[i].atomSetIndex) {
+      if (lastAtomChain != atoms[i].chainID
+          || lastAtomSet != atoms[i].atomSetIndex) {
         newChain[i] = true;
         lastAtomChain = atoms[i].chainID;
         lastAtomSet = atoms[i].atomSetIndex;
       }
     }
-    pymolScene.setAtomInfo(uniqueIDs, cartoonTypes, sequenceNumbers, newChain, 
radii);    
+    pymolScene.setAtomInfo(uniqueIDs, cartoonTypes, sequenceNumbers,
+        newChain, radii);
   }
 
   // generally useful static methods
@@ -1288,9 +1293,11 @@
 
   private static BS getBsReps(JmolList<Object> list) {
     BS bsReps = new BS();
-    for (int i = 0; i < PyMOL.REP_MAX; i++)
+    int n = Math.min(list.size(), PyMOL.REP_MAX);
+    for (int i = 0; i < n; i++) {
       if (intAt(list, i) == 1)
         bsReps.set(i);
+    }
     return bsReps;
   }
 

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2013-06-06 22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2013-06-07 19:15:26 UTC (rev 18305)
@@ -34,6 +34,37 @@
  * 
  */
 class PyMOLScene implements JmolSceneGenerator {
+  
+//accounted for:
+//
+//  dot_color
+//  ellipsoid_color
+//  ellipsoid_transparency
+//  ellipsoid_scale
+//  label_color
+//  label_position
+//  nonbonded_transparency
+//  sphere_color
+//  sphere_scale
+//  sphere_transparency
+//
+//TODO needed:
+//    
+//  cartoon_color
+//  mesh_color
+//  ribbon_color
+//  surface_color
+//  transparency (surface only)
+//
+//special (probably) PyMOL-only:
+//
+//  ladder_color
+//  ladder_mode
+//  ladder_radius
+//  ring_color
+//  ring_mode
+//  ring_radius
+//  ring_width
 
   private Viewer viewer;
   private int pymolVersion;
@@ -58,29 +89,30 @@
   private Map<String, PyMOLGroup> groups;
   private Map<Integer, JmolList<Object>> objectSettings;
 
-  private void clearReaderData(boolean isAll) {
+  private void clearReaderData() {
     reader = null;
     colixes = null;
     atomColorList = null;
     objectSettings = null;
     stateSettings = null;
-    if (!isAll)
+    if (haveScenes)
       return;
+    settings = null;
     groups = null;
     labels = null;
+    ssMapAtom = null;
     htSpacefill = null;
-    ssMapAtom = null;
     htAtomMap = null;
     htMeasures = null;
     htObjectGroups = null;
     htObjectAtoms = null;
     htObjectSettings = null;
     htStateSettings = null;
+    htHiddenObjects = null;
     objectInfo = null;
-    settings = null;
     occludedObjects = null;
-    htHiddenObjects = null;
-    bsHidden = bsNucleic = bsNonbonded = bsLabeled = bsHydrogen = bsNoSurface 
= bsCartoon = null;
+    bsHidden = bsNucleic = bsNonbonded = bsLabeled = bsHydrogen = bsNoSurface 
+        = bsCartoon = null;
   }
 
   // private -- needed for processing Scenes
@@ -114,6 +146,7 @@
     bsUniqueBonds.set(index);
   }
   private int bgRgb;
+  private int dotColor;
   private int surfaceMode;
   private int surfaceColor;
   private int sphereColor;
@@ -123,6 +156,7 @@
   private float labelSize;
   private float meshWidth;
   private float nonbondedSize;
+  private float nonbondedTranslucency;
   private float sphereScale;
   private float sphereTranslucency;
   private float stickTranslucency;
@@ -137,7 +171,7 @@
   private String objectNameID;
   private String objectJmolName;
   private int objectType;
-  private BS objectAtoms;
+  private BS bsAtoms;
   private boolean objectHidden;
 
   // during file loading we have a reader, but after that we must rely on data 
saved by the server
@@ -178,6 +212,7 @@
     this.pymolVersion = pymolVersion;
     this.haveScenes = haveScenes;
     setVersionSettings();
+    settings.trimToSize();
     bgRgb = colorSetting(listAt(settings, PyMOL.bg_rgb));
     pointAt((JmolList<Object>) listAt(settings, PyMOL.label_position).get(2),
         0, labelPosition0);
@@ -227,7 +262,9 @@
 
   private void getObjectSettings() {
     transparency = floatSetting(PyMOL.transparency);
+    dotColor = (int) floatSetting(PyMOL.dot_color);
     nonbondedSize = floatSetting(PyMOL.nonbonded_size);
+    nonbondedTranslucency = floatSetting(PyMOL.nonbonded_transparency);
     sphereScale = floatSetting(PyMOL.sphere_scale);
     sphereColor = (int) floatSetting(PyMOL.sphere_color);
     cartoonTranslucency = floatSetting(PyMOL.cartoon_transparency);
@@ -298,7 +335,7 @@
     objectJmolName = getJmolName(name);
     objectNameID = (istate == 0 && objectType != 0 ? getObjectID(name) : 
objectJmolName + "_"
         + istate);
-    objectAtoms = htObjectAtoms.get(name);
+    bsAtoms = htObjectAtoms.get(name);
     objectSettings = htObjectSettings.get(name);
     stateSettings = htStateSettings.get(name+"_" + istate);
     String groupName = htObjectGroups.get(name);
@@ -594,7 +631,7 @@
     this.baseAtomIndex = baseAtomIndex;
     this.mepList = mepList;
     this.doCache = doCache;
-    clearReaderData(!haveScenes);
+    clearReaderData();
     finalizeObjects();
     if (!haveScenes) {
       uniqueSettings = null;
@@ -777,16 +814,16 @@
                           int atomCount) {
     if (atomCount >= 0) {
       // initial creation, not just going to this scene
-      objectAtoms = BSUtil.newBitSet2(atomCount0, atomCount);
+      bsAtoms = BSUtil.newBitSet2(atomCount0, atomCount);
       JmolObject jo;
       // from reader
-      jo = addJmolObject(T.atoms, objectAtoms, null);
+      jo = addJmolObject(T.atoms, bsAtoms, null);
       colixes = ArrayUtil.ensureLengthShort(colixes, atomCount);
       for (int i = atomCount; --i >= atomCount0;)
         colixes[i] = (short) atomColorList.get(i).intValue();
       jo.setColors(colixes, 0);
       jo.setSize(0);
-      jo = addJmolObject(JC.SHAPE_STICKS, objectAtoms, null);
+      jo = addJmolObject(JC.SHAPE_STICKS, bsAtoms, null);
       jo.setSize(0);
     }
     createShapeObject(PyMOL.REP_LINES, reps[PyMOL.REP_LINES]);
@@ -827,7 +864,7 @@
         createShapeObject(i, reps[i]);
         continue;
       }
-    objectAtoms = null;
+    bsAtoms = null;
   }
 
   void addLabel(int atomIndex, int uniqueID, int atomColor,
@@ -852,9 +889,7 @@
         labelPos[i] = floatAt(labelOffset, i);
     }
     labels.put(Integer.valueOf(atomIndex), newTextLabel(label, labelPos,
-        icolor, (int) getUniqueFloatDef(uniqueID, PyMOL.label_font_id,
-            labelFontId), getUniqueFloatDef(uniqueID, PyMOL.label_size,
-            labelSize)));
+        icolor, labelFontId, labelSize));
   }
 
   float getUniqueFloatDef(int id, int key, float defaultValue) {
@@ -1018,7 +1053,8 @@
   SB getViewScript(JmolList<Object> view) {
     SB sb = new SB();
     float[] pymolView = getPymolView(view, true);
-    sb.append(";set zshadePower 1;set traceAlpha "
+    sb.append(";set translucent " + (globalSetting(PyMOL.transparency_mode) != 
2) 
+        + ";set zshadePower 1;set traceAlpha "
         + (globalSetting(PyMOL.cartoon_round_helices) != 0));
     boolean rockets = cartoonRockets;
     sb.append(";set cartoonRockets " + rockets);
@@ -1051,10 +1087,8 @@
         .get(5)));
   }
 
-  void setAtomColor(int uniqueID, int atomColor) {
-    float translucency = getUniqueFloatDef(uniqueID, PyMOL.sphere_transparency,
-        sphereTranslucency);
-    atomColorList.addLast(Integer.valueOf(getColix(atomColor, translucency)));
+  void setAtomColor(int atomColor) {
+    atomColorList.addLast(Integer.valueOf(getColix(atomColor, 0)));
   }
 
   void setFrameObject(int type, Object info) {
@@ -1215,17 +1249,17 @@
   private void fixReps(BS[] reps) {
     htSpacefill.clear();
     bsCartoon.clearAll();
-    for (int iAtom = objectAtoms.nextSetBit(0); iAtom >= 0; iAtom = objectAtoms
+    for (int iAtom = bsAtoms.nextSetBit(0); iAtom >= 0; iAtom = bsAtoms
         .nextSetBit(iAtom + 1)) {
       float rad = 0;
       int uniqueID = (reader == null ? uniqueIDs[iAtom] : reader
           .getUniqueID(iAtom));
       if (reps[PyMOL.REP_SPHERES].get(iAtom)) {
         rad = (reader == null ? radii[iAtom] : reader.getVDW(iAtom))
-            * getUniqueFloat(uniqueID, PyMOL.sphere_scale);
+            * getUniqueFloatDef(uniqueID, PyMOL.sphere_scale, sphereScale);
       } else if (reps[PyMOL.REP_NBSPHERES].get(iAtom)) {
         // Penta_vs_mutants calcium
-        rad = getUniqueFloat(uniqueID, PyMOL.nonbonded_size);
+        rad = nonbondedSize;
       }
       if (rad != 0) {
         Float r = Float.valueOf(rad);
@@ -1291,7 +1325,7 @@
   private void cleanSingletons(BS bs) {
     if (bs.isEmpty())
       return;
-    bs.and(objectAtoms);
+    bs.and(bsAtoms);
     BS bsr = new BS();
     int n = bs.length();
     int pass = 0;
@@ -1334,7 +1368,6 @@
    */
   private void createShapeObject(int shapeID, BS bs) {
     // add more to implement
-    float f;
     if (bs.isEmpty())
       return;
     JmolObject jo = null;
@@ -1343,61 +1376,27 @@
       bs.and(bsNonbonded);
       if (bs.isEmpty())
         return;
-      jo = addJmolObject(JC.SHAPE_STARS, bs, null);
-      jo.rd = new RadiusData(null, nonbondedSize / 2,
-          RadiusData.EnumType.FACTOR, EnumVdw.AUTO);
+      setUniqueObjects(JC.SHAPE_STARS, bs, 0, 0, PyMOL.nonbonded_transparency, 
nonbondedTranslucency, 0, nonbondedSize, 0.5f);
       break;
     case PyMOL.REP_NBSPHERES:
     case PyMOL.REP_SPHERES:
-      jo = addJmolObject(JC.SHAPE_BALLS, bs, null);
-      f = sphereColor;
-      if (f != -1)
-        jo.argb = PyMOL.getRGB((int) f);
-      jo.translucency = sphereTranslucency;
+      setUniqueObjects(JC.SHAPE_BALLS, bs, PyMOL.sphere_color, sphereColor, 
PyMOL.sphere_transparency, sphereTranslucency, PyMOL.sphere_scale, sphereScale, 
1);
       break;
+    case PyMOL.REP_ELLIPSOID:
+      float ellipsoidTranslucency = floatSetting(PyMOL.ellipsoid_transparency);
+      int ellipsoidColor = (int) floatSetting(PyMOL.ellipsoid_color);
+      float ellipsoidScale = floatSetting(PyMOL.ellipsoid_scale);
+      setUniqueObjects(JC.SHAPE_ELLIPSOIDS, bs, PyMOL.ellipsoid_color, 
ellipsoidColor, PyMOL.ellipsoid_transparency, ellipsoidTranslucency, 
PyMOL.ellipsoid_scale, ellipsoidScale, 1);
+      break;
     case PyMOL.REP_DOTS:
-      jo = addJmolObject(JC.SHAPE_DOTS, bs, null);
-      f = sphereScale;
-      jo.rd = new RadiusData(null, f, RadiusData.EnumType.FACTOR, 
EnumVdw.AUTO);
+      setUniqueObjects(JC.SHAPE_DOTS, bs, PyMOL.dot_color, dotColor, 0, 0, 
PyMOL.sphere_scale, sphereScale, 1);
       break;
-    case PyMOL.REP_CARTOON:
-      createCartoonObject("H", (cartoonRockets ? PyMOL.cartoon_helix_radius
-          : PyMOL.cartoon_oval_length));
-      createCartoonObject("S", PyMOL.cartoon_rect_length);
-      createCartoonObject("L", PyMOL.cartoon_loop_radius);
-      createCartoonObject(" ", PyMOL.cartoon_loop_radius);
-      break;
-    case PyMOL.REP_MESH: //   = 8;
-      jo = addJmolObject(T.isosurface, bs, null);
-      jo.setSize(floatSetting(PyMOL.solvent_radius));
-      jo.translucency = transparency;
-      break;
-    case PyMOL.REP_SURFACE: //   = 2;
-      float withinDistance = floatSetting(PyMOL.surface_carve_cutoff);
-      jo = addJmolObject(T.isosurface, bs, new Object[] {
-          booleanSetting(PyMOL.two_sided_lighting) ? "FULLYLIT" : "FRONTLIT",
-          (surfaceMode == 3 || surfaceMode == 4) ? " only" : "", 
-              bsCarve, Float.valueOf(withinDistance)});
-      jo.setSize(floatSetting(PyMOL.solvent_radius) * (solventAccessible ? -1 
: 1));
-      jo.translucency = transparency;
-      if (surfaceColor >= 0)
-        jo.argb = PyMOL.getRGB(surfaceColor);
-      break;
     case PyMOL.REP_LABELS: //   = 3;
       bs.and(bsLabeled);
       if (bs.isEmpty())
         return;
       jo = addJmolObject(JC.SHAPE_LABELS, bs, labels);
       break;
-    case PyMOL.REP_JMOL_PUTTY:
-      createPuttyObject(bs);
-      break;
-    case PyMOL.REP_JMOL_TRACE:
-      createTraceObject(bs);
-      break;
-    case PyMOL.REP_RIBBON: // backbone or trace, depending
-      createRibbonObject(bs);
-      break;
     case PyMOL.REP_LINES:
       jo = addJmolObject(T.wireframe, bs, null);
       jo.setSize(floatSetting(PyMOL.line_width) / 15);
@@ -1413,11 +1412,74 @@
       if (col >= 0)
         jo.argb = PyMOL.getRGB(col);
       break;
+    case PyMOL.REP_CARTOON:
+      createCartoonObject("H", (cartoonRockets ? PyMOL.cartoon_helix_radius
+          : PyMOL.cartoon_oval_length));
+      createCartoonObject("S", PyMOL.cartoon_rect_length);
+      createCartoonObject("L", PyMOL.cartoon_loop_radius);
+      createCartoonObject(" ", PyMOL.cartoon_loop_radius);
+      break;
+    case PyMOL.REP_JMOL_PUTTY:
+      createPuttyObject(bs);
+      break;
+    case PyMOL.REP_JMOL_TRACE:
+      createTraceObject(bs);
+      break;
+    case PyMOL.REP_RIBBON: // backbone or trace, depending
+      createRibbonObject(bs);
+      break;
+    case PyMOL.REP_SURFACE: //   = 2;
+      // unique translucency here involves creating ghost surfaces 
+      float withinDistance = floatSetting(PyMOL.surface_carve_cutoff);
+      jo = addJmolObject(T.isosurface, bs, new Object[] {
+          booleanSetting(PyMOL.two_sided_lighting) ? "FULLYLIT" : "FRONTLIT",
+          (surfaceMode == 3 || surfaceMode == 4) ? " only" : "", 
+              bsCarve, Float.valueOf(withinDistance)});
+      jo.setSize(floatSetting(PyMOL.solvent_radius) * (solventAccessible ? -1 
: 1));
+      jo.translucency = transparency;
+      if (surfaceColor >= 0)
+        jo.argb = PyMOL.getRGB(surfaceColor);
+      break;
+    case PyMOL.REP_MESH: //   = 8;
+      jo = addJmolObject(T.isosurface, bs, null);
+      jo.setSize(floatSetting(PyMOL.solvent_radius));
+      jo.translucency = transparency;
+      break;
     default:
       Logger.error("Unprocessed representation type " + shapeID);
     }
   }
 
+  private void setUniqueObjects(int shape, BS bs, 
+                                int setColor, int color,
+                                int setTrans, float trans,
+                                int setSize, float size, float f) {
+    int n = bs.cardinality();
+    short[] colixes = (setColor == 0 ? null : new short[n]);
+    float[] atrans = (setTrans == 0 ? null : new float[n]);
+    float[] sizes = new float[n];
+    for (int pt=0, i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1), 
pt++) {
+      int id = (uniqueIDs == null ? -1 : uniqueIDs[i]);
+      if (colixes != null) {
+        int c = (int) getUniqueFloatDef(id, setColor, color);
+        if (c > 0)
+          colixes[pt] = getColix(c, 0);
+      }
+      if (atrans != null) {
+        atrans[pt] = getUniqueFloatDef(id, setTrans, trans);        
+      }
+      sizes[pt] = getUniqueFloatDef(id, setSize, size) * f;
+    }
+    addJmolObject(shape, bs, new Object[] {colixes, atrans, sizes});
+
+//      case PyMOL.REP_DOTS:
+  //      addJmolObject(JC.SHAPE_DOTS, bs, null).rd = new RadiusData(null,
+    //        value1, RadiusData.EnumType.FACTOR, EnumVdw.AUTO);
+//      case PyMOL.REP_NONBONDED:
+  //      addJmolObject(JC.SHAPE_STARS, bs, null).rd = new RadiusData(null,
+    //        f / 2, RadiusData.EnumType.FACTOR, EnumVdw.AUTO);
+  }
+
   /**
    * Create a BALLS JmolObject for each radius.
    * 
@@ -1557,24 +1619,6 @@
     }
   }
 
-  private float getUniqueFloat(int uniqueID, int i) {
-    float f;
-    switch (i) {
-    case PyMOL.sphere_transparency:
-      f = sphereTranslucency;
-      break;
-    case PyMOL.sphere_scale:
-      f = sphereScale;
-      break;
-    case PyMOL.nonbonded_size:
-      f = nonbondedSize;
-      break;
-    default:
-      return 0;
-    }
-    return getUniqueFloatDef(uniqueID, i, f);
-  }
-
   BS getSSMapAtom(String ssType) {
     BS bs = ssMapAtom.get(ssType);
     if (bs == null)

Modified: trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java
===================================================================
--- trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java      2013-06-06 
22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java      2013-06-07 
19:15:26 UTC (rev 18305)
@@ -343,4 +343,6 @@
                                         P3 navigationOffset,
                                         float navigationDepthPercent);
 
+  public abstract boolean getTranslucentCoverOnly();
+
 }

Modified: trunk/Jmol/src/org/jmol/export/Export3D.java
===================================================================
--- trunk/Jmol/src/org/jmol/export/Export3D.java        2013-06-06 22:17:52 UTC 
(rev 18304)
+++ trunk/Jmol/src/org/jmol/export/Export3D.java        2013-06-07 19:15:26 UTC 
(rev 18305)
@@ -903,5 +903,9 @@
     g3d.renderAllStrings(this);    
   }
 
+  public boolean getTranslucentCoverOnly() {
+    return g3d.getTranslucentCoverOnly();
+  }
 
+
 }

Modified: trunk/Jmol/src/org/jmol/exportjs/Export3D.java
===================================================================
--- trunk/Jmol/src/org/jmol/exportjs/Export3D.java      2013-06-06 22:17:52 UTC 
(rev 18304)
+++ trunk/Jmol/src/org/jmol/exportjs/Export3D.java      2013-06-07 19:15:26 UTC 
(rev 18305)
@@ -900,5 +900,9 @@
     // g3d only
   }
 
+  public boolean getTranslucentCoverOnly() {
+    return g3d.getTranslucentCoverOnly();
+  }
 
+
 }

Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java
===================================================================
--- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2013-06-06 22:17:52 UTC (rev 
18304)
+++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2013-06-07 19:15:26 UTC (rev 
18305)
@@ -198,11 +198,6 @@
 
   private boolean addAllPixels;
   private boolean haveTranslucentObjects;
-  protected boolean translucentCoverOnly = false;
-  public void setTranslucentCoverOnly(boolean TF) {
-    translucentCoverOnly = TF;
-  }
-  
   protected int[] pbuf;
   protected int[] pbufT;
   protected int[] zbuf;
@@ -264,7 +259,7 @@
   }
   
   @Override
-  public void beginRendering(Matrix3f rotationMatrix, boolean isImageWrite) {
+  public void beginRendering(Matrix3f rotationMatrix, boolean translucentMode, 
boolean isImageWrite) {
     if (currentlyRendering)
       endRendering();
     if (windowWidth != newWindowWidth || windowHeight != newWindowHeight
@@ -285,6 +280,7 @@
     isPass2 = false;
     colixCurrent = 0;
     haveTranslucentObjects = false;
+    translucentCoverOnly = !translucentMode;
     addAllPixels = true;
     if (pbuf == null) {
       platform.allocateBuffers(windowWidth, windowHeight,

Modified: trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java       
2013-06-06 22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java       
2013-06-07 19:15:26 UTC (rev 18305)
@@ -166,6 +166,7 @@
         mySlabValue = Math.round(pt2f.z + r * (1 - meshSlabValue / 50f));
       }
     }
+    boolean tcover = g3d.getTranslucentCoverOnly();
     g3d.setTranslucentCoverOnly(imesh.frontOnly);
     thePlane = imesh.jvxlData.jvxlPlane;
     vertexValues = imesh.vertexValues;
@@ -177,7 +178,7 @@
     } else {
       isOK = renderMesh(imesh);
     }
-    g3d.setTranslucentCoverOnly(false);
+    g3d.setTranslucentCoverOnly(tcover);
     return isOK;
   }
   

Modified: trunk/Jmol/src/org/jmol/script/T.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/T.java       2013-06-06 22:17:52 UTC (rev 
18304)
+++ trunk/Jmol/src/org/jmol/script/T.java       2013-06-07 19:15:26 UTC (rev 
18305)
@@ -1040,8 +1040,9 @@
   public final static int testflag1                      = booleanparam | 184;
   public final static int testflag2                      = booleanparam | 186;
   public final static int testflag3                      = booleanparam | 188;
-  public final static int testflag4                      = booleanparam | 190;
-  public final static int tracealpha                     = booleanparam | 191;
+  public final static int testflag4                      = booleanparam | 189;
+  public final static int tracealpha                     = booleanparam | 190;
+  public final static int translucent                    = booleanparam | 191;
   public final static int twistedsheets                  = booleanparam | 192;
   public final static int usearcball                     = booleanparam | 193;
   public final static int useminimizationthread          = booleanparam | 194;
@@ -1274,7 +1275,6 @@
   final static int torsion        = misc  | 350;
   final static int transform      = misc  | 352;
   public final static int translation   = misc  | 354;
-  public final static int translucent   = misc  | 356;
   public final static int triangles     = misc  | 358;
   final static int url             = misc  | 360 | expression;
   final static int user            = misc  | 362;

Modified: trunk/Jmol/src/org/jmol/shape/AtomShape.java
===================================================================
--- trunk/Jmol/src/org/jmol/shape/AtomShape.java        2013-06-06 22:17:52 UTC 
(rev 18304)
+++ trunk/Jmol/src/org/jmol/shape/AtomShape.java        2013-06-07 19:15:26 UTC 
(rev 18305)
@@ -28,6 +28,7 @@
 import org.jmol.atomdata.RadiusData;
 import org.jmol.atomdata.RadiusData.EnumType;
 import org.jmol.constant.EnumPalette;
+import org.jmol.constant.EnumVdw;
 import org.jmol.modelset.Atom;
 import org.jmol.modelset.Group;
 import org.jmol.util.ArrayUtil;
@@ -98,8 +99,6 @@
     for (int i = i0; i >= 0; i = (isAll ? i - 1 : bsSelected.nextSetBit(i + 
1))) {
       Atom atom = atoms[i];
       mads[i] = atom.calculateMad(viewer, rd);
-      //System.out.println("atomshape - setSize " + i + " " + rd);
-//      System.out.println("atomSHape " + atom + " mad=" + mads[i]);
       bsSizeSet.setBitTo(i, isVisible);
       atom.setShapeVisibility(myVisibilityFlag, isVisible);
     }
@@ -116,20 +115,34 @@
         setColixAndPalette(colix, pid, i);
       return;
     }
-    if ("colors" == propertyName) {
+    if ("params" == propertyName) {
       isActive = true;
       Object[] data = (Object[]) value;
       short[] colixes = (short[]) data[0];
-      float translucency  = ((Float) data[1]).floatValue();
+      float[] atrans = (float[]) data[1];
+      float[] sizes = (float[]) data[2];
+      RadiusData rd = new RadiusData(null, 0, RadiusData.EnumType.FACTOR,
+          EnumVdw.AUTO);
       if (bsColixSet == null)
         bsColixSet = new BS();
-      for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) {
-        if (i >= colixes.length)
-          continue;
-        short colix = colixes[i];
-        if (translucency > 0.01f)
-          colix = C.getColixTranslucent3(colix, true, translucency);
+      if (bsSizeSet == null)
+        bsSizeSet = new BS();
+      int i0 = bs.nextSetBit(0);
+      if (mads == null && i0 >= 0)
+        mads = new short[atomCount];
+      for (int i = i0, pt = 0; i >= 0; i = bs.nextSetBit(i + 1), pt++) {
+        short colix = (colixes == null ? 0 : colixes[pt]);
+        if (colix == 0)
+          colix = C.INHERIT_ALL;
+        float f = (atrans == null ? 0 : atrans[pt]);
+        if (f > 0.01f)
+          colix = C.getColixTranslucent3(colix, true, f);
         setColixAndPalette(colix, EnumPalette.UNKNOWN.id, i);
+        rd.value = sizes[pt];
+        Atom atom = atoms[i];
+        boolean isVisible = ((mads[i] = atom.calculateMad(viewer, rd)) > 0);
+        bsSizeSet.setBitTo(i, isVisible);
+        atom.setShapeVisibility(myVisibilityFlag, isVisible);
       }
       return;
     }

Modified: trunk/Jmol/src/org/jmol/shapebio/BioShapeCollection.java
===================================================================
--- trunk/Jmol/src/org/jmol/shapebio/BioShapeCollection.java    2013-06-06 
22:17:52 UTC (rev 18304)
+++ trunk/Jmol/src/org/jmol/shapebio/BioShapeCollection.java    2013-06-07 
19:15:26 UTC (rev 18305)
@@ -154,7 +154,7 @@
             bioShape.setTranslucent(isTranslucent, bsSelected, translucency);
         }
       }
-      return;
+      return; 
     }
     if ("colorPhase" == propertyName) {
       // cartoons and ribbons only

Modified: trunk/Jmol/src/org/jmol/util/GData.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/GData.java     2013-06-06 22:17:52 UTC (rev 
18304)
+++ trunk/Jmol/src/org/jmol/util/GData.java     2013-06-07 19:15:26 UTC (rev 
18305)
@@ -13,6 +13,14 @@
 
   public ApiPlatform apiPlatform;
 
+  public boolean translucentCoverOnly = false;
+  public void setTranslucentCoverOnly(boolean TF) {
+    translucentCoverOnly = TF;
+  }
+  public boolean getTranslucentCoverOnly() {
+    return translucentCoverOnly;
+  }
+
   protected int windowWidth, windowHeight;
   protected int displayMinX, displayMaxX, displayMinY, displayMaxY;
   protected boolean antialiasThisFrame;
@@ -517,9 +525,10 @@
 
   /**
    * @param stereoRotationMatrix  
-   * @param isImageWrite TODO
+   * @param translucentMode
+   * @param isImageWrite 
    */
-  public void beginRendering(Matrix3f stereoRotationMatrix, boolean 
isImageWrite) {
+  public void beginRendering(Matrix3f stereoRotationMatrix, boolean 
translucentMode, boolean isImageWrite) {
   }
 
   public void endRendering() {
@@ -681,4 +690,5 @@
   public void renderAllStrings(Object jmolRenderer) {
     // only in Graphics3D
   }
+
 }

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2013-06-06 22:17:52 UTC 
(rev 18304)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2013-06-07 19:15:26 UTC 
(rev 18305)
@@ -11,6 +11,12 @@
 
 ___JmolVersion="13.1.17"
 
+TODO: PyMOL uniqueAtomSettings for selected atom settings
+
+new feature: set translucent
+ -- default TRUE : translucent objects are fully translucent
+ -- FALSE: translucent object are opaque to other translucent objects
+ 
 =============================================================================
 
 JmolVersion="13.1.16_a"
@@ -19,9 +25,6 @@
   -- zoomHeight TRUE
   -- measurementUnits ANGSTROMS
   
-TODO: PyMOL uniqueAtomSettings should override scene color settings
-TODO: PyMOL uniqueAtomSettings for all atom settings
-
 new feature: color BALLS 
   -- distinct from color ATOMS because it doesn't get inherited
   -- for PyMOL compatability with sphere_color 

Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/StateManager.java    2013-06-06 22:17:52 UTC 
(rev 18304)
+++ trunk/Jmol/src/org/jmol/viewer/StateManager.java    2013-06-07 19:15:26 UTC 
(rev 18305)
@@ -156,6 +156,7 @@
         JC.DEFAULT_BOND_TOLERANCE);
     viewer.setFloatProperty("minBondDistance",
         JC.DEFAULT_MIN_BOND_DISTANCE);
+    viewer.setBooleanProperty("translucent", true);
   }
 
   void setJmolDefaults() {
@@ -972,6 +973,7 @@
       setB("testFlag3", testFlag3);
       setB("testFlag4", testFlag4);
       setB("traceAlpha", traceAlpha);
+      setB("translucent", translucent);
       setB("twistedSheets", twistedSheets);
       setB("useArcBall", useArcBall);
       setB("useMinimizationThread", useMinimizationThread);
@@ -1141,6 +1143,7 @@
     boolean rocketBarrels = false;
     float sheetSmoothing = 1; // 0: traceAlpha on alphas for helix, 1 on 
midpoints
     boolean traceAlpha = true;
+    boolean translucent = true;
     boolean twistedSheets = false;
 
     //misc
@@ -1466,7 +1469,7 @@
     
     boolean haveSetStructureList;
     private String[] userDatabases;
-   
+    
     public void setStructureList(float[] list, EnumStructure type) {
       haveSetStructureList = true;
       structureList.put(type, list);

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2013-06-06 22:17:52 UTC (rev 
18304)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2013-06-07 19:15:26 UTC (rev 
18305)
@@ -4173,8 +4173,7 @@
 
     Object image = null;
     try {
-      gdata.beginRendering(transformManager.getStereoRotationMatrix(isDouble),
-          isImageWrite);
+      beginRendering(isDouble, isImageWrite);
       render();
       gdata.endRendering();
       image = gdata.getScreenImage(isImageWrite);
@@ -4186,6 +4185,12 @@
     return image;
   }
 
+  private void beginRendering(boolean isDouble, boolean isImageWrite) {
+    gdata.beginRendering(transformManager.getStereoRotationMatrix(isDouble),
+        global.translucent, 
+        isImageWrite);
+  }
+
   private boolean antialiasDisplay;
 
   public boolean isAntialiased() {
@@ -4249,13 +4254,11 @@
       boolean mergeImages = (graphic == null && isStereoDouble());
       Object imageBuffer;
       if (transformManager.stereoMode.isBiColor()) {
-        gdata.beginRendering(transformManager.getStereoRotationMatrix(true),
-            isImageWrite);
+        beginRendering(true, isImageWrite);
         render();
         gdata.endRendering();
         gdata.snapshotAnaglyphChannelBytes();
-        gdata.beginRendering(transformManager.getStereoRotationMatrix(false),
-            isImageWrite);
+        beginRendering(false, isImageWrite);
         render();
         gdata.endRendering();
         gdata.applyAnaglygh(transformManager.stereoMode,
@@ -6459,6 +6462,10 @@
   private void setBooleanPropertyTok(String key, int tok, boolean value) {
     boolean doRepaint = true;
     switch (tok) {
+    case T.translucent:
+      // 13.1.17 false -> translucent objects are opaque among themselves 
(Pymol transparency_mode 2)
+      global.translucent = value;
+      break;
     case T.cartoonladders:
       // 13.1.15
       global.cartoonLadders = value;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to