You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
(35) |
May
(67) |
Jun
(2) |
Jul
|
Aug
(12) |
Sep
(54) |
Oct
(91) |
Nov
(168) |
Dec
(100) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(209) |
Feb
(158) |
Mar
(19) |
Apr
(24) |
May
(184) |
Jun
(134) |
Jul
(54) |
Aug
(399) |
Sep
(218) |
Oct
(271) |
Nov
(207) |
Dec
(126) |
| 2004 |
Jan
(138) |
Feb
(249) |
Mar
(420) |
Apr
(100) |
May
(335) |
Jun
(143) |
Jul
(91) |
Aug
(129) |
Sep
(98) |
Oct
(170) |
Nov
(352) |
Dec
(355) |
| 2005 |
Jan
(256) |
Feb
(158) |
Mar
(163) |
Apr
(38) |
May
(217) |
Jun
(98) |
Jul
(213) |
Aug
(169) |
Sep
(260) |
Oct
(94) |
Nov
(87) |
Dec
(153) |
| 2006 |
Jan
(35) |
Feb
(176) |
Mar
(308) |
Apr
(168) |
May
(152) |
Jun
(67) |
Jul
(99) |
Aug
(90) |
Sep
(313) |
Oct
(266) |
Nov
(282) |
Dec
(189) |
| 2007 |
Jan
(118) |
Feb
(309) |
Mar
(289) |
Apr
(209) |
May
(268) |
Jun
(103) |
Jul
(91) |
Aug
(143) |
Sep
(146) |
Oct
(205) |
Nov
(157) |
Dec
(172) |
| 2008 |
Jan
(53) |
Feb
(87) |
Mar
(188) |
Apr
(99) |
May
(101) |
Jun
(91) |
Jul
(117) |
Aug
(158) |
Sep
(100) |
Oct
(221) |
Nov
(184) |
Dec
(127) |
| 2009 |
Jan
(64) |
Feb
(93) |
Mar
(60) |
Apr
(74) |
May
(76) |
Jun
(218) |
Jul
(130) |
Aug
(115) |
Sep
(142) |
Oct
(76) |
Nov
(160) |
Dec
(181) |
| 2010 |
Jan
(229) |
Feb
(231) |
Mar
(184) |
Apr
(243) |
May
(229) |
Jun
(204) |
Jul
(293) |
Aug
(370) |
Sep
(160) |
Oct
(164) |
Nov
(163) |
Dec
(161) |
| 2011 |
Jan
(145) |
Feb
(147) |
Mar
(117) |
Apr
(43) |
May
(102) |
Jun
(152) |
Jul
(204) |
Aug
(98) |
Sep
(162) |
Oct
(216) |
Nov
(107) |
Dec
(98) |
| 2012 |
Jan
(53) |
Feb
(131) |
Mar
(105) |
Apr
(109) |
May
(155) |
Jun
(88) |
Jul
(82) |
Aug
(69) |
Sep
(96) |
Oct
(83) |
Nov
(71) |
Dec
(50) |
| 2013 |
Jan
(51) |
Feb
(53) |
Mar
(81) |
Apr
(143) |
May
(75) |
Jun
(103) |
Jul
(126) |
Aug
(104) |
Sep
(73) |
Oct
(136) |
Nov
(148) |
Dec
(90) |
| 2014 |
Jan
(82) |
Feb
(146) |
Mar
(132) |
Apr
(125) |
May
(72) |
Jun
(84) |
Jul
(35) |
Aug
(68) |
Sep
(49) |
Oct
(54) |
Nov
(58) |
Dec
(15) |
| 2015 |
Jan
(76) |
Feb
(82) |
Mar
(74) |
Apr
(49) |
May
(48) |
Jun
(48) |
Jul
(57) |
Aug
(66) |
Sep
(45) |
Oct
(52) |
Nov
(18) |
Dec
(33) |
| 2016 |
Jan
(26) |
Feb
(27) |
Mar
(60) |
Apr
(30) |
May
(51) |
Jun
(25) |
Jul
(12) |
Aug
(47) |
Sep
(11) |
Oct
(26) |
Nov
(9) |
Dec
(27) |
| 2017 |
Jan
(44) |
Feb
(34) |
Mar
(22) |
Apr
(108) |
May
(42) |
Jun
(17) |
Jul
(38) |
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
(5) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2020 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2021 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(13) |
Aug
(39) |
Sep
(8) |
Oct
(7) |
Nov
(25) |
Dec
(16) |
| 2022 |
Jan
(26) |
Feb
(30) |
Mar
(31) |
Apr
(16) |
May
(12) |
Jun
(7) |
Jul
(15) |
Aug
(24) |
Sep
(4) |
Oct
(10) |
Nov
(7) |
Dec
(5) |
| 2023 |
Jan
(7) |
Feb
(2) |
Mar
(4) |
Apr
(1) |
May
|
Jun
(3) |
Jul
(13) |
Aug
(14) |
Sep
(17) |
Oct
(3) |
Nov
(13) |
Dec
(6) |
| 2024 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
(3) |
May
(3) |
Jun
(1) |
Jul
(2) |
Aug
(1) |
Sep
(1) |
Oct
(8) |
Nov
(2) |
Dec
(1) |
| 2025 |
Jan
(4) |
Feb
|
Mar
(1) |
Apr
(2) |
May
(5) |
Jun
(2) |
Jul
(2) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
(7) |
Dec
(2) |
| 2026 |
Jan
(4) |
Feb
(8) |
Mar
(11) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <ha...@us...> - 2026-05-02 18:15:08
|
Revision: 22722
http://sourceforge.net/p/jmol/code/22722
Author: hansonr
Date: 2026-05-02 18:15:06 +0000 (Sat, 02 May 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.58" // (swingJS) also 16.3.57 (legacy)
bug fix: CIFReader update for FINDSPINGROUP 0.13.17
bug fix: LOAD APPEND FILES ... not saved in state
feature change: DSSR server address updated
new feature: CALCULATION callback
-- currently only triggers for CALCULATE STRUCTURE DSSR
-- used by VARNA to initiate a 2D rendering
new feature: Jmol-SwingJS (not legacy Jmol) incorporates VARNA plugin
-- based on VARNA 3.9 code from https://github.com/yannponty/VARNA
(master branch, last commit Nov 30, 2023)
Now based a VARNA-SwingJS GitHub, but also part of Jmol source
-- tweaked to allow both JavaScript and Java access
-- includes the full VARNA codebase and capabilities
-- code consolidated and reorganized to allow further development
(VARNA, VARNAGUI, VARNAedit, VARNAcmd, VARNAconsole)
adds VARNAapp, VARNAViewer
-- dual-direction synchronization with Jmol for model and DSSR loading,
model selection, and atom selection
-- adds more support for residue number-based selection and display
-- works with Jmol's load =1ehz/dssr as well as load =1ehz; calculate structure DSSR
new feature: load =1ehz/dssr filter "VARNA"
-- starts VARNA to display 2D secondary structure after files are loaded
new feature: plugins::VARNA menu item
-- starts VARNA
new feature: SYNC "varna:start"
-- allows starting VARNA from the Jmol command line or script
new feature: SYNC "varna:stop"
-- closes VARNA and disposes of it
new feature: SYNC "varna:varnaCommand(...)"
-- runs a VARNA command from Jmol script or console
-- example:
load =1ehz/dssr filter "VARNA"
SYNC "varna:setSelection([0 1 2])
sets the selection to the first three bases
new feature: VARNA command
-- VARNA ... same as SYNC "varna:..."
-- includes:
VARNA START
VARNA STOP
VARNA ON (or SHOW)
VARNA OFF (or HIDE)
new feature (VARNA): setSelection([resno 1 2 3])
-- allows indicating PDB residue numbers rather than indices
new feature: COLOR SELECT [color1] [color2]
-- automatically colors both selected an unselected atoms
-- NONE for color1 or color2 indicates default "CPK" colors
-- turned off using COLOR SELECT NONE NONE
-- turning off also clears the atom selection
-- [color2] is optional, defaulting to NONE
-- acts immediately on the currently defined atom selection
-- if multiple models are present, then
selection is restricted to the current model
new feature: COLOR STRUCTURE additions for RNA motifs
-- after load =xxxx/DSSR or CALCULATE DSSR
-- includes STEMS (yellow), LOOPS (blue)
STEM [xFFFF00] // yellow
INNER LOOP [xA000F0] // purple
HAIRPIN LOOP [x00A0F0] // light blue
BULGE LOOP [x00F0F0] // cyan
JUNCTION LOOP [x0000F0] // dark blue
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-03-31 20:54:14 UTC (rev 22721)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-05-02 18:15:06 UTC (rev 22722)
@@ -56,9 +56,83 @@
Jmol.___JmolVersion="16.3.57" // (legacy) also 16.3.58 (swingJS)
-bug fix: FRAME ALIGN {....} broken in 6.1.59
- -- causes NullPointerException
+bug fix: CIFReader update for FINDSPINGROUP 0.13.17
+bug fix: LOAD APPEND FILES ... not saved in state
+
+feature change: DSSR server address updated
+
+new feature: CALCULATION callback
+ -- currently only triggers for CALCULATE STRUCTURE DSSR
+ -- used by VARNA to initiate a 2D rendering
+
+new feature: Jmol-SwingJS (not legacy Jmol) incorporates VARNA plugin
+ -- based on VARNA 3.9 code from https://github.com/yannponty/VARNA
+ (master branch, last commit Nov 30, 2023)
+ Now based a VARNA-SwingJS GitHub, but also part of Jmol source
+ -- tweaked to allow both JavaScript and Java access
+ -- includes the full VARNA codebase and capabilities
+ -- code consolidated and reorganized to allow further development
+ (VARNA, VARNAGUI, VARNAedit, VARNAcmd, VARNAconsole)
+ adds VARNAapp, VARNAViewer
+ -- dual-direction synchronization with Jmol for model and DSSR loading,
+ model selection, and atom selection
+ -- adds more support for residue number-based selection and display
+ -- works with Jmol's load =1ehz/dssr as well as load =1ehz; calculate structure DSSR
+
+new feature: load =1ehz/dssr filter "VARNA"
+ -- starts VARNA to display 2D secondary structure after files are loaded
+
+new feature: plugins::VARNA menu item
+ -- starts VARNA
+
+new feature: SYNC "varna:start"
+ -- allows starting VARNA from the Jmol command line or script
+
+new feature: SYNC "varna:stop"
+ -- closes VARNA and disposes of it
+
+new feature: SYNC "varna:varnaCommand(...)"
+ -- runs a VARNA command from Jmol script or console
+ -- example:
+
+ load =1ehz/dssr filter "VARNA"
+ SYNC "varna:setSelection([0 1 2])
+
+ sets the selection to the first three bases
+
+new feature: VARNA command
+ -- VARNA ... same as SYNC "varna:..."
+ -- includes:
+ VARNA START
+ VARNA STOP
+ VARNA ON (or SHOW)
+ VARNA OFF (or HIDE)
+
+
+new feature (VARNA): setSelection([resno 1 2 3])
+ -- allows indicating PDB residue numbers rather than indices
+
+new feature: COLOR SELECT [color1] [color2]
+ -- automatically colors both selected an unselected atoms
+ -- NONE for color1 or color2 indicates default "CPK" colors
+ -- turned off using COLOR SELECT NONE NONE
+ -- turning off also clears the atom selection
+ -- [color2] is optional, defaulting to NONE
+ -- acts immediately on the currently defined atom selection
+ -- if multiple models are present, then
+ selection is restricted to the current model
+
+new feature: COLOR STRUCTURE additions for RNA motifs
+ -- after load =xxxx/DSSR or CALCULATE DSSR
+ -- includes STEMS (yellow), LOOPS (blue)
+ STEM [xFFFF00] // yellow
+ INNER LOOP [xA000F0] // purple
+ HAIRPIN LOOP [x00A0F0] // light blue
+ BULGE LOOP [x00F0F0] // cyan
+ JUNCTION LOOP [x0000F0] // dark blue
+
+
JmolVersion="16.3.55" // (legacy) also 16.3.56 (swingJS)
bug fix: biomolecule loading fails due to null pointer exception accessing spinFrame (spin space groups only)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-03-31 20:54:16
|
Revision: 22721
http://sourceforge.net/p/jmol/code/22721
Author: hansonr
Date: 2026-03-31 20:54:14 +0000 (Tue, 31 Mar 2026)
Log Message:
-----------
Added Paths:
-----------
trunk/Jmol/test/jmol-jar/Jmol.jar
Removed Paths:
-------------
trunk/Jmol/test/Jmol.jar
Deleted: trunk/Jmol/test/Jmol.jar
===================================================================
(Binary files differ)
Copied: trunk/Jmol/test/jmol-jar/Jmol.jar (from rev 22720, trunk/Jmol/test/Jmol.jar)
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-03-31 20:51:36
|
Revision: 22720
http://sourceforge.net/p/jmol/code/22720
Author: hansonr
Date: 2026-03-31 20:51:33 +0000 (Tue, 31 Mar 2026)
Log Message:
-----------
Jmol 16.3.57 preview
Modified Paths:
--------------
trunk/Jmol/appletweb/jsmol.zip
Added Paths:
-----------
trunk/Jmol/test/Jmol.jar
Modified: trunk/Jmol/appletweb/jsmol.zip
===================================================================
(Binary files differ)
Added: trunk/Jmol/test/Jmol.jar
===================================================================
(Binary files differ)
Index: trunk/Jmol/test/Jmol.jar
===================================================================
--- trunk/Jmol/test/Jmol.jar 2026-03-31 20:44:46 UTC (rev 22719)
+++ trunk/Jmol/test/Jmol.jar 2026-03-31 20:51:33 UTC (rev 22720)
Property changes on: trunk/Jmol/test/Jmol.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-03-31 20:44:48
|
Revision: 22719
http://sourceforge.net/p/jmol/code/22719
Author: hansonr
Date: 2026-03-31 20:44:46 +0000 (Tue, 31 Mar 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.57" // (legacy) also 16.3.58 (swingJS)
bug fix: FRAME ALIGN {....} broken in 6.1.59
-- causes NullPointerException
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-03-20 15:39:44 UTC (rev 22718)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-03-31 20:44:46 UTC (rev 22719)
@@ -53,8 +53,27 @@
# FEATURE REQUEST: dock/undock consoles to main window.
# TODO: allow FIXED to work with MODELKIT MINIMIZE
-Jmol.___JmolVersion="16.3.53" // (legacy) also 16.3.54 (swingJS)
+Jmol.___JmolVersion="16.3.57" // (legacy) also 16.3.58 (swingJS)
+
+bug fix: FRAME ALIGN {....} broken in 6.1.59
+ -- causes NullPointerException
+
+JmolVersion="16.3.55" // (legacy) also 16.3.56 (swingJS)
+
+bug fix: biomolecule loading fails due to null pointer exception accessing spinFrame (spin space groups only)
+
+bug fix: matrix(m, "abc") does not transpose to column format
+
+bug fix: SpinCIF files do not decode 2sqrt(...) or cos(2pi/...)
+
+bug fix: binary data array from load(filename,TRUE) should report data length using .length
+
+bug fix: precision issues between Jmol and JmolD for loading scif created from mcif
+ -- SpinCIF still experimental (FINDSPACEGROUP 0.13.11)
+
+JmolVersion="16.3.53" // (legacy) also 16.3.54 (swingJS)
+
bug fix: CAPTURE "x.gift" and CAPTURE TRANSPARENT "x.gif" do not work properly (broken in 14.3.8)
-- any background color should work
-- if display background is very different from backgroundColor, slight speckling around the model may be seen
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-03-20 15:39:50
|
Revision: 22718
http://sourceforge.net/p/jmol/code/22718
Author: hansonr
Date: 2026-03-20 15:39:44 +0000 (Fri, 20 Mar 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.53" // (legacy) also 16.3.54 (swingJS)
bug fix: CAPTURE "x.gift" and CAPTURE TRANSPARENT "x.gif" do not work properly (broken in 14.3.8)
-- any background color should work
-- if display background is very different from backgroundColor, slight speckling around the model may be seen
bug fix: CAPTURE removes slab
-- slab was being turned off when the CAPTURE command was issued
bug fix: spin space group SpinCIF file reading fix for spin frame axis normalization and rotateSpin
new feature: matrix(matrix3,"XYZ") with capital letters
-- creates the Jones-Faithful string (such as "a,a-b,c") without fractional numbers such as 1/2 or 2/3.
-- so "a,1/2b,c" would read "a,0.5b,c"
-- also "ABC" and "UVW"
-- used in certain cases such as special user setting in CIF
or in magnetic or spin CIF files, where fractions can be much more complicated,
and axes can be unusual, such as C5 or C7.
Modified Paths:
--------------
trunk/Jmol/appletweb/jsmol.zip
Modified: trunk/Jmol/appletweb/jsmol.zip
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-03-20 15:06:05
|
Revision: 22717
http://sourceforge.net/p/jmol/code/22717
Author: hansonr
Date: 2026-03-20 15:06:01 +0000 (Fri, 20 Mar 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.53" // (legacy) also 16.3.54 (swingJS)
bug fix: CAPTURE "x.gift" and CAPTURE TRANSPARENT "x.gif" do not work properly (broken in 14.3.8)
-- any background color should work
-- if display background is very different from backgroundColor, slight speckling around the model may be seen
bug fix: CAPTURE removes slab
-- slab was being turned off when the CAPTURE command was issued
bug fix: spin space group SpinCIF file reading fix for spin frame axis normalization and rotateSpin
new feature: matrix(matrix3,"XYZ") with capital letters
-- creates the Jones-Faithful string (such as "a,a-b,c") without fractional numbers such as 1/2 or 2/3.
-- so "a,1/2b,c" would read "a,0.5b,c"
-- also "ABC" and "UVW"
-- used in certain cases such as special user setting in CIF
or in magnetic or spin CIF files, where fractions can be much more complicated,
and axes can be unusual, such as C5 or C7.
Modified Paths:
--------------
trunk/Jmol/appletweb/jsmol.zip
trunk/Jmol/j2s/timestamp
trunk/Jmol/site-resources/jsmol/js/JSmolCore.js
trunk/Jmol/src/javajs/img/GifEncoder.java
trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java
trunk/Jmol/src/org/jmol/adapter/readers/cif/MSRdr.java
trunk/Jmol/src/org/jmol/adapter/smarter/XtalSymmetry.java
trunk/Jmol/src/org/jmol/api/SymmetryInterface.java
trunk/Jmol/src/org/jmol/modelkit/ModelKit.java
trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
trunk/Jmol/src/org/jmol/scriptext/MathExt.java
trunk/Jmol/src/org/jmol/symmetry/Symmetry.java
trunk/Jmol/src/org/jmol/symmetry/SymmetryDesc.java
trunk/Jmol/src/org/jmol/symmetry/SymmetryOperation.java
trunk/Jmol/src/org/jmol/symmetry/UnitCell.java
trunk/Jmol/src/org/jmol/viewer/TransformManager.java
Removed Paths:
-------------
trunk/Jmol/test/jmol-jar/Jmol.jar
Modified: trunk/Jmol/appletweb/jsmol.zip
===================================================================
(Binary files differ)
Modified: trunk/Jmol/j2s/timestamp
===================================================================
--- trunk/Jmol/j2s/timestamp 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/j2s/timestamp 2026-03-20 15:06:01 UTC (rev 22717)
@@ -1 +1 @@
-20260228114552
+20260311082604
Modified: trunk/Jmol/site-resources/jsmol/js/JSmolCore.js
===================================================================
--- trunk/Jmol/site-resources/jsmol/js/JSmolCore.js 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/site-resources/jsmol/js/JSmolCore.js 2026-03-20 15:06:01 UTC (rev 22717)
@@ -221,9 +221,9 @@
// these sites are known to implement access-control-allow-origin *
// null here means no conversion necessary
"cactus.nci.nih.gov": null,
- ".x3dna.org": null,
- "rruff.geo.arizona.edu": null,
- ".rcsb.org": null,
+ ".x3dna.org": null,
+ "rruff.geo.arizona.edu": null,
+ ".rcsb.org": null,
"chemapps.stolaf.edu/jmol/jsmol/": null,
"zakodium.com":null,
"ftp.wwpdb.org": null,
@@ -1010,9 +1010,9 @@
if (fileName.indexOf("file:/") == 0 && fileName.indexOf("file:///") != 0)
fileName = "file://" + fileName.substring(5); /// fixes IE problem
var isMyHost = (fileName.indexOf("://") < 0 || fileName.indexOf(document.location.protocol) == 0 && fileName.indexOf(document.location.host) >= 0);
- var isHttps2Http = (Jmol._httpProto == "https://" && fileName.indexOf("http://") == 0);
- var isDirectCall = Jmol._isDirectCall(fileName);
- if (fileName.indexOf("?ALLOWSORIGIN?") >= 0) {
+ var isHttps2Http = (Jmol._httpProto == "https://" && fileName.indexOf("http://") == 0);
+ var isDirectCall = Jmol._isDirectCall(fileName);
+ if (fileName.indexOf("?ALLOWSORIGIN?") >= 0) {
fileName = fileName.replace(/\?ALLOWSORIGIN\?/,"");
}
//if (fileName.indexOf("http://pubchem.ncbi.nlm.nih.gov/") == 0)isDirectCall = false;
@@ -1019,7 +1019,11 @@
var cantDoSynchronousLoad = (!isMyHost && Jmol.$supportsIECrossDomainScripting());
var data = null;
- if (isHttps2Http || asBase64 || !isMyHost && !isDirectCall || !fSuccess && cantDoSynchronousLoad ) {
+ if (
+ isHttps2Http
+ || asBase64
+ || !isMyHost && !isDirectCall
+ || !fSuccess && cantDoSynchronousLoad ) {
data = Jmol._getRawDataFromServer("_",fileName, fSuccess, fSuccess, asBase64, true);
} else {
fileName = fileName.replace(/file:\/\/\/\//, "file://"); // opera
@@ -1064,12 +1068,14 @@
}
Jmol._isDirectCall = function(url) {
- if (url.indexOf("?ALLOWSORIGIN?") >= 0)
- return true;
+ if (url.indexOf("?ALLOWSORIGIN?") >= 0)
+ return true;
for (var key in Jmol.db._DirectDatabaseCalls) {
if (key.indexOf(".") >= 0 && url.indexOf(key) >= 0)
return true;
}
+ return true;
+// Jmol 16.3.53 no longer supports indirect calls
return false;
}
@@ -1206,11 +1212,11 @@
: filename.indexOf(".jpg") >= 0 ? "image/jpg" : ""));
var isString = (typeof data == "string");
- if (isString && data.indexOf(";base64,") >= 0) {
- data = data.split(";base64,")[1];
- } else {
- data = (JU || J.util).Base64.getBase64(isString ? data.getBytes("UTF-8") : data).toString();
- }
+ if (isString && data.indexOf(";base64,") >= 0) {
+ data = data.split(";base64,")[1];
+ } else {
+ data = (JU || J.util).Base64.getBase64(isString ? data.getBytes("UTF-8") : data).toString();
+ }
encoding || (encoding = "base64");
var url = Jmol._serverUrl;
Modified: trunk/Jmol/src/javajs/img/GifEncoder.java
===================================================================
--- trunk/Jmol/src/javajs/img/GifEncoder.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/javajs/img/GifEncoder.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -138,12 +138,11 @@
Integer ic = (Integer) params.get("transparentColor");
if (ic == null) {
ic = (Integer) params.get("backgroundColor");
- if (ic != null)
- backgroundColor = ic.intValue();
} else {
- backgroundColor = ic.intValue();
isTransparent = true;
}
+ if (ic != null)
+ backgroundColor = ic.intValue() & 0xFFFFFF;
if (backgroundColor == 0xFF000000) {
// fix speckling of text Jmol 14.32.69
Modified: trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -473,6 +473,8 @@
// _space_group_spin.rotation_axis "0,0,1"
// _space_group_spin.rotation_angle 45
String tag = key.substring(18);
+ if (tag.indexOf("fsg_") >= 0)
+ tag = PT.rep(tag, "fsg_", "");
switch (tag) {
case "number_spsg_chen":
tag = "ssg_number";
Modified: trunk/Jmol/src/org/jmol/adapter/readers/cif/MSRdr.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/cif/MSRdr.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/adapter/readers/cif/MSRdr.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -8,6 +8,7 @@
import org.jmol.adapter.smarter.AtomSetCollection;
import org.jmol.adapter.smarter.AtomSetCollectionReader;
import org.jmol.adapter.smarter.MSInterface;
+import org.jmol.adapter.smarter.XtalSymmetry;
import org.jmol.adapter.smarter.XtalSymmetry.FileSymmetry;
import org.jmol.util.BoxInfo;
import org.jmol.util.Escape;
@@ -1075,7 +1076,7 @@
getSymmetry(a).toCartesian(pt, false);
sym.toFractional(pt, false);
cr.fixFloatPt(pt, PT.FRACTIONAL_PRECISION); // LEGACY ONLY
- isOK = asc.xtalSymmetry.isWithinCell(3, pt, minXYZ0.x, maxXYZ0.x,
+ isOK = XtalSymmetry.isWithinSupercell(3, pt, minXYZ0.x, maxXYZ0.x,
minXYZ0.y, maxXYZ0.y, minXYZ0.z, maxXYZ0.z, packing);
// || (cr.legacyJavaFloat ? !asc.xtalSymmetry.isWithinCell(3, pt, minXYZ0.x, maxXYZ0.x,
// minXYZ0.y, maxXYZ0.y, minXYZ0.z, maxXYZ0.z, 0.001f)
Modified: trunk/Jmol/src/org/jmol/adapter/smarter/XtalSymmetry.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/smarter/XtalSymmetry.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/adapter/smarter/XtalSymmetry.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -208,11 +208,10 @@
protected String spinFrameStr;
private String spinFrameExt;
- private M4 spinFramePp;
- private M3 spinFrameToCartXYZ;
private M3 spinFrameRotationMatrix;
protected int nSpins;
private P3[] spinPointGroupAxesXYZ;
+ private boolean doNormalizeSpinFrame = false; // old "legacy" FSG code
/**
* Scale the magnetic moments of magCIF and spinCIF files.
@@ -236,11 +235,11 @@
String spinFrameStr, String spinFrameExt) {
this.spinFrameStr = spinFrameStr;
this.spinFrameExt = spinFrameExt;
- spinFramePp = null;
spinFrameToCartXYZ = null;
float a = acr.unitCellParams[0];
float b = acr.unitCellParams[1];
float c = acr.unitCellParams[2];
+ doNormalizeSpinFrame = acr.checkFilterKey("SPINNORM");
if (spinFrameStr != null) {
T3[] spinABC = preSymmetrySetSpinFrameMatrices(acr);
a = spinABC[1].length();
@@ -317,10 +316,16 @@
// we create a unit cell for this FileSymmetry just
// for this purpose
setUnitCellFromParams(acr.unitCellParams, false, Float.NaN);
- spinFramePp = new M4();
+ // note that spinFramePp is never used
T3[] spinABC = UnitCell.getMatrixAndUnitCell(acr.vwr, unitCell,
- spinFrameStr, spinFramePp);
-
+ spinFrameStr, null);
+ if (doNormalizeSpinFrame) {
+ // not doing this
+ spinABC[1].normalize();
+ spinABC[2].normalize();
+ spinABC[3].normalize();
+ }
+ // extended for axis and angle
String strAxis = getSpinExt(spinFrameExt, "axis");
if (strAxis != null) {
float angle = PT.parseFloat(getSpinExt(spinFrameExt, "angle"));
@@ -395,7 +400,7 @@
* At the end, we need to rescale the vectors using SpinFramePp.
*
* @param asc
- * @param isCartesian TODO
+ * @param isCartesian true only for FindSpinGroup JSON (FSGOutputReader)
* @return number of nonzero or incommensurate spins
*/
protected int postSymmetrySetMagneticMoments(AtomSetCollection asc, boolean isCartesian) {
@@ -417,7 +422,8 @@
toCartesian(v1, true);
}
if (v1.lengthSquared() > 0) {
- v1.scale(v1.magMoment / v1.length());
+ if (v1.magMoment != 0)
+ v1.scale(v1.magMoment / v1.length());
nSpins++;
} else if (v1.modDim == 0) {
v1 = null;
@@ -873,7 +879,7 @@
return (symmetry == null ? (symmetry = new FileSymmetry()) : symmetry);
}
- public boolean isWithinCell(int ndims, P3 pt, float minX, float maxX,
+ public static boolean isWithinSupercell(int ndims, P3 pt, float minX, float maxX,
float minY, float maxY, float minZ, float maxZ,
float slop) {
return (pt.x > minX - slop && pt.x < maxX + slop
@@ -1281,7 +1287,7 @@
if (acr.noPack
? !removePacking(ndims, pt0, minXYZ2.x, maxXYZ2.x, minXYZ2.y,
maxXYZ2.y, minXYZ2.z, maxXYZ2.z, packingRange)
- : !isWithinCell(ndims, pt0, minXYZ2.x, maxXYZ2.x, minXYZ2.y,
+ : !isWithinSupercell(ndims, pt0, minXYZ2.x, maxXYZ2.x, minXYZ2.y,
maxXYZ2.y, minXYZ2.z, maxXYZ2.z, packingRange))
bsAtoms.clear(i);
}
@@ -1827,7 +1833,7 @@
pttemp.setT(c);
sym.toFractional(pttemp, false);
acr.fixFloatPt(pttemp, PT.FRACTIONAL_PRECISION); // LEGACY ONLY
- if (!isWithinCell(ndims, pttemp, minXYZ0.x, maxXYZ0.x, minXYZ0.y,
+ if (!isWithinSupercell(ndims, pttemp, minXYZ0.x, maxXYZ0.x, minXYZ0.y,
maxXYZ0.y, minXYZ0.z, maxXYZ0.z, packingRange)) {
continue;
}
@@ -1895,7 +1901,6 @@
// spinOp is making the correction for spin being a pseudoVector, not a standard vector
((SymmetryOperation) sym.getSpaceGroupOperation(iSym))
.rotateSpin(atom1.vib);
- atom1.vib.scale(timeReversal);
}
if (atom1.part < 0) {
// special negative disorder group in CifReader
@@ -2006,7 +2011,7 @@
} else {
for (int i = bs.nextSetBit(iAtomFirst); i >= 0; i = bs
.nextSetBit(i + 1)) {
- if (!isWithinCell(ndims, atoms[i], minXYZ.x, maxXYZ.x, minXYZ.y,
+ if (!isWithinSupercell(ndims, atoms[i], minXYZ.x, maxXYZ.x, minXYZ.y,
maxXYZ.y, minXYZ.z, maxXYZ.z, packingRange))
bs.clear(i);
}
Modified: trunk/Jmol/src/org/jmol/api/SymmetryInterface.java
===================================================================
--- trunk/Jmol/src/org/jmol/api/SymmetryInterface.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/api/SymmetryInterface.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -5,6 +5,7 @@
import org.jmol.modelset.Atom;
import org.jmol.modelset.ModelSet;
import org.jmol.util.Point3fi;
+import org.jmol.util.Vibration;
import org.jmol.viewer.Viewer;
import javajs.util.A4;
@@ -309,4 +310,8 @@
P3i newMax);
String updatePointGroup();
+
+ void toFractionalSpin(T3 v);
+
+ void toCartesianSpin(T3 v);
}
Modified: trunk/Jmol/src/org/jmol/modelkit/ModelKit.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelkit/ModelKit.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/modelkit/ModelKit.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -2607,11 +2607,11 @@
Vibration vib = vwr.ms.getVibration(a.i, false);
if (vib != null) {
V3 v = V3.newV(vib);
- spinSym.toFractional(v, true);
- p.sX = Math.round(v.x * 1000);
- p.sY = Math.round(v.y * 1000);
- p.sZ = Math.round(v.z * 1000);
- p.sD = Math.round(vib.length() * 1000);
+ spinSym.toFractionalSpin(v);
+ p.sX = Math.round(v.x * 100000);
+ p.sY = Math.round(v.y * 100000);
+ p.sZ = Math.round(v.z * 100000);
+ p.sD = Math.round(vib.length() * 100000);
}
return p;
}
@@ -2626,12 +2626,12 @@
if (i0 < 0)
i0 = p.i;
Vibration vb = (Vibration) va.clone();
- vb.x = p.sX / 1000f;
- vb.y = p.sY / 1000f;
- vb.z = p.sZ / 1000f;
- spinSym.toCartesian(vb, true);
+ vb.x = p.sX / 100000f;
+ vb.y = p.sY / 100000f;
+ vb.z = p.sZ / 100000f;
+ spinSym.toCartesianSpin(vb);
vb.normalize();
- vb.scale(p.sD / 1000f);
+ vb.scale(p.sD / 100000f);
vwr.ms.setAtomVibrationVector(i, vb);
}
if (i0 >= 0) {
Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -6060,6 +6060,7 @@
break;
case T.spin:
case T.string:
+ case T.unitcell:
case T.identifier:
String s = paramAsStr(i).toLowerCase();
if (s.equals("rhombohedral") || s.equals("r")) {
@@ -6677,7 +6678,7 @@
unitcell(2, tok);
return;
}
- value = (tokAt(i + 1) == T.string ? paramAsStr(++i).toLowerCase() : null);
+ value = (tokAt(i + 1) == T.string || tokAt(i + 1) == T.unitcell ? paramAsStr(++i).toLowerCase() : null);
if (value == null || !vwr.isModelKitOption('U', (String) value)) {
unitcell(2, tok);
return;
@@ -7088,12 +7089,15 @@
return false;
case T.identifier:
case T.string:
+ case T.unitcell:
String tr = paramAsStr(i).toLowerCase();
SymmetryInterface uc = vwr.getCurrentUnitCell();
if (uc == null)
invArg();
if (!chk) {
- if (tr.startsWith(JC.UNITCELL_PREFIX)) {
+ if (tr.equalsIgnoreCase("unitcell")) {
+ tr = "a,b,c";
+ } else if (tr.startsWith(JC.UNITCELL_PREFIX)) {
tr = (String) vwr.getCurrentModelAuxInfo().get(tr);
} else {
tr = SimpleUnitCell.parseSimpleMath(vwr, tr);
Modified: trunk/Jmol/src/org/jmol/scriptext/MathExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/MathExt.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/scriptext/MathExt.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -275,8 +275,13 @@
// matrix("62.1>>62.5")
// matrix("[Pnma]>>[Pmcn]")
// matrix("-b,-a,-c",true) // normalizes
+ // matrix("u,v,w") // 3x3 matrix
// matrix("h")
// matrix("r")
+ // matrix(p4)
+ // matrix(m3)
+ // matrix(m,"uvw",false) // no fractions
+
int n = args.length;
M4 m4 = null;
@@ -291,6 +296,7 @@
String retType = (n > 1 && args[n - 1].tok == T.string
? (String) args[n - 1].value
: null);
+ boolean noFractions= (retType != null && retType.equals(retType.toUpperCase()));
boolean asUVW = "uvw".equalsIgnoreCase(retType);
boolean asABC = "abc".equalsIgnoreCase(retType);
boolean asXYZ = asUVW || !asABC && "xyz".equalsIgnoreCase(retType);
@@ -463,7 +469,7 @@
if (normalize)
doNormalize(m4);
return mp.addXStr(matToString((asRXYZ && m3 != null ? m3 : m4),
- asRXYZ ? 0x1 : asABC ? 0xABC : asUVW ? 0xDEF : 0));
+ (asRXYZ ? 0x1 : asABC ? 0xABC : asUVW ? 0xDEF : 0) | (noFractions ? 0x1000 : 0)));
}
if (normalize)
doNormalize(m4);
@@ -485,6 +491,7 @@
private String matToString(M34 m4, int mode) {
SymmetryInterface sym = vwr.getSymStatic();
String smode;
+ boolean noFractions = ((mode & 0x1000) != 0);
switch (mode) {
case SV.FORMAT_RXYZ:
case 0x1: // rxyz
@@ -507,6 +514,8 @@
case SV.FORMAT_XYZ:
smode = "xyz";
}
+ if (noFractions)
+ smode = smode.toUpperCase();
return (String) vwr.getSymStatic().staticConvertOperation("", m4, smode);
}
Modified: trunk/Jmol/src/org/jmol/symmetry/Symmetry.java
===================================================================
--- trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -125,7 +125,8 @@
private SymmetryInfo symmetryInfo;
private SymmetryDesc desc;
private M4 transformMatrix;
-
+ protected M3 spinFrameToCartXYZ;
+
@Override
public String[] getSymopList(boolean doNormalize) {
int n = spaceGroup.operationCount;
@@ -2131,6 +2132,7 @@
return;
setUnitCellFromParams(params, info.containsKey(JC.INFO_JMOL_DATA),
symmetryInfo.slop);
+ unitCell.spinFrameToCartXYZ = fileSymmetry.spinFrameToCartXYZ;
setSpinSym();
unitCell.setMoreInfo((Lst<String>) info.get(JC.UC_MOREINFO));
info.put("infoUnitCell", getUnitCellAsArray(false));
@@ -2417,7 +2419,7 @@
private void setSpinSym() {
if (spinSym == null) {
spinSym = new Symmetry();
- spinSym.spaceGroup = spaceGroup;
+ spinSym.spaceGroup = spaceGroup; // will be null
spinSym.unitCell = unitCell;
}
}
@@ -2432,4 +2434,14 @@
return (pointGroup == null ? null : pointGroup.updateDraw());
}
+ @Override
+ public void toFractionalSpin(T3 v) {
+ unitCell.toFractionalSpin(v);
+ }
+
+ @Override
+ public void toCartesianSpin(T3 v) {
+ unitCell.toCartesianSpin(v);
+ }
+
}
Modified: trunk/Jmol/src/org/jmol/symmetry/SymmetryDesc.java
===================================================================
--- trunk/Jmol/src/org/jmol/symmetry/SymmetryDesc.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/symmetry/SymmetryDesc.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -188,7 +188,7 @@
boolean isAll = (!asString && symOp < 0);
String strOperations = (String) sginfo.get(JC.INFO_SYMMETRY_INFO);
String strOpNote = (String) sginfo.get(JC.INFO_SPACE_GROUP_NOTE);
- strOperations += "\n" + strOpNote.replace(':', ' ');
+ strOperations += (strOpNote == null ? "" : "\n" + strOpNote.replace(':', ' '));
boolean labelOnly = "label".equals(stype);
int n = 0;
for (int i = 0; i < infolist.length; i++) {
Modified: trunk/Jmol/src/org/jmol/symmetry/SymmetryOperation.java
===================================================================
--- trunk/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/symmetry/SymmetryOperation.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -2623,10 +2623,15 @@
}
public void rotateSpin(T3 vib) {
- if (spinU == null)
+ if (spinU == null) {
+ // MagCIF
rotate(vib);
- else
+ if (getMagneticOp() == -1)
+ vib.scale(-1);
+ } else {
+ // SpinCIF
spinU.rotate(vib);
+ }
}
public static Object staticConvertOperation(String xyz, M34 matrix34,
@@ -2648,12 +2653,15 @@
} else {
matrix4 = (M4) matrix34;
}
- if ("rxyz".equals(labels)) {
+ if (labels == null)
+ labels = "xyz";
+ if ("rxyz".equalsIgnoreCase(labels)) {
return matrixToRationalString(matrix34);
}
+ boolean fractionsAsDecimal = (labels.equals(labels.toUpperCase()));
return (toMat ? matrix34
: getXYZFromMatrixFrac(matrix4, false, false, false,
- true, false, labels));
+ true, fractionsAsDecimal, labels.toLowerCase()));
}
// https://crystalsymmetry.wordpress.com/space-group-diagrams/
Modified: trunk/Jmol/src/org/jmol/symmetry/UnitCell.java
===================================================================
--- trunk/Jmol/src/org/jmol/symmetry/UnitCell.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/symmetry/UnitCell.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -121,6 +121,9 @@
*/
private float[][] f2c;
+ M3 spinFrameFromCartXYZ;
+ M3 spinFrameToCartXYZ;
+
private static V3 v0;
@@ -349,6 +352,7 @@
boolean adjustB = ((periodicity & 0x2) != 0);
boolean adjustC = ((periodicity & 0x4) != 0);
boolean haveSpin = (pt.sD >= 0);
+ V3 v = (haveSpin ? new V3() : null);
if (list == null)
list = new Lst<Point3fi>();
int n = list.size();
@@ -366,7 +370,7 @@
if (adjustC)
p.z = fixFloor(p.z - (int) Math.floor(p.z));
if (haveSpin) {
- V3 v = V3.new3(pt.sX, pt.sY, pt.sZ);
+ v.set(pt.sX, pt.sY, pt.sZ);
((SymmetryOperation)ops[i]).rotateSpin(v);
p.sX = Math.round(v.x);
p.sY = Math.round(v.y);
@@ -1703,4 +1707,24 @@
(int) Math.max(1, Math.ceil(rmax.z - 0.001f)));
}
+ public void toFractionalSpin(T3 v) {
+ if (spinFrameToCartXYZ == null) {
+ toFractional(v, true);
+ return;
+ }
+ if (spinFrameFromCartXYZ == null) {
+ spinFrameFromCartXYZ = M3.newM3(spinFrameToCartXYZ);
+ spinFrameFromCartXYZ.invert();
+ }
+ spinFrameFromCartXYZ.rotate(v);
+ }
+
+ public void toCartesianSpin(T3 v) {
+ if (spinFrameFromCartXYZ == null) {
+ toCartesian(v, true);
+ return;
+ }
+ spinFrameToCartXYZ.rotate(v);
+ }
+
}
Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2026-03-20 15:03:31 UTC (rev 22716)
+++ trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2026-03-20 15:06:01 UTC (rev 22717)
@@ -1382,8 +1382,9 @@
public int defaultMode = MODE_STANDARD;
void setNavigationMode(boolean TF) {
- mode = (TF ? MODE_NAVIGATION : defaultMode);
- resetNavigationPoint(true);
+ int mode = this.mode;
+ this.mode = (TF ? MODE_NAVIGATION : defaultMode);
+ resetNavigationPoint(TF || mode == MODE_NAVIGATION);
}
public boolean isNavigating() {
Deleted: trunk/Jmol/test/jmol-jar/Jmol.jar
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-03-20 15:03:33
|
Revision: 22716
http://sourceforge.net/p/jmol/code/22716
Author: hansonr
Date: 2026-03-20 15:03:31 +0000 (Fri, 20 Mar 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.53" // (legacy) also 16.3.54 (swingJS)
bug fix: CAPTURE "x.gift" and CAPTURE TRANSPARENT "x.gif" do not work properly (broken in 14.3.8)
-- any background color should work
-- if display background is very different from backgroundColor, slight speckling around the model may be seen
bug fix: CAPTURE removes slab
-- slab was being turned off when the CAPTURE command was issued
bug fix: spin space group SpinCIF file reading fix for spin frame axis normalization and rotateSpin
new feature: matrix(matrix3,"XYZ") with capital letters
-- creates the Jones-Faithful string (such as "a,a-b,c") without fractional numbers such as 1/2 or 2/3.
-- so "a,1/2b,c" would read "a,0.5b,c"
-- also "ABC" and "UVW"
-- used in certain cases such as special user setting in CIF
or in magnetic or spin CIF files, where fractions can be much more complicated,
and axes can be unusual, such as C5 or C7.
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-03-12 19:01:37 UTC (rev 22715)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-03-20 15:03:31 UTC (rev 22716)
@@ -53,8 +53,28 @@
# FEATURE REQUEST: dock/undock consoles to main window.
# TODO: allow FIXED to work with MODELKIT MINIMIZE
-Jmol.___JmolVersion="16.3.51" // (legacy) also 16.3.52 (swingJS)
+Jmol.___JmolVersion="16.3.53" // (legacy) also 16.3.54 (swingJS)
+bug fix: CAPTURE "x.gift" and CAPTURE TRANSPARENT "x.gif" do not work properly (broken in 14.3.8)
+ -- any background color should work
+ -- if display background is very different from backgroundColor, slight speckling around the model may be seen
+
+bug fix: CAPTURE removes slab
+ -- slab was being turned off when the CAPTURE command was issued
+
+bug fix: spin space group SpinCIF file reading fix for spin frame axis normalization and rotateSpin
+
+new feature: matrix(matrix3,"XYZ") with capital letters
+ -- creates the Jones-Faithful string (such as "a,a-b,c") without fractional numbers such as 1/2 or 2/3.
+ -- so "a,1/2b,c" would read "a,0.5b,c"
+ -- also "ABC" and "UVW"
+ -- used in certain cases such as special user setting in CIF
+ or in magnetic or spin CIF files, where fractions can be much more complicated,
+ and axes can be unusual, such as C5 or C7.
+
+
+JmolVersion="16.3.51" // (legacy) also 16.3.52 (swingJS)
+
bug fix: (PDB) CA-only PDB models with altloc break polymer and fail to switch conformations (4nia, Eric Martz)
feature change: (PDB) maximum CA-CA distance for polymer creation increased to 4.5 from 4.2.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-03-09 18:52:28
|
Revision: 22712
http://sourceforge.net/p/jmol/code/22712
Author: aherraez
Date: 2026-03-09 18:52:26 +0000 (Mon, 09 Mar 2026)
Log Message:
-----------
adding executable apps for MacOS (fixing corrupted files)
Removed Paths:
-------------
trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip
Property Changed:
----------------
trunk/IDTF_U3D_converter/mac/
Index: trunk/IDTF_U3D_converter/mac
===================================================================
--- trunk/IDTF_U3D_converter/mac 2026-03-09 18:51:15 UTC (rev 22711)
+++ trunk/IDTF_U3D_converter/mac 2026-03-09 18:52:26 UTC (rev 22712)
Property changes on: trunk/IDTF_U3D_converter/mac
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+Aplicaciones_Mac.zip
Deleted: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-03-09 18:51:18
|
Revision: 22711
http://sourceforge.net/p/jmol/code/22711
Author: aherraez
Date: 2026-03-09 18:51:15 +0000 (Mon, 09 Mar 2026)
Log Message:
-----------
adding executable apps for MacOS (fixing corrupted files)
Modified Paths:
--------------
trunk/IDTF_U3D_converter/mac/README.txt
Added Paths:
-----------
trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter_apps.zip
Added: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter_apps.zip
===================================================================
(Binary files differ)
Index: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter_apps.zip
===================================================================
--- trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter_apps.zip 2026-03-05 19:33:01 UTC (rev 22710)
+++ trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter_apps.zip 2026-03-09 18:51:15 UTC (rev 22711)
Property changes on: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter_apps.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/IDTF_U3D_converter/mac/README.txt
===================================================================
--- trunk/IDTF_U3D_converter/mac/README.txt 2026-03-05 19:33:01 UTC (rev 22710)
+++ trunk/IDTF_U3D_converter/mac/README.txt 2026-03-09 18:51:15 UTC (rev 22711)
@@ -40,7 +40,7 @@
-------------
FILES:
-* IDTF_U3D_Converter__MacOS.zip
+* IDTF_U3D_Converter_apps.zip
Contains the three executables mentioned above. Only one is needed, pick your choice.
* LICENSE.txt
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-03-05 19:33:03
|
Revision: 22710
http://sourceforge.net/p/jmol/code/22710
Author: aherraez
Date: 2026-03-05 19:33:01 +0000 (Thu, 05 Mar 2026)
Log Message:
-----------
adding executable apps for MacOS and relocating Windows files
Added Paths:
-----------
trunk/IDTF_U3D_converter/mac/LICENSE.txt
trunk/IDTF_U3D_converter/mac/README.txt
Added: trunk/IDTF_U3D_converter/mac/LICENSE.txt
===================================================================
--- trunk/IDTF_U3D_converter/mac/LICENSE.txt (rev 0)
+++ trunk/IDTF_U3D_converter/mac/LICENSE.txt 2026-03-05 19:33:01 UTC (rev 22710)
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to https://unlicense.org
Added: trunk/IDTF_U3D_converter/mac/README.txt
===================================================================
--- trunk/IDTF_U3D_converter/mac/README.txt (rev 0)
+++ trunk/IDTF_U3D_converter/mac/README.txt 2026-03-05 19:33:01 UTC (rev 22710)
@@ -0,0 +1,49 @@
+/* ====================================================
+ == IDTF to U3D file format converter ==
+ A MacOS GUI application embedding IDTFConverter.
+==================================================== */
+
+Version 1.1, 2026-03-05
+Author: Angel Herráez (with kind help from Avelino Martín and code provided by Claude AI)
+Terms of use: Unlicense, https://unlicense.org (public domain)
+
+Credit is due to Michail Vidiassov for the original Windows/MSDOS command-line IDTFConverter.exe
+ https://sourceforge.net/projects/u3d/
+This MacOS version was based on the forked project at
+ https://github.com/ningfei/u3d
+
+Compiled for Mac and packaged with the guidance of Claude AI
+ Products:
+ a) A command-line executable, to be run from Terminal:
+ ./IDTF_U3D_Converter -input myfile.idtf -output myfile.u3d
+ b) An app with GUI, for machines with Intel processor
+ c) An app with GUI, for machines with Silicon processor
+
+-------------
+The GUI apps open a small window, prompts for:
+1. select an input file in the IDTF format
+2. select a folder for the output file in the U3D format
+3. press the [convert] button
+
+The output file will have the same name as the input, with different extension.
+
+Information about the formats:
+* IDTF = Intermediate Data Text Format
+* U3D = Universal 3D format (ECMA-363 Standard)
+* see wiki.jmol.org/index.php/File_formats/3D_Objects
+
+1. Jmol can export models to IDTF, but not U3D.
+2. IDTF can be converted to U3D using this application.
+3. The U3D file can be embedded in a PDF document as interactive 3D model, using some software packages (see wiki.jmol.org/index.php/File_formats/3D_PDF)
+4. 3D-PDF files are included in the ISO 32000 / ISO 14739 standard; hence viewing and interactiing with the 3D models is supported by at least some of the PDF viewers.
+
+-------------
+FILES:
+
+* IDTF_U3D_Converter__MacOS.zip
+ Contains the three executables mentioned above. Only one is needed, pick your choice.
+
+* LICENSE.txt
+
+* README.txt
+ This file.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-03-05 19:22:37
|
Revision: 22709
http://sourceforge.net/p/jmol/code/22709
Author: aherraez
Date: 2026-03-05 19:22:33 +0000 (Thu, 05 Mar 2026)
Log Message:
-----------
Added Paths:
-----------
trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip
Added: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip
===================================================================
(Binary files differ)
Index: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip
===================================================================
--- trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip 2026-03-05 19:20:58 UTC (rev 22708)
+++ trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip 2026-03-05 19:22:33 UTC (rev 22709)
Property changes on: trunk/IDTF_U3D_converter/mac/IDTF_U3D_Converter__MacOS.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-03-05 19:21:00
|
Revision: 22708
http://sourceforge.net/p/jmol/code/22708
Author: aherraez
Date: 2026-03-05 19:20:58 +0000 (Thu, 05 Mar 2026)
Log Message:
-----------
adding executable apps for MacOS and relocating Windows files
Removed Paths:
-------------
trunk/IDTF_U3D_converter/IDTF_U3D_Converter.zip
trunk/IDTF_U3D_converter/LICENSE.txt
trunk/IDTF_U3D_converter/README.txt
trunk/IDTF_U3D_converter/icon/
trunk/IDTF_U3D_converter/source.zip
Deleted: trunk/IDTF_U3D_converter/IDTF_U3D_Converter.zip
===================================================================
(Binary files differ)
Deleted: trunk/IDTF_U3D_converter/LICENSE.txt
===================================================================
--- trunk/IDTF_U3D_converter/LICENSE.txt 2026-03-05 19:16:34 UTC (rev 22707)
+++ trunk/IDTF_U3D_converter/LICENSE.txt 2026-03-05 19:20:58 UTC (rev 22708)
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to https://unlicense.org
Deleted: trunk/IDTF_U3D_converter/README.txt
===================================================================
--- trunk/IDTF_U3D_converter/README.txt 2026-03-05 19:16:34 UTC (rev 22707)
+++ trunk/IDTF_U3D_converter/README.txt 2026-03-05 19:20:58 UTC (rev 22708)
@@ -1,52 +0,0 @@
-/* ====================================================
- == IDTF to U3D file format converter ==
- A windows GUI application embedding IDTFConverter.
-==================================================== */
-
-Version 1.0, 2026-02-25
-Author: Angel Herráez (with code guided by ChatGPT)
-Terms of use: Unlicense, https://unlicense.org (public domain)
-
-Credit is due to Michail Vidiassov for the original Windows/MSDOS command-line IDTFConverter.exe
- https://sourceforge.net/projects/u3d/
-which is packaged and runs under this GUI.
-
-GUI version developed using wxPython Phoenix 4.2.5 and packaged with PyInstaller.
-
-Windows icon: Angel Herráez, CC0 Public Domain Licence, https://creativecommons.org/public-domain/cc0/
-
--------------
-This is a Windows-only executable.
-Opens a small window, prompts for:
-1. select an input file in the IDTF format
-2. select a folder for the output file in the U3D format
-3. press the [convert] button
-
-The output file will have the same name as the input, with different extension.
-
-Information about the formats:
-* IDTF = Intermediate Data Text Format
-* U3D = Universal 3D format (ECMA-363 Standard)
-* see wiki.jmol.org/index.php/File_formats/3D_Objects
-
-1. Jmol can export models to IDTF, but not U3D.
-2. IDTF can be converted to U3D using this application.
-3. The U3D file can be embedded in a PDF document as interactive 3D model, using some software packages (see wiki.jmol.org/index.php/File_formats/3D_PDF)
-4. 3D-PDF files are included in the ISO 32000 / ISO 14739 standard; hence viewing and interactiing with the 3D models is supported by at least some of the PDF viewers.
-
--------------
-FILES:
-
-* IDTF_U3D_Converter.zip
- Contains the single file needed to use the converter, IDTF_U3D_Converter.exe
- Just unzip and put it in any place of your system.
-
-* README.txt
- This file.
-
-* icon
- A folder with the Windows .ico file and the original .svg file. Included for convenience, not needed to use the application.
-
-* source
- This folder contains the source code and environment that was used to build the application using wxPython and PyInstaller. It has being zipped for easier management in the repository.
-
Deleted: trunk/IDTF_U3D_converter/source.zip
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-02-28 17:18:04
|
Revision: 22705
http://sourceforge.net/p/jmol/code/22705
Author: hansonr
Date: 2026-02-28 17:18:01 +0000 (Sat, 28 Feb 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.51" // (legacy) also 16.3.52 (swingJS)
bug fix: (PDB) CA-only PDB models with altloc break polymer and fail to switch conformations (4nia, Eric Martz)
feature change: (PDB) maximum CA-CA distance for polymer creation increased to 4.5 from 4.2.
bug fix: save state as script for plot spin SPLIT does not work (PNGJ files not restoring state)
new feature: (Jmol-SwingJS only) Adding Varna 3.1 source code
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-28 11:23:45 UTC (rev 22704)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-28 17:18:01 UTC (rev 22705)
@@ -53,8 +53,19 @@
# FEATURE REQUEST: dock/undock consoles to main window.
# TODO: allow FIXED to work with MODELKIT MINIMIZE
-Jmol.___JmolVersion="16.3.49" // (legacy) also 16.3.50 (swingJS)
+Jmol.___JmolVersion="16.3.51" // (legacy) also 16.3.52 (swingJS)
+bug fix: (PDB) CA-only PDB models with altloc break polymer and fail to switch conformations (4nia, Eric Martz)
+
+feature change: (PDB) maximum CA-CA distance for polymer creation increased to 4.5 from 4.2.
+
+bug fix: save state as script for plot spin SPLIT does not work (PNGJ files not restoring state)
+
+new feature: (Jmol-SwingJS only) Adding Varna 3.1 source code
+
+
+JmolVersion="16.3.49" // (legacy) also 16.3.50 (swingJS)
+
bug fix: script variables _modelFile and _modelType persist after ZAP
-- this was not intentional; ZAP should set both of these to ""
@@ -99,7 +110,6 @@
bug fix: various minor JSpecView issues
new feature: Jmol/JSpecView command-line headless interface allows creation of PNG and PDF images
- java -jar JSpecView.jar -script "load c:/temp/t.jdx;write PNG 1000 600 t.png" -nodisplay
-- JSpecView loads a JDX, creates a custom-sized PNG image, and exits:
java -jar JSpecView.jar -script "load c:/temp/t.jdx;write PNG 1000 600 t.png" -nodisplay
-- Jmol loads a structure and send commands to JSpecView to create a 1H or 13C simulated spectrum and then save it in a PDF document, then exits
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-02-28 11:23:47
|
Revision: 22704
http://sourceforge.net/p/jmol/code/22704
Author: aherraez
Date: 2026-02-28 11:23:45 +0000 (Sat, 28 Feb 2026)
Log Message:
-----------
Windows GUI application for converting IDTF files generated by Jmol to U3D files that may be embedded in a PDF
Modified Paths:
--------------
trunk/IDTF_U3D_converter/README.txt
Modified: trunk/IDTF_U3D_converter/README.txt
===================================================================
--- trunk/IDTF_U3D_converter/README.txt 2026-02-28 11:19:34 UTC (rev 22703)
+++ trunk/IDTF_U3D_converter/README.txt 2026-02-28 11:23:45 UTC (rev 22704)
@@ -48,5 +48,5 @@
A folder with the Windows .ico file and the original .svg file. Included for convenience, not needed to use the application.
* source
- This folder contains the source code and environment that was used to build the application using wxPython and PyInstaller.
+ This folder contains the source code and environment that was used to build the application using wxPython and PyInstaller. It has being zipped for easier management in the repository.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-02-28 11:19:38
|
Revision: 22703
http://sourceforge.net/p/jmol/code/22703
Author: aherraez
Date: 2026-02-28 11:19:34 +0000 (Sat, 28 Feb 2026)
Log Message:
-----------
Windows GUI application for converting IDTF files generated by Jmol to U3D files that may be embedded in a PDF. Replacing source foler with a zipped version.
Added Paths:
-----------
trunk/IDTF_U3D_converter/source.zip
Removed Paths:
-------------
trunk/IDTF_U3D_converter/source/
Added: trunk/IDTF_U3D_converter/source.zip
===================================================================
(Binary files differ)
Index: trunk/IDTF_U3D_converter/source.zip
===================================================================
--- trunk/IDTF_U3D_converter/source.zip 2026-02-28 11:04:08 UTC (rev 22702)
+++ trunk/IDTF_U3D_converter/source.zip 2026-02-28 11:19:34 UTC (rev 22703)
Property changes on: trunk/IDTF_U3D_converter/source.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-02-12 19:55:07
|
Revision: 22701
http://sourceforge.net/p/jmol/code/22701
Author: hansonr
Date: 2026-02-12 19:55:04 +0000 (Thu, 12 Feb 2026)
Log Message:
-----------
Added Paths:
-----------
trunk/Jmol/src/org/openscience/jmol/app/status/StatusListener.java
Removed Paths:
-------------
trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java
Deleted: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2026-02-12 19:54:44 UTC (rev 22700)
+++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2026-02-12 19:55:04 UTC (rev 22701)
@@ -1,646 +0,0 @@
-/* $RCSfile$
- * $Author: hansonr $
- * $Date: 2009-06-26 23:35:44 -0500 (Fri, 26 Jun 2009) $
- * $Revision: 11131 $
- *
- * Copyright (C) 2000-2005 The Jmol Development Team
- *
- * Contact: jmo...@li...
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-package org.openscience.jmol.app.jmolpanel;
-
-import java.awt.Component;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Properties;
-
-import org.jmol.api.JSVInterface;
-import org.jmol.api.JmolAppConsoleInterface;
-import org.jmol.api.JmolCallbackListener;
-import org.jmol.api.JmolStatusListener;
-import org.jmol.api.JmolSyncInterface;
-import org.jmol.c.CBK;
-import org.jmol.dialog.Dialog;
-import org.jmol.script.T;
-import org.jmol.util.Logger;
-import org.jmol.viewer.Viewer;
-import org.openscience.jmol.app.JmolPlugin;
-import org.openscience.jmol.app.jmolpanel.console.AppConsole;
-import org.openscience.jmol.app.webexport.WebExport;
-
-import javajs.util.PT;
-import jspecview.application.JSpecView;
-import jspecview.application.MainFrame;
-
-public class StatusListener implements JmolStatusListener, JmolSyncInterface, JSVInterface {
-
- /*
- * starting with Jmol 11.7.27, JmolStatusListener extends JmolCallbackListener
- *
- * providing a simpler interface if all that is wanted is callback
- * functionality.
- *
- * Only three methods are involved:
- *
- * boolean notifyEnabled(int type) -- lets the statusManager know if there is
- * an implementation of a given callback type
- *
- * void notifyCallback(int type, Object[] data) -- callback action; data
- * varies with callback type -- see org.jmol.viewer.StatusManager for details
- *
- * void setCallbackFunction(String callbackType, String callbackFunction) --
- * called by statusManager in response to the "set callback" script command --
- * also used by the Jmol application to change menus and languages -- can
- * remain unimplemented if no such user action is intended
- */
-
- private JmolPanel jmolPanel;
- private DisplayPanel display;
-
- private Viewer vwr;
- private MainFrame jSpecViewFrame;
- private boolean jSpecViewForceNew;
-
- private String lastSimulate;
- JmolStatusListener userStatusListener;
-
-
- public void setViewer(Viewer vwr) {
- this.vwr = vwr;
- }
-
- public StatusListener(JmolPanel jmolPanel, DisplayPanel display) {
- // just required for Jmol application's particular callbacks
- this.jmolPanel = jmolPanel;
- this.display = display;
- }
-
- // / JmolCallbackListener interface ///
- @Override
- public boolean notifyEnabled(CBK type) {
- if (userStatusListener != null && userStatusListener.notifyEnabled(type))
- return true;
- switch (type) {
- case ANIMFRAME:
- case LOADSTRUCT:
- case STRUCTUREMODIFIED:
- case MEASURE:
- case SERVICE:
- case PICK:
- case SCRIPT:
- case SYNC:
- // enabled only for SYNC
- case ECHO:
- case ERROR:
- case MESSAGE:
- case MINIMIZATION:
- case MODELKIT:
- case DRAGDROP:
- case RESIZE:
- case CLICK:
- case ATOMMOVED:
- case SELECT:
- case HOVER:
- return true;
- case APPLETREADY:
- case AUDIO:
- case EVAL:
- case IMAGE:
- // applet only (but you could change this for your listener)
- break;
- }
- return false;
- }
-
- private Map<String, Object> nboOptions;
-
- @SuppressWarnings("unchecked")
- @Override
- public void notifyCallback(CBK type, Object[] data) {
- if (vwr == null) {
- // during initialization
- return;
- }
- if (userStatusListener != null && userStatusListener.notifyEnabled(type))
- userStatusListener.notifyCallback(type, data);
- if (jmolPanel.isServer() && data != null && "SYNC".equals(data[0])) {
- data[0] = type.toString();
- jmolPanel.sendNioSyncRequest(data, JmolPanel.OUTSOCKET, null);
- }
- if (!jmolPanel.plugins.isEmpty())
- for (JmolPlugin p : jmolPanel.plugins.values())
- p.notifyCallback(type, data);
- String strInfo = (data == null || data[1] == null ? null
- : data[1].toString());
- Map<String, Object> info;
- switch (type) {
- case MESSAGE:
- // deprecated
- return;
- case SERVICE:
- if (display == null)
- return;
- info = (Map<String, Object>) data[1];
- try {
- String service = (String) info.get("service");
- if ("nbo".equals(service)) {
- if ("showPanel".equals(info.get("action")))
- jmolPanel.startNBO(info);
- //else
- //jmol.getNBOService().processRequest(info, 0);
- }
- } catch (Exception e) {
- // ignore
- }
- return;
- case LOADSTRUCT:
- notifyFileLoaded(strInfo, (String) data[2], (String) data[3],
- (String) data[4], (Boolean) data[8]);
- if (jmolPanel.gaussianDialog != null)
- jmolPanel.gaussianDialog.updateModel(-2);
- break;
- case ANIMFRAME:
- int[] iData = (int[]) data[1];
- strInfo = PT.toJSON(null, iData);
- int modelIndex = iData[0];
- if (modelIndex <= -2)
- modelIndex = -2 - modelIndex; // animation is running
- //int file = iData[1];
- //int model = iData[2];
- if (display.haveDisplay) {
- String menuName = (String) data[2];
- if (menuName.equals("0.0: "))
- menuName = "";
- jmolPanel.setStatus(1, menuName);
- if (jmolPanel.frame != null) {
- //Font f = jmol.frame.getFont();
- //if (f != null) {
- //int m = jmol.frame.getFontMetrics(f).stringWidth("M");
- //int n = jmol.frame.getWidth() / m;
- //if (n < menuName.length())
- //menuName = menuName.substring(0, n) + "...";
- //}
- jmolPanel.frame.setTitle(menuName);
- }
- // if (jSpecViewFrame != null)
- // setJSpecView("", true);
- }
- break;
- case SCRIPT:
- int msWalltime = ((Integer) data[3]).intValue();
- if (msWalltime == 0) {
- if (data[2] != null && display.haveDisplay) {
- jmolPanel.setStatus(1, (String) data[2]);
- }
- } else if (msWalltime == -1) {
- AppConsole console = jmolPanel.getConsole();
- if (console != null)
- console.checkUndoEnabled();
- }
- break;
- case MODELKIT:
- String state = (String) data[1];
- if (state.equals("ON")) {
- if (display.buttonModelkit != null)
- display.buttonModelkit.setSelected(true);
- } else {
- if (display.buttonRotate != null)
- display.buttonRotate.setSelected(true);
- }
- break;
- case MEASURE:
- String mystatus = (String) data[3];
- if (mystatus.indexOf("Sequence") < 0) {
- if (mystatus.indexOf("Pending") < 0 && display.haveDisplay)
- jmolPanel.measurementTable.updateTables();
- if (mystatus.indexOf("Picked") >= 0) // picking mode
- notifyAtomPicked(strInfo);
- else if (mystatus.indexOf("Completed") < 0)
- return;
- }
- break;
- case PICK:
- notifyAtomPicked(strInfo);
- if (jmolPanel.gaussianDialog != null)
- jmolPanel.gaussianDialog.updateModel(((Integer) data[2]).intValue());
- break;
- case STRUCTUREMODIFIED:
- // 0 DONE; 1 in process
- int mode = ((Integer) data[1]).intValue();
- int atomIndex = ((Integer) data[2]).intValue();
- int modelIndexx = ((Integer) data[3]).intValue();
- notifyStructureModified(atomIndex, modelIndexx, mode);
- if (jmolPanel.gaussianDialog != null)
- jmolPanel.gaussianDialog.updateModel(-1);
- break;
- case SYNC:
- //System.out.println("StatusListener sync; " + strInfo);
- String lc = (strInfo == null ? "" : strInfo.toLowerCase());
- if (lc.startsWith("jspecview")) {
- setJSpecView(strInfo.substring(9).trim(), false, false);
- return;
- }
- if (lc.equals("getpreference")) {
- data[0] = (data[2] == null ? jmolPanel.preferencesDialog
- : jmolPanel.getPreference(data[2].toString()));
- return;
- }
- if (strInfo != null && strInfo.toLowerCase().startsWith("nbo:")) {
- if (nboOptions == null)
- nboOptions = new Hashtable<String, Object>();
- nboOptions.put("options", strInfo);
- jmolPanel.startNBO(nboOptions);
- return;
- }
- jmolPanel.sendNioSyncRequest(null, ((Integer) data[3]).intValue(),
- strInfo);
- return;
- case AUDIO:
- case IMAGE:
- case EVAL:
- case APPLETREADY:
- // see above -- not implemented in Jmol.jar
- return;
- // passed on to listener
- case HOVER:
- case ATOMMOVED:
- case DRAGDROP:
- case RESIZE:
- case CLICK:
- case ERROR:
- case ECHO:
- case MINIMIZATION:
- case SELECT:
- break;
- }
- if (jmolPanel.isServer())
- jmolPanel.sendNioSyncRequest(null, JmolPanel.OUTSOCKET,
- (type + ":" + strInfo).trim());
- JmolCallbackListener appConsole = (JmolCallbackListener) vwr
- .getProperty("DATA_API", "getAppConsole", null);
- if (appConsole != null)
- appConsole.notifyCallback(type, data);
- }
-
- /**
- * @param atomIndex
- * @param modelIndex
- * @param mode
- */
- private void notifyStructureModified(int atomIndex, int modelIndex, int mode) {
- modificationMode = mode;
- if (mode < 0) {
- switch (mode) {
- case -1: // assign atom
- case -2: // assign bond
- case -3: // connect atoms
- case -4: // delete atoms
- case -5: // delete models
- checkJSpecView(false);
- return;
- }
- }
- }
-
- @Override
- public void setCallbackFunction(String callbackType, String callbackFunction) {
- //if (callbackType.equalsIgnoreCase("menu")) {
- //jmol.setupNewFrame(vi/ewer);
- //return;
- //}
- if (callbackType.equalsIgnoreCase("language")) {
- JmolResourceHandler.clear();
- Dialog.setupUIManager();
- if (jmolPanel.webExport != null) {
- WebExport.saveHistory();
- WebExport.dispose();
- jmolPanel.createWebExport();
- }
- AppConsole appConsole = (AppConsole) vwr.getProperty("DATA_API",
- "getAppConsole", null);
- if (appConsole != null)
- appConsole.sendConsoleEcho(null);
- jmolPanel.updateLabels();
- return;
- }
- }
-
- // / end of JmolCallbackListener interface ///
-
- @Override
- public String eval(String strEval) {
- String msg = "# this funcationality is implemented only for the applet.\n" + strEval;
- sendConsoleMessage(msg);
- return msg;
- }
-
- /**
- *
- * @param fileName
- * @param type
- * @param text_or_bytes
- * @param quality
- * @return null ("you do it" or canceled) or a message starting with OK or an
- * error message
- */
- @Override
- public String createImage(String fileName, String type, Object text_or_bytes,
- int quality) {
- return null;
- }
-
- private void notifyAtomPicked(String info) {
- if (display.haveDisplay)
- jmolPanel.setStatus(1, info);
- }
-
- private void notifyFileLoaded(String fullPathName, String fileName,
- String modelName, String errorMsg, Boolean isAsync) {
- if (errorMsg != null) {
- return;
- }
- if (!display.haveDisplay)
- return;
-//System.out.println("StatusListener notifyFileLoaded: " + fileName);
- // this code presumes only ptLoad = -1 (error), 0 (zap), or 3 (completed)
- String title = "Jmol";
- if (fileName != null && fileName.startsWith("DROP_"))
- fileName = fileName.substring(5);
- if (modelName != null && fileName != null)
- title = (fileName.contains("&") ? "" : fileName + " - ") + modelName;
- else if (fileName != null)
- title = fileName;
- else if (modelName != null)
- title = modelName;
- jmolPanel.notifyFileOpen(fullPathName == null ? null : fullPathName + (isAsync == Boolean.TRUE ? " (*)" : ""), title);
- checkJSpecView(fullPathName == null);
- }
-
- private int modificationMode;
-
- private void sendConsoleMessage(String strStatus) {
- JmolAppConsoleInterface appConsole = (JmolAppConsoleInterface) vwr
- .getProperty("DATA_API", "getAppConsole", null);
- if (appConsole != null)
- appConsole.sendConsoleMessage(strStatus);
- }
-
- @Override
- public void showUrl(String url) {
- try {
- Class<?> c = Class.forName("java.awt.Desktop");
- Method getDesktop = c.getMethod("getDesktop", new Class[] {});
- Object deskTop = getDesktop.invoke(null, new Object[] {});
- Method browse = c.getMethod("browse", new Class[] { URI.class });
- Object arguments[] = { new URI(url) };
- browse.invoke(deskTop, arguments);
- } catch (Exception e) {
- Logger.error(e.getMessage());
- JmolAppConsoleInterface appConsole = (JmolAppConsoleInterface) vwr
- .getProperty("DATA_API", "getAppConsole", null);
- if (appConsole != null) {
- appConsole
- .sendConsoleMessage("Java 6 Desktop.browse() capability unavailable. Could not open "
- + url);
- } else {
- Logger
- .error("Java 6 Desktop.browse() capability unavailable. Could not open "
- + url);
- }
- }
- }
-
- /**
- * this is just a test method for isosurface FUNCTIONXY
- *
- * @param functionName
- * @param nX
- * @param nY
- * @return f(x,y) as a 2D array
- *
- */
- @Override
- public float[][] functionXY(String functionName, int nX, int nY) {
- nX = Math.abs(nX);
- nY = Math.abs(nY);
- float[][] f = new float[nX][nY];
- // boolean isSecond = (functionName.indexOf("2") >= 0);
- for (int i = nX; --i >= 0;)
- for (int j = nY; --j >= 0;) {
- float x = i / 5f; // / 15f - 1;
- float y = j / 5f; // / 15f - 1;
- f[i][j] = /* (float) Math.sqrt */(x * x + y);
- if (Float.isNaN(f[i][j]))
- f[i][j] = -(float) Math.sqrt(-x * x - y);
- // f[i][j] = (isSecond ? (float) ((i + j - nX) / (2f)) : (float) Math
- // .sqrt(Math.abs(i * i + j * j)) / 2f);
- // if (i < 10 && j < 10)
- //System.out.println(" functionXY " + i + " " + j + " " + f[i][j]);
- }
-
- return f; // for user-defined isosurface functions (testing only -- bob
- // hanson)
- }
-
- @Override
- public float[][][] functionXYZ(String functionName, int nX, int nY, int nZ) {
- nX = Math.abs(nX);
- nY = Math.abs(nY);
- nZ = Math.abs(nZ);
- float[][][] f = new float[nX][nY][nZ];
- for (int i = nX; --i >= 0;)
- for (int j = nY; --j >= 0;)
- for (int k = nZ; --k >= 0;) {
- float x = i / ((nX - 1) / 2f) - 1;
- float y = j / ((nY - 1) / 2f) - 1;
- float z = k / ((nZ - 1) / 2f) - 1;
- f[i][j][k] = x * x + y * y - z * z;//(float) x * x + y - z * z;
- // if (i == 22 || i == 23)
- //System.out.println(" functionXYZ " + i + " " + j + " " + k + " " +
- // f[i][j][k]);
- }
- return f; // for user-defined isosurface functions (testing only -- bob
- // hanson)
- }
-
- @Override
- public Map<String, Object> getRegistryInfo() {
- return null;
- }
-
- @Override
- public int[] resizeInnerPanel(String data) {
- return jmolPanel.resizeInnerPanel(data);
- }
-
- private void checkJSpecView(boolean closeAll) {
- if (jSpecViewFrame != null && modificationMode <= 0) {
- jSpecViewForceNew = jSpecViewFrame.isVisible();
- setJSpecView(closeAll ? "none" : "", true, true);
- jSpecViewForceNew = true;
- }
- }
-
- public void setJSpecView(String peaks, boolean doLoadCheck, boolean isFileLoad) {
- if (peaks.startsWith(":"))
- peaks = peaks.substring(1);
- if (peaks.equals("none") || peaks.equals("NONESimulate:")) {
- if (jSpecViewFrame != null) {
- jSpecViewFrame.syncScript("close ALL");
- jSpecViewFrame.awaken(false);
- }
- return;
- }
- boolean isC13 = peaks.equals("C13Simulate:");
- boolean isSimulation = (peaks.equals("H1Simulate:") || isC13);
- boolean isStartup = (peaks.length() == 0 || isSimulation);
- boolean newSim = (isSimulation && !peaks.equals(lastSimulate));
- String data = null;
- if (isSimulation) {
- data = vwr.extractMolData(null);
- if (data == null || data.length() == 0)
- return;
- }
- if (jSpecViewFrame == null) {
- JSpecView jsv = new JSpecView(true, this);
- jsv.setMainFrame(jSpecViewFrame = new MainFrame(jsv, vwr.getBoolean(T.jmolinjspecview) ? (Component) vwr.display : null, this));
- jSpecViewFrame.setSize(Math.max(1000, jmolPanel.frame.getWidth() + 50), 600);
- jSpecViewFrame.setLocation(jmolPanel.frame.getLocation().x + 10, jmolPanel.frame
- .getLocation().y + 100);
- jSpecViewFrame.register("Jmol", this);
- vwr.setBooleanProperty("_jspecview", true);
- if (isStartup) {
- doLoadCheck = true;
- }
- }
- if (doLoadCheck || jSpecViewForceNew || newSim) {
- String type = "" + vwr.getP("_modelType");
- if (!isSimulation && type.equalsIgnoreCase("jcampdx")) {
- jSpecViewForceNew = false;
- String file = "" + vwr.getP("_modelFile");
- if (file.indexOf("/") < 0)
- return;
- peaks = "hidden true; load APPEND CHECK " + PT.esc(file) + ";view all;select last;hidden false" + (newSim && isC13 ? ";scaleby 0.5" : "");
- } else if (isFileLoad && !jSpecViewForceNew && !newSim) {
- return;
- } else {
- jSpecViewForceNew = false;
- if (newSim)
- lastSimulate = peaks;
- String model = "" + vwr.getP("_modelNumber");
- if (data == null) {
- peaks = "hidden false";
- } else {
- data = PT.replaceAllCharacters(data, "&", "_");
- peaks = "hidden true; load APPEND CHECK " + (peaks.equals("H1Simulate:") ? "H1 " : "C13 ")
- + PT.esc("id='~" + model + "';" + data) + ";view all;select last;hidden false #SYNC_PEAKS";
- }
- isStartup = false;
- }
- }
-
- if (!jSpecViewFrame.isVisible()) {
- if (peaks.contains("<PeakData"))
- return;
- jSpecViewFrame.awaken(true);
- display.setViewer(vwr);
- }
- if (isStartup)
- peaks = "HIDDEN false";
- jSpecViewFrame.syncScript(peaks);
- }
-
- @Override
- public void register(String id, JmolSyncInterface jsi) {
- // this would be a call from JSpecView requesting that Jmol
- // register the JSpecView applet in the JmolAppletRegistry.
- }
-
- @Override
- public void syncScript(String script) {
- // called from JSpecView to send "Select: <Peaks...." script
- vwr.syncScript(script, "~", 0);
- }
-
-
- // -- JSVInterface --
-
- private static String propertiesFileName = "jspecview.properties";
-
- @Override
- public void setProperties(Properties properties) {
- try {
- FileInputStream fileIn = new FileInputStream(propertiesFileName);
- properties.load(fileIn);
- } catch (Exception e) {
- }
- }
-
- @Override
- public void saveProperties(Properties properties) {
- // Write out current properties
- try {
- FileOutputStream fileOut = new FileOutputStream(propertiesFileName);
- properties.store(fileOut, "JSpecView Application Properties");
- } catch (Exception e) {
- }
- }
-
- /**
- * @param withDialog
- * @param frame
- */
- @Override
- public void exitJSpecView(boolean withDialog, Object frame) {
- // no exit from Jmol
- }
-
- /**
- * no queuing here -- called by MainFrame
- *
- * @param script
- */
- @Override
- public void runScript(String script) {
- jSpecViewFrame.runScriptNow(script);
-
- }
-
- /**
- * @param msg
- */
- @Override
- public void syncToJmol(String msg) {
- // not utilized in Jmol application -- jmolSyncInterface used instead
- }
-
- @Override
- public Map<String, Object> getJSpecViewProperty(String type) {
- if (type.toLowerCase().startsWith("jspecview")) {
- type = type.substring(9);
- if (type.startsWith(":"))
- type = type.substring(1);
- return (jSpecViewFrame == null ? null : jSpecViewFrame.getJSpecViewProperty(type));
- }
- return null;
- }
-
-}
Copied: trunk/Jmol/src/org/openscience/jmol/app/status/StatusListener.java (from rev 22692, trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java)
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/status/StatusListener.java (rev 0)
+++ trunk/Jmol/src/org/openscience/jmol/app/status/StatusListener.java 2026-02-12 19:55:04 UTC (rev 22701)
@@ -0,0 +1,630 @@
+/* $RCSfile$
+ * $Author: hansonr $
+ * $Date: 2009-06-26 23:35:44 -0500 (Fri, 26 Jun 2009) $
+ * $Revision: 11131 $
+ *
+ * Copyright (C) 2000-2005 The Jmol Development Team
+ *
+ * Contact: jmo...@li...
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+package org.openscience.jmol.app.status;
+
+import java.awt.Component;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Properties;
+
+import org.jmol.api.JSVInterface;
+import org.jmol.api.JmolAppConsoleInterface;
+import org.jmol.api.JmolCallbackListener;
+import org.jmol.api.JmolStatusListener;
+import org.jmol.api.JmolSyncInterface;
+import org.jmol.c.CBK;
+import org.jmol.dialog.Dialog;
+import org.jmol.script.T;
+import org.jmol.util.Logger;
+import org.jmol.viewer.JC;
+import org.jmol.viewer.Viewer;
+import org.openscience.jmol.app.JmolPlugin;
+import org.openscience.jmol.app.jmolpanel.DisplayPanel;
+import org.openscience.jmol.app.jmolpanel.JmolPanel;
+import org.openscience.jmol.app.jmolpanel.JmolResourceHandler;
+import org.openscience.jmol.app.jmolpanel.console.AppConsole;
+import org.openscience.jmol.app.webexport.WebExport;
+
+import javajs.util.PT;
+import jspecview.application.JSpecView;
+import jspecview.application.MainFrame;
+
+public class StatusListener implements JmolStatusListener, JmolSyncInterface, JSVInterface {
+
+ /*
+ * starting with Jmol 11.7.27, JmolStatusListener extends JmolCallbackListener
+ *
+ * providing a simpler interface if all that is wanted is callback
+ * functionality.
+ *
+ * Only three methods are involved:
+ *
+ * boolean notifyEnabled(int type) -- lets the statusManager know if there is
+ * an implementation of a given callback type
+ *
+ * void notifyCallback(int type, Object[] data) -- callback action; data
+ * varies with callback type -- see org.jmol.viewer.StatusManager for details
+ *
+ * void setCallbackFunction(String callbackType, String callbackFunction) --
+ * called by statusManager in response to the "set callback" script command --
+ * also used by the Jmol application to change menus and languages -- can
+ * remain unimplemented if no such user action is intended
+ */
+
+ private JmolPanel jmolPanel;
+ private DisplayPanel display;
+
+ private Viewer vwr;
+ private MainFrame jSpecViewFrame;
+ private boolean jSpecViewForceNew;
+
+ private String lastSimulate;
+ JmolStatusListener userStatusListener;
+
+
+ public StatusListener(JmolPanel jmolPanel, DisplayPanel display) {
+ this(null, jmolPanel, display);
+ }
+
+ public StatusListener(Viewer vwr, JmolPanel jmolPanel, DisplayPanel display) {
+ this.vwr = (vwr == null ? jmolPanel.vwr : vwr);
+ // just required for Jmol application's particular callbacks
+ this.jmolPanel = jmolPanel;
+ this.display = display;
+ }
+
+ // / JmolCallbackListener interface ///
+ @Override
+ public boolean notifyEnabled(CBK type) {
+ if (userStatusListener != null && userStatusListener.notifyEnabled(type))
+ return true;
+ switch (type) {
+ case ATOMMOVED:
+ case LOADSTRUCT:
+ case SELECT:
+ case STRUCTUREMODIFIED:
+ case SYNC:
+ return true;
+ case ANIMFRAME:
+ case MEASURE:
+ case SERVICE:
+ case PICK:
+ case SCRIPT:
+ // enabled only for SYNC
+ case ECHO:
+ case ERROR:
+ case MESSAGE:
+ case MINIMIZATION:
+ case MODELKIT:
+ case DRAGDROP:
+ case RESIZE:
+ case CLICK:
+ case HOVER:
+ return (vwr != null && vwr.haveDisplay);
+ case APPLETREADY:
+ case AUDIO:
+ case EVAL:
+ case IMAGE:
+ // applet only (but you could change this for your listener)
+ break;
+ }
+ return false;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void notifyCallback(CBK type, Object[] data) {
+ if (vwr == null) {
+ // during initialization
+ return;
+ }
+ if (userStatusListener != null && userStatusListener.notifyEnabled(type))
+ userStatusListener.notifyCallback(type, data);
+ if (vwr.haveDisplay) {
+ jmolPanel.notifyServer(type, data);
+ }
+ String strInfo = (data == null || data[1] == null ? null
+ : data[1].toString());
+ Map<String, Object> info;
+ switch (type) {
+ case MESSAGE:
+ // deprecated
+ return;
+ case SERVICE:
+ if (display == null)
+ return;
+ info = (Map<String, Object>) data[1];
+ jmolPanel.notifyNBO(info);
+ return;
+ case LOADSTRUCT:
+ notifyFileLoaded(strInfo, (String) data[2], (String) data[3],
+ (String) data[4], (Boolean) data[8]);
+ if (jmolPanel != null)
+ jmolPanel.notifyGaussian(type, data);
+ break;
+ case ANIMFRAME:
+ int[] iData = (int[]) data[1];
+ strInfo = PT.toJSON(null, iData);
+ int modelIndex = iData[0];
+ if (modelIndex <= -2)
+ modelIndex = -2 - modelIndex; // animation is running
+ //int file = iData[1];
+ //int model = iData[2];
+ if (vwr.haveDisplay) {
+ String menuName = (String) data[2];
+ if (menuName. equals("0.0: "))
+ menuName = "";
+ jmolPanel.notifyMenu(menuName);
+ }
+ break;
+ case SCRIPT:
+ int msWalltime = ((Integer) data[3]).intValue();
+ if (msWalltime == 0) {
+ if (data[2] != null && vwr.haveDisplay) {
+ jmolPanel.setStatus(1, (String) data[2]);
+ }
+ } else if (msWalltime == -1) {
+ AppConsole console = jmolPanel.getConsole();
+ if (console != null)
+ console.checkUndoEnabled();
+ }
+ break;
+ case MODELKIT:
+ String state = (String) data[1];
+ if (state.equals("ON")) {
+ if (display.buttonModelkit != null)
+ display.buttonModelkit.setSelected(true);
+ } else {
+ if (display.buttonRotate != null)
+ display.buttonRotate.setSelected(true);
+ }
+ break;
+ case MEASURE:
+ if (jmolPanel != null)
+ switch (jmolPanel.notifyMeasure(data)) {
+ case CLICK:
+ return;
+ case PICK:
+ notifyAtomPicked(strInfo);
+ break;
+ default:
+ break;
+ }
+ break;
+ case PICK:
+ notifyAtomPicked(strInfo);
+ if (jmolPanel != null)
+ jmolPanel.notifyGaussian(type, data);
+ break;
+ case STRUCTUREMODIFIED:
+ // 0 DONE; 1 in process
+ int mode = ((Integer) data[1]).intValue();
+ int atomIndex = ((Integer) data[2]).intValue();
+ int modelIndexx = ((Integer) data[3]).intValue();
+ notifyStructureModified(atomIndex, modelIndexx, mode);
+ if (jmolPanel != null)
+ jmolPanel.notifyGaussian(type, data);
+ break;
+ case SYNC:
+ System.out.println("StatusListener sync; " + strInfo);
+ String lc = (strInfo == null ? "" : strInfo.toLowerCase());
+ if (lc.equals("getpreference")) {
+ if (jmolPanel != null)
+ jmolPanel.notifyPreferences(data);
+ return;
+ }
+ if (lc.startsWith("jspecview")) {
+ setJSpecView(strInfo.substring(9).trim(), false, false);
+ return;
+ }
+ if (strInfo != null && strInfo.toLowerCase().startsWith("nbo:")) {
+ if (jmolPanel != null)
+ jmolPanel.notifyNBO(strInfo);
+ return;
+ }
+ if (jmolPanel != null)
+ jmolPanel.sendNioSyncRequest(null, ((Integer) data[3]).intValue(),
+ strInfo);
+ return;
+ case AUDIO:
+ case IMAGE:
+ case EVAL:
+ case APPLETREADY:
+ // see above -- not implemented in Jmol.jar
+ return;
+ // passed on to listener
+ case HOVER:
+ case ATOMMOVED:
+ case DRAGDROP:
+ case RESIZE:
+ case CLICK:
+ case ERROR:
+ case ECHO:
+ case MINIMIZATION:
+ case SELECT:
+ break;
+ }
+ if (jmolPanel != null)
+ jmolPanel.notifyGeneralCallback(type, data, strInfo);
+ }
+
+
+private static final int MOD_COMPLETE = 0;
+private static final int MOD_ASSIGN_ATOM = -1;
+private static final int MOD_ASSIGN_BOND = -2;
+private static final int MOD_CONNECT_ATOM = -3;
+private static final int MOD_DELETE_ATOM = -4;
+private static final int MOD_DELETE_MODELS = -5;
+
+ /**
+ * @param atomIndex
+ * @param modelIndex
+ * @param mode
+ */
+ private void notifyStructureModified(int atomIndex, int modelIndex, int mode) {
+ // positive values are at the start, negative values are at the end of changes.
+ // only looking for ends here
+ modificationMode = mode;
+ switch (mode) {
+ case MOD_ASSIGN_ATOM:
+ case MOD_ASSIGN_BOND:
+ case MOD_CONNECT_ATOM:
+ case MOD_DELETE_ATOM:
+ case MOD_DELETE_MODELS:
+ checkJSpecView(false);
+ return;
+ }
+ }
+
+ @Override
+ public void setCallbackFunction(String callbackType, String callbackFunction) {
+ //if (callbackType.equalsIgnoreCase("menu")) {
+ //jmol.setupNewFrame(vi/ewer);
+ //return;
+ //}
+ if (callbackType.equalsIgnoreCase("language")) {
+ jmolPanel.notifyLanguage();
+ return;
+ }
+ }
+
+ // / end of JmolCallbackListener interface ///
+
+ @Override
+ public String eval(String strEval) {
+ String msg = "# this funcationality is implemented only for the applet.\n" + strEval;
+ sendConsoleMessage(msg);
+ return msg;
+ }
+
+ /**
+ *
+ * @param fileName
+ * @param type
+ * @param text_or_bytes
+ * @param quality
+ * @return null ("you do it" or canceled) or a message starting with OK or an
+ * error message
+ */
+ @Override
+ public String createImage(String fileName, String type, Object text_or_bytes,
+ int quality) {
+ return null;
+ }
+
+ private void notifyAtomPicked(String info) {
+ if (vwr.haveDisplay)
+ jmolPanel.setStatus(1, info);
+ }
+
+ private void notifyFileLoaded(String fullPathName, String fileName,
+ String modelName, String errorMsg, Boolean isAsync) {
+ if (errorMsg != null) {
+ return;
+ }
+ if (!vwr.haveDisplay)
+ return;
+//System.out.println("StatusListener notifyFileLoaded: " + fileName);
+ // this code presumes only ptLoad = -1 (error), 0 (zap), or 3 (completed)
+ String title = "Jmol";
+ if (fileName != null && fileName.startsWith("DROP_"))
+ fileName = fileName.substring(5);
+ if (modelName != null && fileName != null)
+ title = (fileName.contains("&") ? "" : fileName + " - ") + modelName;
+ else if (fileName != null)
+ title = fileName;
+ else if (modelName != null)
+ title = modelName;
+ jmolPanel.notifyFileOpen(fullPathName == null ? null : fullPathName + (isAsync == Boolean.TRUE ? " (*)" : ""), title);
+ checkJSpecView(fullPathName == null);
+ }
+
+ private int modificationMode;
+ private JSpecView jsv;
+
+ private void sendConsoleMessage(String strStatus) {
+ JmolAppConsoleInterface appConsole = (JmolAppConsoleInterface) vwr
+ .getProperty("DATA_API", "getAppConsole", null);
+ if (appConsole != null)
+ appConsole.sendConsoleMessage(strStatus);
+ }
+
+ @Override
+ public void showUrl(String url) {
+ try {
+ Class<?> c = Class.forName("java.awt.Desktop");
+ Method getDesktop = c.getMethod("getDesktop", new Class[] {});
+ Object deskTop = getDesktop.invoke(null, new Object[] {});
+ Method browse = c.getMethod("browse", new Class[] { URI.class });
+ Object arguments[] = { new URI(url) };
+ browse.invoke(deskTop, arguments);
+ } catch (Exception e) {
+ Logger.error(e.getMessage());
+ JmolAppConsoleInterface appConsole = (JmolAppConsoleInterface) vwr
+ .getProperty("DATA_API", "getAppConsole", null);
+ if (appConsole != null) {
+ appConsole
+ .sendConsoleMessage("Java 6 Desktop.browse() capability unavailable. Could not open "
+ + url);
+ } else {
+ Logger
+ .error("Java 6 Desktop.browse() capability unavailable. Could not open "
+ + url);
+ }
+ }
+ }
+
+ @Override
+ public Map<String, Object> getRegistryInfo() {
+ return null;
+ }
+
+ @Override
+ public int[] resizeInnerPanel(String data) {
+ return jmolPanel.resizeInnerPanel(data);
+ }
+
+ private void checkJSpecView(boolean closeAll) {
+ boolean isAfterChange = (modificationMode <= MOD_COMPLETE);
+ if (jsv != null && isAfterChange) {
+ jSpecViewForceNew = (jSpecViewFrame != null && jSpecViewFrame.isVisible());
+ setJSpecView(closeAll ? "none" : "", true, true);
+ jSpecViewForceNew = true;
+ }
+ }
+
+ public void setJSpecView(String peaks, boolean doLoadCheck, boolean isFileLoad) {
+ if (peaks.startsWith(":"))
+ peaks = peaks.substring(1);
+ if (peaks.equals("none") || peaks.equals("NONESimulate:")) {
+ if (jsv != null) {
+ jsv.syncScript("close ALL");
+ if (jSpecViewFrame != null)
+ jSpecViewFrame.awaken(false);
+ }
+ return;
+ }
+ boolean isC13 = peaks.equals("C13Simulate:");
+ boolean isSimulation = (peaks.equals("H1Simulate:") || isC13);
+ boolean isStartup = (peaks.length() == 0 || isSimulation);
+ boolean newSim = (isSimulation && !peaks.equals(lastSimulate));
+ String data = null;
+ if (isSimulation) {
+ data = vwr.extractMolData(null);
+ if (data == null || data.length() == 0) {
+ System.out.println("No MOL data available");
+ return;
+ }
+ }
+ if (jsv == null) {
+ jsv = new JSpecView(vwr.haveDisplay, this);
+ jsv.register("Jmol", this);
+ if (vwr.haveDisplay) {
+ jsv.setMainFrame(jSpecViewFrame = new MainFrame(jsv, vwr.getBoolean(T.jmolinjspecview) ? (Component) vwr.display : null, this));
+ jSpecViewFrame.setSize(Math.max(1000, jmolPanel.frame.getWidth() + 50), 600);
+ jSpecViewFrame.setLocation(jmolPanel.frame.getLocation().x + 10, jmolPanel.frame
+ .getLocation().y + 100);
+ } else {
+ System.out.println("No display -- continuing headless");
+ }
+ vwr.setBooleanProperty(JC.PROP_JSPECVIEW, true); // was lowercase
+ if (isStartup) {
+ doLoadCheck = true;
+ }
+ }
+ if (doLoadCheck || jSpecViewForceNew || newSim) {
+ String type = "" + vwr.getP(JC.PROP_MODEL_TYPE);
+ if (!isSimulation && type.equalsIgnoreCase("jcampdx")) {
+ jSpecViewForceNew = false;
+ String file = "" + vwr.getP("_modelFile");
+ if (file.indexOf("/") < 0)
+ return;
+ peaks = "hidden true; load APPEND CHECK " + PT.esc(file) + ";view all;select last;hidden false" + (newSim && isC13 ? ";scaleby 0.5" : "");
+ } else if (isFileLoad && !jSpecViewForceNew && !newSim) {
+ return;
+ } else {
+ jSpecViewForceNew = false;
+ if (newSim)
+ lastSimulate = peaks;
+ String model = "" + vwr.getP("_modelNumber");
+ if (data == null) {
+ peaks = "hidden false";
+ } else {
+ data = PT.replaceAllCharacters(data, "&", "_");
+ peaks = "hidden true; load APPEND CHECK " + (peaks.equals("H1Simulate:") ? "H1 " : "C13 ")
+ + PT.esc("id='~" + model + "';" + data) + ";view all;select last;hidden false #SYNC_PEAKS";
+ }
+ isStartup = false;
+ }
+ }
+
+ if (jSpecViewFrame != null && !jSpecViewFrame.isVisible()) {
+ if (peaks.contains("<PeakData"))
+ return;
+ jSpecViewFrame.awaken(true);
+ display.setViewer(vwr);
+ }
+ if (isStartup)
+ peaks = "HIDDEN false";
+ System.out.println("sending " + peaks);
+ jsv.syncScript(peaks);
+ }
+
+ @Override
+ public void register(String id, JmolSyncInterface jsi) {
+ // this would be a call from JSpecView requesting that Jmol
+ // register the JSpecView applet in the JmolAppletRegistry.
+ }
+
+ @Override
+ public void syncScript(String script) {
+ // called from JSpecView to send "Select: <Peaks...." script
+ vwr.syncScript(script, "~", 0);
+ }
+
+
+ // -- JSVInterface --
+
+ private static String propertiesFileName = "jspecview.properties";
+
+ @Override
+ public void setProperties(Properties properties) {
+ try {
+ FileInputStream fileIn = new FileInputStream(propertiesFileName);
+ properties.load(fileIn);
+ } catch (Exception e) {
+ }
+ }
+
+ @Override
+ public void saveProperties(Properties properties) {
+ // Write out current properties
+ try {
+ FileOutputStream fileOut = new FileOutputStream(propertiesFileName);
+ properties.store(fileOut, "JSpecView Application Properties");
+ } catch (Exception e) {
+ }
+ }
+
+ /**
+ * @param withDialog
+ * @param frame
+ */
+ @Override
+ public void exitJSpecView(boolean withDialog, Object frame) {
+ // no exit from Jmol
+ }
+
+ /**
+ * no queuing here -- called by MainFrame
+ *
+ * @param script
+ */
+ @Override
+ public void runScript(String script) {
+ jsv.runScriptNow(script);
+
+ }
+
+ /**
+ * @param msg
+ */
+ @Override
+ public void syncToJmol(String msg) {
+ // not utilized in Jmol application -- jmolSyncInterface used instead
+ }
+
+ public void setUserStatusListener(JmolStatusListener listener) {
+ userStatusListener = listener;
+ }
+
+ @Override
+ public Map<String, Object> getJSpecViewProperty(String type) {
+ if (type.toLowerCase().startsWith("jspecview")) {
+ type = type.substring(9);
+ if (type.startsWith(":"))
+ type = type.substring(1);
+ return (jsv == null ? null : jsv.getJSpecViewProperty(type));
+ }
+ return null;
+ }
+
+ /**
+ * this is just a test method for isosurface FUNCTIONXY
+ *
+ * @param functionName
+ * @param nX
+ * @param nY
+ * @return f(x,y) as a 2D array
+ *
+ */
+ @Override
+ public float[][] functionXY(String functionName, int nX, int nY) {
+ nX = Math.abs(nX);
+ nY = Math.abs(nY);
+ float[][] f = new float[nX][nY];
+ // boolean isSecond = (functionName.indexOf("2") >= 0);
+ for (int i = nX; --i >= 0;)
+ for (int j = nY; --j >= 0;) {
+ float x = i / 5f; // / 15f - 1;
+ float y = j / 5f; // / 15f - 1;
+ f[i][j] = /* (float) Math.sqrt */(x * x + y);
+ if (Float.isNaN(f[i][j]))
+ f[i][j] = -(float) Math.sqrt(-x * x - y);
+ // f[i][j] = (isSecond ? (float) ((i + j - nX) / (2f)) : (float) Math
+ // .sqrt(Math.abs(i * i + j * j)) / 2f);
+ // if (i < 10 && j < 10)
+ //System.out.println(" functionXY " + i + " " + j + " " + f[i][j]);
+ }
+
+ return f; // for user-defined isosurface functions (testing only -- bob
+ // hanson)
+ }
+
+ @Override
+ public float[][][] functionXYZ(String functionName, int nX, int nY, int nZ) {
+ nX = Math.abs(nX);
+ nY = Math.abs(nY);
+ nZ = Math.abs(nZ);
+ float[][][] f = new float[nX][nY][nZ];
+ for (int i = nX; --i >= 0;)
+ for (int j = nY; --j >= 0;)
+ for (int k = nZ; --k >= 0;) {
+ float x = i / ((nX - 1) / 2f) - 1;
+ float y = j / ((nY - 1) / 2f) - 1;
+ float z = k / ((nZ - 1) / 2f) - 1;
+ f[i][j][k] = x * x + y * y - z * z;//(float) x * x + y - z * z;
+ // if (i == 22 || i == 23)
+ //System.out.println(" functionXYZ " + i + " " + j + " " + k + " " +
+ // f[i][j][k]);
+ }
+ return f; // for user-defined isosurface functions (testing only -- bob
+ // hanson)
+ }
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-02-12 19:54:45
|
Revision: 22700
http://sourceforge.net/p/jmol/code/22700
Author: hansonr
Date: 2026-02-12 19:54:44 +0000 (Thu, 12 Feb 2026)
Log Message:
-----------
Added Paths:
-----------
trunk/Jmol/src/org/openscience/jmol/app/status/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-02-12 17:47:48
|
Revision: 22698
http://sourceforge.net/p/jmol/code/22698
Author: hansonr
Date: 2026-02-12 17:47:45 +0000 (Thu, 12 Feb 2026)
Log Message:
-----------
Jmol 16.3.49
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-11 04:54:52 UTC (rev 22697)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-12 17:47:45 UTC (rev 22698)
@@ -99,8 +99,10 @@
bug fix: various minor JSpecView issues
new feature: Jmol/JSpecView command-line headless interface allows creation of PNG and PDF images
- java -jar JSpecView.jar -script "load t.jdx;write PNG 1500 900 't.png'"
- java -jar Jmol.jar -script "load $tylenol; sync on; sync > 'H1SIMULATE:';write t.png"
+ java -jar JSpecView.jar -script "load c:/temp/t.jdx;write PNG 1000 600 t.png" -nodisplay
+ java -jar Jmol.jar -onJ "load $tylenol; sync on; sync > 'JSpecView:H1Simulate:';sync > 'JSpecView:write t.pdf'"
+ java -jar JmolD.jar -onJ "load $tylenol; sync on; sync > 'JSpecView:H1Simulate:';sync > 'JSpecView:write t.pdf'"
+ java -jar JmolDataD.jar -oJ "set debugscript;load $tylenol; sync on; sync > 'JSpecView:H1Simulate:';sync > 'JSpecView:write t.pdf'"
JmolVersion="16.3.47" // (legacy) also 16.3.48 (swingJS)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-02-11 04:54:54
|
Revision: 22697
http://sourceforge.net/p/jmol/code/22697
Author: hansonr
Date: 2026-02-11 04:54:52 +0000 (Wed, 11 Feb 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.50" // (swingJS) also 16.3.49 (legacy)
bug fix: script variables _modelFile and _modelType persist after ZAP
-- this was not intentional; ZAP should set both of these to ""
bug fix: Drag-drop of CUBE file does not show structure
bug fix: Drag-drop of CUBE file into blank applet should also load structure
bug fix: isosurface "" should work with CUBE file
bug fix: 2D drawing tool does not convert from 3D to 2D and
load =smiles2d/xxx and $xxx (load 2D structure from NCI/CADD) fails
-- introduced in 16.1.2
-- guaranteed 2D MOL file return
-- no longer uses
"https://cirx.chemicalcreatures.com/chemical/structure/%FILE/file?format=sdf&get3d=false"
-- instead, uses
"https://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&operator=remove_hydrogens"
-- for example:
load $$tylenol
bug fix: 2D drawing tool may start with drawing not centered
bug fix: Jmol Java JDX reader does not automatically open JSpecView if assignments are present
-- Opening a JDX file that contains atom assignments should open JSpecView automatically
provided this is the Java application or there is a synchronized JSpecView JavaScript app
bug fix: (legacy JavaScript only) JSmol does not allow multiple Jmol/JSV synced applets on a web page
-- revised JSmolCore.js (part of JSmol.min.js)
-- Jmol.setAppletSync([applets...], [scripts...], true) should be issued early, before applet construction
-- all applets to be linked must be included; start-up scripts are optional
-- Jmol/JSV pairs are based on applet order
-- for example:
Jmol.setAppletSync(["jmolApplet0", "jsvApplet0","jmolApplet2", "jsvApplet2"], [
"load data/acetophenone.jdx", "load data/acetophenone.jdx",
"load data/acetophenone.jdx", "load data/acetophenone.jdx"
], true);
-- Do not add additional script commands to the Info blocks. "sync ON" is not necessary.
-- distribution jsmol.zip example jsmol/jmoljsv2.html demonstrates this
bug fix: various minor JSpecView issues
new feature: Jmol/JSpecView command-line headless interface allows creation of PNG and PDF images
java -jar JSpecView.jar -script "load t.jdx;write PNG 1500 900 't.png'"
java -jar Jmol.jar -script "load $tylenol; sync on; sync > 'H1SIMULATE:';write t.png"
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-01 00:34:16 UTC (rev 22696)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-11 04:54:52 UTC (rev 22697)
@@ -55,6 +55,9 @@
Jmol.___JmolVersion="16.3.49" // (legacy) also 16.3.50 (swingJS)
+bug fix: script variables _modelFile and _modelType persist after ZAP
+ -- this was not intentional; ZAP should set both of these to ""
+
bug fix: Drag-drop of CUBE file does not show structure
bug fix: Drag-drop of CUBE file into blank applet should also load structure
@@ -61,7 +64,45 @@
bug fix: isosurface "" should work with CUBE file
+bug fix: 2D drawing tool does not convert from 3D to 2D and
+ load =smiles2d/xxx and $xxx (load 2D structure from NCI/CADD) fails
+ -- introduced in 16.1.2
+ -- guaranteed 2D MOL file return
+ -- no longer uses
+ "https://cirx.chemicalcreatures.com/chemical/structure/%FILE/file?format=sdf&get3d=false"
+ -- instead, uses
+ "https://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&operator=remove_hydrogens"
+ -- for example:
+ load $$tylenol
+bug fix: 2D drawing tool may start with drawing not centered
+
+bug fix: Jmol Java JDX reader does not automatically open JSpecView if assignments are present
+ -- Opening a JDX file that contains atom assignments should open JSpecView automatically
+ provided this is the Java application or there is a synchronized JSpecView JavaScript app
+
+bug fix: (legacy JavaScript only) JSmol does not allow multiple Jmol/JSV synced applets on a web page
+ -- revised JSmolCore.js (part of JSmol.min.js)
+ -- Jmol.setAppletSync([applets...], [scripts...], true) should be issued early, before applet construction
+ -- all applets to be linked must be included; start-up scripts are optional
+ -- Jmol/JSV pairs are based on applet order
+ -- for example:
+
+ Jmol.setAppletSync(["jmolApplet0", "jsvApplet0","jmolApplet2", "jsvApplet2"], [
+ "load data/acetophenone.jdx", "load data/acetophenone.jdx",
+ "load data/acetophenone.jdx", "load data/acetophenone.jdx"
+ ], true);
+
+ -- Do not add additional script commands to the Info blocks. "sync ON" is not necessary.
+ -- distribution jsmol.zip example jsmol/jmoljsv2.html demonstrates this
+
+bug fix: various minor JSpecView issues
+
+new feature: Jmol/JSpecView command-line headless interface allows creation of PNG and PDF images
+ java -jar JSpecView.jar -script "load t.jdx;write PNG 1500 900 't.png'"
+ java -jar Jmol.jar -script "load $tylenol; sync on; sync > 'H1SIMULATE:';write t.png"
+
+
JmolVersion="16.3.47" // (legacy) also 16.3.48 (swingJS)
bug fix: incommensurately modulated magnetic CIF file loading fails (thanks Gotzon Madariaga)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-02-01 00:34:19
|
Revision: 22696
http://sourceforge.net/p/jmol/code/22696
Author: hansonr
Date: 2026-02-01 00:34:16 +0000 (Sun, 01 Feb 2026)
Log Message:
-----------
16.3.49 prerelease
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-01-28 15:30:13 UTC (rev 22695)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-02-01 00:34:16 UTC (rev 22696)
@@ -53,8 +53,17 @@
# FEATURE REQUEST: dock/undock consoles to main window.
# TODO: allow FIXED to work with MODELKIT MINIMIZE
-Jmol.___JmolVersion="16.3.47" // (legacy) also 16.3.48 (swingJS)
+Jmol.___JmolVersion="16.3.49" // (legacy) also 16.3.50 (swingJS)
+bug fix: Drag-drop of CUBE file does not show structure
+
+bug fix: Drag-drop of CUBE file into blank applet should also load structure
+
+bug fix: isosurface "" should work with CUBE file
+
+
+JmolVersion="16.3.47" // (legacy) also 16.3.48 (swingJS)
+
bug fix: incommensurately modulated magnetic CIF file loading fails (thanks Gotzon Madariaga)
bug fix: print format("%7.5f ...", 1.0, ...) broken in 16.2.28 (thanks Gotzon Madariaga and Eric Martz)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-01-28 15:30:18
|
Revision: 22695
http://sourceforge.net/p/jmol/code/22695
Author: hansonr
Date: 2026-01-28 15:30:13 +0000 (Wed, 28 Jan 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.47" // (legacy) also 16.3.48 (swingJS)
bug fix: incommensurately modulated magnetic CIF file loading fails (thanks Gotzon Madariaga)
bug fix: print format("%7.5f ...", 1.0, ...) broken in 16.2.28 (thanks Gotzon Madariaga and Eric Martz)
bug fix: operation involving initial translation and both x and y loses translation
-- for example, "2/3-x-y,y,z" (thank you Dean Johnston)
bug fix: print x.format("json") fails when x is a matrix
new feature: set occupancyThreashold
-- sets the threashold for occupancy to display the atoms
-- occupancy below this value will not be displayed,
(but will still generate a halo using SELECT ON)
-- a percentage 0-100; default 50
-- particularly useful for incommensurately modulated occupation
using MODULATION ON; VIBRATION ON (thanks for idea go to Gotzon Madariaga)
new feature: matrix3x3.rxyz
-- rational xyz format extended to 3x3 matrices
-- example:
print matrix("u,-v,w").rxyz
(
1 0 0
0 -1 0
0 0 1
)
new feature: x = matrix("u,-v,w")
-- returns 3x3 matrix
-- add {0 0 0} to give 4x4
new feature: MODELKIT FILL unitcell packing
-- fills (packs) the given unit cell with atoms
-- optional packing fraction to extend packing beyond unit cell faces
-- avoids the need for LOAD "" packed or LOAD "" fill
-- does not change the space group or unit cell
-- bonding is not generated
-- only asymmetric unit atoms are required
-- unitcell can be any one of:
- Pp format "a,b,c;3/4,1/4,1/4"
- an integer lattice offset {1 0 0}, including {0 0 0}
- a non-integer lattice offset {1 0.5 0}
- a known unitcell from the file such as "unitcell_L0"
- any [origin va vb vc]
-- default unitcell is {0 0 0} (same as "a,b,c")
-- example:
load =ams/quartz 1
modelkit fill "3a,3b,c;-1,-1,0"
connect auto
new feature: spin space group split frame displays picked symop in both frames
-- with DRAW SYMOP @1 @2 or with SET PICKING SYMOP
-- example:
sdir = "https://raw.githubusercontent.com/COMCIFS/spinCIF/refs/heads/main/test/scif/"
load @{sdir + "3.6_DyCu.scif"}
modelkit fill
plot spin split
draw symop @6 @7
new feature: matrix3x3.rxyz
-- rational xyz format extended to 3x3 matrices
-- example:
print matrix("u,-v,w").rxyz
Modified Paths:
--------------
trunk/Jmol/appletweb/jsmol.zip
trunk/Jmol/src/org/jmol/script/T.java
trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
trunk/Jmol/src/org/jmol/viewer/ShapeManager.java
trunk/Jmol/src/org/jmol/viewer/Viewer.java
trunk/Jmol/src/org/openscience/jmol/app/janocchio/Nmr.java
trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java
Modified: trunk/Jmol/appletweb/jsmol.zip
===================================================================
(Binary files differ)
Modified: trunk/Jmol/src/org/jmol/script/T.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/T.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/jmol/script/T.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -960,7 +960,7 @@
public final static int phongexponent = intparam | 28;
public final static int pickingspinrate = intparam | 29;
public final static int platformspeed = intparam | 30;
- public final static int occupancythreashold = intparam | 31;
+ public final static int occupancythreshold = intparam | 31;
public final static int propertyatomnumberfield = intparam | 32;
public final static int propertyatomnumbercolumncount = intparam | 33;
public final static int propertydatacolumncount = intparam | 34;
@@ -2695,7 +2695,7 @@
"multiProcessor",
"navigationMode",
"navigationPeriodic",
- "occupancythreashold",
+ "occupancythreshold",
"partialDots",
"pdbAddHydrogens",
"pdbGetHeader",
@@ -3782,7 +3782,7 @@
multiprocessor, // "multiProcessor"
navigationmode, // "navigationMode"
navigationperiodic, // "navigationPeriodic"
- occupancythreashold, // "occupancyThreashold"
+ occupancythreshold, // "occupancyThreshold"
partialdots, // "partialDots
pdbaddhydrogens, // "pdbAddHydrogens"
pdbgetheader, // "pdbGetHeader"
Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -71,7 +71,6 @@
import org.jmol.util.Parser;
import org.jmol.util.Point3fi;
import org.jmol.util.SimpleUnitCell;
-import org.jmol.util.Vibration;
import org.jmol.viewer.FileManager;
import org.jmol.viewer.JC;
import org.jmol.viewer.ShapeManager;
Modified: trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -340,6 +340,7 @@
setB("noDelay", noDelay);
setO("nmrPredictFormat", nmrPredictFormat);
setO("nmrUrlFormat", nmrUrlFormat);
+ setI("occupancyThreshold", occupancyThreshold);
setB("partialDots", partialDots);
setB("pdbAddHydrogens", pdbAddHydrogens); // new 12.1.51
setB("pdbGetHeader", pdbGetHeader); // new 11.5.39
@@ -559,7 +560,7 @@
//atoms and bonds
- int occupancyThreashold = 50;
+ int occupancyThreshold = 50;
boolean partialDots = false;
boolean bondModeOr = false;
boolean hbondsBackbone = false;
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-01-28 15:30:13 UTC (rev 22695)
@@ -64,8 +64,8 @@
bug fix: print x.format("json") fails when x is a matrix
-new feature: set occupancyThreashold
- -- sets the threashold for occupancy to display the atoms
+new feature: set occupancyThreshold
+ -- sets the threshold for occupancy to display the atoms
-- occupancy below this value will not be displayed,
(but will still generate a halo using SELECT ON)
-- a percentage 0-100; default 50
Modified: trunk/Jmol/src/org/jmol/viewer/ShapeManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/ShapeManager.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/jmol/viewer/ShapeManager.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -477,7 +477,7 @@
boolean checkOccupancy = (ms.bsModulated != null && ms.occupancies != null);
Atom[] atoms = ms.at;
int occ;
- int occMax = vwr.getInt(T.occupancythreashold);
+ int occMax = vwr.getInt(T.occupancythreshold);
boolean haveMods = false;
BS bsSlabbed = bsSlabbedInternal;
bsSlabbed.clearAll();
Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -5898,8 +5898,8 @@
@Override
public int getInt(int tok) {
switch (tok) {
- case T.occupancythreashold:
- return g.occupancyThreashold;
+ case T.occupancythreshold:
+ return g.occupancyThreshold;
case T.animationfps:
return am.animationFps;
case T.dotdensity:
@@ -6763,9 +6763,9 @@
public void setIntPropertyTok(String key, int tok, int value) {
switch (tok) {
- case T.occupancythreashold:
+ case T.occupancythreshold:
// 16.3.47/48
- g.occupancyThreashold = value;
+ g.occupancyThreshold = value;
break;
case T.minimizationreportsteps:
// 16.1.15 and 16.1.16
Modified: trunk/Jmol/src/org/openscience/jmol/app/janocchio/Nmr.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/janocchio/Nmr.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/openscience/jmol/app/janocchio/Nmr.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -109,7 +109,7 @@
startViewer(nmrPanel.vwr, splash, false);
- if (haveConsole)
+ if (haveJavaConsole)
nmrPanel.getJavaConsole();
nmrPanel.vwr.script("set measureAllmodels ON;font measurements 18; font labels 18;measure '2:%1.1VALUE %UNITS//hz'");
Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java
===================================================================
--- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2026-01-28 03:36:01 UTC (rev 22694)
+++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2026-01-28 15:30:13 UTC (rev 22695)
@@ -531,7 +531,7 @@
}
public void getJavaConsole() {
- if (!jmolApp.haveConsole || !allowJavaConsole)
+ if (!jmolApp.haveJavaConsole || !allowJavaConsole)
return;
// Adding console frame to grab System.out & System.err
consoleframe = new JFrame(GT.$("Jmol Java Console"));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-01-11 23:33:35
|
Revision: 22693
http://sourceforge.net/p/jmol/code/22693
Author: hansonr
Date: 2026-01-11 23:33:32 +0000 (Sun, 11 Jan 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.45" // (legacy) also 16.3.46 (swingJS)
new feature: UNITCELL unitcell_xxx
-- quotes are optional
-- key prefix "unitcell_"
-- case insensitive
-- use print _M.keys to discover valid file-based unit cells.
-- for example:
$ sdir = "https://raw.githubusercontent.com/COMCIFS/spinCIF/refs/heads/main/test/scif/";
$ load @{sdir + "3.6_DyCu.scif"} {2 2 2};
$ vector max 3.0;
$ draw u0 unitcell axes
$ unitcell unitcell_L0
$ display within(0.1, unitcell)
new feature: x = unitcell("unitcell_xxx")
-- key prefix "unitcell_"
-- similar to unitcell("a,2b,c;1/2,0,0")
-- accesses the currently loaded model file auxiliary data (_M) map.
-- use print _M.keys to discover valid file-based unit cells.
-- returns [origin vx vy vz].
-- case insensitive
-- for example, for spin space group:
x = unitcell("unitcell_L0")
-- can be used as unitcell("unitcell_xxx", true)
to return the transform matrix instead
new feature: x = unitcell(...., true)
-- generalized form returning a transform matrix rather than [origin va vb vc]
-- return is relative to the current unit cell
-- for example:
$ sdir = "https://raw.githubusercontent.com/COMCIFS/spinCIF/refs/heads/main/test/scif/";
$ load @{sdir + "3.6_DyCu.scif"} packed;
$ vector max 3.0;
$ draw u0 unitcell axes
$ print unitcell("unitcell_L0", true).rxyz;
(
1 0 0 | 3/4
0 1 0 | 3/4
0 0 1 | 1/4
)
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-01-03 23:27:22 UTC (rev 22692)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-01-11 23:33:32 UTC (rev 22693)
@@ -98,7 +98,7 @@
0 1 0 | 3/4
0 0 1 | 1/4
)
-
+
JmolVersion="16.3.43" // (legacy) also 16.3.44 (swingJS)
new feature: load filename FILL "UNITCELL_xxx"
@@ -1700,7 +1700,7 @@
bug fix: MO and ISOSURFACE generation after atom deletion not saved properly in the state
-- after atom deletion, components of MO or ISOSURFACE may be different,
- but the state generates the deletion AFTER the MO and ISOSURGACE commands are processed
+ but the state generates the deletion AFTER the MO and ISOSURFACE commands are processed
-- this fix introduces the deletion at the time of the MO or ISOSURFACE generation into
the MO or ISOSURFACE command.
-- scripts created with future versions will generate correct isosurfaces when executed in previous versions
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ahe...@us...> - 2026-01-02 12:41:58
|
Revision: 22691
http://sourceforge.net/p/jmol/code/22691
Author: aherraez
Date: 2026-01-02 12:41:56 +0000 (Fri, 02 Jan 2026)
Log Message:
-----------
update splash image to (c) 2026
Modified Paths:
--------------
trunk/Jmol/src/org/openscience/jmol/app/images/Jmol_splash.jpg
trunk/Jmol/src/org/openscience/jmol/app/images/Jmol_splash_double.png
Modified: trunk/Jmol/src/org/openscience/jmol/app/images/Jmol_splash.jpg
===================================================================
(Binary files differ)
Modified: trunk/Jmol/src/org/openscience/jmol/app/images/Jmol_splash_double.png
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2026-01-01 02:53:57
|
Revision: 22690
http://sourceforge.net/p/jmol/code/22690
Author: hansonr
Date: 2026-01-01 02:53:55 +0000 (Thu, 01 Jan 2026)
Log Message:
-----------
Jmol.___JmolVersion="16.3.43" // (legacy) also 16.3.44 (swingJS)
new feature: load filename FILL "UNITCELL_xxx"
-- key prefix "unitcell_" (case insensitive)
-- quotes are necessary
-- loads the filename (or "") using the unit cell information
included in the file itself. (as found in the model auxiliary
information _M as a key (lowercase) unitcell_xxx
new feature: (spin space groups) LOAD FILL "unitcell_x"
-- where x is L0, G0, magneticPrimitive, input
-- only preliminary tags at this point
new feature: MODELKIT SPACEGROUP >a,2b,c>
-- transform only, makes no attempt to change space group
-- works even for non-ITA groups, suchs as spin space groups
-- optional PACKED keyword
new feature: x = getProperty("cifinfo",cifdata)
-- adds CIF file data option
-- converts CIF data from a CIF file to map data
new feature: draw uc unitcell "1/2a,b,c" color white
-- draw a given unit cell
-- default ID is "uc"
-- default width is 3 pixels
-- default color is yellow
new feature: draw uc unitcell "1/2a,b,c" axes
-- draw a given unit cell, adding axis lines in red, green, and blue
-- default ID is "uc"
-- width for axes is slightly larger tha axes for clarity
-- default color is yellow
new feature: x = matrix("62.1>>62.5"), matrix("Pnma>>Pmcn")
-- returns Pp_abc transform for one setting to another
-- by ITA setting index or Hermann-Mauguin name
new feature: x = matrix("-b,-a,-c",TRUE)
-- normalizes to have center of the transformed unit cell
within the bounds of the abc unit cell
new feature: x = point([1 2 3])
-- point {1 2 3} from array [1 2 3]
new feature: DRAW DIAMETER n WIDTH x.x VECTOR ...
-- VECTOR with both DIAMETER int and WIDTH float
-- arrow head for vector is given the length of n * x.x
-- default (just WIDTH) is (unfortunately) just 0.5 A regardless of width
-- overrides defaultDrawArrowScale setting
new feature: select within(vxyz, @1)
-- selects the set of atoms with approximately the same spin as @1
-- matches vxyz within 0.01 precision
new feature: x = within("vxyz", @1)
-- returns set of atoms with approximately the same spin as @1
-- matches vxyz within 0.01 precision
new feature: select within(packing, unitcell)
-- selects the set of atoms within a fractional packing distance of the unit cell boundaries
-- negative value is that distance within the unit cell in all directions
new feature: x = within(packing, "unitcell")
-- returns the set of atoms within a fractional packing distance of 0.1 of the unit cell boundaries
-- negative value is that distance within the unit cell in all directions
new feature: x = within(packing, "unitcell", scale)
-- returns the set of atoms within a fractional packing distance of 0.1 of the unit cell boundaries
-- negative value is that distance within the unit cell in all directions
-- scales the unit cell by the given amount
new feature: x = within(packing, "unitcell", <unit cell description>)
-- where <unit cell description> is any value
-- negative value is that distance within the unit cell in all directions
-- for example:
new feature: x = within(packing, "unitcell", <unit cell description>, scale)
-- where <unit cell description> is any value
-- negative value is that distance within the unit cell in all directions
-- scales the unit cell by the given amount
new feature: x = unitcell("volume")
-- reports the current unit cell volume
-- also "a", "b", "c", "alpha", "beta", "gamma", "dim", "dimtype"
-- where "dim" reports 1, 2, or 3
-- and "dimtype" reports a number from 1 to 7 indicating
the periodic directions as three bits, cba
so 7 is abc periodic (space), 3 is ab periodic (plane or layer),
1 is periodic only along a (line or frieze)
new feature: x = unitcell(...,"info")
-- also just unitcell("info") for current model's unit cell
-- adding "info" as the final parameter for a unitcell() function
-- returns a map with keys:
isHexagonal
isRhombohedral
matCtoF
matFtoC
oabc
params
volume
where
matCtoF is the Cartesian-to-fractional matrix transform
matFtoC is the fractional-to-Cartesian matrix transform
oabc is the four-point array: [orgin, a, b, c]
params is a 15-element array that includes:
a,b,c,alpha,beta,gamma, // 1-6
va,vb,vc // 7-15
new feature: MODELKIT ... PACKED 0.x
-- MODELKIT ... PACKED ... commands can be followed by a range
-- extends this fraction beyond the unit cell edge
-- for example:
MODELKIT PACKED 0.1
MODELKIT UNITCELL PACKED 0.1 (same as MODELKIT PACKED 0.1)
MODELKIT UNITCELL {1 0 0} PACKED 0.1
MODELKIT ADD N {1/3 1/4 1/5} PACKED 0.2
bug fix: DRAW ... VECTOR
-- default width is 0.1 Angstroms (was 0.05 in 16.3.9/10)
bug fix: x = matrix("1/2a,1/b,c-0.12234","abc") fails
-- negative decimal fraction loses "-" sign
bug fix: render can sometimes flash lines when motion while calculations are being done
-- problem was with non-thread-safe rendering code for temp variables in TransformManager.java
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2025-12-13 18:45:26 UTC (rev 22689)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2026-01-01 02:53:55 UTC (rev 22690)
@@ -53,8 +53,140 @@
# FEATURE REQUEST: dock/undock consoles to main window.
# TODO: allow FIXED to work with MODELKIT MINIMIZE
-Jmol.___JmolVersion="16.3.41" // (legacy) also 16.3.42 (swingJS)
+Jmol.___JmolVersion="16.3.43" // (legacy) also 16.3.44 (swingJS)
+new feature: load filename FILL "UNITCELL_xxx"
+ -- key prefix "unitcell_" (case insensitive)
+ -- quotes are necessary
+ -- loads the filename (or "") using the unit cell information
+ included in the file itself. (as found in the model auxiliary
+ information _M as a key (lowercase) unitcell_xxx
+
+new feature: (spin space groups) LOAD FILL "unitcell_x"
+ -- where x is L0, G0, magneticPrimitive, input
+ -- only preliminary tags at this point
+
+new feature: MODELKIT SPACEGROUP >a,2b,c>
+ -- transform only, makes no attempt to change space group
+ -- works even for non-ITA groups, suchs as spin space groups
+ -- optional PACKED keyword
+
+new feature: x = getProperty("cifinfo",cifdata)
+ -- adds CIF file data option
+ -- converts CIF data from a CIF file to map data
+
+new feature: draw uc unitcell "1/2a,b,c" color white
+ -- draw a given unit cell
+ -- default ID is "uc"
+ -- default width is 3 pixels
+ -- default color is yellow
+
+new feature: draw uc unitcell "1/2a,b,c" axes
+ -- draw a given unit cell, adding axis lines in red, green, and blue
+ -- default ID is "uc"
+ -- width for axes is slightly larger tha axes for clarity
+ -- default color is yellow
+
+new feature: x = matrix("62.1>>62.5"), matrix("Pnma>>Pmcn")
+ -- returns Pp_abc transform for one setting to another
+ -- by ITA setting index or Hermann-Mauguin name
+
+new feature: x = matrix("-b,-a,-c",TRUE)
+ -- normalizes to have center of the transformed unit cell
+ within the bounds of the abc unit cell
+
+new feature: x = point([1 2 3])
+ -- point {1 2 3} from array [1 2 3]
+
+new feature: DRAW DIAMETER n WIDTH x.x VECTOR ...
+ -- VECTOR with both DIAMETER int and WIDTH float
+ -- arrow head for vector is given the length of n * x.x
+ -- default (just WIDTH) is (unfortunately) just 0.5 A regardless of width
+ -- overrides defaultDrawArrowScale setting
+
+new feature: select within(vxyz, @1)
+ -- selects the set of atoms with approximately the same spin as @1
+ -- matches vxyz within 0.01 precision
+
+new feature: x = within("vxyz", @1)
+ -- returns set of atoms with approximately the same spin as @1
+ -- matches vxyz within 0.01 precision
+
+new feature: select within(packing, unitcell)
+ -- selects the set of atoms within a fractional packing distance of the unit cell boundaries
+ -- negative value is that distance within the unit cell in all directions
+
+new feature: x = within(packing, "unitcell")
+ -- returns the set of atoms within a fractional packing distance of 0.1 of the unit cell boundaries
+ -- negative value is that distance within the unit cell in all directions
+
+new feature: x = within(packing, "unitcell", scale)
+ -- returns the set of atoms within a fractional packing distance of 0.1 of the unit cell boundaries
+ -- negative value is that distance within the unit cell in all directions
+ -- scales the unit cell by the given amount
+
+new feature: x = within(packing, "unitcell", <unit cell description>)
+ -- where <unit cell description> is any value
+ -- negative value is that distance within the unit cell in all directions
+ -- for example:
+
+new feature: x = within(packing, "unitcell", <unit cell description>, scale)
+ -- where <unit cell description> is any value
+ -- negative value is that distance within the unit cell in all directions
+ -- scales the unit cell by the given amount
+
+new feature: x = unitcell("volume")
+ -- reports the current unit cell volume
+ -- also "a", "b", "c", "alpha", "beta", "gamma", "dim", "dimtype"
+ -- where "dim" reports 1, 2, or 3
+ -- and "dimtype" reports a number from 1 to 7 indicating
+ the periodic directions as three bits, cba
+ so 7 is abc periodic (space), 3 is ab periodic (plane or layer),
+ 1 is periodic only along a (line or frieze)
+
+new feature: x = unitcell(...,"info")
+ -- also just unitcell("info") for current model's unit cell
+ -- adding "info" as the final parameter for a unitcell() function
+ -- returns a map with keys:
+
+ isHexagonal
+ isRhombohedral
+ matCtoF
+ matFtoC
+ oabc
+ params
+ volume
+
+ where
+
+ matCtoF is the Cartesian-to-fractional matrix transform
+ matFtoC is the fractional-to-Cartesian matrix transform
+ oabc is the four-point array: [orgin, a, b, c]
+ params is a 15-element array that includes:
+ a,b,c,alpha,beta,gamma, // 1-6
+ va,vb,vc // 7-15
+
+new feature: MODELKIT ... PACKED 0.x
+ -- MODELKIT ... PACKED ... commands can be followed by a range
+ -- extends this fraction beyond the unit cell edge
+ -- for example:
+ MODELKIT PACKED 0.1
+ MODELKIT UNITCELL PACKED 0.1 (same as MODELKIT PACKED 0.1)
+ MODELKIT UNITCELL {1 0 0} PACKED 0.1
+ MODELKIT ADD N {1/3 1/4 1/5} PACKED 0.2
+
+bug fix: DRAW ... VECTOR
+ -- default width is 0.1 Angstroms (was 0.05 in 16.3.9/10)
+
+bug fix: x = matrix("1/2a,1/b,c-0.12234","abc") fails
+ -- negative decimal fraction loses "-" sign
+
+bug fix: render can sometimes flash lines when motion while calculations are being done
+ -- problem was with non-thread-safe rendering code for temp variables in TransformManager.java
+
+
+JmolVersion="16.3.41" // (legacy) also 16.3.42 (swingJS)
+
new feature: spinCIF and FINDSPINGROUP output readers
-- work in collaboration with Bilbao Crystallographic Server (Bilbao, Spain)
and Southern University of Science and Technology (Shenzhen, China)
@@ -62,7 +194,7 @@
new feature: plot SPIN
-- displays the vectors of a magCIF or spinCIF file
- within a unit circle as a point group object
+ within a unit sphere as a point group object
new feature: plot SPIN POINTGROUP
-- displays the point group of the spin group
@@ -71,7 +203,7 @@
new feature: FRAME 1.1 1.2 SPLIT
-- places two specified models side-by-side in a "split-frame" configuration
- -- synchonizes rotation, as normal for frames
+ -- synchronizes rotation, as normal for frames
-- JmolDataFrames (PLOT and QUATERNION commands) do not zoom or translate, only rotate
-- allows echo in either frame using ECHO ID ... MODEL ... to associate the
text with its respective model
@@ -85,7 +217,7 @@
frame 1.1 2.1 split
(quaternion difference is a calculation of 4-dimensional helical "straightness"
- that has a direct correspondance with Ramachandron values.)
+ that has a direct correspondence with Ramachandron values.)
Rotating the quaternion unit sphere (on the right) until a cluster
is in front provides the view down the associated helix or beta pleated sheet
(on the left). The tighter the cluster, the more "straight" the helix is.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ha...@us...> - 2025-12-13 17:31:27
|
Revision: 22688
http://sourceforge.net/p/jmol/code/22688
Author: hansonr
Date: 2025-12-13 17:31:25 +0000 (Sat, 13 Dec 2025)
Log Message:
-----------
Modified Paths:
--------------
trunk/Jmol/src/org/jmol/viewer/Jmol.properties
Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2025-12-03 22:36:47 UTC (rev 22687)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2025-12-13 17:31:25 UTC (rev 22688)
@@ -55,6 +55,11 @@
Jmol.___JmolVersion="16.3.41" // (legacy) also 16.3.42 (swingJS)
+new feature: spinCIF and FINDSPINGROUP output readers
+ -- work in collaboration with Bilbao Crystallographic Server (Bilbao, Spain)
+ and Southern University of Science and Technology (Shenzhen, China)
+ -- see https://app.findspingroup.com
+
new feature: plot SPIN
-- displays the vectors of a magCIF or spinCIF file
within a unit circle as a point group object
@@ -67,11 +72,11 @@
new feature: FRAME 1.1 1.2 SPLIT
-- places two specified models side-by-side in a "split-frame" configuration
-- synchonizes rotation, as normal for frames
+ -- JmolDataFrames (PLOT and QUATERNION commands) do not zoom or translate, only rotate
-- allows echo in either frame using ECHO ID ... MODEL ... to associate the
- respective model
- -- allows hover and clicking only on the left-hand (first-specified) model
+ text with its respective model
-- allows viewing of a PLOT result along with a model:
-
+ -- allows hover and clicking on both models
load =1crn
cartoons only
@@ -96,10 +101,22 @@
load $caffeine; load append ""
stereo on
frame 1.1 2.1 SPLIT
-
+
+new feature: symop(matrix3f, "uvw")
+ -- returns the u,v,w form of a 3x3 matrix
+
+new feature: symop(matrix3f, "rxyz")
+ -- returns the rational form of a 3x3 matrix (1/2, 1/3, etc.)
+
+new feature: arrayOfPoints.length()
+ -- with () creates an array of lengths
+ -- useful in comparing vxyz vibration/magnetic moment magnetudes
+
bug fix: deleting last quaternion data frame for a model disallows any addition data frames
+bug fix: polyhedron command not working with points properly
+
JmolVersion="16.3.39" // (legacy) also 16.3.40 (swingJS)
bug fix: unitcell([10,20,30,90,90,90]) fails
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|