var xxx = ....

is local to whatever script contains it.

xxx = ....

is global.

On Mon, Sep 27, 2010 at 9:56 AM, Otis Rothenberger <osrothen@chemagic.com> wrote:
 Bob,

I'm having problems with save/restore state with models that originated
with a load inline. The state script needs the original load string.

I've been operating on the assumption that if my original onload script
for the applet contains a var mod1 = "", then mod1 is global. If I do a
load @mod1 with mod1 containing coordinate data, then a subsequent state
save does, indeed, produce a script that indicates a need for mod1,
@mod1 actually. If I haven't messed with mod1, shouldn't this still be
around for a subsequent restore? I keep getting a can't find string data
error on the restore.


it's supposed to switch to load DATA in that case,  I think, and explicitly show the data.
 
I've always been a bit confused about the role of "var" and Jmol Script
globals. I use the above approach (initial declaration) to maintain
variable  continuity between JavaScript functions, but this in not
working on state restore. As an example of mod1 acting globally, the
following duplication of a model works:

function dupMod() {
    if (moData) {return; }
    var modTxt = "echo Copying model data...;mod1 = '" +
jmolGetPropertyAsString("extractModel", "all") + "'";
    jmolScript(modTxt); setTimeout("dupMod2()", 1000);
}


right -- mod1 is global.

Easier, probably to use:

var modTxt = "echo Copying model data...;mod1 = getProperty('extractModel', 'all');echo;"
 
Also, I'm not seeing the point of the 1-second timeout for that dupMod2() business, but if you are planning to do that, I would use jmolScriptWait, not jmolScript. Then you know it's been executed.



function dupMod2() {
    var modelTxt = "" + jmolGetPropertyAsString("extractModel", "all")
+ "";
    var scpt = "var i = {*}.atomIndex.max + 1;var t =
{*}.atomIndex.min;select within(branch, {atomIndex = i},
{atomIndex=t});var x = {selected}.size;var y={*}.size;var z = y - x;";
    scpt += "if (y > 40 || z != 0){echo This feature is limited to a
single model with|less than 40 atoms.;delay 3;echo;}";
    scpt += "else{var sz = 3;if (y > 4){sz = 4};if (y > 10){sz = 5};if
(y > 30){sz = 7};set appendNew false;";
    scpt += "select *;translateSelected {@sz @sz 0};load APPEND '@mod1';";
    scpt += "mod1='';hover off;}";
    mepsData = false;
    jmolScript(scpt);
    doUFF(1);
    setTimeout("lnkSwitch()", 1000);
}

Any suggestions?


OK, I need to unpack that:
I like the Javscript \ end-of-line continuator here...
 

function dupMod2() {
        var modelTxt = "" + jmolGetPropertyAsString("extractModel", "all");
        var scpt = "\
        var i = {*}.atomIndex.max + 1;\
        var t = {*}.atomIndex.min;\
        select within(branch, {atomIndex = i}, {atomIndex=t});\
        var x = {selected}.size;\
        var y={*}.size;\
        var z = y - x;\
        if (y > 40 || z != 0){\
            echo This feature is limited to a single model with|fewer than 40 atoms.;\
            delay 3;echo;\
        } else{\
            var sz = 3;\
            if (y > 4){sz = 4};\
            if (y > 10){sz = 5};\
            if (y > 30){sz = 7};\
            set appendNew false;\
              select *;translateSelected {@sz @sz 0};\
            load APPEND '@mod1';\
            reset mod1;\
            hover off;\
        }";
        mepsData = false;
        jmolScript(scpt);
        doUFF(1);
        setTimeout("lnkSwitch()", 1000);
}
 

OK, there's a bug in saving the state from

load APPEND '@x'

load '@x' works just fine, but not with the append. OK. Jmol bug.
Otis

--
Otis Rothenberger
chemagic.com




------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Jmol-users mailing list
Jmol-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-users



--
Robert M. Hanson
Professor of Chemistry
St. Olaf College
1520 St. Olaf Ave.
Northfield, MN 55057
http://www.stolaf.edu/people/hansonr
phone: 507-786-3107


If nature does not answer first what we want,
it is better to take what answer we get.

-- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900