Revision: 5226
Author: hansonr
Date: 2006-06-14 19:25:22 -0700 (Wed, 14 Jun 2006)
ViewCVS: http://svn.sourceforge.net/jmol/?rev=5226&view=rev
Log Message:
-----------
bob200603 full support now for multiple models/files with
all mesh-related objects, including pmesh, isosurface,
draw, and polyhedra. Visibility and FIXED issues resolved.
Modified Paths:
--------------
branches/bob200603/Jmol/src/org/jmol/viewer/Draw.java
branches/bob200603/Jmol/src/org/jmol/viewer/DrawRenderer.java
branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java
branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java
branches/bob200603/Jmol/src/org/jmol/viewer/JmolConstants.java
branches/bob200603/Jmol/src/org/jmol/viewer/Mesh.java
branches/bob200603/Jmol/src/org/jmol/viewer/MeshCollection.java
branches/bob200603/Jmol/src/org/jmol/viewer/MeshRenderer.java
branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
branches/bob200603/Jmol/src/org/jmol/viewer/Pmesh.java
branches/bob200603/Jmol/src/org/jmol/viewer/PmeshRenderer.java
branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Draw.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Draw.java 2006-06-14
21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Draw.java 2006-06-15
02:25:22 UTC (rev 5226)
@@ -30,39 +30,47 @@
class Draw extends MeshCollection {
+ // bob hanson [EMAIL PROTECTED] 3/2006
+
final static int MAX_POINTS = 256; // a few extras here
Point3f[] ptList = new Point3f[MAX_POINTS];
int[] ptIdentifiers = new int[MAX_POINTS];
boolean[] reversePoints = new boolean[MAX_POINTS];
boolean[] useVertices = new boolean[MAX_POINTS];
BitSet[] ptBitSets = new BitSet[MAX_POINTS];
+ BitSet bsAllAtoms = new BitSet();
+
Point3f xyz = new Point3f();
int ipt;
- int nPoints = -1;
- int nbitsets = 0;
- int ncoord = 0;
- int nidentifiers = 0;
+ int nPoints;
+ int nbitsets;
+ int ncoord;
+ int nidentifiers;
float newScale;
- float length = Float.MAX_VALUE;
- boolean isFixed = false;
- boolean isVisible = true;
- boolean isPerpendicular = false;
- boolean isVertices = false;
- boolean isPlane = false;
- boolean isReversed = false;
- boolean isRotated45 = false;
- boolean isCrossed = false;
+ float length;
+ boolean isFixed;
+ boolean isVisible;
+ boolean isPerpendicular;
+ boolean isVertices;
+ boolean isPlane;
+ boolean isReversed;
+ boolean isRotated45;
+ boolean isCrossed;
+ boolean isValid;
+
void setProperty(String propertyName, Object value, BitSet bs) {
// System.out.println("draw "+propertyName+" "+value);
- if ("meshID" == propertyName) {
+ if ("init" == propertyName) {
nPoints = -1;
+ ipt = ncoord = nbitsets = nidentifiers = 0;
isFixed = isReversed = isRotated45 = isCrossed = false;
isPlane = isVertices = isPerpendicular = false;
- isVisible = true;
+ isVisible = isValid = true;
length = Float.MAX_VALUE;
- //let pass through
+ super.setProperty("meshID", null, null);
+ return;
}
if ("length" == propertyName) {
@@ -106,7 +114,7 @@
}
if ("points" == propertyName) {
- ipt = nPoints = ncoord = nbitsets = nidentifiers = 0;
+ nPoints = 0;
newScale = ((Integer) value).floatValue() / 100;
if (newScale == 0)
newScale = 1;
@@ -137,6 +145,7 @@
isReversed = isVertices = false;
} else {
System.out.println("draw identifier " + value + " not found");
+ isValid = false;
}
return;
}
@@ -150,13 +159,13 @@
if (viewer.cardinalityOf((BitSet) value) == 0)
return;
ptBitSets[nbitsets++] = (BitSet) value;
+ bsAllAtoms.or((BitSet) value);
nPoints++;
- // System.out.println(nPoints + " " + ptBitSets[nbitsets-1]);
return;
}
if ("set" == propertyName) {
- isValid = setDrawing();
- if (isValid) {
+ currentMesh.isValid = (isValid ? setDrawing() : false);
+ if (currentMesh.isValid) {
currentMesh.scaleDrawing(newScale);
currentMesh.initialize();
currentMesh.setAxes();
@@ -182,89 +191,100 @@
return false;
int nPoly = 0;
int modelCount = viewer.getModelCount();
- if (nbitsets == 0 && nidentifiers == 0 || modelCount < 2)
- isFixed = true;
if (isFixed) {
+ // make just ONE copy
currentMesh.setPolygonCount(1);
currentMesh.ptCenters = null;
currentMesh.modelFlags = null;
- nPoly = setVerticesAndPolygons(-1, nPoly);
+ addFixedPoints();
+ nPoly = setPolygons(nPoly);
} else {
+ // multiple copies, one for each model involved
+ BitSet bsAllModels = new BitSet();
+ if (nbitsets > 0)
+ bsAllModels = viewer.getModelBitSet(bsAllAtoms);
+ else
+ bsAllModels = viewer.getVisibleFramesBitSet();
currentMesh.setPolygonCount(modelCount);
currentMesh.ptCenters = new Point3f[modelCount];
currentMesh.modelFlags = new int[modelCount];
for (int iModel = 0; iModel < modelCount; iModel++) {
- // int n0 = currentMesh.vertexCount;
- nPoly = setVerticesAndPolygons(iModel, nPoly);
- currentMesh.setCenter(iModel);
+ if (bsAllModels.get(iModel)) {
+ // int n0 = currentMesh.vertexCount;
+ addModelPoints(iModel);
+ nPoly = setPolygons(nPoly);
+ currentMesh.setCenter(iModel);
+ }
}
}
currentMesh.setCenter(-1);
return true;
}
- private int setVerticesAndPolygons(int iModel, int nPoly) {
+ private void addFixedPoints() {
nPoints = ncoord;
- // [x,y,z] points are already defined in ptList
- if (iModel < 0) {
- // add in [drawID] references as overall centers
- for (int i = 0; i < nidentifiers; i++) {
- Mesh m = meshes[ptIdentifiers[i]];
- if (isPlane || isPerpendicular || useVertices[i]) {
- if (reversePoints[i]) {
- for (ipt = m.drawVertexCount; --ipt >= 0;)
- addPoint(m.vertices[ipt]);
- } else {
- for (ipt = 0; ipt < m.drawVertexCount; ipt++) {
- //System.out.println(nPoints +" "+m.meshID+ "
count="+m.drawVertexCount + " length=" + m.vertices.length);
- addPoint(m.vertices[ipt]);
-
- }
- }
+ // {x,y,z} points are already defined in ptList
+ // add in $drawID references as overall centers or individual points
+ // under certain circumstances
+ for (int i = 0; i < nidentifiers; i++) {
+ Mesh m = meshes[ptIdentifiers[i]];
+ if (isPlane || isPerpendicular || useVertices[i]) {
+ if (reversePoints[i]) {
+ for (ipt = m.drawVertexCount; --ipt >= 0;)
+ addPoint(m.vertices[ipt]);
} else {
- addPoint(m.ptCenter);
+ for (ipt = 0; ipt < m.drawVertexCount; ipt++)
+ addPoint(m.vertices[ipt]);
}
+ } else {
+ addPoint(m.ptCenter);
}
- // add in (atom set) references as overall centers
- for (int i = 0; i < nbitsets; i++)
- addPoint(viewer.getAtomSetCenter(ptBitSets[i]));
- } else {
- // [drawID] references may be fixed or not
- for (int i = 0; i < nidentifiers; i++) {
- if (meshes[ptIdentifiers[i]].ptCenters == null
- || meshes[ptIdentifiers[i]].ptCenters[iModel] == null) {
- addPoint(meshes[ptIdentifiers[i]].ptCenter);
- } else {
- addPoint(meshes[ptIdentifiers[i]].ptCenters[iModel]);
- }
+ }
+ // add in (atom set) references as overall average centers
+ for (int i = 0; i < nbitsets; i++)
+ addPoint(viewer.getAtomSetCenter(ptBitSets[i]));
+ }
+
+ void addPoint(Point3f newPt) {
+ ptList[nPoints++] = new Point3f(newPt);
+ if (nPoints > MAX_POINTS)
+ nPoints = MAX_POINTS;
+ }
+
+ private void addModelPoints(int iModel) {
+ nPoints = ncoord;
+ // {x,y,z} points are already defined in ptList
+ // $drawID references may be fixed or not
+ for (int i = 0; i < nidentifiers; i++) {
+ if (meshes[ptIdentifiers[i]].ptCenters == null
+ || meshes[ptIdentifiers[i]].ptCenters[iModel] == null) {
+ addPoint(meshes[ptIdentifiers[i]].ptCenter);
+ } else {
+ addPoint(meshes[ptIdentifiers[i]].ptCenters[iModel]);
}
- // (atom set) references must be filtered for relevant model
- // note that if a model doesn't have a relevant point, one may
- // get a line instead of a plane, a point instead of a line, etc.
- BitSet bsModel = viewer.getModelAtomBitSet(iModel);
- for (int i = 0; i < nbitsets; i++) {
- BitSet bs = (BitSet) ptBitSets[i].clone();
- bs.and(bsModel);
- if (viewer.cardinalityOf(bs) > 0) {
- addPoint(viewer.getAtomSetCenter(bs));
- }
+ }
+ // (atom set) references must be filtered for relevant model
+ // note that if a model doesn't have a relevant point, one may
+ // get a line instead of a plane, a point instead of a line, etc.
+ BitSet bsModel = viewer.getModelAtomBitSet(iModel);
+ for (int i = 0; i < nbitsets; i++) {
+ BitSet bs = (BitSet) ptBitSets[i].clone();
+ bs.and(bsModel);
+ if (viewer.cardinalityOf(bs) > 0) {
+ addPoint(viewer.getAtomSetCenter(bs));
}
}
+ }
+
+ private int setPolygons(int nPoly) {
if (nPoints ==4 && isCrossed) {
Point3f pt = new Point3f(ptList[1]);
ptList[1].set(ptList[2]);
ptList[2].set(pt);
}
-
return currentMesh.setPolygon(ptList, nPoints, nPoly, isPlane,
isPerpendicular, isRotated45, length);
}
-
- void addPoint(Point3f newPt) {
- ptList[nPoints++] = new Point3f(newPt);
- if (nPoints > MAX_POINTS)
- nPoints = MAX_POINTS;
- }
void setVisibilityFlags(BitSet bs) {
/*
@@ -274,11 +294,13 @@
*/
int modelCount = viewer.getModelCount();
for (int i = meshCount; --i >= 0;) {
- meshes[i].visibilityFlags = myVisibilityFlag;
- if (meshes[i].modelFlags == null)
+ Mesh m = meshes[i];
+ m.visibilityFlags = (m.isValid ? myVisibilityFlag : 0);
+ if (m.modelFlags == null)
continue;
- for (int iModel = modelCount; --iModel >= 0;)
- meshes[i].modelFlags[iModel] = (bs.get(iModel) ? 1 : 0);
+ for (int iModel = modelCount; --iModel >= 0;) {
+ m.modelFlags[iModel] = (bs.get(iModel) ? 1 : 0);
+ }
}
}
@@ -289,19 +311,19 @@
int dmin2 = MAX_OBJECT_CLICK_DISTANCE_SQUARED;
int nearestModel = 0;
int nearestVertex = 0;
- Mesh mesh = null;
Mesh pickedMesh = null;
for (int i = meshCount; --i >= 0;) {
- mesh = meshes[i];
- if (mesh.drawVertexCount == 2) {
- for (int iModel = modelCount; --iModel >= 0;) {
- if (mesh.modelFlags != null && mesh.modelFlags[iModel] == 0)
+ Mesh m = meshes[i];
+ if (m.drawVertexCount == 2 && m.visibilityFlags != 0) {
+ int mCount = (m.modelFlags == null ? 1 : modelCount);
+ for (int iModel = mCount; --iModel >= 0;) {
+ if (m.modelFlags != null && m.modelFlags[iModel] == 0)
continue;
- for (int iVertex = mesh.polygonIndexes[iModel].length; --iVertex >=
0;) {
+ for (int iVertex = m.polygonIndexes[iModel].length; --iVertex >= 0;)
{
int d2 = coordinateInRange(x, y,
- mesh.vertices[mesh.polygonIndexes[iModel][iVertex]], dmin2);
+ m.vertices[m.polygonIndexes[iModel][iVertex]], dmin2);
if (d2 >= 0) {
- pickedMesh = mesh;
+ pickedMesh = m;
dmin2 = d2;
nearestModel = iModel;
nearestVertex = iVertex;
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/DrawRenderer.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/DrawRenderer.java
2006-06-14 21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/DrawRenderer.java
2006-06-15 02:25:22 UTC (rev 5226)
@@ -33,10 +33,7 @@
*
*/
Draw draw = (Draw) shape;
- if (!draw.isValid)
- return;
- for (int i = draw.meshCount; --i >= 0;) {
+ for (int i = draw.meshCount; --i >= 0;)
render1(draw.meshes[i]);
- }
}
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java 2006-06-14
21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Eval.java 2006-06-15
02:25:22 UTC (rev 5226)
@@ -1907,6 +1907,7 @@
}
void refresh() {
+ viewer.setTainted(true);
viewer.requestRepaintAndWait();
}
@@ -2246,7 +2247,7 @@
default:
numberExpected();
}
- viewer.requestRepaintAndWait();
+ refresh();
millis -= System.currentTimeMillis() - timeBegin;
if (millis > 0) {
viewer.popHoldRepaint();
@@ -3734,15 +3735,26 @@
void pmesh() throws ScriptException {
viewer.loadShape(JmolConstants.SHAPE_PMESH);
- viewer.setShapeProperty(JmolConstants.SHAPE_PMESH, "meshID", null);
+ viewer.setShapeProperty(JmolConstants.SHAPE_PMESH, "init", null);
Object t;
for (int i = 1; i < statementLength; ++i) {
String propertyName = null;
Object propertyValue = null;
switch (statement[i].tok) {
case Token.identifier:
+ propertyValue = statement[i].value;
+ String str = ((String) propertyValue);
+ if (str.equalsIgnoreCase("FIXED")) {
+ propertyName = "fixed";
+ propertyValue = Boolean.TRUE;
+ break;
+ }
+ if (str.equalsIgnoreCase("MODELBASED")) {
+ propertyName = "fixed";
+ propertyValue = Boolean.FALSE;
+ break;
+ }
propertyName = "meshID";
- propertyValue = statement[i].value;
break;
case Token.string:
String filename = (String) statement[i].value;
@@ -3760,7 +3772,8 @@
data = viewer.simpleReplace(data, "}", " ");
data = viewer.simpleReplace(data, "|", "\n");
data = viewer.simpleReplace(data, "\n\n", "\n");
- System.out.println("pmesh inline data:\n" + data);
+ if (logMessages)
+ System.out.println("pmesh inline data:\n" + data);
t = viewer.getBufferedReaderForString(data);
} else {
stringOrIdentifierExpected();
@@ -3805,12 +3818,11 @@
void draw() throws ScriptException {
viewer.loadShape(JmolConstants.SHAPE_DRAW);
- viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, "meshID", null);
+ viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, "init", null);
boolean havePoints = false;
boolean isInitialized = false;
int intScale = 0;
- boolean isFixed = false;
for (int i = 1; i < statementLength; ++i) {
//System.out.println(statement[i]);
String propertyName = null;
@@ -3821,27 +3833,34 @@
case Token.identifier:
propertyName = "meshID";
propertyValue = token.value;
- if (((String) propertyValue).equalsIgnoreCase("FIXED")) {
- isFixed = true;
- continue;
+ String str = (String) token.value;
+ if (str.equalsIgnoreCase("FIXED")) {
+ propertyName = "fixed";
+ propertyValue = Boolean.TRUE;
+ break;
}
- if (((String) propertyValue).equalsIgnoreCase("PLANE")) {
+ if (str.equalsIgnoreCase("MODELBASED")) {
+ propertyName = "fixed";
+ propertyValue = Boolean.FALSE;
+ break;
+ }
+ if (str.equalsIgnoreCase("PLANE")) {
propertyName = "plane";
}
- if (((String) propertyValue).equalsIgnoreCase("CROSSED")) {
+ if (str.equalsIgnoreCase("CROSSED")) {
propertyName = "crossed";
}
- if (((String) propertyValue).equalsIgnoreCase("VERTICES")) {
+ if (str.equalsIgnoreCase("VERTICES")) {
propertyName = "vertices";
}
- if (((String) propertyValue).equalsIgnoreCase("REVERSE")) {
+ if (str.equalsIgnoreCase("REVERSE")) {
propertyName = "reverse";
}
- if (((String) propertyValue).equalsIgnoreCase("ROTATE45")) {
+ if (str.equalsIgnoreCase("ROTATE45")) {
propertyName = "rotate45";
}
- if (((String) propertyValue).equalsIgnoreCase("PERP")
- || ((String) propertyValue).equalsIgnoreCase("PERPENDICULAR")) {
+ if (str.equalsIgnoreCase("PERP")
+ || str.equalsIgnoreCase("PERPENDICULAR")) {
propertyName = "perp";
}
break;
@@ -3903,9 +3922,6 @@
if (havePoints && !isInitialized) {
viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, "points",
new Integer(intScale));
- if (isFixed || viewer.getModelCount() == 1)
- viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, "fixed",
- Boolean.TRUE);
isInitialized = true;
}
if (propertyName != null)
@@ -4122,6 +4138,12 @@
i = pcLastExpressionInstruction;
break;
}
+ if (str.equalsIgnoreCase("EXCENTRICITY")) {
+ propertyName = "anisotropy";
+ propertyValue = getCoordinate(i + 1, false);
+ i = pcLastExpressionInstruction;
+ break;
+ }
if (str.equalsIgnoreCase("FIXED")) {
propertyName = "fixed";
propertyValue = Boolean.TRUE;
@@ -4132,7 +4154,6 @@
propertyValue = Boolean.FALSE;
break;
}
-
if (str.equalsIgnoreCase("sign")) {
signPt = i + 1;
propertyName = "sign";
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java 2006-06-14
21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Frame.java 2006-06-15
02:25:22 UTC (rev 5226)
@@ -2077,6 +2077,14 @@
return bs;
}
+ BitSet getModelBitSet(BitSet atomList) {
+ BitSet bs = new BitSet();
+ for (int i = 0; i < atomCount; i++)
+ if (atomList.get(i))
+ bs.set(atoms[i].modelIndex);
+ return bs;
+ }
+
void setLabel(String label, int atomIndex) {
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/JmolConstants.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/JmolConstants.java
2006-06-14 21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/JmolConstants.java
2006-06-15 02:25:22 UTC (rev 5226)
@@ -39,7 +39,7 @@
// for now, just update this by hand
// perhaps use ant filter later ... but mth doesn't like it :-(
public final static String copyright = "(C) 2006 Jmol Development";
- public final static String version = "10.x.13(branch bob200603)";
+ public final static String version = "10.x.13b(branch bob200603)";
public final static String cvsDate = "$Date$";
public final static String date = cvsDate.substring(7, 23);
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Mesh.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Mesh.java 2006-06-14
21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Mesh.java 2006-06-15
02:25:22 UTC (rev 5226)
@@ -34,7 +34,7 @@
class Mesh {
Viewer viewer;
String meshID;
-
+ boolean isValid = true;
String jvxlFileHeader;
String jvxlDefinitionLine;
String jvxlSurfaceData;
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/MeshCollection.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/MeshCollection.java
2006-06-14 21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/MeshCollection.java
2006-06-15 02:25:22 UTC (rev 5226)
@@ -35,8 +35,7 @@
int meshCount;
Mesh[] meshes = new Mesh[4];
Mesh currentMesh;
- boolean isValid = false;
-
+
void initShape() {
colix = Graphics3D.ORANGE;
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/MeshRenderer.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/MeshRenderer.java
2006-06-14 21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/MeshRenderer.java
2006-06-15 02:25:22 UTC (rev 5226)
@@ -35,7 +35,7 @@
short backgroundColix;
void render1(Mesh mesh) {
- if (mesh.visibilityFlags == 0)
+ if (mesh.visibilityFlags == 0 || !mesh.isValid)
return;
int vertexCount = mesh.vertexCount;
if (vertexCount == 0)
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
2006-06-14 21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/ModelManager.java
2006-06-15 02:25:22 UTC (rev 5226)
@@ -528,6 +528,10 @@
return (frame == null) ? null : frame.getModelAtomBitSet(modelIndex);
}
+ BitSet getModelBitSet(BitSet atomList) {
+ return (frame == null) ? null : frame.getModelBitSet(atomList);
+ }
+
BitSet getMoleculeBitSet(int modelIndex) {
return (frame == null) ? null : frame.getMoleculeBitSet(modelIndex);
}
@@ -1283,17 +1287,20 @@
int ballVisibilityFlag =
viewer.getShapeVisibilityFlag(JmolConstants.SHAPE_BALLS);
int haloVisibilityFlag =
viewer.getShapeVisibilityFlag(JmolConstants.SHAPE_HALO);
- //the three isosurface-related objects must be set individually
+ //the four mesh-related objects must be set individually
BitSet bs = viewer.getVisibleFramesBitSet();
Draw draw = (Draw) frame.shapes[JmolConstants.SHAPE_DRAW];
if (draw != null)
draw.setVisibilityFlags(bs);
- Polyhedra p = (Polyhedra) frame.shapes[JmolConstants.SHAPE_POLYHEDRA];
- if (p != null)
- p.setVisibilityFlags(bs);
+ Polyhedra poly = (Polyhedra) frame.shapes[JmolConstants.SHAPE_POLYHEDRA];
+ if (poly != null)
+ poly.setVisibilityFlags(bs);
Isosurface surf = (Isosurface)
frame.shapes[JmolConstants.SHAPE_ISOSURFACE];
if (surf != null)
surf.setVisibilityFlags(bs);
+ Pmesh pmesh = (Pmesh) frame.shapes[JmolConstants.SHAPE_PMESH];
+ if (pmesh != null)
+ pmesh.setVisibilityFlags(bs);
for (int i = frame.atomCount; --i >= 0; ) {
Atom atom = atoms[i];
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Pmesh.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Pmesh.java 2006-06-14
21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Pmesh.java 2006-06-15
02:25:22 UTC (rev 5226)
@@ -30,25 +30,44 @@
class Pmesh extends MeshCollection {
- boolean isOnePerLine = false;
+ boolean isOnePerLine;
+ boolean isFixed;
+
void setProperty(String propertyName, Object value, BitSet bs) {
- isOnePerLine = false;
+ //System.out.println(propertyName + " "+ value);
+
+ if ("init" == propertyName) {
+ isFixed = false;
+ isOnePerLine = false;
+ super.setProperty("meshID", null, null);
+ return;
+ }
+
+ if ("fixed" == propertyName) {
+ isFixed = ((Boolean) value).booleanValue();
+ setModelIndex();
+ return;
+ }
+
if ("bufferedReaderOnePerLine" == propertyName) {
propertyName = "bufferedReader";
isOnePerLine = true;
}
+
if ("bufferedReader" == propertyName) {
BufferedReader br = (BufferedReader)value;
if (currentMesh == null)
allocMesh(null);
currentMesh.clear("pmesh");
- isValid = readPmesh(br);
- if(isValid) {
+ currentMesh.isValid = readPmesh(br);
+ if(currentMesh.isValid) {
currentMesh.initialize();
currentMesh.visible = true;
}
+ setModelIndex();
}
+
super.setProperty(propertyName, value, bs);
}
@@ -120,7 +139,7 @@
int vertexIndexCount = parseInt(br.readLine());
if (vertexIndexCount < 2) {
viewer.scriptStatus("pmesh ERROR: each polygon must have at least two
verticies indicated");
- isValid = false;
+ currentMesh.isValid = false;
return null;
}
int vertexCount = vertexIndexCount - 1;
@@ -134,9 +153,37 @@
if (extraVertex != vertices[0]) {
// System.out.println("?Que? polygon is not complete");
viewer.scriptStatus("pmesh Error: last polygon point reference (" +
extraVertex + ") is not the same as the first (" + vertices[0] + ")");
- isValid = false;
+ currentMesh.isValid = false;
throw new NullPointerException();
}
return vertices;
}
+
+ void setModelIndex() {
+ if (currentMesh == null)
+ return;
+ currentMesh.visible = true;
+ int modelCount = viewer.getModelCount();
+ if (modelCount < 2)
+ isFixed = true;
+ if (isFixed) {
+ currentMesh.modelIndex = -1;
+ } else {
+ currentMesh.modelIndex = viewer.getDisplayModelIndex();
+ }
+ }
+
+
+ void setVisibilityFlags(BitSet bs) {
+ /*
+ * set all fixed objects visible; others based on model being displayed
+ *
+ */
+ for (int i = meshCount; --i >= 0;) {
+ Mesh mesh = meshes[i];
+ mesh.visibilityFlags = (mesh.visible
+ && (mesh.modelIndex < 0 || bs.get(mesh.modelIndex)) ?
myVisibilityFlag
+ : 0);
+ }
+ }
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/PmeshRenderer.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/PmeshRenderer.java
2006-06-14 21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/PmeshRenderer.java
2006-06-15 02:25:22 UTC (rev 5226)
@@ -26,11 +26,8 @@
class PmeshRenderer extends MeshRenderer {
void render() {
- Pmesh pmesh = (Pmesh)shape;
- if (!pmesh.isValid)
- return;
- for (int i = pmesh.meshCount; --i >= 0; ) {
+ Pmesh pmesh = (Pmesh) shape;
+ for (int i = pmesh.meshCount; --i >= 0;)
render1(pmesh.meshes[i]);
- }
}
}
Modified: branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java 2006-06-14
21:50:13 UTC (rev 5225)
+++ branches/bob200603/Jmol/src/org/jmol/viewer/Viewer.java 2006-06-15
02:25:22 UTC (rev 5226)
@@ -1227,6 +1227,10 @@
BitSet getModelAtomBitSet(int modelIndex) {
return modelManager.getModelAtomBitSet(modelIndex);
}
+
+ BitSet getModelBitSet(BitSet atomList) {
+ return modelManager.getModelBitSet(atomList);
+ }
Object getClientFile() {
// DEPRECATED - use getExportJmolAdapter()
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Jmol-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-commits