From: Alex Richards (boyilovecollege_at_pacific.net)
Date: Tue Jun 18 2013 - 15:31:54 CDT

Josh,

That is exactly what I was looking for! Except... it doesn't quite seem
to be working for me. Here's my process. In VMD TkConsole, enter

set ilist [list ]
proc add_to_list {args} {lappend ::ilist $::vmd_pick_atom ; puts
$::vmd_pick_atom}
trace add variable vmd_pick_event write add_to_list

Then I take the mouse, enter Query Mode (although I believe any
left-clicking counts as picking...), pick atoms, at which point I can
see the feedback in the Terminal, but nothing in TkConsole where I would
expect to see the output of that puts command. Then, in TkConsole, if I
enter

puts $ilist

it just returns an empty list.

Noting the syntax highlighting in the TkConsole, I see that
[::]vmd_pick_atom and [::]vmd_pick_event do not become highlighted as
though they were variable names, which I think I would expect them to
be. From everything I've read on callbacks, trace, proc, global, upvar,
etc., I see no reason why your code wouldn't work except for perhaps not
being able to access the global variables vmd_pick_atom and ilist, but I
would think the :: would take care of that. At any rate, I've used all
the combinations of:: andglobal that I can think of, but nothing seems
to be taking.

Also, the output of

trace info variable vmd_pick_event

is

{write add_to_list}

like I would expect.

Any ideas?

Thank You,
A- R-

On 06/17/2013 05:37 PM, Josh Vermaas wrote:
> Hi Alex,
>
> I think you'll be interested in the TCL callbacks
> (http://www.ks.uiuc.edu/Research/vmd/current/ug/node156.html). You'll be
> wanting to do something like this in the tkCon window (or in your
> startup script):
>
> #Make an empty list
> set ilist [list ]
> #Define a new proc to add new indices to the list.
> proc add_to_list {args} {
> lappend ::ilist $::vmd_pick_atom
> puts $::vmd_pick_atom
> }
> #Add a trace so that the proc is called whenever an atom is picked
> trace add variable vmd_pick_event write add_to_list
>
> After picking a few atoms, you should see that $ilist now contains the
> indices of the selected atoms.
>
> Happy Picking!
> -Josh Vermaas
>
> On 06/17/2013 04:32 PM, Alex Richards wrote:
>> Hi All,
>>
>> I see that I can "pick" an atom in the OpenGL Display and have some
>> identifying information about it posted into the terminal window. I
>> would like to be able to "pick" an atom in such manner and automatically
>> have it or its index added to a list which I can use in scripting. Is
>> there a way to do this that has already been established? I usually use
>> the TkConsole and I know that the atom info gets output to the Terminal
>> window, so I'm not sure if I can move data back and forth between the
>> two anyways. Thank you.
>>
>> A- R-
>