From: <ha...@us...> - 2015-10-17 23:11:38
|
Revision: 20831 http://sourceforge.net/p/jmol/code/20831 Author: hansonr Date: 2015-10-17 23:11:35 +0000 (Sat, 17 Oct 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.10.17" bug fix: if (...) \n { .... not working bug fix: CIF reader will read empty second model for IUCr files with terminal data_global block bug fix: polyhedra bonds unitcell can cause error in HTML5 bug fix: nucleic backbone should include O atoms on P and C bug fix: nucleic spine should not include C2' bug fix: pmesh/isosurface RESOLUTION 0.0001 with plane can cause loss of some or all of the plane -- resolution 0.0001 creates just a minimum of triangles to construct the plane. bug fix: set testflag4;isosurface ... ; does not generate normals bug fix: (Application) set refreshing false shows Jmol console in model frame (Java bug??) Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/VolumeDataReader.java branches/v14_4/Jmol/src/org/jmol/modelsetbio/Resolver.java branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java branches/v14_4/Jmol/src/org/jmol/viewer/JC.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -356,7 +356,10 @@ @Override protected void finalizeSubclassReader() throws Exception { - if (!isMMCIF || !finalizeSubclass()) + // added check for final data_global + if (asc.iSet > 0 && asc.getAtomSetAtomCount(asc.iSet) == 0) + asc.atomSetCount--; + else if (!isMMCIF || !finalizeSubclass()) applySymmetryAndSetTrajectory(); int n = asc.atomSetCount; if (n > 1) Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/VolumeDataReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/VolumeDataReader.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/VolumeDataReader.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -203,6 +203,8 @@ nGrid = gridMax; } } + if (nGrid == 1) + nGrid = 2; ptsPerAngstrom = (nGrid - 1) / range; if (ptsPerAngstrom < minPointsPerAngstrom) { ptsPerAngstrom = minPointsPerAngstrom; Modified: branches/v14_4/Jmol/src/org/jmol/modelsetbio/Resolver.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/modelsetbio/Resolver.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/modelsetbio/Resolver.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -1419,7 +1419,7 @@ "C5'", // 7 - sugar 5' carbon SPINE "C4'", // 8 - sugar ring 4' carbon SPINE "C3'", // 9 - sugar ring 3' carbon SPINE - "O3'", // 10 - sugar 3' oxygen + "O3'", // 10 - sugar 3' oxygen SPINE "C2'", // 11 - sugar ring 2' carbon "C1'", // 12 - sugar ring 1' carbon // Phosphorus is not required for a nucleic group because @@ -1541,8 +1541,8 @@ "H2''", "HO2'", - "O3P", // - third equivalent oxygen on phosphorus of phosphate - "OP3", // - third equivalent oxygen on phosphorus of phosphate -- new designation + "O3P", // 99 - third equivalent oxygen on phosphorus of phosphate + "OP3", //100 - third equivalent oxygen on phosphorus of phosphate -- new designation }; Modified: branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -529,17 +529,15 @@ for (int i = vertexCount; --i >= 0;) { if (vertexValues != null && Float.isNaN(vertexValues[i])) continue; - if (i > 100) - continue; pt1f.setT(vertices[i]); short n = mesh.normixes[i]; // -n is an intensity2sided and does not correspond to a true normal // index if (n >= 0) { - pt1f.scaleAdd2(3, vertexVectors[n], pt1f); - tm.transformPtScrT3(pt1f, pt1f); + pt2f.scaleAdd2(0.3f, vertexVectors[n], pt1f); + tm.transformPtScrT3(pt2f, pt2f); pt1f.set(screens[i].x, screens[i].y, screens[i].z); - g3d.drawLineAB(pt1f, pt1f); + g3d.drawLineAB(pt1f, pt2f); } } } Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -721,11 +721,10 @@ if (lastFlowCommand == null) { parenCount = setBraceCount = braceCount = 0; ltoken.remove(0); - iBrace++; T t = ContextToken.newContext(true); addTokenToPrefix(setCommand(t)); pushContext(t); - vBraces.addLast(tokenCommand); + addBrace(tokenCommand); } else { parenCount = setBraceCount = 0; setCommand(lastFlowCommand); @@ -813,7 +812,8 @@ } if (endOfLine) { - if (!haveENDIF && flowContext != null && flowContext.checkForceEndIf(-1)) { + if (!haveENDIF && flowContext != null + && flowContext.checkForceEndIf(-1)) { boolean isOneLine = (flowContext.addLine == 0); // if (....) xxxxx; if (isComment) { if (!isOneLine) { @@ -855,6 +855,14 @@ return OK; } + /** + * @param t could be { or } or a command such as FOR or WHILE + */ + private void addBrace(T t) { + vBraces.addLast(t); + iBrace++; + } + private void pushContext(T t) { pushCount++; vPush.addLast(t); @@ -869,16 +877,16 @@ * * more than two tokens: * - * not a script function xxxx.spt(3,4,5) + * xxxx.spt(3,4,5) * * @return true if found */ private boolean wasImpliedScript() { - if (nTokens >= 2 && (tokCommand == T.script || tokCommand == T.macro) && checkImpliedScriptCmd) { + if (checkImpliedScriptCmd && nTokens >= 2 && (tokCommand == T.script || tokCommand == T.macro)) { String s = (nTokens == 2 ? lastToken.value.toString().toUpperCase() : null); - if (nTokens > 2 ? !(tokAt(2) == T.leftparen && ltoken.get(1).value - .toString().endsWith(".spt")) : s.endsWith(".SORT") + if (nTokens > 2 ? !(tokAt(2) == T.leftparen && ltoken.get(1).value.toString().endsWith(".spt")) + : s.endsWith(".SORT") || s.endsWith(".REVERSE") || s.endsWith(".POP") || s.indexOf(".SORT(") >= 0 || s.indexOf(".REVERSE(") >= 0 || s.indexOf(".POP(") >= 0 || s.indexOf(".PUSH(") >= 0 @@ -983,7 +991,7 @@ ltoken.add(0, setCommand(token)); } - private void getPrefixToken() { + private int getPrefixToken() { ident = script.substring(ichToken, ichToken + cchToken); identLC = ident.toLowerCase(); boolean isUserVar = lastToken.tok != T.per && !isDotDot && isContextVariable(identLC); @@ -1033,7 +1041,7 @@ // myName is just in case this is being used as a key to a hash theToken = SV.newSV((identLC.indexOf("property_") == 0 ? T.property : T.identifier), Integer.MAX_VALUE, ident).setName(myName); } - theTok = theToken.tok; + return theTok = theToken.tok; } /** @@ -1381,14 +1389,14 @@ private int parseKnownToken() { - getPrefixToken(); + int tok = getPrefixToken(); // specific token-based issues depend upon where we are in the command T token; if (isDotDot) { - if (theTok == T.leftsquare) { + if (tok == T.leftsquare) { bracketCount++; } else { addTokenToPrefix(T.o(T.string, ident)); @@ -1398,16 +1406,16 @@ return CONTINUE; } if (tokLastMath != 0) - tokLastMath = theTok; + tokLastMath = tok; if (flowContext != null && flowContext.token.tok == T.switchcmd - && flowContext.var != null && theTok != T.casecmd - && theTok != T.defaultcmd && lastToken.tok != T.switchcmd) + && flowContext.var != null && tok != T.casecmd + && tok != T.defaultcmd && lastToken.tok != T.switchcmd) return ERROR(ERROR_badContext, ident); - if (lastToken.tok == T.define && theTok != T.leftbrace && nTokens != 1) { - addTokenToPrefix(theTok == T.define ? lastToken : T.o(T.string, ident)); + if (lastToken.tok == T.define && tok != T.leftbrace && nTokens != 1) { + addTokenToPrefix(tok == T.define ? lastToken : T.o(T.string, ident)); return CONTINUE; } - switch (theTok) { + switch (tok) { case T.identifier: if (nTokens == 0 && !checkImpliedScriptCmd) { if (ident.charAt(0) == '\'') { @@ -1500,13 +1508,13 @@ checkNewSetCommand(); if (isNewSet && parenCount == 0 && bracketCount == 0 && ichToken <= setEqualPt) { - tokenizePlusPlus(theTok, false); + tokenizePlusPlus(tok, false); return CONTINUE; } else if (nSemiSkip == forPoint3 && nTokens == ptSemi + 2) { token = lastToken; addTokenToPrefix(T.tokenEquals); addTokenToPrefix(token); - addTokenToPrefix(theTok == T.minusMinus ? T.tokenMinus : T.tokenPlus); + addTokenToPrefix(tok == T.minusMinus ? T.tokenMinus : T.tokenPlus); addTokenToPrefix(T.i(1)); return CONTINUE; } @@ -1562,10 +1570,10 @@ if (!wasImpliedScript()) { // because if we need to repeat due to a.xxx = .... // then we don't want to force the end yet + // for (a in {selected}) { wrap(a, vnm, f) } + braceCount = parenCount = nSemiSkip = 0; - if (theToken.tok != T.casecmd && theToken.tok != T.defaultcmd) - vBraces.addLast(theToken); - iBrace++; + addBrace(theToken); isEndOfCommand = true; ichEnd = ichToken; } @@ -1677,13 +1685,13 @@ if (lltoken.get(iCommand - 1)[0].tok == T.end && lastFlowContext != null && lastFlowContext.forceEndIf && lastFlowContext.addLine > 0 - && isFlowIfContextOK(lastFlowContext, tokCommand)) { + && isFlowIfContextOK(lastFlowContext)) { flowContext = lastFlowContext; flowContext.forceEndIf = true; lltoken.remove(--iCommand); } else if (flowContext != null && flowContext.addLine > 0) { while (flowContext != null - && !isFlowIfContextOK(flowContext, tokCommand)) { + && !isFlowIfContextOK(flowContext)) { if (flowContext.checkForceEndIf(0)) { forceFlowEnd(flowContext.token); processTokenList(iLine, isFull); @@ -1736,8 +1744,7 @@ } if (theTok == T.rightbrace) { // if }, just push onto vBrace, but NOT onto ltoken - vBraces.addLast(tokenCommand); - iBrace++; + addBrace(tokenCommand); tokCommand = T.nada; return CONTINUE; } @@ -2075,19 +2082,36 @@ private boolean checkFlowStartBrace(boolean atEnd) { int tok = tokCommand; - if ((!T.tokAttr(tok, T.flowCommand) || tok == T.breakcmd || tok == T.continuecmd)) + switch (tok) { + default: + if (T.tokAttr(tok, T.flowCommand)) { + if (atEnd) { + switch (tok) { + case T.casecmd: + case T.defaultcmd: + break; + default: + flowContext.addLine = 0; + addBrace(tokenCommand); + lastFlowCommand = null; + break; + } + parenCount = braceCount = 0; + } + return true; + } + //$FALL-THROUGH$ + case T.breakcmd: + case T.continuecmd: return false; - if (atEnd) { - if (tokenCommand.tok != T.casecmd && tokenCommand.tok != T.defaultcmd) { - iBrace++; - vBraces.addLast(tokenCommand); - lastFlowCommand = null; - } - parenCount = braceCount = 0; } - return true; } + /** + * process a pending explicit right brace } + * + * @return continuation status + */ private int checkFlowEndBrace() { if (iBrace <= 0 || vBraces.get(iBrace - 1).tok != T.rightbrace) @@ -2096,6 +2120,10 @@ vBraces.remove(--iBrace); T token = vBraces.remove(--iBrace); if (theTok == T.leftbrace) { + // + // } + // { + // braceCount--; parenCount--; } @@ -2163,7 +2191,7 @@ int pt = lltoken.size(); switch (tokCommand) { case T.endifcmd: - if (!isFlowIfContextOK(flowContext, tokCommand)){ + if (!isFlowIfContextOK(flowContext)){ if (!haveENDIF) return RESTART; errorStr(ERROR_badContext, ident); @@ -2206,10 +2234,10 @@ break; case T.elseif: case T.elsecmd: - if (flowContext != null && !isFlowIfContextOK(flowContext, tokCommand)) { + if (flowContext != null && !isFlowIfContextOK(flowContext)) { flowContext = flowContext.parent; } - if (!isFlowIfContextOK(flowContext, tokCommand)) { + if (!isFlowIfContextOK(flowContext)) { if (!haveENDIF) return RESTART; errorStr(ERROR_badContext, ident); @@ -2269,23 +2297,42 @@ return OK; } + /** + * generate a new end token with pointer to the start or to default as the intValue + * and set it as the command token + * + * @param tokCommand end or endif + * @param ident "end" or "endif" + */ private void setFlowEnd(int tokCommand, String ident) { setCommand(T.tv(tokCommand, (flowContext.ptDefault > 0 ? flowContext.ptDefault : -flowContext.pt0), ident)); //copy } - - private boolean isFlowIfContextOK(ScriptFlowContext f, int tokCommand) { + /** + * check for proper sequence: if...[any number of elseif]...[zero or one else]...[endif] + * @param f + * @return true if OK + */ + private boolean isFlowIfContextOK(ScriptFlowContext f) { switch (f == null ? T.nada : f.token.tok) { - case T.elsecmd: - return tokCommand != T.elsecmd; case T.ifcmd: case T.elseif: return true; + case T.elsecmd: + return tokCommand != T.elsecmd; } return false; } + /** + * + * @param tok the XXX in END XXX + * @param ident + * @param pt1 + * @param isExplicitEnd actual END IF or END FOR, etc. + * @return true if no error + */ private boolean checkFlowEnd(int tok, String ident, int pt1, boolean isExplicitEnd) { if (isExplicitEnd) { @@ -2296,8 +2343,7 @@ switch (flowContext.token.tok) { case T.function: case T.parallel: - case T.trycmd: - + case T.trycmd: break; default: setFlowEnd(T.end, "end"); Modified: branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -871,7 +871,14 @@ p10[3] = -((-p10[3]) ^ (1 << i0)); p1[3] = -((-p1[3]) ^ (1 << i)); b = (int[])((Object[]) o)[2]; - faceList.removeObj(b); + for (int j = faceList.size(); --j >= 0;) { + int[] f = faceList.get(j); + if (f[0] == b[0] && f[1] == b[1]) { + faceList.remove(j); + break; + } + } + // not supported for JavaScript faceList.removeObj(b); } return true; } Modified: branches/v14_4/Jmol/src/org/jmol/viewer/JC.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -621,9 +621,9 @@ // structure related // "@alpha _a=2", // rasmol doc says "approximately *.CA" - whatever? - "@_bb protein&_a>=1&_a<6 | nucleic& _a>=6&_a<14", // no H atoms + "@_bb protein&_a>=1&_a<6 | nucleic&(_a>=6&_a<14|_a>=73&&_a<=79||_a==99||_a=100)", // no H atoms "@backbone _bb | _H && connected(single, _bb)", - "@spine protein&_a>=1&_a<4|nucleic&_a>=6&_a<14&_a!=12", + "@spine protein&_a>=1&_a<4|nucleic&(_a>=6&_a<11|_a=13)", "@sidechain (protein,nucleic) & !backbone", "@base nucleic & !backbone", "@dynamic_flatring search('[a]')" Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-17 23:11:35 UTC (rev 20831) @@ -7,12 +7,27 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates +Jmol.___JmolVersion="14.4.0_2015.10.17" + +bug fix: if (...) \n { .... not working +bug fix: CIF reader will read empty second model for IUCr files with terminal data_global block +bug fix: polyhedra bonds unitcell can cause error in HTML5 +bug fix: nucleic backbone should include O atoms on P and C +bug fix: nucleic spine should not include C2' +bug fix: pmesh/isosurface RESOLUTION 0.0001 with plane can cause loss of some or all of the plane + -- resolution 0.0001 creates just a minimum of triangles to construct the plane. +bug fix: set testflag4;isosurface ... ; does not generate normals +bug fix: (Application) set refreshing false shows Jmol console in model frame (Java bug??) + Jmol.___JmolVersion="14.4.0_2015.10.14" +NOTE: GoDaddy's inadvertent forcing of revocation of the secure certificate for Jmol + prior to its expiration has disabled ALL Jmol applets created since Oct 15, 2014. + This is a mandatory upgrade. + bug fix: SHOW PROPERTY IDENTIFY crashes Jmol. - JmolVersion="14.4.0_2015.10.13" released Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java 2015-10-17 23:11:03 UTC (rev 20830) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java 2015-10-17 23:11:35 UTC (rev 20831) @@ -3558,7 +3558,7 @@ private boolean updateWindow(int width, int height) { //System.out.println("Viewer updateWindow " + width + " " + height); if (!refreshing || creatingImage) - return false; + return (refreshing ? false : !isJS); if (isTainted || tm.slabEnabled) setModelVisibility(); isTainted = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-10-20 22:40:11
|
Revision: 20839 http://sourceforge.net/p/jmol/code/20839 Author: hansonr Date: 2015-10-20 22:40:08 +0000 (Tue, 20 Oct 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.10.20" bug fix: set platformSpeed 1 for pmesh fails bug fix: polyhedron EDGES fails bug fix: @{ {"hash":{0.1 0.1 0.1},...} } fails (attempts to turn "," into "OR") -- solution is to not allow "," for OR within associative arrays JmolVersion="14.4.0_2015.10.18" bug fix: Polyhedra can have missing triangle for hexagonal faces bug fix: calculate symmetry can break Jmol if unit cell has been changed Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java branches/v14_4/Jmol/src/org/jmol/renderspecial/PolyhedraRenderer.java branches/v14_4/Jmol/src/org/jmol/script/ScriptTokenParser.java branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java branches/v14_4/Jmol/src/org/jmol/util/MeshCapper.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -290,7 +290,7 @@ protected void renderPoints() { if (!mesh.isTriangleSet || mesh.pc < 0) { for (int i = vertexCount; --i >= 0;) - if (!frontOnly || normixes == null || transformedVectors[normixes[i]].z >= 0) + if (!frontOnly || normixes == null || isVisibleNormix(normixes[i])) drawPoint(i, false); return; } @@ -304,7 +304,7 @@ if (!isPolygonDisplayable(i)) continue; int[] p = polygonIndexes[i]; - if (frontOnly && transformedVectors[normixes[i]].z < 0) + if (frontOnly && !isVisibleNormix(normixes[i])) continue; for (int j = p.length - 1; --j >= 0;) { int pt = p[j]; @@ -370,7 +370,7 @@ int check; if (mesh.isTriangleSet) { short normix = normixes[i]; - if (!vwr.gdata.isDirectedTowardsCamera(normix)) + if (frontOnly && !isVisibleNormix(normix)) continue; if (fill) { if (isPrecision) @@ -458,6 +458,10 @@ exportSurface(colix); } + private boolean isVisibleNormix(short normix) { + return (normix < 0 || transformedVectors[normix].z > 0); + } + private void drawTriangleBits(P3 screenA, short colixA, P3 screenB, short colixB, P3 screenC, short colixC, int check, int diam) { if (!antialias && diam == 1) { Modified: branches/v14_4/Jmol/src/org/jmol/renderspecial/PolyhedraRenderer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/renderspecial/PolyhedraRenderer.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/renderspecial/PolyhedraRenderer.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -114,14 +114,13 @@ if (!needTranslucent || g3d.setC(colix)) for (int i = planes.length; --i >= 0;) { int[] pl = planes[i]; - //if (i != m)continue; try { g3d.fillTriangleTwoSided(normixes[i], sc[pl[0]], sc[pl[1]], sc[pl[2]]); } catch (Exception e) { - System.out.println("heorhe"); + System.out.println("PolyhedraRendererError"); } - if (pl[3] >= 0) - g3d.fillTriangleTwoSided(normixes[i], sc[pl[2]], sc[pl[3]], sc[pl[0]]); +// if (pl[3] >= 0) + // g3d.fillTriangleTwoSided(normixes[i], sc[pl[2]], sc[pl[3]], sc[pl[0]]); } // edges are not drawn translucently ever if (bsSelected != null && bsSelected.get(iAtom)) @@ -131,13 +130,7 @@ if (g3d.setC(C.getColixTranslucent3(colix, false, 0))) for (int i = planes.length; --i >= 0;) { int[] pl = planes[i]; - if (pl[3] < 0) { drawFace(normixes[i], sc[pl[0]], sc[pl[1]], sc[pl[2]], -pl[3]); - } else { - drawFace(normixes[i], sc[pl[0]], sc[pl[1]], sc[pl[2]], 3); - drawFace(normixes[i], sc[pl[0]], sc[pl[2]], sc[pl[3]], 6); - } - } return needTranslucent; } Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptTokenParser.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptTokenParser.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptTokenParser.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -422,7 +422,7 @@ boolean haveString; - private boolean clauseOr(boolean allowComma) { + private boolean clauseOr(boolean allowCommaAsOr) { haveString = false; if (!clauseAnd()) return false; @@ -433,14 +433,14 @@ //OrNot: First OR, but if that makes no change, then NOT (special toggle) int tok; while ((tok = tokPeek())== T.opOr || tok == T.opXor - || tok==T.opToggle|| allowComma && tok == T.comma) { + || tok==T.opToggle|| allowCommaAsOr && tok == T.comma) { if (tok == T.comma && !haveString) addSubstituteTokenIf(T.comma, T.tokenOr); else addNextToken(); if (!clauseAnd()) return false; - if (allowComma && (lastToken.tok == T.rightbrace || lastToken.tok == T.bitset)) + if (allowCommaAsOr && (lastToken.tok == T.rightbrace || lastToken.tok == T.bitset)) haveString = true; } return true; @@ -596,7 +596,7 @@ if (isExpressionNext()) { addTokenToPostfixToken(T.o(T.expressionBegin, "implicitExpressionBegin")); - if (!clauseOr(true)) + if (!clauseOr(false)) return false; if (lastToken != T.tokenCoordinateEnd) { addTokenToPostfixToken(T.tokenExpressionEnd); Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -3330,7 +3330,7 @@ if (edgeParameterSeen) error(ScriptError.ERROR_incompatibleArguments); edgeParameterSeen = true; - propertyName = T.nameOf(eval.iToken); + propertyName = T.nameOf(eval.theTok); break; case T.triangles: case T.notriangles: Modified: branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -867,6 +867,8 @@ } else { // set mask to exclude both of these. int[] p10 = (int[]) ((Object[]) o)[0]; + if (p10 == null) + return false; int i0 = ((Integer) ((Object[]) o)[1]).intValue(); p10[3] = -((-p10[3]) ^ (1 << i0)); p1[3] = -((-p1[3]) ^ (1 << i)); @@ -879,6 +881,8 @@ } } // not supported for JavaScript faceList.removeObj(b); + htEdgeMap.put(edge, new Object[] { null }); + htEdgeMap.put(edge0, new Object[] { null }); } return true; } Modified: branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -318,12 +318,12 @@ @Override public int[] getCellRange() { - return symmetryInfo.cellRange; + return symmetryInfo == null ? null : symmetryInfo.cellRange; } @Override public String getSymmetryInfoStr() { - return symmetryInfo.infoStr; + return symmetryInfo == null ? "" : symmetryInfo.infoStr; } @Override Modified: branches/v14_4/Jmol/src/org/jmol/util/MeshCapper.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/util/MeshCapper.java 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/util/MeshCapper.java 2015-10-20 22:40:08 UTC (rev 20839) @@ -85,6 +85,8 @@ private Lst<int[]> lstTriangles; + private int nPoints; + /////////////// initialization ////////////////// /** @@ -107,21 +109,22 @@ * generic entry for a polygon * * @param points - * @return int[][i j k 7] + * @return int[][i j k mask] */ public int[][] triangulatePolygon(P3[] points) { clear(); - - int n = points.length; + // this is winding backward + nPoints = points.length; CapVertex v0 = null; - for (int i = 0; i < n; i++) { + for (int i = 0; i < nPoints; i++) { CapVertex v = new CapVertex(points[i], i); vertices.addLast(v); - if (v0 != null) - v.link(v0); + if (v0 != null) { + v0.link(v); + } v0 = v; } - vertices.get(0).link(v0); + v0.link(vertices.get(0)); lstTriangles = new Lst<int[]>(); createCap(null); int[][] a = AU.newInt2(lstTriangles.size()); @@ -188,12 +191,24 @@ * @param ipt3 */ private void outputTriangle(int ipt1, int ipt2, int ipt3) { - if (slicer == null) - lstTriangles.addLast(new int[] { ipt1, ipt2, ipt3, 7 }); - else + if (slicer == null) { + int mask = 0; + if (isEdge(ipt1, ipt2)) + mask |= 1; + if (isEdge(ipt2, ipt3)) + mask |= 2; + if (isEdge(ipt3, ipt1)) + mask |= 4; + lstTriangles.addLast(new int[] { ipt1, ipt2, ipt3, mask }); + } else { slicer.addTriangle(ipt1, ipt2, ipt3); } + } + private boolean isEdge(int i, int j) { + return (j == (i + 1) % nPoints); + } + private CapVertex[] test(CapVertex[] vs) { // dumping = testing = true; // int n = 0; @@ -242,7 +257,7 @@ V3 vab = V3.newVsub(vertices.get(0), vertices.get(1)); V3 vac; if (norm == null) { - vac = V3.newVsub(vertices.get(vertices.size() - 1), vertices.get(0)); + vac = V3.newVsub(vertices.get(0), vertices.get(vertices.size() - 1)); } else { vac = V3.newV(norm); vac.cross(vac, vab); Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-19 06:30:19 UTC (rev 20838) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-20 22:40:08 UTC (rev 20839) @@ -7,8 +7,20 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.10.17" +Jmol.___JmolVersion="14.4.0_2015.10.20" +bug fix: set platformSpeed 1 for pmesh fails +bug fix: polyhedron EDGES fails +bug fix: @{ {"hash":{0.1 0.1 0.1},...} } fails (attempts to turn "," into "OR") + -- solution is to not allow "," for OR within associative arrays + +JmolVersion="14.4.0_2015.10.18" + +bug fix: Polyhedra can have missing triangle for hexagonal faces +bug fix: calculate symmetry can break Jmol if unit cell has been changed + +JmolVersion="14.4.0_2015.10.17" + bug fix: if (...) \n { .... not working bug fix: CIF reader will read empty second model for IUCr files with terminal data_global block bug fix: polyhedra bonds unitcell can cause error in HTML5 @@ -337,7 +349,6 @@ that are within distance of point. bug fix: MRC surface reader: new version of EMAN2 leaves out alpha,beta,gamma; does not load properly - bug fix: for (a in {*}) with no VAR fails if a has already been defined as an integer bug fix: better error reporting @@ -6647,7 +6658,7 @@ bug fix: getProperty extractModel not honoring subset bug fix: set pdbGetHeader TRUE does not capture REMARK3 REMARK290 REMARK350 bug fix: getProperty("JSON",....) should wrap value in {value:...} -bug fix: MO persistent translucency broken in 11.x +bug fix: MO per sistent translucency broken in 11.x bug fix: show MENU write MENU load MENU all broken in 12.2 bug fix: {*}[n] should be empty if nAtoms <=n bug fix: abinit reader was nonfunctional This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-10-20 23:16:32
|
Revision: 20841 http://sourceforge.net/p/jmol/code/20841 Author: hansonr Date: 2015-10-20 23:16:29 +0000 (Tue, 20 Oct 2015) Log Message: ----------- Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java Modified: branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java 2015-10-20 22:41:32 UTC (rev 20840) +++ branches/v14_4/Jmol/src/org/jmol/render/MeshRenderer.java 2015-10-20 23:16:29 UTC (rev 20841) @@ -429,7 +429,7 @@ // simple quad -- DRAW only (isPrecision) int iD = polygon[3]; short nD = normixes[iD]; - if (frontOnly && (check != 7 || transformedVectors[nD].z < 0)) + if (frontOnly && (check != 7 || !isVisibleNormix(nD))) continue; if (fill) { if (generateSet) { @@ -458,8 +458,8 @@ exportSurface(colix); } - private boolean isVisibleNormix(short normix) { - return (normix < 0 || transformedVectors[normix].z > 0); + protected boolean isVisibleNormix(short normix) { + return (normix < 0 || transformedVectors[normix].z >= 0); } private void drawTriangleBits(P3 screenA, short colixA, P3 screenB, short colixB, Modified: branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2015-10-20 22:41:32 UTC (rev 20840) +++ branches/v14_4/Jmol/src/org/jmol/rendersurface/IsosurfaceRenderer.java 2015-10-20 23:16:29 UTC (rev 20841) @@ -306,7 +306,7 @@ for (int i = (!imesh.hasGridPoints || imesh.firstRealVertex < 0 ? 0 : imesh.firstRealVertex); i < vertexCount; i += incr) { if (vertexValues != null && Float.isNaN(vertexValues[i]) || frontOnly - && transformedVectors[normixes[i]].z < 0 || imesh.jvxlData.thisSet >= 0 + && !isVisibleNormix(normixes[i]) || imesh.jvxlData.thisSet >= 0 && mesh.vertexSets[i] != imesh.jvxlData.thisSet || !mesh.isColorSolid && mesh.vcs != null && !setColix(mesh.vcs[i]) || haveBsDisplay && !mesh.bsDisplay.get(i) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-10-28 03:40:54
|
Revision: 20848 http://sourceforge.net/p/jmol/code/20848 Author: hansonr Date: 2015-10-28 03:40:52 +0000 (Wed, 28 Oct 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.10.28" bug fix: XODYDATA file reader does not read bond info or formal charge // changes in 14.4.0_2015.10.28 Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/adapter/readers/xml/XmlOdysseyReader.java branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/xml/XmlOdysseyReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/adapter/readers/xml/XmlOdysseyReader.java 2015-10-27 11:50:31 UTC (rev 20847) +++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/xml/XmlOdysseyReader.java 2015-10-28 03:40:52 UTC (rev 20848) @@ -43,8 +43,11 @@ private String[] myAttributes = { "id", "label", //general "xyz", "element", "hybrid", //atoms "a", "b", "order", //bond + "charge", // group + "entity", // member "box" // boundary }; + private int formalCharge = Integer.MIN_VALUE; public XmlOdysseyReader() { } @@ -63,11 +66,11 @@ } if ("atom".equals(localName)) { - atom = new Atom(); - if (atts.containsKey("label")) - atom.atomName = atts.get("label"); - else - atom.atomName = atts.get("id"); + String id = atts.get("id"); + (atom = new Atom()).atomName = atts + .get(atts.containsKey("label") ? "label" : "id"); + if (id != null && stateScriptVersionInt >= 140400) + asc.atomSymbolicMap.put(id, atom); if (atts.containsKey("xyz")) { String xyz = atts.get("xyz"); String[] tokens = PT.getTokens(xyz); @@ -77,7 +80,6 @@ if (atts.containsKey("element")) { atom.elementSymbol = atts.get("element"); } - return; } if ("bond".equals(localName)) { @@ -89,7 +91,19 @@ asc.addNewBondFromNames(atom1, atom2, order); return; } - + if ("group".equals(localName)) { + String charge = atts.get("charge"); + if (charge != null && charge.indexOf(".") < 0) { + formalCharge = PT.parseInt(charge); + } + return; + } + if ("member".equals(localName) && formalCharge != Integer.MIN_VALUE) { + Atom atom = asc.getAtomFromName(atts.get("entity")); + if (atom != null) + atom.formalCharge = formalCharge; + return; + } if ("boundary".equals(localName)) { String[] boxDim = PT.getTokens(atts.get("box")); float x = parseFloatStr(boxDim[0]); @@ -115,7 +129,6 @@ parent.applySymmetryAndSetTrajectory(); return; } - if ("odyssey_simulation".equals(localName)) { if (modelName != null && phase != null) modelName += " - " + phase; @@ -155,13 +168,13 @@ atom = null; return; } - if ("title".equals(localName)) { + if ("group".equals(localName)) { + formalCharge = Integer.MIN_VALUE; + } else if ("title".equals(localName)) { modelName = chars; - } - if ("formula".equals(localName)) { + } else if ("formula".equals(localName)) { formula = chars; - } - if ("phase".equals(localName)) { + } else if ("phase".equals(localName)) { phase = chars; } keepChars = false; Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-10-27 11:50:31 UTC (rev 20847) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-10-28 03:40:52 UTC (rev 20848) @@ -3233,6 +3233,8 @@ Map<String, Integer> htPivot = null; while (true) { if (AU.isAF(floatOrSVArray)) { + if (tok == T.pivot) + return "NaN"; data = (float[]) floatOrSVArray; ndata = data.length; if (ndata == 0) @@ -3245,6 +3247,8 @@ break; } else { SV sv0 = sv.get(0); + if (sv0.tok == T.point3f) + return getMinMaxPoint(sv, tok); if (sv0.tok == T.string && ((String) sv0.value).startsWith("{")) { Object pt = SV.ptValue(sv0); if (pt instanceof P3) @@ -3282,7 +3286,7 @@ boolean isInt = true; boolean isPivot = (tok == T.pivot); for (int i = ndata; --i >= 0;) { - SV svi = sv.get(i); + SV svi = (sv == null ? SV.vF : sv.get(i)); float v = (isPivot ? 1 : data == null ? SV.fValue(svi) : data[i]); if (Float.isNaN(v)) continue; @@ -3363,52 +3367,44 @@ sv = (Lst<SV>) pointOrSVArray; ndata = sv.size(); } - if (sv != null || data != null) { - P3 result = new P3(); - float[] fdata = new float[ndata]; - boolean ok = true; - for (int xyz = 0; xyz < 3 && ok; xyz++) { - for (int i = 0; i < ndata; i++) { - P3 pt = (data == null ? SV.ptValue(sv.get(i)) : data[i]); - if (pt == null) { - ok = false; - break; - } - switch (xyz) { - case 0: - fdata[i] = pt.x; - break; - case 1: - fdata[i] = pt.y; - break; - case 2: - fdata[i] = pt.z; - break; - } - } - if (!ok) + if (sv == null && data == null) + return "NaN"; + P3 result = new P3(); + float[] fdata = new float[ndata]; + for (int xyz = 0; xyz < 3; xyz++) { + for (int i = 0; i < ndata; i++) { + P3 pt = (data == null ? SV.ptValue(sv.get(i)) : data[i]); + if (pt == null) + return "NaN"; + switch (xyz) { + case 0: + fdata[i] = pt.x; break; - Object f = getMinMax(fdata, tok); - if (f instanceof Number) { - float value = ((Number) f).floatValue(); - switch (xyz) { - case 0: - result.x = value; - break; - case 1: - result.y = value; - break; - case 2: - result.z = value; - break; - } - } else { + case 1: + fdata[i] = pt.y; break; + case 2: + fdata[i] = pt.z; + break; } } - return result; + Object f = getMinMax(fdata, tok); + if (!(f instanceof Number)) + return "NaN"; + float value = ((Number) f).floatValue(); + switch (xyz) { + case 0: + result.x = value; + break; + case 1: + result.y = value; + break; + case 2: + result.z = value; + break; + } } - return "NaN"; + return result; } private Object getMinMaxQuaternion(Lst<SV> svData, int tok) { Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-27 11:50:31 UTC (rev 20847) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-28 03:40:52 UTC (rev 20848) @@ -7,8 +7,17 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.10.22b" +Jmol.___JmolVersion="14.4.0_2015.10.28" +bug fix: XODYDATA file reader does not read bond info or formal charge // changes in 14.4.0_2015.10.28 + +JmolVersion="14.4.0_2015.10.24" + +bug fix: [{1,2,3},{4,5,6}].average fails +bug fix: [{1,2,3},{4,5,6}].pivot should return "NaN" + +JmolVersion="14.4.0_2015.10.22b" + bug fix: CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id bug fix: WRITE .... AS does not properly allow for unquoted file name This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-10-30 12:08:05
|
Revision: 20852 http://sourceforge.net/p/jmol/code/20852 Author: hansonr Date: 2015-10-30 12:08:02 +0000 (Fri, 30 Oct 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.10.30" bug fix: polyhedron volume will be incorrect if there is a face triangle that has no edges visible (requires a six or more sided face) bug fix: nested if...{...if... } else {...} gives compiler syntax error: if (i=1) { print "i=1" if (j=1) print "j != 1" } else { // } closes if (j=1) instead of if (i=1) { print "i != 1" } bug fix: empty format crashes Jmol -- print "testing".format("") bug fix: after CALCULATE HYDROGENS TRUE and then deleting hydrogens, hydrogens are not added to aromatic rings in PDB models bug fix: reading saved state after adding hydrogen atoms results in infinite loop Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/modelset/BondCollection.java branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioModel.java branches/v14_4/Jmol/src/org/jmol/script/SV.java branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedron.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/modelset/BondCollection.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/modelset/BondCollection.java 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/modelset/BondCollection.java 2015-10-30 12:08:02 UTC (rev 20852) @@ -493,17 +493,17 @@ } } // now test non-O atoms - for (int i = bsTest.nextSetBit(0); i >= 0; i = bsTest.nextSetBit(i + 1)) { - bond = bo[i]; - if (!assignAromaticDouble(bond)) + for (int i = bsTest.nextSetBit(0); i >= 0; i = bsTest.nextSetBit(i + 1)) + if (!assignAromaticDouble(bond = bo[i])) assignAromaticSingle(bond); - } // all done: do the actual assignments and clear arrays. + BS bsModels = new BS(); for (int i = i0; i >= 0; i = (isAll ? i - 1 : bsBonds.nextSetBit(i + 1))) { bond = bo[i]; if (bsAromaticDouble.get(i)) { if (!bond.is(Edge.BOND_AROMATIC_DOUBLE)) { bsAromatic.set(i); + bsModels.set(bond.atom1.mi); bond.setOrder(Edge.BOND_AROMATIC_DOUBLE); } } else if (bsAromaticSingle.get(i) || bond.isAromatic()) { @@ -513,6 +513,10 @@ } } } + Model[] models = ((ModelSet) this).am; + for (int i = bsModels.nextSetBit(0); i >= 0; i = bsModels.nextSetBit(i + 1)) + if (models[i].isBioModel) + models[i].isPdbWithMultipleBonds = true; assignAromaticNandO(bsBonds); Modified: branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioModel.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-10-30 12:08:02 UTC (rev 20852) @@ -121,10 +121,10 @@ Atom[] at = ms.at; Model[] am = ms.am; for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { - if (iLast != i - 1) - monomerIndexCurrent = -1; + if (at[i].group.isAdded(i)) + continue; monomerIndexCurrent = at[i].group.setProteinStructureType(type, - monomerIndexCurrent); + iLast == i - 1 ? -1 : monomerIndexCurrent); int modelIndex = at[i].mi; ms.proteinStructureTainted = am[modelIndex].structureTainted = true; iLast = i = at[i].group.lastAtomIndex; @@ -136,10 +136,14 @@ i = am[modelIndex].firstAtomIndex + am[modelIndex].act; continue; } - iLast = at[i].group.getStrucNo(); - if (iLast < 1000 && iLast > lastStrucNo[modelIndex]) - lastStrucNo[modelIndex] = iLast; - i = at[i].group.lastAtomIndex + 1; + Group g = at[i].group; + if (!g.isAdded(i)) { + iLast = g.getStrucNo(); + if (iLast < 1000 && iLast > lastStrucNo[modelIndex]) + lastStrucNo[modelIndex] = iLast; + i = g.lastAtomIndex; + } + i++; } for (int i = 0; i < ms.ac;) { int modelIndex = at[i].mi; @@ -147,9 +151,13 @@ i = am[modelIndex].firstAtomIndex + am[modelIndex].act; continue; } - if (at[i].group.getStrucNo() > 1000) - at[i].group.setStrucNo(++lastStrucNo[modelIndex]); - i = at[i].group.lastAtomIndex + 1; + Group g = at[i].group; + if (!g.isAdded(i)) { + i = g.lastAtomIndex; + if (g.getStrucNo() > 1000) + g.setStrucNo(++lastStrucNo[modelIndex]); + } + i++; } } Modified: branches/v14_4/Jmol/src/org/jmol/script/SV.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/SV.java 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/script/SV.java 2015-10-30 12:08:02 UTC (rev 20852) @@ -1284,8 +1284,10 @@ } } // use values to replace codes in format string + String[] format = PT.split(PT.rep(sValue(args[0]), "%%", "\1"), "%"); + if (format.length == 0) + return ""; SB sb = new SB(); - String[] format = PT.split(PT.rep(sValue(args[0]), "%%", "\1"), "%"); sb.append(format[0]); for (int i = 1; i < format.length; i++) { Object ret = sprintf(PT.formatCheck("%" + format[i]), Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-10-30 12:08:02 UTC (rev 20852) @@ -143,7 +143,7 @@ private String ident, identLC; private Lst<T> vPush = new Lst<T>(); private int pushCount; - private ScriptFlowContext lastFlowContext; + private ScriptFlowContext forceFlowContext; synchronized ScriptContext compile(String filename, String script, boolean isPredefining, boolean isSilent, @@ -333,7 +333,7 @@ isEndOfCommand = false; needRightParen = false; lastFlowCommand = null; - lastFlowContext = null; + forceFlowContext = null; theTok = T.nada; short iLine = 1; @@ -731,7 +731,7 @@ if (lastFlowCommand.tok != T.process && (tokAt(0) == T.leftbrace)) ltoken.remove(0); lastFlowCommand = null; - lastFlowContext = flowContext; + forceFlowContext = flowContext; // lastFlowImplicitEnd = flowContext.nextFlowImplicitEnd; } } @@ -823,7 +823,7 @@ } else if (n > 0 && !haveENDIF || isOneLine) { forceFlowEnd(flowContext.token); if (!isOneLine) { - lastFlowContext.forceEndIf = true; + forceFlowContext.forceEndIf = true; } } isEndOfCommand = true; @@ -1542,12 +1542,12 @@ // specifically for else { but not elseIf ( ) { isEndOfCommand = true; ScriptFlowContext f = (flowContext != null && flowContext.addLine == 0 - || lastFlowContext == null ? flowContext : lastFlowContext); + || forceFlowContext == null ? flowContext : forceFlowContext); if (f != null) { f.addLine = 0; f.forceEndIf = false; lastToken = T.tokenLeftBrace; - lastFlowContext = f; + forceFlowContext = f; } return CONTINUE; } @@ -1684,10 +1684,10 @@ // unexpectedly allows if (x) { print x else print y} fixFlowAddLine(flowContext); if (lltoken.get(iCommand - 1)[0].tok == T.end - && lastFlowContext != null && lastFlowContext.forceEndIf - && lastFlowContext.addLine > 0 - && isFlowIfContextOK(lastFlowContext)) { - flowContext = lastFlowContext; + && forceFlowContext != null && forceFlowContext.forceEndIf + && forceFlowContext.addLine > 0 + && isFlowIfContextOK(forceFlowContext)) { + flowContext = forceFlowContext; flowContext.forceEndIf = true; lltoken.remove(--iCommand); } else if (flowContext != null && flowContext.addLine > 0) { @@ -2152,7 +2152,7 @@ } private int forceFlowEnd(T token) { T t0 = tokenCommand; - lastFlowContext = flowContext; + forceFlowContext = flowContext; token = flowStart(token); if (!checkFlowEnd(token.tok, (String) token.value, ichBrace, false)) return ERROR; Modified: branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedra.java 2015-10-30 12:08:02 UTC (rev 20852) @@ -735,7 +735,7 @@ * * @param points * @param nPoints - * @param planes + * @param triangles * @param normals * @param index * @param pTemp @@ -747,12 +747,12 @@ * @param bsTemp * @return true if valid */ - private boolean checkFace(P3[] points, int nPoints, int[][] planes, + private boolean checkFace(P3[] points, int nPoints, int[][] triangles, V3[] normals, int index, P4 pTemp, V3 vNorm, V3 vAC, Map<Integer, Object[]> htNormMap, Map<String, Object> htEdgeMap, float planarParam, BS bsTemp) { - int[] p1 = planes[index]; + int[] p1 = triangles[index]; // Check here for a 3D convex hull: int i0 = p1[0]; Modified: branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedron.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedron.java 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/shapespecial/Polyhedron.java 2015-10-30 12:08:02 UTC (rev 20852) @@ -243,10 +243,7 @@ if (bsFlat.cardinality() < triangles.length) for (int i = triangles.length; --i >= 0;) { int[] face = triangles[i]; - for (int j = face.length - 2; --j >= 0;) - if (face[j + 2] >= 0) - v += triangleVolume(face[j], face[j + 1], face[j + 2], vAB, vAC, - vTemp); + v += triangleVolume(face[0], face[1], face[2], vAB, vAC, vTemp); } return Float.valueOf(v / 6); } Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-30 12:07:20 UTC (rev 20851) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-10-30 12:08:02 UTC (rev 20852) @@ -7,8 +7,28 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.10.28" +Jmol.___JmolVersion="14.4.0_2015.10.30" +bug fix: polyhedron volume will be incorrect if there is a + face triangle that has no edges visible (requires a six or more sided face) + +bug fix: nested if...{...if... } else {...} gives compiler syntax error: + + if (i=1) { + print "i=1" + if (j=1) + print "j != 1" + } else { // } closes if (j=1) instead of if (i=1) { + print "i != 1" + } + +bug fix: empty format crashes Jmol -- print "testing".format("") +bug fix: after CALCULATE HYDROGENS TRUE and then deleting hydrogens, hydrogens are not added to aromatic rings in PDB models +bug fix: reading saved state after adding hydrogen atoms results in infinite loop + + +JmolVersion="14.4.0_2015.10.28" + bug fix: XODYDATA file reader does not read bond info or formal charge // changes in 14.4.0_2015.10.28 JmolVersion="14.4.0_2015.10.24" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-11-03 12:17:47
|
Revision: 20854 http://sourceforge.net/p/jmol/code/20854 Author: hansonr Date: 2015-11-03 12:17:44 +0000 (Tue, 03 Nov 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.11.03" bug fix: FOR without {} but with ";" after sole statement followed immediately by second FOR improperly loops for (var i from [1,5]) print i; for (var i from [1,5]) print i bug fix: OXT missing from BACKBONE selection bug fix: (JSmol) CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id bug fix: slabbing should reset area and volume of isosurface bug fix: meshSlicer may fail to add edge to sliced pmesh bug fix: polyhedron volume will be incorrect if there is a face triangle that has no edges visible (requires a six or more sided face) bug fix: nested if...{...if... } else {...} gives compiler syntax error: if (i=1) { print "i=1" if (j=1) print "j != 1" } else { // } closes if (j=1) instead of if (i=1) { print "i != 1" } bug fix: empty format crashes Jmol -- print "testing".format("") bug fix: after CALCULATE HYDROGENS TRUE and then deleting hydrogens, hydrogens are not added to aromatic rings in PDB models bug fix: reading saved state after adding hydrogen atoms results in infinite loop Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java branches/v14_4/Jmol/src/org/jmol/util/MeshSlicer.java branches/v14_4/Jmol/src/org/jmol/viewer/JC.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2015-11-03 12:17:44 UTC (rev 20854) @@ -314,9 +314,10 @@ return true; } else if (AU.isAS(value)) { params.title = (String[]) value; - for (int i = 0; i < params.title.length; i++) - if (params.title[i].length() > 0) - Logger.info(params.title[i]); + if (Logger.debugging) + for (int i = 0; i < params.title.length; i++) + if (params.title[i].length() > 0) + Logger.info(params.title[i]); } return true; } Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-11-03 12:17:44 UTC (rev 20854) @@ -732,13 +732,12 @@ ltoken.remove(0); lastFlowCommand = null; forceFlowContext = flowContext; -// lastFlowImplicitEnd = flowContext.nextFlowImplicitEnd; + // lastFlowImplicitEnd = flowContext.nextFlowImplicitEnd; } } if (bracketCount > 0 || setBraceCount > 0 || parenCount > 0 || braceCount == 1 && !checkFlowStartBrace(true)) { - error(n == 1 ? ERROR_commandExpected - : ERROR_endOfCommandUnexpected); + error(n == 1 ? ERROR_commandExpected : ERROR_endOfCommandUnexpected); return ERROR; } if (needRightParen) { @@ -811,16 +810,27 @@ setEqualPt = Integer.MAX_VALUE; } + boolean isOneLine = (flowContext != null && flowContext.addLine == 0); // if (....) xxxxx; + boolean isEndFlow = ((endOfLine || !isOneLine) && !haveENDIF && flowContext != null && flowContext.checkForceEndIf(-1)); if (endOfLine) { - if (!haveENDIF && flowContext != null - && flowContext.checkForceEndIf(-1)) { - boolean isOneLine = (flowContext.addLine == 0); // if (....) xxxxx; + if (isEndFlow) { if (isComment) { if (!isOneLine) { flowContext.addLine++; flowContext.forceEndIf = true; } } else if (n > 0 && !haveENDIF || isOneLine) { + // looking for + // for (...) + // print ... + // + // but not + // + // for (...) + // + // print ... + // + forceFlowEnd(flowContext.token); if (!isOneLine) { forceFlowContext.forceEndIf = true; @@ -829,13 +839,19 @@ isEndOfCommand = true; cchToken = 0; ichCurrentCommand = ichToken; -// if (n > 0 || isOneLine) - // lineCurrent--; return CONTINUE; } isComment = false; isShowCommand = false; ++lineCurrent; + } else if (isEndFlow) { + // looking at something like + // + // for (...) + // print ... ; + // + forceFlowEnd(flowContext.token); + forceFlowContext.forceEndIf = true; } if (ichToken >= cchScript) { // check for end of all brace work Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-11-03 12:17:44 UTC (rev 20854) @@ -97,6 +97,7 @@ * extends ScriptError -- error handling * * scriptext.CmdExt -- optionally loaded, less-used commands + * scriptext.IsoExt -- optionally loaded, less-used commands * scriptext.MathExt -- optionally loaded, less-used functions * scriptext.SmilesExt -- optionally loaded methods for cmds and math * Modified: branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java 2015-11-03 12:17:44 UTC (rev 20854) @@ -764,6 +764,8 @@ } protected void slabPolygons(Object[] slabInfo) { + thisMesh.calculatedVolume = null; + thisMesh.calculatedArea = null; thisMesh.getMeshSlicer().slabPolygons(slabInfo, false); thisMesh.reinitializeLightingAndColor(vwr); } Modified: branches/v14_4/Jmol/src/org/jmol/util/MeshSlicer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/util/MeshSlicer.java 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/util/MeshSlicer.java 2015-11-03 12:17:44 UTC (rev 20854) @@ -583,7 +583,7 @@ if (iD == i2 && iE == i3) { // cap but don't toss if tossing 23 doClear = !toss23; - return false; + return !doClear; // was FALSE, but we need to recreate the edge } if (iD == i1 || iE == i1) { // other is i2 or i3 -- along an edge Modified: branches/v14_4/Jmol/src/org/jmol/viewer/JC.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2015-11-03 12:17:44 UTC (rev 20854) @@ -621,7 +621,7 @@ // structure related // "@alpha _a=2", // rasmol doc says "approximately *.CA" - whatever? - "@_bb protein&_a>=1&_a<6 | nucleic&(_a>=6&_a<14|_a>=73&&_a<=79||_a==99||_a=100)", // no H atoms + "@_bb protein&(_a>=1&_a<6|_a=64) | nucleic&(_a>=6&_a<14|_a>=73&&_a<=79||_a==99||_a=100)", // no H atoms "@backbone _bb | _H && connected(single, _bb)", "@spine protein&_a>=1&_a<4|nucleic&(_a>=6&_a<11|_a=13)", "@sidechain (protein,nucleic) & !backbone", Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-01 18:15:50 UTC (rev 20853) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-03 12:17:44 UTC (rev 20854) @@ -7,8 +7,19 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.10.30" +Jmol.___JmolVersion="14.4.0_2015.11.03" +bug fix: FOR without {} but with ";" after sole statement + followed immediately by second FOR improperly loops + for (var i from [1,5]) + print i; + for (var i from [1,5]) + print i +bug fix: OXT missing from BACKBONE selection +bug fix: (JSmol) CIF parser fails to read CIF files containing only a single (non-loop) _struct_ref_seq_dif.align_id +bug fix: slabbing should reset area and volume of isosurface +bug fix: meshSlicer may fail to add edge to sliced pmesh + bug fix: polyhedron volume will be incorrect if there is a face triangle that has no edges visible (requires a six or more sided face) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-11-06 04:48:50
|
Revision: 20859 http://sourceforge.net/p/jmol/code/20859 Author: hansonr Date: 2015-11-06 04:48:47 +0000 (Fri, 06 Nov 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.11.05" bug fix: mCIF does not read incommensurately modulated mCIF files bug fix: WRITE xxx.ZIP crashes Jmol Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java branches/v14_4/Jmol/src/org/jmol/util/ModulationSet.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-11-03 13:43:26 UTC (rev 20858) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-11-06 04:48:47 UTC (rev 20859) @@ -3862,7 +3862,8 @@ } else if (data == "ZIP" || data == "ZIPALL") { if (fileName != null) { params = new Hashtable<String, Object>(); - params.put("data", scripts); + if (scripts != null) + params.put("data", scripts); if ((bytes = data = (String) vwr.createZip(fileName, type, params)) == null) eval.evalError("#CANCELED#", null); } Modified: branches/v14_4/Jmol/src/org/jmol/util/ModulationSet.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/util/ModulationSet.java 2015-11-03 13:43:26 UTC (rev 20858) +++ branches/v14_4/Jmol/src/org/jmol/util/ModulationSet.java 2015-11-06 04:48:47 UTC (rev 20859) @@ -575,24 +575,25 @@ private ModulationSet getModCalc() { if (modCalc == null) { modCalc = new ModulationSet(); + modCalc.axesLengths = axesLengths; + modCalc.enabled = true; + modCalc.fileOcc = fileOcc; + modCalc.gammaE = gammaE; + modCalc.gammaIinv = gammaIinv; modCalc.id = id; - modCalc.tau = tau; - modCalc.spinOp = spinOp; + modCalc.modDim = modDim; modCalc.mods = mods; - modCalc.gammaE = gammaE; - modCalc.modDim = modDim; - modCalc.gammaIinv = gammaIinv; + modCalc.nOps = nOps; + modCalc.occParams = occParams; + modCalc.occSiteMultiplicity = occSiteMultiplicity; + modCalc.r0 = r0; + modCalc.rI = rI; modCalc.sigma = sigma; - modCalc.r0 = r0; + modCalc.spinOp = spinOp; + modCalc.symmetry = symmetry; + modCalc.tau = tau; modCalc.v0 = v0; modCalc.vib = vib; - modCalc.symmetry = symmetry; - modCalc.rI = rI; - modCalc.fileOcc = fileOcc; - modCalc.occParams = occParams; - modCalc.occSiteMultiplicity = occSiteMultiplicity; - modCalc.nOps = nOps; - modCalc.enabled = true; if (mxyz != null) modCalc.mxyz = new V3(); } Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-03 13:43:26 UTC (rev 20858) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-06 04:48:47 UTC (rev 20859) @@ -7,8 +7,14 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.11.03" +Jmol.___JmolVersion="14.4.0_2015.11.05" + +bug fix: mCIF does not read incommensurately modulated mCIF files +bug fix: WRITE xxx.ZIP crashes Jmol + +JmolVersion="14.4.0_2015.11.03" + bug fix: FOR without {} but with ";" after sole statement followed immediately by second FOR improperly loops for (var i from [1,5]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-11-07 00:19:50
|
Revision: 20861 http://sourceforge.net/p/jmol/code/20861 Author: hansonr Date: 2015-11-07 00:19:47 +0000 (Sat, 07 Nov 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.11.06" bug fix: restoring bonds to a model having fewer bonds than the model for which they were saved throws an exception bug fix: mCIF does not read incommensurately modulated mCIF files bug fix: WRITE xxx.ZIP crashes Jmol bug fix: POLYHEDRA ... {xxx} TO {yyy} not working Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-11-07 00:19:29 UTC (rev 20860) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-11-07 00:19:47 UTC (rev 20861) @@ -3269,10 +3269,10 @@ case T.to: if (nAtomSets > 1) invPO(); - if ((tokAt(++i) == T.bitset || tokAt(i) == T.expressionBegin) - && !needsGenerating) { + nAtomSets = 3; // don't allow two of these + if (tokAt(++i) == T.bitset || tokAt(i) == T.expressionBegin) { // select... polyhedron .... to .... - propertyName = "toBitSet"; + propertyName = (needsGenerating ? "to" : "toBitSet"); propertyValue = atomExpressionAt(i); } else if (eval.isArrayParameter(i)) { // select... polyhedron .... to [...] @@ -3302,8 +3302,7 @@ } propertyValue = atomExpressionAt(i); i = eval.iToken; - if (i + 1 == slen) - needsGenerating = true; + needsGenerating |= (i + 1 == slen); break; case T.color: case T.translucent: Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-07 00:19:29 UTC (rev 20860) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-11-07 00:19:47 UTC (rev 20861) @@ -8,10 +8,12 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.11.05" +Jmol.___JmolVersion="14.4.0_2015.11.06" +bug fix: restoring bonds to a model having fewer bonds than the model for which they were saved throws an exception bug fix: mCIF does not read incommensurately modulated mCIF files bug fix: WRITE xxx.ZIP crashes Jmol +bug fix: POLYHEDRA ... {xxx} TO {yyy} not working JmolVersion="14.4.0_2015.11.03" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-12-01 05:15:00
|
Revision: 20875 http://sourceforge.net/p/jmol/code/20875 Author: hansonr Date: 2015-12-01 05:14:58 +0000 (Tue, 01 Dec 2015) Log Message: ----------- Jmol.___JmolVersion="14.5.0_2015.11.30" bug fix: getProperty("JSON", "variableInfo", "x") will fail if x is an array -- was problem with JSV_predict2 failing to properly map atoms between Jmol and JSME bug fix: {atomset}.sxyz gives incorrect screen coordinate when antialiased bug fix: point(pt, true|false) also modifies pt itself bug fix: point({atomset}, true) gives incorrect screen coordinate when antialiased. bug fix: point({atomset}, false) gives incorrect Cartesian coordinate when antialiased. bug fix: popup menu item "Surfaces...Off" resets atom selection bug fix: files with names containing "[]" cannot be loaded. bug fix: print {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555 bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms bug fix: getproperty SHAPEINFO fails if CGO is present bug fix: CGO from state deletes DRAW objects bug fix: CGO not properly isolated to current model; "fixed" not implemented Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/api/SymmetryInterface.java branches/v14_4/Jmol/src/org/jmol/modelset/Atom.java branches/v14_4/Jmol/src/org/jmol/popup/AwtSwingPopupHelper.java branches/v14_4/Jmol/src/org/jmol/popup/MainPopupResourceBundle.java branches/v14_4/Jmol/src/org/jmol/script/SV.java branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/api/SymmetryInterface.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/api/SymmetryInterface.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/api/SymmetryInterface.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -156,10 +156,10 @@ public SymmetryInterface setPointGroup( SymmetryInterface pointGroupPrevious, - T3[] atomset, BS bsAtoms, + T3[] atomset, + BS bsAtoms, boolean haveVibration, - float distanceTolerance, - float linearTolerance, boolean localEnvOnly); + float distanceTolerance, float linearTolerance, boolean localEnvOnly); public void setSpaceGroup(boolean doNormalize); Modified: branches/v14_4/Jmol/src/org/jmol/modelset/Atom.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/modelset/Atom.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/modelset/Atom.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -1369,8 +1369,7 @@ return (group.chain.model.isJmolDataFrame ? getFractionalCoordPt(!vwr.g.legacyJavaFloat, false, ptTemp) : getFractionalUnitCoordPt(!vwr.g.legacyJavaFloat, false, ptTemp)); case T.screenxyz: - return P3.new3(sX, group.chain.model.ms.vwr.getScreenHeight() - - sY, sZ); + return P3.new3(vwr.antialiased ? sX / 2 : sX, vwr.getScreenHeight() - (vwr.antialiased ? sY / 2 : sY), vwr.antialiased ? sZ / 2 : sZ); case T.vibxyz: return getVibrationVector(); case T.modxyz: Modified: branches/v14_4/Jmol/src/org/jmol/popup/AwtSwingPopupHelper.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/popup/AwtSwingPopupHelper.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/popup/AwtSwingPopupHelper.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -112,6 +112,8 @@ @Override public int getItemType(SC m) { + if (m == null) + return 0; JComponent jc = ((AwtSwingComponent) m).jc; return (jc instanceof JMenu ? 4 : jc instanceof JRadioButtonMenuItem ? 3 Modified: branches/v14_4/Jmol/src/org/jmol/popup/MainPopupResourceBundle.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/popup/MainPopupResourceBundle.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/popup/MainPopupResourceBundle.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -1007,7 +1007,7 @@ "isosurface delete resolution 0 vdw color range -0.1 0.1 map MEP translucent" }, { "surfOpaque", "mo opaque;isosurface opaque" }, { "surfTranslucent", "mo translucent;isosurface translucent" }, - { "surfOff", "mo delete;isosurface delete;select *;dots off" }, + { "surfOff", "mo delete;isosurface delete;var ~~sel = {selected};select *;dots off;select ~~sel" }, { "FILEMOLload", "save orientation;load \"\";restore orientation;center" }, { "FILEUNITone", Modified: branches/v14_4/Jmol/src/org/jmol/script/SV.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/SV.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/script/SV.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -1230,10 +1230,9 @@ * * @param args * @param pt 0: to JSON, 5: to base64, 12: to bytearray, 22: to array - * @param array2D * @return formatted string */ - public static Object format(SV[] args, int pt, boolean array2D) { + public static Object format(SV[] args, int pt) { switch (args.length) { case 0: return ""; @@ -1757,4 +1756,17 @@ } return this; } + + /** + * Safely create a JSON key - object pair, allowing for already-named arrays + * + * @param key + * @param property + * @return JSON object + */ + public static Object safeJSON(String key, Object property) { + return "{" + + (property instanceof SV ? PT.esc(key) + " : " + format(new SV[] { null, (SV) property }, + 0) : PT.toJSON(key, property)) + "}"; + } } Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -1548,7 +1548,7 @@ if (pt >= 0 && args.length != 2) return false; if (pt >= 0 || args.length < 2 || args[1].tok != T.varray) { - Object o = SV.format(args, pt, false); + Object o = SV.format(args, pt); return (format.equalsIgnoreCase("json") ? mp.addXStr((String)o) : mp.addXObj(o)); } // fill an array with applied formats @@ -1557,7 +1557,7 @@ String[] sa = new String[a.size()]; for (int i = sa.length; --i >= 0;) { args2[1] = a.get(i); - sa[i] = SV.format(args2, pt, true).toString(); + sa[i] = SV.format(args2, pt).toString(); } return mp.addXAS(sa); } @@ -2093,7 +2093,7 @@ * @param mp * @param args * @param tok - * @return + * @return true * @throws ScriptException */ private boolean evaluatePlane(ScriptMathProcessor mp, SV[] args, int tok) @@ -2272,20 +2272,34 @@ Object pt = Escape.uP(s); return (pt instanceof P3 ? mp.addXPt((P3) pt) : mp.addXStr("" + pt)); case 2: - // to/from screen coordinates P3 pt3; switch (args[1].tok) { case T.off: - if ((pt3 = SV.ptValue(args[0])) == null) - return false; - // these are screen coordinates - vwr.tm.unTransformPoint(pt3, pt3); - break; case T.on: - if ((pt3 = SV.ptValue(args[0])) == null) + // to/from screen coordinates + switch (args[0].tok) { + case T.point3f: + pt3 = P3.newP((T3) args[0].value); + break; + case T.bitset: + pt3 = vwr.ms.getAtomSetCenter(SV.bsSelectVar(args[0])); + break; + default: return false; - // this is TO screen coordinates + } + if (args[1].tok == T.on) { + // this is TO screen coordinates, 0 at bottom left vwr.tm.transformPt3f(pt3, pt3); + pt3.y = vwr.tm.height - pt3.y; + if (vwr.antialiased) + pt3.scale(0.5f); + } else { + // this is FROM screen coordinates + if (vwr.antialiased) + pt3.scale(2f); + pt3.y = vwr.tm.height - pt3.y; + vwr.tm.unTransformPoint(pt3, pt3); + } break; case T.point3f: // unitcell transform Modified: branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/symmetry/Symmetry.java 2015-12-01 05:14:58 UTC (rev 20875) @@ -96,14 +96,14 @@ @Override public SymmetryInterface setPointGroup(SymmetryInterface siLast, - T3[] atomset, BS bsAtoms, + T3[] atomset, + BS bsAtoms, boolean haveVibration, float distanceTolerance, - float linearTolerance, - boolean localEnvOnly) { + float linearTolerance, boolean localEnvOnly) { pointGroup = PointGroup.getPointGroup(siLast == null ? null - : ((Symmetry) siLast).pointGroup, atomset, bsAtoms, haveVibration, - distanceTolerance, linearTolerance, localEnvOnly); + : ((Symmetry) siLast).pointGroup, atomset, bsAtoms, + haveVibration, distanceTolerance, linearTolerance, localEnvOnly); return this; } @@ -323,7 +323,7 @@ @Override public String getSymmetryInfoStr() { - return symmetryInfo == null ? "" : symmetryInfo.infoStr; + return (symmetryInfo == null ? "" : symmetryInfo.infoStr); } @Override @@ -379,9 +379,9 @@ boolean isAbsolute) { uc.toFractional(ptTemp, isAbsolute); // {1 1 1} here is the original cell - return (ptTemp.x >= cell.x - 1f - slop && ptTemp.x <= cell.x + slop - && ptTemp.y >= cell.y - 1f - slop && ptTemp.y <= cell.y + slop - && ptTemp.z >= cell.z - 1f - slop && ptTemp.z <= cell.z + slop); + return (ptTemp.x >= cell.x - 1f - SimpleUnitCell.SLOP && ptTemp.x <= cell.x + SimpleUnitCell.SLOP + && ptTemp.y >= cell.y - 1f - SimpleUnitCell.SLOP && ptTemp.y <= cell.y + SimpleUnitCell.SLOP + && ptTemp.z >= cell.z - 1f - SimpleUnitCell.SLOP && ptTemp.z <= cell.z + SimpleUnitCell.SLOP); } @Override Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-01 05:13:30 UTC (rev 20874) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-01 05:14:58 UTC (rev 20875) @@ -8,17 +8,18 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.11.29" +Jmol.___JmolVersion="14.5.0_2015.11.30" +bug fix: getProperty("JSON", "variableInfo", "x") will fail if x is an array + -- was problem with JSV_predict2 failing to properly map atoms between Jmol and JSME +bug fix: {atomset}.sxyz gives incorrect screen coordinate when antialiased +bug fix: point(pt, true|false) also modifies pt itself +bug fix: point({atomset}, true) gives incorrect screen coordinate when antialiased. +bug fix: point({atomset}, false) gives incorrect Cartesian coordinate when antialiased. +bug fix: popup menu item "Surfaces...Off" resets atom selection bug fix: files with names containing "[]" cannot be loaded. bug fix: print {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555 - -JmolVersion="14.4.0_2015.11.27" - bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms - -JmolVersion="14.4.0_2015.11.26" - bug fix: getproperty SHAPEINFO fails if CGO is present bug fix: CGO from state deletes DRAW objects bug fix: CGO not properly isolated to current model; "fixed" not implemented This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-12-01 05:38:42
|
Revision: 20876 http://sourceforge.net/p/jmol/code/20876 Author: hansonr Date: 2015-12-01 05:38:40 +0000 (Tue, 01 Dec 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.11.30" bug fix: getProperty("JSON", "variableInfo", "x") will fail if x is an array -- was problem with JSV_predict2 failing to properly map atoms between Jmol and JSME bug fix: {atomset}.sxyz gives incorrect screen coordinate when antialiased bug fix: point(pt, true|false) also modifies pt itself bug fix: point({atomset}, true) gives incorrect screen coordinate when antialiased. bug fix: point({atomset}, false) gives incorrect Cartesian coordinate when antialiased. bug fix: popup menu item "Surfaces...Off" resets atom selection bug fix: files with names containing "[]" cannot be loaded. bug fix: print {cell=555}.find("cellFormula") can fail because of 2% slop involved in defining cell=555 bug fix: {atomset}.split() [split atomset by model] returns array of strings, not array of atoms bug fix: getproperty SHAPEINFO fails if CGO is present bug fix: CGO from state deletes DRAW objects bug fix: CGO not properly isolated to current model; "fixed" not implemented Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties branches/v14_4/Jmol/src/org/jmol/viewer/PropertyManager.java Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-12-01 05:14:58 UTC (rev 20875) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2015-12-01 05:38:40 UTC (rev 20876) @@ -1509,7 +1509,7 @@ Object property = vwr.getProperty(null, propertyName, propertyValue); if (pt < args.length) property = vwr.extractProperty(property, args, pt); - return mp.addXObj(isJSON ? "{" + PT.toJSON("value", property) + "}" : SV + return mp.addXObj(isJSON ? SV.safeJSON("value", property) : SV .isVariableType(property) ? property : Escape.toReadable(propertyName, property)); } Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-01 05:14:58 UTC (rev 20875) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-01 05:38:40 UTC (rev 20876) @@ -8,7 +8,7 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.5.0_2015.11.30" +Jmol.___JmolVersion="14.4.0_2015.11.30" bug fix: getProperty("JSON", "variableInfo", "x") will fail if x is an array -- was problem with JSV_predict2 failing to properly map atoms between Jmol and JSME Modified: branches/v14_4/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/PropertyManager.java 2015-12-01 05:14:58 UTC (rev 20875) +++ branches/v14_4/Jmol/src/org/jmol/viewer/PropertyManager.java 2015-12-01 05:38:40 UTC (rev 20876) @@ -254,8 +254,8 @@ return (info == null ? "" : info.toString()); if (requestedReadable) return Escape.toReadable(infoType, info); - else if (returnType.equalsIgnoreCase("JSON")) - return "{" + PT.toJSON(infoType, info) + "}"; + if (returnType.equalsIgnoreCase("JSON")) + return SV.safeJSON(infoType, info); return info; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-12-03 21:31:20
|
Revision: 20882 http://sourceforge.net/p/jmol/code/20882 Author: hansonr Date: 2015-12-03 21:31:17 +0000 (Thu, 03 Dec 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.12.03" bug fix: model 0 issued when more than one PDB file is open does not execute model * Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-12-03 21:29:02 UTC (rev 20881) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-12-03 21:31:17 UTC (rev 20882) @@ -4934,7 +4934,7 @@ * @throws ScriptException */ private void cmdModel(int offset) throws ScriptException { - boolean isFrame = (theTok == T.frame); + boolean isFrame = (theTok == T.frame || vwr.ms.mc > 1); boolean useModelNumber = true; if (slen == 1 && offset == 1) { int modelIndex = vwr.am.cmi; Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-03 21:29:02 UTC (rev 20881) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-03 21:31:17 UTC (rev 20882) @@ -8,8 +8,12 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.12.02" +Jmol.___JmolVersion="14.5.0_2015.12.03" +bug fix: model 0 issued when more than one PDB file is open does not execute model * + +JmolVersion="14.4.0_2015.12.02" + bug fix: PDB reader broken for filter "biomolecule n" bug fix: mmCIF reader can fail to popup menu when biomolecule is present. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-12-13 16:26:58
|
Revision: 20887 http://sourceforge.net/p/jmol/code/20887 Author: hansonr Date: 2015-12-13 16:26:55 +0000 (Sun, 13 Dec 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.0_2015.12.13" bug fix: zoomTo not setting time to 0 in the case of scriptWait bug fix: set selectAllModels should restrict action of display/hide as well bug fix: set selectAllModels not working appropriately bug fix: set selectAllModels should not be saved in state bug fix: JmolData.jar does not update atom screen positions upon REFRESH or select {visible} bug fix: JmolData.jar -p flag does not work properly bug fix: model 0 issued when more than one PDB file is open does not execute model * Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java branches/v14_4/Jmol/src/org/jmol/io/FileReader.java branches/v14_4/Jmol/src/org/jmol/io/FilesReader.java branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java branches/v14_4/Jmol/src/org/jmol/viewer/JC.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-12-13 16:26:55 UTC (rev 20887) @@ -121,6 +121,7 @@ protected Map<String, String> htGroup1; private int nAtoms0; + private int titleAtomSet = 1; @Override public void initializeReader() throws Exception { @@ -182,6 +183,8 @@ isLigand = false; if (iHaveDesiredModel) return false; + if (desiredModelNumber != Integer.MIN_VALUE) + appendLoadNote(null); newModel(++modelNumber); haveCellWaveVector = false; if (auditBlockCode == null) @@ -266,8 +269,10 @@ processSymmetrySpaceGroupName(); } else if (key.startsWith("_space_group_transform")) { processUnitCellTransform(); + } else if (key.contains("_database_code")) { + addModelTitle("ID"); } else if (titleRecords.contains("_" + key + "__")) { - appendLoadNote("TITLE: " + parser.fullTrim(data) + "\n"); + addModelTitle("TITLE"); } else { processSubclassEntry(); } @@ -275,6 +280,12 @@ return true; } + private void addModelTitle(String key) { + if (asc.atomSetCount > titleAtomSet) + appendLoadNote("\nMODEL: " + (titleAtomSet = asc.atomSetCount)); + appendLoadNote(key + ": " + parser.fullTrim(data)); + } + protected void processSubclassEntry() throws Exception { if (modDim > 0) getModulationReader().processEntry(); @@ -698,6 +709,8 @@ || (isLigand = key.equals("_chem_comp_atom_comp_id"))) { if (!processAtomSiteLoopBlock(isLigand)) return; + if (thisDataSetName.equals("global")) + asc.setCollectionName(thisDataSetName = chemicalName); asc.setAtomSetName(thisDataSetName); asc.setCurrentModelInfo("chemicalName", chemicalName); asc.setCurrentModelInfo("structuralFormula", thisStructuralFormula); Modified: branches/v14_4/Jmol/src/org/jmol/io/FileReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/io/FileReader.java 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/io/FileReader.java 2015-12-13 16:26:55 UTC (rev 20887) @@ -79,7 +79,7 @@ vwr.zap(false, true, false); String errorMessage = null; Object t = null; - if (fullPathNameIn.contains("_CHANGEABLE_")) + if (fullPathNameIn.contains("#_DOCACHE_")) reader = getChangeableReader(vwr, nameAsGivenIn, fullPathNameIn); if (reader == null) { t = fm.getUnzippedReaderOrStreamFromName(fullPathNameIn, Modified: branches/v14_4/Jmol/src/org/jmol/io/FilesReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/io/FilesReader.java 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/io/FilesReader.java 2015-12-13 16:26:55 UTC (rev 20887) @@ -95,7 +95,7 @@ subFileList = PT.split(name, "|"); name = subFileList[0]; } - if (name.contains("_CHANGEABLE_")) + if (name.contains("#_DOCACHE_")) return FileReader.getChangeableReader(vwr, namesAsGivenIn[i], name); Object t = fm.getUnzippedReaderOrStreamFromName(name, null, true, forceBinary, false, true, htParams); Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptEval.java 2015-12-13 16:26:55 UTC (rev 20887) @@ -8049,7 +8049,7 @@ xTrans = 0; if (Float.isNaN(yTrans)) yTrans = 0; - if (isSameAtom && Math.abs(zoom - newZoom) < 1) + if (isSameAtom && Math.abs(zoom - newZoom) < 1 || !useThreads()) floatSecondsTotal = 0; vwr.moveTo(this, floatSecondsTotal, center, JC.center, Float.NaN, null, newZoom, xTrans, yTrans, Float.NaN, null, Float.NaN, Float.NaN, Modified: branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java 2015-12-13 16:26:55 UTC (rev 20887) @@ -595,7 +595,7 @@ } if (bytes == null && (bytes = getCachedPngjBytes(name)) != null && htParams != null) htParams.put("sourcePNGJ", Boolean.TRUE); - name = name.replace("_CHANGEABLE_", ""); + name = name.replace("#_DOCACHE_", ""); String fullName = name; String[] subFileList = null; if (name.indexOf("|") >= 0) { Modified: branches/v14_4/Jmol/src/org/jmol/viewer/JC.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2015-12-13 16:26:55 UTC (rev 20887) @@ -61,15 +61,17 @@ "nmr", "http://www.nmrdb.org/new_predictor?POST?molfile=", "nmrdb", "http://www.nmrdb.org/service/predictor?POST?molfile=", "pdb", "http://www.rcsb.org/pdb/files/%FILE.pdb.gz", + // in Jmol 14.5, we changed "pdb", but here we want the cif + "pdb0", "http://www.rcsb.org/pdb/files/%FILE.pdb.gz", "pdbe", "http://www.ebi.ac.uk/pdbe/entry-files/download/%FILE.cif", "pdbe2", "http://www.ebi.ac.uk/pdbe/static/entry/%FILE_updated.cif", "pubchem", "http://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/%FILE/SDF?record_type=3d", "map", "http://www.ebi.ac.uk/pdbe/api/%TYPE/%FILE?pretty=false&metadata=true", "rna3d", "http://rna.bgsu.edu/rna3dhub/%TYPE/download/%FILE", "aflow", "http://aflowlib.mems.duke.edu/users/jmolers/binary_new/%FILE.aflow_binary", - // _CHANGEABLE_ flag indicates that the loaded file should be saved in any state in full - "ams", "http://rruff.geo.arizona.edu/AMS/viewJmol.php?_CHANGEABLE_&mineral=%file&action=showcif", - "am", "'http://rruff.geo.arizona.edu/AMS/CIF_text_files/'+load('http://rruff.geo.arizona.edu/AMS/minerals/%FILE').split(\"viewJmol('\")[(%n == 0 ? 0 : %n + 1)].split(\"'\")[1]+'_cif.txt'" + // _#CHANGEABLE_ flag indicates that the loaded file should be saved in any state in full + // ' at start indicates a Jmol script evaluation + "ams", "'http://rruff.geo.arizona.edu/AMS/viewJmol.php?'+(0+'%file'==0? 'mineral':('%file'.length==7? 'amcsd':'id'))+'=%file&action=showcif#_DOCACHE_'" }; public static String[] macros = { Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-13 16:03:49 UTC (rev 20886) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-13 16:26:55 UTC (rev 20887) @@ -7,8 +7,9 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.0_2015.12.10" +Jmol.___JmolVersion="14.4.0_2015.12.13" +bug fix: zoomTo not setting time to 0 in the case of scriptWait bug fix: set selectAllModels should restrict action of display/hide as well bug fix: set selectAllModels not working appropriately bug fix: set selectAllModels should not be saved in state This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-12-17 18:58:22
|
Revision: 20892 http://sourceforge.net/p/jmol/code/20892 Author: hansonr Date: 2015-12-17 18:58:19 +0000 (Thu, 17 Dec 2015) Log Message: ----------- Jmol.___JmolVersion="14.5.1_2015.12.16" bug fix: array handling for labels very inefficient Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java branches/v14_4/Jmol/src/org/jmol/shape/AtomShape.java branches/v14_4/Jmol/src/org/jmol/shape/Balls.java branches/v14_4/Jmol/src/org/jmol/shape/Labels.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java 2015-12-15 23:16:31 UTC (rev 20891) +++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java 2015-12-17 18:58:19 UTC (rev 20892) @@ -187,7 +187,7 @@ return; case JC.SHAPE_LABELS: sm.loadShape(id); - sm.setShapePropertyBs(id, "textLabels", info, bsAtoms); + sm.setShapePropertyBs(id, "pymolLabels", info, bsAtoms); return; case T.bonds: break; Modified: branches/v14_4/Jmol/src/org/jmol/shape/AtomShape.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shape/AtomShape.java 2015-12-15 23:16:31 UTC (rev 20891) +++ branches/v14_4/Jmol/src/org/jmol/shape/AtomShape.java 2015-12-17 18:58:19 UTC (rev 20892) @@ -105,11 +105,11 @@ if (atoms == null) // vector values are ignored if there are none for a model return; isActive = true; - if (bsSizeSet == null) - bsSizeSet = new BS(); boolean isVisible = (rd != null && rd.value != 0); boolean isAll = (bsSelected == null); int i0 = (isAll ? ac - 1 : bsSelected.nextSetBit(0)); + if (bsSizeSet == null) + bsSizeSet = BS.newN(ac); if (mads == null && i0 >= 0) mads = new short[ac]; for (int i = i0; i >= 0; i = (isAll ? i - 1 : bsSelected.nextSetBit(i + 1))) @@ -128,9 +128,8 @@ isActive = true; short colix = C.getColixO(value); byte pid = PAL.pidOf(value); - if (bsColixSet == null) - bsColixSet = new BS(); - for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) + int n = checkColixLength(colix, bs.length()); + for (int i = bs.nextSetBit(0); i >= 0 && i < n; i = bs.nextSetBit(i + 1)) setColixAndPalette(colix, pid, i); return; } @@ -142,14 +141,13 @@ float[] sizes = (float[]) data[2]; RadiusData rd = new RadiusData(null, 0, RadiusData.EnumType.FACTOR, VDW.AUTO); - if (bsColixSet == null) - bsColixSet = new BS(); if (bsSizeSet == null) bsSizeSet = new BS(); int i0 = bs.nextSetBit(0); if (mads == null && i0 >= 0) mads = new short[ac]; - for (int i = i0, pt = 0; i >= 0; i = bs.nextSetBit(i + 1), pt++) { + int n = checkColixLength(colixes == null ? 0 : C.BLACK, bs.length()); + for (int i = i0, pt = 0; i >= 0 && i < n; i = bs.nextSetBit(i + 1), pt++) { short colix = (colixes == null ? 0 : colixes[pt]); if (colix == 0) colix = C.INHERIT_ALL; @@ -200,15 +198,20 @@ setPropS(propertyName, value, bs); } + protected int checkColixLength(short colix, int n) { + n = Math.min(ac, n); + if (colix == C.INHERIT_ALL) + return (colixes == null ? 0 : colixes.length); + if (colixes == null || n > colixes.length) { + colixes = AU.ensureLengthShort(colixes, n); + paletteIDs = AU.ensureLengthByte(paletteIDs, n); + if (bsColixSet == null) + bsColixSet = BS.newN(ac); + } + return n; + } + protected void setColixAndPalette(short colix, byte paletteID, int atomIndex) { - if (colixes == null || atomIndex >= colixes.length) { - if (colix == C.INHERIT_ALL) - return; - colixes = AU.ensureLengthShort(colixes, atomIndex + 1); - paletteIDs = AU.ensureLengthByte(paletteIDs, atomIndex + 1); - } - if (bsColixSet == null) - bsColixSet = BS.newN(ac); colixes[atomIndex] = colix = getColixI(colix, paletteID, atomIndex); bsColixSet.setBitTo(atomIndex, colix != C.INHERIT_ALL); paletteIDs[atomIndex] = paletteID; Modified: branches/v14_4/Jmol/src/org/jmol/shape/Balls.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shape/Balls.java 2015-12-15 23:16:31 UTC (rev 20891) +++ branches/v14_4/Jmol/src/org/jmol/shape/Balls.java 2015-12-17 18:58:19 UTC (rev 20892) @@ -68,7 +68,7 @@ if (colix == C.INHERIT_ALL) colix = C.USE_PALETTE; if (bsColixSet == null) - bsColixSet = new BS(); + bsColixSet = BS.newN(ac); byte pid = PAL.pidOf(value); for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { Atom atom = atoms[i]; Modified: branches/v14_4/Jmol/src/org/jmol/shape/Labels.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shape/Labels.java 2015-12-15 23:16:31 UTC (rev 20891) +++ branches/v14_4/Jmol/src/org/jmol/shape/Labels.java 2015-12-17 18:58:19 UTC (rev 20892) @@ -84,6 +84,8 @@ defaultColix = 0; //"none" -- inherit from atom defaultBgcolix = 0; //"none" -- off defaultOffset = JC.LABEL_DEFAULT_OFFSET; + defaultAlignment = JC.TEXT_ALIGN_LEFT; + defaultPointer = JC.LABEL_POINTER_NONE; defaultZPos = 0; translucentAllowed = false; } @@ -101,10 +103,12 @@ if ("color" == propertyName) { byte pid = PAL.pidOf(value); short colix = C.getColixO(value); - if (!setDefaults) - for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected + if (!setDefaults) { + int n = checkColixLength(colix, bsSelected.length()); + for (int i = bsSelected.nextSetBit(0); i >= 0 && i < n; i = bsSelected .nextSetBit(i + 1)) setLabelColix(i, colix, pid); + } if (setDefaults || !defaultsOnlyForNone) { defaultColix = colix; defaultPaletteID = pid; @@ -117,10 +121,9 @@ return; float val = ((Float) value).floatValue(); float scalePixelsPerMicron = (val == 0 ? 0 : 10000f / val); - for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected + int n = Math.min(ac, strings.length); + for (int i = bsSelected.nextSetBit(0); i >= 0 && i < n; i = bsSelected .nextSetBit(i + 1)) { - if (strings.length <= i) - continue; Text text = getLabel(i); if (text == null) { text = Text.newLabel(vwr, null, strings[i], C.INHERIT_ALL, (short) 0, @@ -136,15 +139,16 @@ if ("label" == propertyName) { setScaling(); LabelToken[][] tokens = null; + int nbs = checkStringLength(bsSelected.length()); if (value instanceof Lst) { Lst<SV> list = (Lst<SV>) value; int n = list.size(); tokens = new LabelToken[][] { null }; - for (int pt = 0, i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected + for (int pt = 0, i = bsSelected.nextSetBit(0); i >= 0 && i < nbs; i = bsSelected .nextSetBit(i + 1)) { if (pt >= n) { setLabel(nullToken, "", i, true); - return; + continue; } tokens[0] = null; setLabel(tokens, SV.sValue(list.get(pt++)), i, true); @@ -160,19 +164,16 @@ return; } -// see label: -// if ("labels" == propertyName) { -// setScaling(); -// Lst<String> labels = (Lst<String>) value; -// for (int i = bsSelected.nextSetBit(0), pt = 0; i >= 0 && i < ac; i = bsSelected -// .nextSetBit(i + 1)) { -// String strLabel = labels.get(pt++); -// LabelToken[][] tokens = (strLabel == null || strLabel.length() == 0 ? nullToken -// : new LabelToken[][] { null }); -// setLabel(tokens, strLabel, i, true); -// } -// return; -// } + if (propertyName.startsWith("label:")) { + // from @1.label = "xxx" + setScaling(); + // in principle, we could make this more efficient, + // it would be at the cost of general atom property setting + checkStringLength(ac); + setLabel(new LabelToken[][] { null }, propertyName.substring(6), + ((Integer) value).intValue(), false); + return; + } if ("clearBoxes" == propertyName) { labelBoxes = null; @@ -187,12 +188,14 @@ if ("bgcolor" == propertyName) { isActive = true; if (bsBgColixSet == null) - bsBgColixSet = new BS(); + bsBgColixSet = BS.newN(ac); short bgcolix = C.getColixO(value); - if (!setDefaults) - for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected + if (!setDefaults) { + int n = checkBgColixLength(bgcolix, bsSelected.length()); + for (int i = bsSelected.nextSetBit(0); i >= 0 && i < n; i = bsSelected .nextSetBit(i + 1)) setBgcolix(i, bgcolix); + } if (setDefaults || !defaultsOnlyForNone) defaultBgcolix = bgcolix; return; @@ -201,7 +204,7 @@ // the rest require bsFontSet setting if (bsFontSet == null) - bsFontSet = new BS(); + bsFontSet = BS.newN(ac); if ("fontsize" == propertyName) { int fontsize = ((Integer) value).intValue(); @@ -232,10 +235,11 @@ if ("offset" == propertyName) { if (!(value instanceof Integer)) { - if (!setDefaults) + if (!setDefaults) { for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected .nextSetBit(i + 1)) setPymolOffset(i, (float[]) value); + } return; } @@ -250,12 +254,11 @@ } if ("align" == propertyName) { + // note that if the label is not offset, this centers the label with offset 0 0 String type = (String) value; - int hAlignment = JC.TEXT_ALIGN_LEFT; - if (type.equalsIgnoreCase("right")) - hAlignment = JC.TEXT_ALIGN_RIGHT; - else if (type.equalsIgnoreCase("center")) - hAlignment = JC.TEXT_ALIGN_CENTER; + int hAlignment = (type.equalsIgnoreCase("right") ? JC.TEXT_ALIGN_RIGHT + : type.equalsIgnoreCase("center") ? JC.TEXT_ALIGN_CENTER + : JC.TEXT_ALIGN_LEFT); for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected .nextSetBit(i + 1)) setHorizAlignment(i, hAlignment); @@ -309,17 +312,19 @@ LabelToken[] tokensUNK = null; String strLabel; LabelToken[] tokens; + int nstr = checkStringLength(bsSelected.length()); + short bgcolix = defaultBgcolix; + int nbg = checkBgColixLength(bgcolix, bsSelected.length()); + short thisMad = (short) (mode >= 0 ? 1 : -1); for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected .nextSetBit(i + 1)) { Atom atom = atoms[i]; - if (formats == null || i >= formats.length) - formats = AU.ensureLengthS(formats, i + 1); - if (strings != null && strings.length > i && strings[i] != null) { - mads[i] = (short) (mode == 0 && mads[i] < 0 || mode == 1 ? 1 : -1); + if (i < nstr && strings[i] != null) { + // an old string -- toggle + mads[i] = (short) (mode == 1 || mode == 0 && mads[i] < 0 ? 1 : -1); } else { - if (bsSizeSet == null) - bsSizeSet = new BS(); - strings = AU.ensureLengthS(strings, i + 1); + // a new string -- turn on + mads[i] = thisMad; if (atom.getGroup3(false).equals("UNK")) { if (strLabelUNK == null) { strLabelUNK = vwr.getStandardLabelFormat(1); @@ -339,37 +344,20 @@ null, ptTemp); formats[i] = strLabel; bsSizeSet.set(i); - if ((bsBgColixSet == null || !bsBgColixSet.get(i)) - && defaultBgcolix != 0) + if (i < nbg && !bsBgColixSet.get(i)) setBgcolix(i, defaultBgcolix); - mads[i] = (short) (mode >= 0 ? 1 : -1); } setShapeVisibility(atom, strings != null && i < strings.length && strings[i] != null && mads[i] >= 0); - // } else if (strings != null && atomIndex < strings.length) { - // strings[atomIndex] = null; } return; } - if (propertyName.startsWith("label:")) { - // from @1.label = "xxx" - setScaling(); - setLabel(new LabelToken[1][], propertyName.substring(6), - ((Integer) value).intValue(), false); + if ("pymolLabels" == propertyName) { + setPymolLabels((Map<Integer, Text>) value, bsSelected); return; } - if ("textLabels" == propertyName) { - // from PyMOL reader - setScaling(); - Map<Integer, Text> labels = (Map<Integer, Text>) value; - for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected - .nextSetBit(i + 1)) - setTextLabel(i, labels.get(Integer.valueOf(i)), null); - return; - } - if (propertyName == "deleteModelAtoms") { labelBoxes = null; int firstAtomDeleted = ((int[]) ((Object[]) value)[2])[1]; @@ -392,10 +380,47 @@ } + private int checkStringLength(int n) { + n = Math.min(ac, n); + if (strings == null || n > strings.length) { + formats = AU.ensureLengthS(formats, n); + strings = AU.ensureLengthS(strings, n); + if (bsSizeSet == null) + bsSizeSet = BS.newN(n); + } + return n; + } + + private int checkBgColixLength(short colix, int n) { + n = Math.min(ac, n); + if (colix == C.INHERIT_ALL) + return (bgcolixes == null ? 0 : bgcolixes.length); + if (bgcolixes == null || n > bgcolixes.length) + bgcolixes = AU.ensureLengthShort(bgcolixes, n); + return n; + } + + private void setPymolLabels(Map<Integer, Text> labels, BS bsSelected) { + // from PyMOL reader + setScaling(); + int n = checkStringLength(ac); + for (int i = bsSelected.nextSetBit(0); i >= 0 && i < n; i = bsSelected + .nextSetBit(i + 1)) + setPymolLabel(i, labels.get(Integer.valueOf(i)), null); + } + + /** + * Sets offset using PyMOL standard array; + * only operates in cases where label is already defined + * + * @param i + * @param value + */ private void setPymolOffset(int i, float[] value) { + // from PyMOL reader or from set labeloffset [...] Text text = getLabel(i); if (text == null) { - if (strings == null || strings.length <= i || strings[i] == null) + if (strings == null || i >= strings.length || strings[i] == null) return; byte fid = (bsFontSet != null && bsFontSet.get(i) ? fids[i] : -1); if (fid < 0) @@ -403,9 +428,7 @@ text = Text.newLabel(vwr, Font.getFont3D(fid), strings[i], getColix2(i, atoms[i], false), getColix2(i, atoms[i], true), 0, scalePixelsPerMicron); - setTextLabel(i, text, formats[i]); - if (text == null) - return; + setPymolLabel(i, text, formats[i]); } text.pymolOffset = value; } @@ -418,13 +441,13 @@ private void setScaling() { isActive = true; if (bsSizeSet == null) - bsSizeSet = new BS(); + bsSizeSet = BS.newN(ac); isScaled = vwr.getBoolean(T.fontscaling); scalePixelsPerMicron = (isScaled ? vwr .getScalePixelsPerAngstrom(false) * 10000f : 0); } - private void setTextLabel(int i, Text t, String format) { + private void setPymolLabel(int i, Text t, String format) { if (t == null) return; String label = t.getText(); @@ -438,6 +461,7 @@ } private void setLabel(LabelToken[][] temp, String strLabel, int i, boolean doAll) { + // checkStringLength must be first Atom atom = atoms[i]; LabelToken[] tokens = temp[0]; if (tokens == null) @@ -476,10 +500,6 @@ private boolean addString(Atom atom, int i, String label, String strLabel) { setShapeVisibility(atom, label != null); - if (strings == null || i >= strings.length) - strings = AU.ensureLengthS(strings, i + 1); - if (formats == null || i >= formats.length) - formats = AU.ensureLengthS(formats, i + 1); boolean notNull = (strLabel != null); boolean isNew = (strings[i] == null); strings[i] = label; @@ -533,11 +553,6 @@ } private void setBgcolix(int i, short bgcolix) { - if (bgcolixes == null || i >= bgcolixes.length) { - if (bgcolix == 0) - return; - bgcolixes = AU.ensureLengthShort(bgcolixes, i + 1); - } bgcolixes[i] = bgcolix; bsBgColixSet.setBitTo(i, bgcolix != 0); Text text = getLabel(i); @@ -548,12 +563,10 @@ private void setOffsets(int i, int offset) { if (offsets == null || i >= offsets.length) { - if (offset == 0) + if (offset == JC.LABEL_DEFAULT_OFFSET) return; - offsets = AU.ensureLengthI(offsets, i + 1); + offsets = AU.ensureLengthI(offsets, ac); } - if (offset == 0) - offset = JC.LABEL_DEFAULT_OFFSET; offsets[i] = (offsets[i] & JC.LABEL_FLAGS) | offset; Text text = getLabel(i); @@ -563,10 +576,15 @@ private void setHorizAlignment(int i, int hAlign) { if (offsets == null || i >= offsets.length) { - if (hAlign == JC.TEXT_ALIGN_LEFT) + switch (hAlign) { + case JC.TEXT_ALIGN_NONE: + case JC.TEXT_ALIGN_LEFT: return; - offsets = AU.ensureLengthI(offsets, i + 1); + } + offsets = AU.ensureLengthI(offsets, ac); } + if (hAlign == JC.TEXT_ALIGN_NONE) + hAlign = JC.TEXT_ALIGN_LEFT; offsets[i] = JC.setHorizAlignment(offsets[i], hAlign); Text text = getLabel(i); if (text != null) @@ -577,7 +595,7 @@ if (offsets == null || i >= offsets.length) { if (pointer == JC.LABEL_POINTER_NONE) return; - offsets = AU.ensureLengthI(offsets, i + 1); + offsets = AU.ensureLengthI(offsets, ac); } offsets[i] = JC.setPointer(offsets[i], pointer); Text text = getLabel(i); @@ -589,7 +607,7 @@ if (offsets == null || i >= offsets.length) { if (!TF) return; - offsets = AU.ensureLengthI(offsets, i + 1); + offsets = AU.ensureLengthI(offsets, ac); } offsets[i] = JC.setZPosition(offsets[i], TF ? flag : 0); } @@ -598,7 +616,7 @@ if (fids == null || i >= fids.length) { if (fid == zeroFontId) return; - fids = AU.ensureLengthByte(fids, i + 1); + fids = AU.ensureLengthByte(fids, ac); } fids[i] = fid; bsFontSet.set(i); Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-15 23:16:31 UTC (rev 20891) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-17 18:58:19 UTC (rev 20892) @@ -7,8 +7,12 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.1_2015.12.15" +Jmol.___JmolVersion="14.5.1_2015.12.16" +bug fix: array handling for labels very inefficient + +JmolVersion="14.4.1_2015.12.15" + bug fix: Bad build for Jmol Java applet JmolVersion="14.4.1_2015.12.14" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2015-12-23 04:17:40
|
Revision: 20900 http://sourceforge.net/p/jmol/code/20900 Author: hansonr Date: 2015-12-23 04:17:37 +0000 (Wed, 23 Dec 2015) Log Message: ----------- Jmol.___JmolVersion="14.4.1_2015.12.22" bug fix: PyMOL 1.8 PSE files cannot be read Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2015-12-22 18:37:19 UTC (rev 20899) +++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2015-12-23 04:17:37 UTC (rev 20900) @@ -1081,8 +1081,9 @@ atom.radius = 1; atom.partialCharge = floatAt(a, 17); int formalCharge = intAt(a, 18); - + BS bsReps = getBsReps(listAt(a, 20)); + int intReps = (bsReps == null ? intAt(a, 20) : 0); // Pymol 1.8 int atomColor = intAt(a, 21); int serNo = intAt(a, 22); int cartoonType = intAt(a, 23); @@ -1116,7 +1117,7 @@ if (isNucleic) pymolScene.bsNucleic.set(ac); for (int i = 0; i < PyMOL.REP_MAX; i++) - if (bsReps.get(i)) + if (bsReps == null ? ((intReps & (1<<i)) != 0) : bsReps.get(i)) reps[i].set(ac); if (atom.elementSymbol.equals("H")) pymolScene.bsHydrogen.set(ac); Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-22 18:37:19 UTC (rev 20899) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2015-12-23 04:17:37 UTC (rev 20900) @@ -7,8 +7,12 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.1_2015.12.21" +Jmol.___JmolVersion="14.4.1_2015.12.22" +bug fix: PyMOL 1.8 PSE files cannot be read + +JmolVersion="14.4.1_2015.12.21" + bug fix: color [0xffffff] should not be case-sensitive -- [0Xffffff] should be OK bug fix: set spin fps ... fails This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-01-01 15:30:48
|
Revision: 20910 http://sourceforge.net/p/jmol/code/20910 Author: hansonr Date: 2016-01-01 15:30:45 +0000 (Fri, 01 Jan 2016) Log Message: ----------- Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/dialog/Dialog.java branches/v14_4/Jmol/src/org/jmol/util/Escape.java Modified: branches/v14_4/Jmol/src/org/jmol/dialog/Dialog.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/dialog/Dialog.java 2016-01-01 14:57:00 UTC (rev 20909) +++ branches/v14_4/Jmol/src/org/jmol/dialog/Dialog.java 2016-01-01 15:30:45 UTC (rev 20910) @@ -150,7 +150,7 @@ if (fileName.startsWith("/")) fileName = "file://" + fileName; // for Macs boolean doCartoons = (jmolApp == null || allowAppend && openPreview != null && openPreview.isCartoonsSelected()); - boolean doAppend = (allowAppend && !FileManager.isScriptType(fileName) + boolean doAppend = (allowAppend && !FileManager.isScriptType(fileName) && openPreview != null && openPreview.isAppendSelected()); closePreview(); return (doCartoons ? "" : "#NOCARTOONS#;") + (doAppend ? "#APPEND#;" : "") + fileName; Modified: branches/v14_4/Jmol/src/org/jmol/util/Escape.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/util/Escape.java 2016-01-01 14:57:00 UTC (rev 20909) +++ branches/v14_4/Jmol/src/org/jmol/util/Escape.java 2016-01-01 15:30:45 UTC (rev 20910) @@ -671,5 +671,4 @@ return (pts == null ? new T3[0] : pts); } } - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-01-05 02:34:23
|
Revision: 20919 http://sourceforge.net/p/jmol/code/20919 Author: hansonr Date: 2016-01-05 02:34:21 +0000 (Tue, 05 Jan 2016) Log Message: ----------- Jmol.___JmolVersion="14.4.1_2016.01.04" bug fix: (JvxlReader) Jmol 12 mapped isosurface jvxl files do not show mapped color bug fix: setting cartoons on for phosphorus-only polymers fails bug fix: setting default label properties using select none;.... fails bug fix: undocumented model-based draw [array of points] broken -- points only -- selects from visible frames (frame *, for example) -- load cyclohexane_movie.xyz; frame *; draw @{{C5}.split().sub({1,0,0}) Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java 2016-01-04 12:48:02 UTC (rev 20918) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java 2016-01-05 02:34:21 UTC (rev 20919) @@ -329,7 +329,7 @@ jvxlData.rendering = s; jvxlData.colorScheme = XmlReader.getXmlAttrib(data, "colorScheme"); if (jvxlData.colorScheme.length() == 0) - jvxlData.colorScheme = null; + jvxlData.colorScheme = (jvxlDataIsColorMapped ? "roygb": null); // allow for legacy default if (jvxlData.thisSet < 0) { int n = parseIntStr(XmlReader.getXmlAttrib(data, "set")); if (n > 0) Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2016-01-04 12:48:02 UTC (rev 20918) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2016-01-05 02:34:21 UTC (rev 20919) @@ -9,12 +9,14 @@ Jmol.___JmolVersion="14.4.1_2016.01.04" +bug fix: (JvxlReader) Jmol 12 mapped isosurface jvxl files do not show mapped color bug fix: setting cartoons on for phosphorus-only polymers fails bug fix: setting default label properties using select none;.... fails bug fix: undocumented model-based draw [array of points] broken -- points only -- selects from visible frames (frame *, for example) -- load cyclohexane_movie.xyz; frame *; draw @{{C5}.split().sub({1,0,0}) + JmolVersion="14.4.1_2016.01.01" released This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-01-05 03:07:34
|
Revision: 20921 http://sourceforge.net/p/jmol/code/20921 Author: hansonr Date: 2016-01-05 03:07:31 +0000 (Tue, 05 Jan 2016) Log Message: ----------- Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/shape/MeshCollection.java branches/v14_4/Jmol/src/org/jmol/shapecgo/CGO.java branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java branches/v14_4/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java branches/v14_4/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java Modified: branches/v14_4/Jmol/src/org/jmol/shape/MeshCollection.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shape/MeshCollection.java 2016-01-05 02:34:29 UTC (rev 20920) +++ branches/v14_4/Jmol/src/org/jmol/shape/MeshCollection.java 2016-01-05 03:07:31 UTC (rev 20921) @@ -442,7 +442,7 @@ return list; } - protected Object getPropMC(String property) { + protected Object getPropMC(String property, int index) { Mesh m; if (property == "count") { int n = 0; Modified: branches/v14_4/Jmol/src/org/jmol/shapecgo/CGO.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapecgo/CGO.java 2016-01-05 02:34:29 UTC (rev 20920) +++ branches/v14_4/Jmol/src/org/jmol/shapecgo/CGO.java 2016-01-05 03:07:31 UTC (rev 20921) @@ -147,7 +147,7 @@ public Object getProperty(String property, int index) { if (property == "command") return getCommand(cgoMesh); - return getPropMC(property); + return getPropMC(property, index); } @Override Modified: branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java 2016-01-05 02:34:29 UTC (rev 20920) +++ branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java 2016-01-05 03:07:31 UTC (rev 20921) @@ -218,7 +218,7 @@ return; String id = currentMesh.thisID; int imodel = currentMesh.modelIndex; - vwr.cachePut("cache://isosurface_" + id, getPropI("jvxlDataXml")); + vwr.cachePut("cache://isosurface_" + id, getPropI("jvxlDataXml", -1)); deleteMeshI(currentMesh.index); setPropI("init", null, null); setPropI("thisID", id, null); @@ -845,11 +845,11 @@ @Override public Object getProperty(String property, int index) { - return getPropI(property); + return getPropI(property, index); } - protected Object getPropI(String property) { - Object ret = getPropMC(property); + protected Object getPropI(String property, int index) { + Object ret = getPropMC(property, index); if (ret != null) return ret; if (property == "message") { @@ -859,8 +859,8 @@ if (jvxlData.dataMin != Float.MAX_VALUE) s += " min=" + jvxlData.dataMin + " max=" + jvxlData.dataMax; s += "; " + JC.shapeClassBases[shapeID].toLowerCase() + " count: " - + getPropMC("count"); - return s + getPropI("dataRangeStr") + jvxlData.msg; + + getPropMC("count", index); + return s + getPropI("dataRangeStr", index) + jvxlData.msg; } if (property == "dataRange") return getDataRange(); Modified: branches/v14_4/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java 2016-01-05 02:34:29 UTC (rev 20920) +++ branches/v14_4/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java 2016-01-05 03:07:31 UTC (rev 20921) @@ -683,7 +683,8 @@ colix = C.ORANGE; colix = C.getColixTranslucent3(colix, jvxlData.translucency != 0, jvxlData.translucency); - float translucencyLevel = (jvxlData.translucency == 0 ? Float.NaN : jvxlData.translucency); + float translucencyLevel = (jvxlData.translucency == 0 ? Float.NaN + : jvxlData.translucency); if (jvxlData.meshColor != null) meshColix = C.getColixS(jvxlData.meshColor); setJvxlDataRendering(); @@ -692,32 +693,32 @@ && jvxlData.vertexColorMap == null; if (colorEncoder == null) return false; - // bicolor map will be taken care of with params.isBicolorMap - if (jvxlData.vertexColorMap == null) { - if (jvxlData.colorScheme != null) { - String colorScheme = jvxlData.colorScheme; - boolean isTranslucent = colorScheme.startsWith("translucent "); - if (isTranslucent) { - colorScheme = colorScheme.substring(12); - translucencyLevel = Float.NaN; - } - colorEncoder.setColorScheme(colorScheme, isTranslucent); - remapColors(null, null, translucencyLevel); + // bicolor map will be taken care of with params.isBicolorMap + if (jvxlData.vertexColorMap == null) { + if (jvxlData.colorScheme != null) { + String colorScheme = jvxlData.colorScheme; + boolean isTranslucent = colorScheme.startsWith("translucent "); + if (isTranslucent) { + colorScheme = colorScheme.substring(12); + translucencyLevel = Float.NaN; } - } else { - if (jvxlData.baseColor != null) { - for (int i = vc; --i >= 0;) - vcs[i] = colix; - } - for (Map.Entry<String, BS> entry : jvxlData.vertexColorMap.entrySet()) { - BS bsMap = entry.getValue(); - short colix = C.copyColixTranslucency(this.colix, C.getColixS(entry - .getKey())); - for (int i = bsMap.nextSetBit(0); i >= 0; i = bsMap.nextSetBit(i + 1)) - vcs[i] = colix; - } + colorEncoder.setColorScheme(colorScheme, isTranslucent); + remapColors(null, null, translucencyLevel); } - return true; + } else { + if (jvxlData.baseColor != null) { + for (int i = vc; --i >= 0;) + vcs[i] = colix; + } + for (Map.Entry<String, BS> entry : jvxlData.vertexColorMap.entrySet()) { + BS bsMap = entry.getValue(); + short colix = C.copyColixTranslucency(this.colix, + C.getColixS(entry.getKey())); + for (int i = bsMap.nextSetBit(0); i >= 0; i = bsMap.nextSetBit(i + 1)) + vcs[i] = colix; + } + } + return true; } void setJvxlDataRendering() { Modified: branches/v14_4/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java 2016-01-05 02:34:29 UTC (rev 20920) +++ branches/v14_4/Jmol/src/org/jmol/shapesurface/MolecularOrbital.java 2016-01-05 03:07:31 UTC (rev 20921) @@ -312,11 +312,11 @@ @SuppressWarnings("unchecked") @Override - public Object getProperty(String propertyName, int param) { + public Object getProperty(String propertyName, int index) { if (propertyName.startsWith("list")) { String s = ""; if (propertyName.equals("list")) { - s = (String) getPropI("list"); + s = (String) getPropI("list", index); if (s.length() > 1) s += "cutoff = " + jvxlData.cutoff + "\n"; s = "\n" + s; @@ -332,7 +332,7 @@ Lst<Map<String, Object>> mos = (Lst<Map<String, Object>>) (sg.params.moData .get("mos")); int nOrb = (mos == null ? 0 : mos.size()); - int thisMO = param; + int thisMO = index; int currentMO = moNumber; boolean isShowCurrent = (thisMO == Integer.MIN_VALUE); if (thisMO == Integer.MAX_VALUE) { @@ -371,7 +371,7 @@ true, 0, null, null)); return str.toString(); } - return getPropI(propertyName); + return getPropI(propertyName, index); } @SuppressWarnings("unchecked") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-02-06 06:22:07
|
Revision: 20948 http://sourceforge.net/p/jmol/code/20948 Author: hansonr Date: 2016-02-06 06:22:04 +0000 (Sat, 06 Feb 2016) Log Message: ----------- Jmol.___JmolVersion="14.4.2_2016.02.06" bug fix: small MRC map files mistaken for DELPHI files, which start with the 4-byte integer 20. bug fix: MRC/CCP4 surface/map files still sometimes inside out. Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/jvxl/data/JvxlData.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MapFileReader.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MrcBinaryReader.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/Parameters.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java branches/v14_4/Jmol/src/org/jmol/viewer/JC.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/data/JvxlData.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/data/JvxlData.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/data/JvxlData.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -111,7 +111,6 @@ public int colorFractionBase = JvxlCoder.defaultColorFractionBase; public int colorFractionRange = JvxlCoder.defaultColorFractionRange; - public boolean dataXYReversed; public boolean insideOut; public boolean isXLowToHigh; public boolean isContoured; Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/JvxlXmlReader.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -403,10 +403,9 @@ jvxlData.mappedDataMin = params.mappedDataMin; jvxlData.mappedDataMax = params.mappedDataMax; jvxlData.isColorReversed = params.isColorReversed; - jvxlData.insideOut = insideOut; if (params.insideOut) - jvxlData.insideOut = !jvxlData.insideOut; - params.insideOut = jvxlData.insideOut; + insideOut = !insideOut; + params.insideOut = jvxlData.insideOut = insideOut; } @Override Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MapFileReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MapFileReader.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MapFileReader.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -84,7 +84,7 @@ protected void getVectorsAndOrigin() { - Logger.info("grid parameters: nx,ny,nz: " + nx + "," + ny + "," + nz); + Logger.info("grid parameters: nx,ny,nz: " + nx + "," + ny + "," + nz); Logger.info("grid parameters: nxStart,nyStart,nzStart: " + nxyzStart[0] + "," + nxyzStart[1] + "," + nxyzStart[2]); Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MrcBinaryReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MrcBinaryReader.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/MrcBinaryReader.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -121,13 +121,14 @@ if (nx < 0 || nx > 1<<8) { setStream(null, false); nx = binarydoc.swapBytesI(nx); - if (params.thePlane == null) - params.insideOut = !params.insideOut; + //removed for PDBE CCP4 files + //if (params.thePlane == null) + //params.insideOut = !params.insideOut; if (nx < 0 || nx > 1000) { Logger.info("nx=" + nx + " not displayable as MRC file"); throw new Exception("MRC file type not readable"); } - Logger.info("reading nonstandard little-endian MRC file"); + Logger.info("reading little-endian MRC file"); } ny = binarydoc.readInt(); nz = binarydoc.readInt(); @@ -182,10 +183,13 @@ mapr = binarydoc.readInt(); maps = binarydoc.readInt(); - Logger.info("MRC header: mapc mapr maps: " + mapc + " " + mapr + " " + maps); + String s = "" + mapc + mapr + maps; + Logger.info("MRC header: mapc mapr maps: " + s); - if (mapc != 1 && params.thePlane == null) + if (params.thePlane == null && "21321".indexOf(s) >= 1) { + Logger.info("MRC header: data are xy-reversed"); params.dataXYReversed = true; + } dmin = binarydoc.readFloat(); dmax = binarydoc.readFloat(); @@ -223,7 +227,7 @@ labels[0] = "Jmol MrcBinaryReader"; for (int i = 0; i < 10; i++) { - String s = binarydoc.readString(80).trim(); + s = binarydoc.readString(80).trim(); if (i < nlabel) { labels[i] = s; Logger.info(labels[i]); @@ -232,7 +236,7 @@ for (int i = 0; i < nsymbt; i += 80) { long position = binarydoc.getPosition(); - String s = binarydoc.readString(80).trim(); + s = binarydoc.readString(80).trim(); if (s.indexOf('\0') != s.lastIndexOf('\0')) { // must not really be symmetry info! Logger.error("File indicates " + nsymbt + " symmetry lines, but " + i + " found!"); Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/Parameters.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/Parameters.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/Parameters.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -882,4 +882,13 @@ slabInfo.addLast(slabObject); } + public boolean isInsideOut() { + return insideOut != dataXYReversed; + } + + public boolean isFullyLit() { + return (thePlane != null || fullyLit); + } + + } Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -185,14 +185,6 @@ jvxlData.version = version; } - public boolean isInsideOut() { - return params.insideOut != params.dataXYReversed; - } - - public boolean isFullyLit() { - return (params.thePlane != null || params.fullyLit); - } - ////////////////////////////////////////////////////////////// /** Modified: branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/jvxl/readers/SurfaceReader.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -370,8 +370,7 @@ nPointsY = voxelCounts[1]; nPointsZ = voxelCounts[2]; jvxlData.isSlabbable = ((params.dataType & Parameters.IS_SLABBABLE) != 0); - jvxlData.insideOut = params.insideOut; - jvxlData.dataXYReversed = params.dataXYReversed; + jvxlData.insideOut = params.isInsideOut(); jvxlData.isBicolorMap = params.isBicolorMap; jvxlData.nPointsX = nPointsX; jvxlData.nPointsY = nPointsY; Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -2422,7 +2422,14 @@ * Or =xxxx, an EDM from Uppsala Electron Density Server * If the model auxiliary info has "jmolSufaceInfo", we use that. */ - if (filename.startsWith("=") && filename.length() > 1) { + boolean checkWithin = false; + if (filename.startsWith("*") && filename.length() > 1) { + // new PDB ccp4 option + filename = (String) vwr.setLoadFormat(filename, '_', false); + // filename = info[0]; + checkWithin = true; + } else if (filename.startsWith("=") && filename.length() > 1) { + checkWithin = true; String[] info = (String[]) vwr.setLoadFormat(filename, '_', false); filename = info[0]; String strCutoff = (!firstPass || !Float.isNaN(cutoff) ? null @@ -2456,8 +2463,10 @@ sbCommand.append(" cutoff ").appendF(cutoff); } } + } + if (checkWithin) { if (ptWithin == 0) { - onlyOneModel = "=xxxx"; + onlyOneModel = filename; if (modelIndex < 0) modelIndex = vwr.am.cmi; bs = vwr.getModelUndeletedAtomsBitSet(modelIndex); @@ -2469,7 +2478,6 @@ if (firstPass) defaultMesh = true; } - if (firstPass && vwr.getP("_fileType").equals("Pdb") && Float.isNaN(sigma) && Float.isNaN(cutoff)) { // negative sigma just indicates that Modified: branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/shapesurface/Isosurface.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -1480,7 +1480,7 @@ public boolean notifySurfaceGenerationCompleted() { setMeshI(); setBsVdw(); - thisMesh.insideOut = sg.isInsideOut(); + thisMesh.insideOut = sg.params.isInsideOut(); thisMesh.isModelConnected = sg.params.isModelConnected; thisMesh.vertexSource = sg.params.vertexSource; thisMesh.spanningVectors = sg.getSpanningVectors(); @@ -1488,7 +1488,7 @@ thisMesh.calculatedVolume = null; // from JVXL file: if (!thisMesh.isMerged) { - thisMesh.initialize(sg.isFullyLit() ? T.fullylit + thisMesh.initialize(sg.params.isFullyLit() ? T.fullylit : T.frontlit, null, sg.params.thePlane); if (jvxlData.fixedLattice != null) { thisMesh.lattice = jvxlData.fixedLattice; @@ -1511,7 +1511,7 @@ @Override public void notifySurfaceMappingCompleted() { if (!thisMesh.isMerged) - thisMesh.initialize(sg.isFullyLit() ? T.fullylit : T.frontlit, null, + thisMesh.initialize(sg.params.isFullyLit() ? T.fullylit : T.frontlit, null, sg.params.thePlane); setBsVdw(); thisMesh.isColorSolid = false; Modified: branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/viewer/FileManager.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -1107,7 +1107,7 @@ ///// FILE TYPING ///// - private final static String DELPHI_BINARY_MAGIC_NUMBER = "\24\0\0\0"; + private final static String DELPHI_BINARY_MAGIC_NUMBER = "\24\0\0\0"; //0x14 0 0 0 == "20-byte character string follows" public final static String PMESH_BINARY_MAGIC_NUMBER = "PM\1\0"; public static final String JPEG_CONTINUE_STRING = " #Jmol...\0"; Modified: branches/v14_4/Jmol/src/org/jmol/viewer/JC.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/viewer/JC.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -70,7 +70,9 @@ "aflow", "http://aflowlib.mems.duke.edu/users/jmolers/binary_new/%FILE.aflow_binary", // _#CHANGEABLE_ flag indicates that the loaded file should be saved in any state in full // ' at start indicates a Jmol script evaluation - "ams", "'http://rruff.geo.arizona.edu/AMS/viewJmol.php?'+(0+'%file'==0? 'mineral':('%file'.length==7? 'amcsd':'id'))+'=%file&action=showcif#_DOCACHE_'" + "ams", "'http://rruff.geo.arizona.edu/AMS/viewJmol.php?'+(0+'%file'==0? 'mineral':('%file'.length==7? 'amcsd':'id'))+'=%file&action=showcif#_DOCACHE_'", + "pdbemap", "http://wwwdev.ebi.ac.uk/pdbe/coordinates/files/%file.ccp4", + "pdbemapdiff", "http://wwwdev.ebi.ac.uk/pdbe/coordinates/files/%file_diff.ccp4" }; public static String[] macros = { Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2016-02-06 06:22:04 UTC (rev 20948) @@ -7,7 +7,12 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.2_2016.02.05" +Jmol.___JmolVersion="14.4.2_2016.02.06" + +bug fix: small MRC map files mistaken for DELPHI files, which start with the 4-byte integer 20. +bug fix: MRC/CCP4 surface/map files still sometimes inside out. + +JmolVersion="14.4.2_2016.02.05" released bug fix: LOAD $benzene; SHOW smiles should give c1ccccc1 not c1=cc=cc=c1 Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java 2016-02-05 05:56:22 UTC (rev 20947) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Viewer.java 2016-02-06 06:22:04 UTC (rev 20948) @@ -4055,6 +4055,13 @@ return (withPrefix ? "MOL3D::" : "") + PT.formatStringS(format, "FILE", id); case '_': // isosurface "=...", but we code that type as '_' + if (name.startsWith("*")) { + boolean isDiff = id.startsWith("*"); + if (isDiff) + id = id.substring(1); + return g.resolveDataBase((isDiff ? "pdbemapdiff" : "pdbemap"), id, + null); + } return g.fixSurfaceFileNameVariables(id); } return id; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-04-11 19:36:50
|
Revision: 21044 http://sourceforge.net/p/jmol/code/21044 Author: hansonr Date: 2016-04-11 19:36:47 +0000 (Mon, 11 Apr 2016) Log Message: ----------- Jmol.___JmolVersion="14.4.4_2016.04.11" bug fix: qchem reader fails to switch to spherical D/F basis for second structure bug fix: pointGroup secondary axis in yellow is too hard to see -- using "orange" instead new feature: symop() options: symop(op) -- returns the 4x4 matrix representation of this operator symop(op, atom) -- returns the point generated by operator op on atom -- op may be a positive or negative integer indictating the operation (or its reverse) to apply from the loaded space group -- for example, symop(3, @1) or symop(-4, {atomindex=16}) -- op may be a string such as "x+1/2,1/2-y,z" representing a specific generic operation symop(atom1, atom2) -- returns the description of the first of possibly several operations that take atom1 to atom2, for example: "2-fold screw axis|translation: 1/2 0 0" symop(atom1, atom2, n) -- returns the description of the nth operation that takes atom1 to atom2 symop(...point...) -- any place an atom can be used in symop(), one can substitute an xyz coordinate. -- for example, symop(@1, {1/2 1/2 1/2}) {atomset}.symop(...) -- when more than one model is loaded, prepending any symop function with an atom set specifies which atoms, space group, and unit cell are being referenced. For example, {2.1}.symop(5) operates only on atoms in the first model of the second loaded file, using the appropriate space group and unit cell. In this way, "@1" will designate one atom only, provided only one model is showing (using the FRAME/MODEL command). If only one model has been loaded, there is no need to use this syntax; symop(...) will do the same. symop(..., outputType) -- All uses of symop() and {atomset}.symop() can be extended using a final parameter that changes the default output described above to be something else. Options for outputType include: "draw" Returns the Jmol script illustrating this operation with DRAW commands. $ print symop(3,"draw") draw ID draw_* delete draw ID draw_frame1X diameter 0.15{5.5172 1.9683 2.7802}{6.5172 1.9683 2.7802} color red ... "full" Returns the tab-separated Jones-Faithful string and descriptor for this operation. $ print symop(3,"full") -x,-y,-z(mx,my,mz) Ci: 0 0 0 "lattice" Returns the lattice type associated with the space group involving this operation. "list" Specifically when two atoms or points are specified, returns a string list of all operations taking the first to the second. $ print symop(@3,@21,"list") 5 x+1/2,-y+1/2,-z+1/2(-mx,my,mz) 2-fold screw axis|translation: 1/2 0 0|time-reversed 7 -x+1/2,y+1/2,z+1/2(-mx,my,mz) n-glide plane|translation: 0 1/2 1/2|time-reversed Note that this string can be turned into a standard array using .lines.split("\t",true): $ print symop(@3,@21,"list").lines.split("\t",true) [ 5 x+1/2,-y+1/2,-z+1/2(-mx,my,mz) 2-fold screw axis|translation: 1/2 0 0|time-reversed ] [ 7 -x+1/2,y+1/2,z+1/2(-mx,my,mz) n-glide plane|translation: 0 1/2 1/2|time-reversed ] "array" Returns an associative array that contains critical information relating to this operation. $ load =magndata/0.34 $ print symop(3,"array") { "inversionCenter" : {0.0 0.0 0.0} "label" : "Ci: 0 0 0" "matrix" : [ [-1.0, 0.0, 0.0, 0.0] [0.0, -1.0, 0.0, 0.0] [0.0, 0.0, -1.0, 0.0] [0.0, 0.0, 0.0, 1.0] ] "timeReversal" : 1 "xyz" : "-x,-y,-z(mx,my,mz)" "xyzOriginal" : "-x,-y,-z,m" } In addition, all possible keys of this array may be used as well for outputType. These include: "axisVector", "cartesianTranslation", "centeringVector", "fractionalTranslation", "inversionCenter", "label", "matrix", "plane", "rotationAngle", "timeReversal", "unitTranslation", "xyz", and "xyzOriginal" Three of these that may be less than obvious are explained below: "centeringVector" For operations that are pure lattice translations, returns the vector for this centering in fractional coordinates. "timeReversal" This quantity is 0 for standard space groups. Magnetic space group operations also include the possibility of inversion of the spin along with any 3D symmetry operation. This inversion characteristic is referred to as "time reversal" and takes the value of 1 or -1. "unitTranslation" Symmetry operations involving two atoms may include an extra lattice translation if the two atoms are in different unit cells. This translation is above and beyond any fractional lattice centering that this operator incorporates for a face- or body-centered space group. new feature: show spacegroup/xxxxx -- selects lines from a space group report similar to the way show state/xxxx works -- example: load =ams/quartz 1 show spacegroup/Class new feature: show/draw symop @1 @2 -- gives full list of matching symmetry operations -- example: $ load =magndata/1.23 {444 555 1} packed $ show symop @153 @299 1 x+2,y,z2(mx,my,mz) translation: 2 0 -2 5 -x,-y,-z(mx,my,mz) Ci: 0 0 0 11 x+2,-y,-z(-mx,my,mz) 2-fold screw axis|translation: 2 0 0|time-reversed 15 -x,y,z2(-mx,my,mz) c-glide plane|translation: 0 0 -2|time-reversed new feature: show/draw symop @1 @2 n -- shows or draws the nth symmetry operation relating atom 1 to atom 2 -- example: $ load =magndata/1.23 {444 555 1} packed $ show symop @153 @299 3 11 x+2,-y,-z(-mx,my,mz) 2-fold screw axis|translation: 2 0 0|time-reversed new feature: print pointgroup("spacegroup", @1) -- analyzes the point group (crystal class) of a crystal. -- uses three irrational-coordinate points to generate all possible operators -- creates a map with keys (somewhat variable depending upon axes present): C2 C3 Ci Cs S6 detail distanceTolerance linearTolerance nAtoms nC2 nC3 nCi nCn nCs nS6 nSn nTotal name points principalAxis new feature: draw SPACEGROUP -- draws all operations in space group new feature: draw POINTGROUP SPACEGROUP -- draws crystal class symmetry operations for a pointgroup -- uses point group style, with circular planes new feature: @1.find("crystalClass", pt) -- generates a list of points based on a model's crystal class (point group) -- uses @1 just to find the unit cell and space group -- optional pt is used as a generator (defaults to @1) -- example: load =ams/calcite 1 x = @3.find("crystalClass") print pointgroup(x).name draw points @x polyhedra ID p {0 0 0} to @x Modified Paths: -------------- branches/v14_4/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java branches/v14_4/Jmol/src/org/jmol/script/ScriptMathProcessor.java branches/v14_4/Jmol/src/org/jmol/script/ScriptParam.java branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryDesc.java branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryOperation.java branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -153,6 +153,7 @@ private void readAtoms() throws Exception { asc.newAtomSet(); setMOData(true); + dFixed = fFixed = false; readLines(2); String[] tokens; while (rd() != null && !line.startsWith(" --")) { Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptMathProcessor.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptMathProcessor.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptMathProcessor.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -1259,8 +1259,8 @@ return (isDecimal(x2) || isDecimal(x1) ? addXFloat(x1.asFloat() * x2.asFloat()) : addXInt(x1.asInt() * x2.asInt())); } - pt = (x1.tok == T.matrix3f || x1.tok == T.matrix4f ? ptValue(x2) - : x2.tok == T.matrix3f ? ptValue(x1) : null); + pt = (x1.tok == T.matrix3f || x1.tok == T.matrix4f ? ptValue(x2, null) + : x2.tok == T.matrix3f ? ptValue(x1, null) : null); pt4 = (x1.tok == T.matrix4f ? planeValue(x2) : x2.tok == T.matrix4f ? planeValue(x1) : null); // checking here to make sure arrays remain arrays and @@ -1541,7 +1541,7 @@ .lastIndexOf("-") > 0)); } - public P3 ptValue(SV x) throws ScriptException { + public P3 ptValue(SV x, BS bsRestrict) throws ScriptException { Object pt; switch (x.tok) { case T.point3f: @@ -1550,6 +1550,10 @@ BS bs = (BS) x.value; if (bs.isEmpty()) break; + if (bsRestrict != null) { + bs = BSUtil.copy(bs); + bs.and(bsRestrict); + } return (P3) eval.getBitsetProperty(bs, T.xyz, null, null, x.value, null, false, Integer.MAX_VALUE, false); case T.string: Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptParam.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/script/ScriptParam.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/script/ScriptParam.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -15,6 +15,7 @@ import org.jmol.java.BS; import org.jmol.modelset.TickInfo; +import org.jmol.util.BSUtil; import org.jmol.util.Escape; import org.jmol.util.Edge; import org.jmol.util.Logger; @@ -191,7 +192,9 @@ /** * * @param i - * @param ret return P3 or BS + * @param ret + * return P3 or BS to ret[0]; on input, passing a BS as ret[1] indicates that + * it should be ANDED with this BS prior to calculation (SHOW/DRAW SYMOP) * @return point -- ORIGINAL, non-copied atom, if a single atom * * @throws ScriptException @@ -202,8 +205,14 @@ case T.expressionBegin: BS bs = atomExpression(st, i, 0, true, false, ret, true); if (bs != null) { - if (ret != null) - ret[0] = bs; + if (ret != null) { + if (ret.length == 2 && ret[1] instanceof BS) { + bs = BSUtil.copy(bs); + bs.and((BS) ret[1]); + } else { + ret[0] = bs; + } + } return (bs.cardinality() == 1 ? vwr.ms.at[bs.nextSetBit(0)] : vwr.ms.getAtomSetCenter(bs)); } if (ret != null && ret[0] instanceof P3) Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/CmdExt.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -4252,8 +4252,9 @@ pt2 = null; int nth = -1; if (slen > 3 && tokAt(3) != T.string) { - pt1 = centerParameter(2); - pt2 = centerParameter(++eval.iToken); + Object[] ret = new Object[] {null, vwr.getFrameAtoms()}; + pt1 = eval.centerParameter(2, ret); + pt2 = eval.centerParameter(++eval.iToken, ret); if (tokAt(eval.iToken + 1) == T.integer) { nth = eval.getToken(++eval.iToken).intValue; } Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/IsoExt.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -481,10 +481,11 @@ default: if (!eval.isCenterParameter(i)) iSym = intParameter(i++); + Object[] ret = new Object[] {null, vwr.getFrameAtoms()}; if (eval.isCenterParameter(i)) - center = centerParameter(i); + center = eval.centerParameter(i, ret); if (eval.isCenterParameter(eval.iToken + 1)) - target = centerParameter(++eval.iToken); + target = eval.centerParameter(++eval.iToken, ret); if (chk) return; i = eval.iToken; Modified: branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/scriptext/MathExt.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -1120,12 +1120,12 @@ } if (tok == T.cross) { - P3 a = P3.newP(mp.ptValue(x1)); - a.cross(a, mp.ptValue(x2)); + P3 a = P3.newP(mp.ptValue(x1, null)); + a.cross(a, mp.ptValue(x2, null)); return mp.addXPt(a); } - P3 pt2 = (x2.tok == T.varray ? null : mp.ptValue(x2)); + P3 pt2 = (x2.tok == T.varray ? null : mp.ptValue(x2, null)); P4 plane2 = mp.planeValue(x2); if (isDist) { int minMax = (op == Integer.MIN_VALUE ? 0 : op & T.minmaxmask); @@ -1187,7 +1187,7 @@ } } } - P3 pt1 = mp.ptValue(x1); + P3 pt1 = mp.ptValue(x1, null); P4 plane1 = mp.planeValue(x1); float f = Float.NaN; try { @@ -1233,8 +1233,8 @@ int tok = T.getTokFromName(type); if (args.length > 2) { // helix(pt1, pt2, dq ...) - P3 pta = mp.ptValue(args[0]); - P3 ptb = mp.ptValue(args[1]); + P3 pta = mp.ptValue(args[0], null); + P3 ptb = mp.ptValue(args[1], null); if (tok == T.nada || args[2].tok != T.point4f || pta == null || ptb == null) return false; Quat dq = Quat.newP4((P4) args[2].value); @@ -2219,7 +2219,7 @@ } P3[] pts = new P3[nPoints]; for (int i = 0; i < nPoints; i++) { - if ((pts[i] = mp.ptValue(args[i])) == null) + if ((pts[i] = mp.ptValue(args[i], null)) == null) return false; } switch (nPoints) { @@ -2321,7 +2321,7 @@ return mp.addXStr(""); return mp.addXList(list); } - pt2 = mp.ptValue(args[0]); + pt2 = mp.ptValue(args[0], null); if (pt2 == null) return mp.addXStr(""); return mp.addXPt(Measure.getIntersection(pt2, null, plane, pt3, norm, @@ -2336,8 +2336,8 @@ return mp.addXPt4(e.getHklPlane(P3.new3(SV.fValue(args[0]), SV.fValue(args[1]), SV.fValue(args[2])))); case T.intersection: - pt1 = mp.ptValue(args[0]); - pt2 = mp.ptValue(args[1]); + pt1 = mp.ptValue(args[0], null); + pt2 = mp.ptValue(args[1], null); if (pt1 == null || pt2 == null) return mp.addXStr(""); V3 vLine = V3.newV(pt2); @@ -2353,7 +2353,7 @@ return mp.addXStr(""); return mp.addXPt(pt1); } - pt3 = mp.ptValue(args[2]); + pt3 = mp.ptValue(args[2], null); if (pt3 == null) return mp.addXStr(""); // intersection(ptLine, vLine, pt2); @@ -2388,13 +2388,13 @@ break; case T.bitset: case T.point3f: - pt1 = mp.ptValue(args[0]); - pt2 = mp.ptValue(args[1]); + pt1 = mp.ptValue(args[0], null); + pt2 = mp.ptValue(args[1], null); if (pt2 == null) return false; pt3 = (args.length > 2 && (args[2].tok == T.bitset || args[2].tok == T.point3f) ? mp - .ptValue(args[2]) : null); + .ptValue(args[2], null) : null); norm = V3.newV(pt2); if (pt3 == null) { plane = new P4(); @@ -2421,7 +2421,7 @@ // plane(<point1>,<point2>,<point3>) // plane(<point1>,<point2>,<point3>,<pointref>) V3 vAB = new V3(); - P3 ptref = (args.length == 4 ? mp.ptValue(args[3]) : null); + P3 ptref = (args.length == 4 ? mp.ptValue(args[3], null) : null); float nd = Measure.getDirectedNormalThroughPoints(pt1, pt2, pt3, ptref, norm, vAB); return mp.addXPt4(P4.new4(norm.x, norm.y, norm.z, nd)); @@ -2581,7 +2581,7 @@ && (args[1].tok == T.integer || args[1].tok == T.bitset)) break; } - if ((pt0 = mp.ptValue(args[0])) == null || tok != T.quaternion + if ((pt0 = mp.ptValue(args[0], null)) == null || tok != T.quaternion && args[1].tok == T.point3f) return false; break; @@ -2653,7 +2653,7 @@ break; } } - P3 pt1 = mp.ptValue(args[1]); + P3 pt1 = mp.ptValue(args[1], null); p4 = mp.planeValue(args[0]); if (pt1 != null) q = Quat.getQuaternionFrame(P3.new3(0, 0, 0), pt0, pt1); @@ -3038,17 +3038,11 @@ // x = y.symop(n,"time") // Returns the time reversal of a symmetry operator in a magnetic space group - + int narg = args.length; if (narg == 0) return false; SV x1 = (haveBitSet ? mp.getX() : null); - BS bsAtoms = null; - if (x1 != null) { - if (x1.tok != T.bitset) - return false; - bsAtoms = (BS) x1.value; - } String xyz = null; int iOp = Integer.MIN_VALUE; int apt = 0; @@ -3066,19 +3060,20 @@ apt++; break; } - int len = apt; - if (bsAtoms == null) - if (apt < narg && args[apt].tok == T.bitset) { - bsAtoms = (BS) args[apt].value; - } else { - bsAtoms = vwr.getAllAtoms(); - } - // check for symop(op, pt) - // check for symop(op, pt1, pt2) + BS bsAtoms = null; + if (x1 != null) { + if (x1.tok != T.bitset) + return false; + bsAtoms = (BS) x1.value; + } else if (apt < narg && args[apt].tok == T.bitset) { + bsAtoms = (BS) args[apt].value; + } else if (apt + 1 < narg && args[apt + 1].tok == T.bitset) { + bsAtoms = (BS) args[apt + 1].value; + } P3 pt1 = null, pt2 = null; - if ((pt1 = (narg > apt ? mp.ptValue(args[apt]) : null)) != null) + if ((pt1 = (narg > apt ? mp.ptValue(args[apt], bsAtoms) : null)) != null) apt++; - if ((pt2 = (narg > apt ? mp.ptValue(args[apt]) : null)) != null) + if ((pt2 = (narg > apt ? mp.ptValue(args[apt], bsAtoms) : null)) != null) apt++; int nth = (pt2 != null && args.length > apt && iOp == Integer.MIN_VALUE && args[apt].tok == T.integer ? args[apt].intValue : 0); @@ -3086,10 +3081,14 @@ apt++; if (iOp == Integer.MIN_VALUE) iOp = 0; - String desc = (narg == apt ? (pt2 != null ? "all" : pt1 != null ? "point" : "matrix") - : SV.sValue(args[apt++]).toLowerCase()); - return (apt == args.length && mp.addXObj(vwr.ms.getSymTemp(false).getSymmetryInfoAtom(vwr.ms, bsAtoms, - xyz, iOp, pt1, pt2, desc, 0, 0, nth))); + String desc = (narg == apt ? (pt2 != null ? "all" : pt1 != null ? "point" + : "matrix") : SV.sValue(args[apt++]).toLowerCase()); + if (bsAtoms == null) + bsAtoms = vwr.getAllAtoms(); + + return (apt == args.length && mp.addXObj(vwr.ms.getSymTemp(false) + .getSymmetryInfoAtom(vwr.ms, bsAtoms, xyz, iOp, pt1, pt2, + desc, 0, 0, nth))); } private boolean evaluateTensor(ScriptMathProcessor mp, SV[] args) Modified: branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryDesc.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryDesc.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryDesc.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -63,6 +63,88 @@ "inversionCenter", null /*point*/, "axisVector", "rotationAngle", "matrix", "unitTranslation", "centeringVector", "timeReversal", "plane" }; + private static int getType(String id) { + int type; + if (id.equalsIgnoreCase("matrix")) { + type = T.matrix4f; + } else if (id.equalsIgnoreCase("description")) { + type = T.label; + } else if (id.equalsIgnoreCase("axispoint")) { + type = T.point; + } else if (id.equalsIgnoreCase("time")) { + type = T.times; + } else if (id.equalsIgnoreCase("info")) { + type = T.array; + } else { + // center, draw, plane, axis, translation, angle, array, list + type = T.getTokFromName(id); + if (type == 0) { + for (type = 0; type < keys.length; type++) + if (id.equalsIgnoreCase(keys[type])) + break; + type = (type < keys.length ? -1 - type : T.full); + } + } + return type; + } + + private static Object getInfo(Object[] info, int type) { + if (info == null) + return ""; + if (type < 0 && type >= -keys.length) + return info[-1 - type]; + switch (type) { + case T.array: + Map<String, Object> lst = new Hashtable<String, Object>(); + for (int j = 0, n = info.length; j < n; j++) + if (keys[j] != null && info[j] != null) + lst.put(keys[j], info[j]); + return lst; + // case T.list: + // String[] sinfo = new String[] { + // (String) info[0], + // (String) info[1], + // (String) info[2], + // // skipping DRAW commands here + // Escape.eP((V3) info[4]), Escape.eP((V3) info[5]), + // Escape.eP((P3) info[6]), Escape.eP((P3) info[7]), + // Escape.eP((V3) info[8]), "" + info[9], "" + Escape.e(info[10]), + // "" + info[13] }; + // return sinfo; + case T.angle: + return info[9]; + case T.axes: + return info[8]; + case T.center: + return info[6]; + case T.draw: + return info[3] + "\nprint " + PT.esc(info[0] + " " + info[2]); + case T.full: + return info[0] + " \t" + info[2]; + case T.info: + return info; // internal only; if user selects "info", it is turned into "array" + default: + case T.label: + return info[2]; + case T.matrix4f: + return info[10]; + case T.point: + return info[7]; + // 11: vTrans + // 12: centering + case T.times: + return info[13]; + case T.plane: + return info[14]; + case T.translation: + return info[5]; // cartesian translation + case T.unitcell: + return info[11]; + case T.xyz: + return info[0]; + } + } + /** * * @param op @@ -109,10 +191,9 @@ * */ - private Object[] getDescription(SymmetryOperation op, SymmetryInterface uc, + private Object[] createInfoArray(SymmetryOperation op, SymmetryInterface uc, P3 pta00, P3 ptTarget, String id, ModelSet modelSet, float scaleFactor) { - if (!op.isFinalized) op.doFinalize(); if (scaleFactor == 0) @@ -831,6 +912,31 @@ return pt; } + /** + * multipurpose function handling a variety of tasks, including: + * + * processing of "lattice", "draw", and "point" output types + * + * finding the operator in the given space group + * + * creating a temporary space group for an xyz operator + * + * + * @param sym + * @param iModel + * @param iAtom + * @param uc + * @param xyz + * @param op + * @param pt + * @param pt2 + * @param id + * @param type + * @param modelSet + * @param scaleFactor + * @param nth + * @return a string or an Object[] containing information + */ private Object getSymmetryInfo(Symmetry sym, int iModel, int iAtom, Symmetry uc, String xyz, int op, P3 pt, P3 pt2, String id, int type, @@ -884,9 +990,10 @@ symTemp.toCartesian(sympt, false); return sympt; } - info = getDescription(opTemp, uc, pt, pt2, (id == null ? "sym" : id), + info = createInfoArray(opTemp, uc, pt, pt2, (id == null ? "sym" : id), modelSet, scaleFactor); } else { + // pt1, pt2 boolean isList = (type == T.list); nth = (nth != 0 ? nth : isList ? -1 : 1); Object ret = getSymmetryInfoObject(sym, iModel, op, pt, pt2, null, @@ -895,73 +1002,24 @@ return ret; info = (Object[]) ret; } - if (info == null) - return ""; - /* - * xyz (Jones-Faithful calculated from matrix) - * xyzOriginal (Provided by operation) - * description ("C2 axis", for example) - * translation vector (fractional) - * translation vector (cartesian) - * inversion point - * axis point - * axis vector - * angle of rotation - * matrix representation - * time reversal - */ - switch (type) { - case T.array: - Map<String, Object> lst = new Hashtable<String, Object>(); - for (int j = 0, n = info.length; j < n; j++) - if (keys[j] != null && info[j] != null) - lst.put(keys[j], info[j]); - return lst; - // case T.list: - // String[] sinfo = new String[] { - // (String) info[0], - // (String) info[1], - // (String) info[2], - // // skipping DRAW commands here - // Escape.eP((V3) info[4]), Escape.eP((V3) info[5]), - // Escape.eP((P3) info[6]), Escape.eP((P3) info[7]), - // Escape.eP((V3) info[8]), "" + info[9], "" + Escape.e(info[10]), - // "" + info[13] }; - // return sinfo; - case T.angle: - return info[9]; - case T.axes: - return info[8]; - case T.center: - return info[6]; - case T.draw: - return info[3] + "\nprint " + PT.esc(info[0] + " " + info[2]); - case T.full: - return info[0] + " \t" + info[2]; - case T.info: - return info; // internal only - default: - case T.label: - return info[2]; - case T.matrix4f: - return info[10]; - case T.point: - return info[7]; - // 11: vTrans - // 12: centering - case T.times: - return info[13]; - case T.plane: - return info[14]; - case T.translation: - return info[5]; // cartesian translation - case T.unitcell: - return info[11]; - case T.xyz: - return info[0]; - } + return getInfo(info, type); } + /** + * + * @param sym + * @param modelIndex + * @param symOp + * @param pt1 + * @param pt2 + * @param drawID + * @param type + * @param modelSet + * @param scaleFactor + * @param nth + * @param asString + * @return + */ Object getSymmetryInfoObject(Symmetry sym, int modelIndex, int symOp, P3 pt1, P3 pt2, String drawID, String type, ModelSet modelSet, float scaleFactor, int nth, @@ -969,7 +1027,7 @@ String strOperations = ""; Object[][] infolist; Object ret = (asString ? "" : null); - if (type != null && type.indexOf("y") >= 0) { + if (type != null && type.indexOf(",") >= 0) { // SHOW SYMOP "x,y,...." sym = (Symmetry) modelSet.getSymTemp(true); sym.setSpaceGroup(false); @@ -1092,7 +1150,7 @@ isStandard = false; jf += ";" + op.xyz; Object[] ret = (symOp > 0 && symOp - 1 != iop ? null - : getDescription(op, cellInfo, pt1, pt2, drawID, modelSet, + : createInfoArray(op, cellInfo, pt1, pt2, drawID, modelSet, scaleFactor)); if (ret != null) { if (nth > 0 && ++nop != nth) @@ -1136,25 +1194,8 @@ Object getSymmetryInfoAtom(BS bsAtoms, String xyz, int op, P3 pt, P3 pt2, String id, int type, ModelSet modelSet, float scaleFactor, int nth) { - if (type == 0) { - type = T.xyz; - if (id.equalsIgnoreCase("matrix")) { - type = T.matrix4f; - } else if (id.equalsIgnoreCase("description")) { - type = T.label; - } else if (id.equalsIgnoreCase("axispoint")) { - type = T.point; - } else if (id.equalsIgnoreCase("time")) { - type = T.times; - } else if (id.equalsIgnoreCase("info")) { - type = T.array; - } else { - // center, draw, plane, axis, translation, angle, array, list - type = T.getTokFromName(id); - if (type == 0) - type = T.label; - } - } + if (type == 0) + type = getType(id); int iModel = -1; if (bsAtoms == null) { iModel = modelSet.vwr.am.cmi; Modified: branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryOperation.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2016-04-11 19:36:47 UTC (rev 21044) @@ -788,7 +788,7 @@ if (!isFinalized) doFinalize(); if (centering == null && !unCentered) { - if (modDim == 0 && index > 1 && m00 == 1 && m11 == 1 && m22 == 1 + if (modDim == 0 && m00 == 1 && m11 == 1 && m22 == 1 && m01 == 0 && m02 == 0 && m10 == 0 && m12 == 0 && m20 == 0 && m21 == 0 && (m03 != 0 || m13 != 0 || m23 != 0)) { isCenteringOp = true; Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2016-04-11 19:36:20 UTC (rev 21043) +++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties 2016-04-11 19:36:47 UTC (rev 21044) @@ -7,19 +7,112 @@ # see also http://chemapps.stolaf.edu/jmol/zip for daily updates -Jmol.___JmolVersion="14.4.4_2016.04.08" +Jmol.___JmolVersion="14.4.4_2016.04.11" -new feature: symop() options - -- {atomset}.symop(op, @1, @2, mode) - -- {atomset}.symop(@1, @2, nth, mode) - -- mode can be one of: " - - -- options: - -- just symop(...), not {atomset}.symop(...) uses @1 if present or {*} for setting space group and cell info - -- {atomset}.symop(op, mode) - +bug fix: qchem reader fails to switch to spherical D/F basis for second structure bug fix: pointGroup secondary axis in yellow is too hard to see -- using "orange" instead + +new feature: symop() options: + symop(op) + -- returns the 4x4 matrix representation of this operator + symop(op, atom) + -- returns the point generated by operator op on atom + -- op may be a positive or negative integer indictating the operation (or its reverse) + to apply from the loaded space group -- for example, symop(3, @1) or symop(-4, {atomindex=16}) + -- op may be a string such as "x+1/2,1/2-y,z" representing a specific generic operation + symop(atom1, atom2) + -- returns the description of the first of possibly several operations that take atom1 to atom2, for example: + "2-fold screw axis|translation: 1/2 0 0" + symop(atom1, atom2, n) + -- returns the description of the nth operation that takes atom1 to atom2 + symop(...point...) + -- any place an atom can be used in symop(), one can substitute an xyz coordinate. + -- for example, symop(@1, {1/2 1/2 1/2}) + {atomset}.symop(...) + -- when more than one model is loaded, prepending any symop function with an atom set specifies which + atoms, space group, and unit cell are being referenced. For example, {2.1}.symop(5) operates only on + atoms in the first model of the second loaded file, using the appropriate space group and unit cell. + In this way, "@1" will designate one atom only, provided only one model is showing (using the FRAME/MODEL command). + If only one model has been loaded, there is no need to use this syntax; symop(...) will do the same. + symop(..., outputType) + -- All uses of symop() and {atomset}.symop() can be extended using a final parameter that + changes the default output described above to be something else. Options for outputType include: + + "draw" Returns the Jmol script illustrating this operation with DRAW commands. + + $ print symop(3,"draw") + draw ID draw_* delete + draw ID draw_frame1X diameter 0.15{5.5172 1.9683 2.7802}{6.5172 1.9683 2.7802} color red + ... + + "full" Returns the tab-separated Jones-Faithful string and descriptor for this operation. + + $ print symop(3,"full") + -x,-y,-z(mx,my,mz) Ci: 0 0 0 + + "lattice" Returns the lattice type associated with the space group involving this operation. + + "list" Specifically when two atoms or points are specified, returns a string list of all operations + taking the first to the second. + + $ print symop(@3,@21,"list") + 5 x+1/2,-y+1/2,-z+1/2(-mx,my,mz) 2-fold screw axis|translation: 1/2 0 0|time-reversed + 7 -x+1/2,y+1/2,z+1/2(-mx,my,mz) n-glide plane|translation: 0 1/2 1/2|time-reversed + + Note that this string can be turned into a standard array using .lines.split("\t",true): + + $ print symop(@3,@21,"list").lines.split("\t",true) + [ + 5 + x+1/2,-y+1/2,-z+1/2(-mx,my,mz) + 2-fold screw axis|translation: 1/2 0 0|time-reversed + ] + [ + 7 + -x+1/2,y+1/2,z+1/2(-mx,my,mz) + n-glide plane|translation: 0 1/2 1/2|time-reversed + ] + + "array" Returns an associative array that contains critical information relating to this operation. + + $ load =magndata/0.34 + $ print symop(3,"array") + { + "inversionCenter" : {0.0 0.0 0.0} + "label" : "Ci: 0 0 0" + "matrix" : + [ + [-1.0, 0.0, 0.0, 0.0] + [0.0, -1.0, 0.0, 0.0] + [0.0, 0.0, -1.0, 0.0] + [0.0, 0.0, 0.0, 1.0] ] + "timeReversal" : 1 + "xyz" : "-x,-y,-z(mx,my,mz)" + "xyzOriginal" : "-x,-y,-z,m" + } + + In addition, all possible keys of this array may be used as well for outputType. These include: + + "axisVector", "cartesianTranslation", "centeringVector", "fractionalTranslation", + "inversionCenter", "label", "matrix", "plane", "rotationAngle", + "timeReversal", "unitTranslation", "xyz", and "xyzOriginal" + + Three of these that may be less than obvious are explained below: + + "centeringVector" For operations that are pure lattice translations, returns the vector + for this centering in fractional coordinates. + + "timeReversal" This quantity is 0 for standard space groups. Magnetic space group + operations also include the possibility of inversion of the spin + along with any 3D symmetry operation. This inversion characteristic + is referred to as "time reversal" and takes the value of 1 or -1. + + "unitTranslation" Symmetry operations involving two atoms may include an extra + lattice translation if the two atoms are in different unit cells. + This translation is above and beyond any fractional lattice centering + that this operator incorporates for a face- or body-centered space group. + new feature: show spacegroup/xxxxx -- selects lines from a space group report similar to the way show state/xxxx works @@ -32,25 +125,22 @@ -- gives full list of matching symmetry operations -- example: - $ load =magndata/0.34 {2 2 1} packed + $ load =magndata/1.23 {444 555 1} packed $ show symop @153 @299 - 4 symmetry operations: - 1 x+2,y,z2 translation: 6/3 0 -6/3 - 5 -x,-y,-z(mx,my,mz) Ci: 0 0 0 - 11 x+2,-y,-z(-mx,my,mz) 2-fold screw axis|translation: 6/3 0 0|time-reversed - 15 -x,y,z2(-mx,my,mz) c-glide plane|translation: 0 0 -6/3|time-reversed - - + 1 x+2,y,z2(mx,my,mz) translation: 2 0 -2 + 5 -x,-y,-z(mx,my,mz) Ci: 0 0 0 + 11 x+2,-y,-z(-mx,my,mz) 2-fold screw axis|translation: 2 0 0|time-reversed + 15 -x,y,z2(-mx,my,mz) c-glide plane|translation: 0 0 -2|time-reversed + new feature: show/draw symop @1 @2 n -- shows or draws the nth symmetry operation relating atom 1 to atom 2 -- example: - $ load =magndata/0.34 {2 2 1} packed + $ load =magndata/1.23 {444 555 1} packed $ show symop @153 @299 3 - 5 -x,-y,-z(mx,my,mz) Ci: 0 0 0 - + 11 x+2,-y,-z(-mx,my,mz) 2-fold screw axis|translation: 2 0 0|time-reversed new feature: print pointgroup("spacegroup", @1) -- analyzes the point group (crystal class) of a crystal. @@ -96,6 +186,7 @@ draw points @x polyhedra ID p {0 0 0} to @x + JmolVersion="14.4.4_2016.04.05b" bug fix: unitcell primitive for A,B,C-centered lattices rotated 90 degrees from This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2016-05-08 18:16:10
|
Revision: 21086 http://sourceforge.net/p/jmol/code/21086 Author: hansonr Date: 2016-05-08 18:16:08 +0000 (Sun, 08 May 2016) Log Message: ----------- Removed Paths: ------------- branches/v14_4/Jmol/src/org/jmol/modelset/Object2d.java branches/v14_4/Jmol/src/org/jmol/shape/Object2dShape.java Deleted: branches/v14_4/Jmol/src/org/jmol/modelset/Object2d.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/modelset/Object2d.java 2016-05-08 18:15:19 UTC (rev 21085) +++ branches/v14_4/Jmol/src/org/jmol/modelset/Object2d.java 2016-05-08 18:16:08 UTC (rev 21086) @@ -1,191 +0,0 @@ -package org.jmol.modelset; - -import org.jmol.java.BS; -import org.jmol.util.C; -import javajs.util.P3; -import org.jmol.viewer.JC; - -public abstract class Object2d { - - // Echo, Label - - public boolean isLabelOrHover; - public P3 xyz; - public String target; - public String script; - public short colix; - public short bgcolix; - public int pointer; - public float fontScale; - - public int align; - public int valign; - public int atomX, atomY, atomZ = Integer.MAX_VALUE; - public int movableX, movableY, movableZ; // Echo only - public int movableXPercent = Integer.MAX_VALUE; // Echo only - public int movableYPercent = Integer.MAX_VALUE; // Echo only - public int movableZPercent = Integer.MAX_VALUE; // Echo only - - public int z = 1; // front plane - public int zSlab = Integer.MIN_VALUE; // z for slabbing purposes -- may be near an atom - - // PyMOL-type offset - // [mode, screenoffsetx,y,z (applied after tranform), positionOffsetx,y,z (applied before transform)] - public float[] pymolOffset; - - protected int windowWidth; - protected int windowHeight; - public boolean adjustForWindow; - public float boxWidth; - public float boxHeight; - public float boxX; - public float boxY; - - public int modelIndex = -1; - public boolean visible = true; - public boolean hidden = false; - - public float[] boxXY; - - public float scalePixelsPerMicron; - - public void setScalePixelsPerMicron(float scalePixelsPerMicron) { - fontScale = 0;//fontScale * this.scalePixelsPerMicron / scalePixelsPerMicron; - this.scalePixelsPerMicron = scalePixelsPerMicron; - } - - abstract protected void recalc(); - - public void setXYZ(P3 xyz, boolean doAdjust) { - this.xyz = xyz; - if (xyz == null) - this.zSlab = Integer.MIN_VALUE; - if (doAdjust) { - valign = (xyz == null ? JC.ECHO_XY : JC.ECHO_XYZ); - adjustForWindow = (xyz == null); - } - } - - public void setTranslucent(float level, boolean isBackground) { - if (isBackground) { - if (bgcolix != 0) - bgcolix = C.getColixTranslucent3(bgcolix, !Float.isNaN(level), level); - } else { - colix = C.getColixTranslucent3(colix, !Float.isNaN(level), level); - } - } - - public void setMovableX(int x) { - valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY); - movableX = x; - movableXPercent = Integer.MAX_VALUE; - } - - public void setMovableY(int y) { - valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY); - movableY = y; - movableYPercent = Integer.MAX_VALUE; - } - - // public void setMovableZ(int z) { - // if (valign != VALIGN_XYZ) - // valign = VALIGN_XY; - // movableZ = z; - // movableZPercent = Integer.MAX_VALUE; - // } - - public void setMovableXPercent(int x) { - valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY); - movableX = Integer.MAX_VALUE; - movableXPercent = x; - } - - public void setMovableYPercent(int y) { - valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY); - movableY = Integer.MAX_VALUE; - movableYPercent = y; - } - - public void setMovableZPercent(int z) { - if (valign != JC.ECHO_XYZ) - valign = JC.ECHO_XY; - movableZ = Integer.MAX_VALUE; - movableZPercent = z; - } - - public void setZs(int z, int zSlab) { - this.z = z; - this.zSlab = zSlab; - } - - public void setXYZs(int x, int y, int z, int zSlab) { - setMovableX(x); - setMovableY(y); - setZs(z, zSlab); - } - - public void setScript(String script) { - this.script = (script == null || script.length() == 0 ? null : script); - } - - public boolean setAlignmentLCR(String align) { - if ("left".equals(align)) - return setAlignment(JC.TEXT_ALIGN_LEFT); - if ("center".equals(align)) - return setAlignment(JC.TEXT_ALIGN_CENTER); - if ("right".equals(align)) - return setAlignment(JC.TEXT_ALIGN_RIGHT); - return false; - } - - public boolean setAlignment(int align) { - if (this.align != align) { - this.align = align; - recalc(); - } - return true; - } - - public void setBoxOffsetsInWindow(float margin, float vMargin, float vTop) { - // not labels - - // these coordinates are (0,0) in top left - // (user coordinates are (0,0) in bottom left) - float bw = boxWidth + margin; - float x = boxX; - if (x + bw > windowWidth) - x = windowWidth - bw; - if (x < margin) - x = margin; - boxX = x; - - float bh = boxHeight; - float y = vTop; - if (y + bh > windowHeight) - y = windowHeight - bh; - if (y < vMargin) - y = vMargin; - boxY = y; - } - - public void setWindow(int width, int height, float scalePixelsPerMicron) { - windowWidth = width; - windowHeight = height; - if (pymolOffset == null && this.scalePixelsPerMicron < 0 - && scalePixelsPerMicron != 0) - setScalePixelsPerMicron(scalePixelsPerMicron); - } - - public boolean checkObjectClicked(boolean isAntialiased, int x, int y, - BS bsVisible) { - if (hidden || script == null || modelIndex >= 0 && !bsVisible.get(modelIndex)) - return false; - if (isAntialiased) { - x <<= 1; - y <<= 1; - } - return (x >= boxX && x <= boxX + boxWidth && y >= boxY && y <= boxY - + boxHeight); - } - -} Deleted: branches/v14_4/Jmol/src/org/jmol/shape/Object2dShape.java =================================================================== --- branches/v14_4/Jmol/src/org/jmol/shape/Object2dShape.java 2016-05-08 18:15:19 UTC (rev 21085) +++ branches/v14_4/Jmol/src/org/jmol/shape/Object2dShape.java 2016-05-08 18:16:08 UTC (rev 21086) @@ -1,234 +0,0 @@ -package org.jmol.shape; - -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; - - -import org.jmol.java.BS; -import org.jmol.modelset.Object2d; -import org.jmol.modelset.Text; -import org.jmol.util.C; -import org.jmol.util.Logger; - -import javajs.api.GenericPlatform; -import javajs.awt.Font; -import javajs.util.Lst; -import javajs.util.P3; -import javajs.util.PT; - -public abstract class Object2dShape extends Shape { - - // Echo, Hover, JmolImage - - public Map<String, Text> objects = new Hashtable<String, Text>(); - Object2d currentObject; - Font currentFont; - Object currentColor; - Object currentBgColor; - float currentTranslucentLevel; - float currentBgTranslucentLevel; - protected String thisID; - - boolean isHover; - boolean isAll; - - protected void setPropOS(String propertyName, Object value, BS bsSelected) { - if ("allOff" == propertyName) { - currentObject = null; - isAll = true; - objects = new Hashtable<String, Text>(); - return; - } - - if ("delete" == propertyName) { - if (currentObject != null) { - objects.remove(currentObject.target); - currentObject = null; - } else if (isAll || thisID != null) { - Iterator<Text> e = objects.values().iterator(); - while (e.hasNext()) { - Text text = e.next(); - if (isAll - || PT.isMatch(text.target.toUpperCase(), thisID, true, true)) { - e.remove(); - } - } - } - return; - } - - if ("off" == propertyName) { - if (isAll) { - objects = new Hashtable<String, Text>(); - isAll = false; - currentObject = null; - } - if (currentObject == null) { - return; - } - - objects.remove(currentObject.target); - currentObject = null; - return; - } - - if ("model" == propertyName) { - int modelIndex = ((Integer) value).intValue(); - if (currentObject != null) { - currentObject.modelIndex = modelIndex; - } else if (isAll) { - for (Text t : objects.values()) - t.modelIndex = modelIndex; - } - return; - } - - if ("align" == propertyName) { - String align = (String) value; - if (currentObject != null) { - if (!currentObject.setAlignmentLCR(align)) - Logger.error("unrecognized align:" + align); - } else if (isAll) { - for (Object2d obj : objects.values()) - obj.setAlignmentLCR(align); - } - return; - } - - if ("bgcolor" == propertyName) { - currentBgColor = value; - if (currentObject != null) { - currentObject.bgcolix = C.getColixO(value); - } else if (isAll) { - Iterator<Text> e = objects.values().iterator(); - while (e.hasNext()) { - e.next().bgcolix = C.getColixO(value); - } - } - return; - } - - if ("color" == propertyName) { - currentColor = value; - if (currentObject != null) { - currentObject.colix = C.getColixO(value); - } else if (isAll || thisID != null) { - Iterator<Text> e = objects.values().iterator(); - while (e.hasNext()) { - Text text = e.next(); - if (isAll - || PT.isMatch(text.target.toUpperCase(), thisID, true, true)) { - text.colix = C.getColixO(value); - } - } - } - return; - } - - if ("target" == propertyName) { - String target = (String) value; - isAll = target.equals("all"); - if (isAll || target.equals("none")) { - currentObject = null; - } - //handled by individual types -- echo or hover - return; - } - - boolean isBackground; - if ((isBackground = ("bgtranslucency" == propertyName)) - || "translucency" == propertyName) { - boolean isTranslucent = ("translucent" == value); - if (isBackground) - currentBgTranslucentLevel = (isTranslucent ? translucentLevel : 0); - else - currentTranslucentLevel = (isTranslucent ? translucentLevel : 0); - if (currentObject != null) { - currentObject.setTranslucent(translucentLevel, isBackground); - } else if (isAll) { - Iterator<Text> e = objects.values().iterator(); - while (e.hasNext()) { - e.next().setTranslucent(translucentLevel, isBackground); - } - } - return; - } - - if (propertyName == "deleteModelAtoms") { - int modelIndex = ((int[]) ((Object[]) value)[2])[0]; - Iterator<Text> e = objects.values().iterator(); - while (e.hasNext()) { - Text text = e.next(); - if (text.modelIndex == modelIndex) { - e.remove(); - } else if (text.modelIndex > modelIndex) { - text.modelIndex--; - } - } - return; - } - - setPropS(propertyName, value, bsSelected); - } - - @Override - protected void initModelSet() { - currentObject = null; - isAll = false; - } - - - @Override - public void setModelVisibilityFlags(BS bsModels) { - if (!isHover) - for (Text t : objects.values()) - t.visible = (t.modelIndex < 0 || bsModels.get(t.modelIndex)); - } - - @Override - public Map<String, Object> checkObjectClicked(int x, int y, int modifiers, BS bsVisible, boolean drawPicking) { - if (isHover || modifiers == 0) - return null; - boolean isAntialiased = vwr.antialiased; - for (Object2d obj: objects.values()) { - if (obj.checkObjectClicked(isAntialiased, x, y, bsVisible)) { - if (obj.script != null) - vwr.evalStringQuiet(obj.script); - Map<String, Object> map = new Hashtable<String, Object>(); - map.put("pt", (obj.xyz == null ? new P3() : obj.xyz)); - int modelIndex = obj.modelIndex; - if (modelIndex < 0) - modelIndex = 0; - map.put("modelIndex", Integer.valueOf(modelIndex)); - map.put("model", vwr.getModelNumberDotted(modelIndex)); - map.put("id", obj.target); - map.put("type", "echo"); - return map; - } - } - return null; - } - - @Override - public boolean checkObjectHovered(int x, int y, BS bsVisible) { - if (isHover) - return false; - boolean haveScripts = false; - boolean isAntialiased = vwr.antialiased; - for (Object2d obj: objects.values()) { - if (obj.script != null) { - haveScripts = true; - if (obj.checkObjectClicked(isAntialiased, x, y, bsVisible)) { - vwr.setCursor(GenericPlatform.CURSOR_HAND); - return true; - } - } - } - if (haveScripts) - vwr.setCursor(GenericPlatform.CURSOR_DEFAULT); - return false; - } - -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |