VMD 1.6 Development Status

  • VMD 1.6 Released (12/22/2000)
    • Enabled download engine for new version.
    • Moved distribution files to web download area
    • Updated release history page.
    • Updated web pages, links, readmes, VMD help web pages.
    • Fixed startup issues with Python interpreter
    • updated various documentation and readme files for release, rebuilt docs, and recompiled/built all distributions.
    • Fixed installer problem on Win32, forgot to add win32ftp.exe to installer.
    • Fixed up various documentation stuff.
    • Added molid() method to the Python AtomSel class. Changed the VMD startup script to put the user-defined PYTHONPATH _before_ the default VMD PYTHONPATH, so that users can more easily customize VMD scripts.
    • More const correctness cleanups.
    • Cleanups to please the Sun compiler. (python modules)
    • Added material() method to Python graphics module, and added method-specific error messages to the parsing format strings.
    • Fixed missing backslashes before underscores.
    • Added a Python axes module.
    • Defined string constants in the Python display module for setting the projection and (alt)detail, since these never change. Stereo modes still have to be determined on the fly.
    • Rewrite of the Python label module. Should have full functionality now.
    • BabelConvert::file() now returns a string from the heap instead of a stack- allocated JString; should fix FMR pointed out by L. Wood.
    • Eliminated molecule.state(); moved functionality for making molecules fixed or displayed into the trans module and added a method for making molecules active or not to the animate module. Revised other parts of the trans module, eliminating the rock methods and simplifying the interface for rotate.
    • Eliminated the Python molinfo module; created a molrep module for representation-specific functionality. Added new methods to molecule and molrep to replace the molinfo functionality.
    • Touch-ups to the Python molecule module: get- and set- methods now have an underscore; moved the top() method to molecule (from molinfo); error messages for incorrect function arguments now report which function they came from (need to do this for methods in all modules).
    • Improvements to the Python display module: added methods for getting a list of the available detail, stereo, and projection modes, and made boolean settings like antialias take boolean values.
    • Eliminated warning from unused variable.
    • Major revision of Python color module.
    • fixed missing type conversion for const char * vs. char * in call to Tcl_AppendElement().
    • Added methods to the Python molecule for getting/setting the center, scale, rotation, and translation of molecules. In principle this could have been done already though the molinfo module, but that method sucks because it expects/returns matrices and vectors as strings formatted as Tcl lists. Changes are duly documented.
    • Added a bit about loading a pdb from the RCSB.
    • Eliminated old sim commands from the docs. Revised the format of the Python section to use lists instead of tables.
    • Updated docs for pdbload/webpdb command changes.
    • Updates to molecule commands for Tcl and Python.
    • Added new command (mol ssrecalc for Tcl and molecule.ssrecalc for Python) to force recalculation of secondary structure. Added vmd_calculate_structure command to vmdinit.tcl for backwards compatibility with older scripts that used a Tcl proc by the same name to get the secondary structure directly from Stride.
    • Fixed lassign so it returns a list of the elements in the list that were not assigned to any variables, in keeping with the TclX behavior.
    • Eliminated py_util.C.
    • Replaced uses of msgErr with Tcl_AppendResult in the Tcl text commands.
    • Eliminated the Python util module. Replaced msgErr with PyErr_SetString.
    • Eliminated the list() method from the Python molecule module. Methods that used to take a string argument to specify the molecule now take a integer for the molecule id. The state() method is now more 'Pythonic' as well.
    • When "pdb databank" is selected in the Files menu, the "Select code" button pops up a message explaining what to do, rather than bringing up a file browser.
    • Added command for modifying materials settings of user graphics objects.
    • Updted CmdMol for Win32 webpdb implementation.
    • Added FTP binary location to win32 startvmd code.
    • Updated win32ftp code for use with new mol webpdb load commands.
    • Added ability to load pdb's from the PDB databank to the GUI! It still uses the same Tcl functionality, but at least you don't have to use the CLI anymore. The command line syntax is "mol load webpdb n###". 'Bout time if you ask me.
    • Fixed bug introduced when MoleculeIMD was refactored as a CoorData object that resulted in VMD being unable to reattach to a simulation. Also refactored the IMDMgr, MoleculeIMD, and IMDSim classes so that there is no sharing of pointers: IMDSim handles all the vmdsock and low-level imd stuff, MoleculeIMD takes care of IMDSim, and IMDMgr only sees MoleculeIMD. There's more delegation now, but it's safer.
    • Added read, write, delframe, and dupframe methods to the molecule Python module.
    • Announced Python-enabled versions of VMD to VMD-L
    • Fixed bug that caused pdb's loaded from the command line to have their coordinates loaded twice.
    • Python files are now installed in lib/scripts/python. The vmd startup script prepends this directory to the PYTHONPATH environment variable.
    • Python files are now copied into the distribution.
    • Fixed missing function argument in del_callback.
    • Added callback docs for Python.
    • del_callback now no longer complains when a callback is not found. Perhaps it would be best just to let the exception pass... Also added VMDMenu code, which might prove useful as a starting point for user-defined GUI's.
    • Added Python methods for registering callbacks.
    • Python scripts can now set callbacks which will be called by VMD when various events occur; these events correspond to (some of) the TextEvent classes. Also changed GeometryAtom so that it doesn't set a pick_value callback; it used to use the atom id as the value, but that's silly because that value is already available from the pick_atom callback.
    • Added docs for Python animate module.
    • Replaced printf error messages in py_atomselection with Python exceptions.
    • Settled for improving the stereo documentation significantly.
    • Made several more failed attempts to fix difficulties with accurate detection of availability of stereo on SGI systems that have full-screen but not quad-buffered stereo. After surveying the web for any solutions to this problem, was discouraged that some of SGI's own references point out that this is a problem and their demo codes don't even deal with it.
    • Added Python animate module. This doesn't contain commands for adding/deleting frames; it just animates.
    • Added docs material, render, and imd Python modules.
    • Fixed up some display module commands.
    • Added imd module for Python. Also fixed a bug that caused VMD to crash if you set the transfer rate before a molecule was loaded.
    • Added material module for Python. Also eliminated some stray debugging printf's in py_color.
    • Added render module for Python. I've intentionally left out the post-render commands; the C API only needs to provide the rendering functionality.
    • IMDMgr::detach() sets sock to NULL so that the socket doesn't get deleted twice when VMD exits.
    • Fixed up some mistakes in the last commit.
    • Updates to allow Python builds to work properly, at least on Linux, without having to hack the Makefile. Added link option to allow shared libraries to be imported by the Python interpreter.
    • working on updating distribution scripts again.
    • Announce VMD 1.6a4 release.
  • VMD 1.6 Alpha 4 (11/20/2000)
    • Updated windows InstallShield build to skip unnecessary scripts/files.
    • Added some docs for the display Python module.
    • Fixed misplaced "culling" keyword.
    • Made culling take an int instead of a string.
    • Fixup to please gcc.
    • Fixes to check for an incorrect number of atoms in a pdb file (must have same number of atoms as structure).
    • Added py_display.C, which supplies the display Python module for setting display properties.
    • Added py_display.C, which supplies the display module for Python. This module does not include axes or stage commands.
    • Added Trio trajectory converter to download DB, made new web pages for it, and first round of preparations to let people grab it.
    • rebuilt all doc files on web/etc.
    • Doc updates for the new molinfo Python module.
    • Added py_molinfo.C
    • Added py_molinfo.C, which supplies molinfo-like commands for Python.
    • added tcl_commands.C to project
    • Made VMD startup script work better with HP's implementation of csh, as well as making the parameter parsing more intelligent.
    • Fixed PR101 (DCD files with fixed atoms did not work...)
    • Added a table describing the graphics operations in Python.
    • Added the rest of the graphics commands for Python.
    • Added py_graphics.C, and updated configure to used python 2.0.
    • Fixed broken logfile - text buffer was being wiped by the command that sets the corresponding Tcl variable.
    • Added Python initializer for argc/argv.
    • Added CoorData.h. CoorFileData and MoleculeIMD are now derived from CoorData, which provides an interface for Molecule to get coordinate updates. Fixes PR 113 (bug in IMD updates caused by coordinate frame updates occuring after rep updates).
    • Added CoorData.h.
    • CoorFileData returns an enum reflecting whether there are any more timesteps to read, rather than a pointer to a Timestep. Since CoorFileData takes care of adding the timestep to the molecule for itself, its safer to return an enum.
    • Replaced Molecule's read_coor_file and write_coor_file methods with an add_coor_file method that takes a CoorFileData reference.
    • Fixes to make VMD compile again without IMD enabled.
    • The move, moveby, lmoveby, moveto, and lmoveto atomselect operations are now checked for and called directly; the catch-all functionality that looked up a Tcl proc based on the first argument passed to the atom selection was eliminated.
    • Cleaned up redundant storage of AtomSel pointers, as well as storage of MoleculeList and SymbolTable pointers.
    • The split_tcl_atomsel_info function no longer returns the array of list elements, since all callers really want is the list of keyword indices.
    • Fixed atom selection combining operations.
    • Replaced cmd_*.h with tcl_commands.h. tcl_commands.C implements a Vmd_Init function which is called by TclTextInterp when it wants to register all the VMD commands.
    • Combined cmd_*.h into tcl_commands.h.
    • Made the Mouse class signal pick events with either B_LEFT or B_MIDDLE, rather than doing some kind of math on the button state. Fixes a problem introduced some time post-1.5 that caused PickModeMove with the middle mouse button not to work.
    • Added docuentation for the Python atom selection objects.
    • Added description of commands in the Python trans module.
    • Added documentation for the Python molecule module.
    • Eliminated VMDEvent.h. Went back to the old way of queuing GUIEvents through the CommandQueue, since the HP compiler doesn't seem to like the template scheme and since it requires a statically allocated list of Forms objects.
    • Elimnated VMDEvent.h
    • Updated MacOS-X code in vmd startup script.
    • Entirely eliminated TclX from Win32 and Unix builds of VMD.
    • Created lassign, lvarpush and lvarpop procs to replace TclX functions. Replace TclX math functions in vectors.tcl with their regular Tcl equivalents (TclX really only supplied syntactic sugar in this case). Eliminated the signal command in vmdinit, since this has been replace by a signal handler internal to VMD. Should be no more TclX in the VMD startup.
    • Added signal handling code intended to replace TclX's signal function.
    • VMDtempFile now returns a string from the heap rather than using a static buffer.
    • TclDeleteInterp now precedes TclFinalize in the TclTextInterp destructor, as per the suggestion of Laurence Wood.
    • Started documentation of Python scripting in VMD.
    • AtomSel::coordinates() now takes a MoleculeList argument instead of accessing a VMDApp singleton.
    • Eliminated uses of AtomSel::molecule(), except for within AtomSel::coordinates().
    • The measure functions now get their coordinates passed in, rather than accessing them through the AtomSel objects. Working towards eliminating the molecule() and coordinates() methods from AtomSel.
    • Updated Windows VMD installer to pull script files from new locations, and no longer ship DP4.0....
    • updated the make_links script to work for new VMD file locations.
    • Added overloaded operations for manipulating python selections: logical and, or, and not. Replaced the num() method with the built-in len function, and replaced the list() method with the built-in slice operations. Idea is that it's better to have atom selections behave like native python objects rather than force users to learn the 'VMD' syntax. Also made the selection text the first argument of the AtomSel constructor and made molid=0 a default argument; this way the user can type "sel = AtomSel('name CA') without having to specify the molecule every time.
    • The get method of python atom selections now returns lists instead of tuples, since there's no good reason scripts shouldn't be able to modify the results.
    • Added the ability to specify frames in Python atom selections.
    • Python atom selections now store the molid, selection text, and selected atom list as native python objects, rather than storing an opaque reference to a C++ AtomSel object. The only things we need to code in C are create, get, and set.
    • Python atom selections now store the molid, selection text, and selected atom list as native python objects, rather than storing an opaque reference to a C++ AtomSel object. The only things we need to code in C are create, get, and set.
    • Made AtomSel::use() a static method so that atom selection context can be set without creating or referencing an AtomSel object.
    • The context for atom selection functions now consists of a molecule, symbol table, and frame number; the AtomSel reference has been eliminated.
    • Fixed the command prompt for the Python interpreter so it doesn't suck.
    • Added 'set', 'list' and 'get' methods to the Python AtomSel class.
    • First implementation of VMD atom selections in Python. Would be very cool if we could do various boolean/binary/slice operations on them as with built-in Python lists. Still lots to do...
    • Added src/py_atomselection.C and python/AtomSel.py
    • PythonTextInterp::evalFile() now reports an error when it fails to open the specified file.
    • gopython now takes an optional filename argument; when one is provided, the file is run in the Python interpreter. When the interpreter is finished, processing continues with the Tcl interpreter.
    • Moved command line and file processing from UIText to the respective TextInterp classes. stdin is now read in the doEvent() method of TextInterp. The Python interpreter is now able to parse multiline input. The behavior of 'play' has changed: previously, if a proc contained the command 'play foo.tcl', commands from foo.tcl would not be processed until every other command in the proc had finished and VMD had executed another event loop. Now, 'play' causes immediate line-by-line execution of the code in foo.tcl. I regard this as a bug fix. Finally, the behavior of Ctrl-D has changed: it used to cause VMD to quit; now, in the Tcl interpreter it has no effect and in the Python interpreter it causes VMD to "drop down" to the Tcl interpreter. Ctrl-D is the usual way of exiting from the Python shell so this should seem natural to most Python users.
    • Changed default colors in VMD to suck less.
    • Updated the VMD script library web pages (Whew!)
    • Added a new ca-dist VMD script that works for newest versions.
    • Updated compiler flags to increase optimization on all of the Linux platforms (i386, Alpha, PowerPC) for C code.
    • The rep browser in the Graphics form no longer shows the numbers associated with the draw style. These numbers meant different things for different reps and were not of much use in distinguishing reps from each other. This deletion made three more characters available for display of the atom selection.
    • Fixed a bug in which an uninitialized pointer was being deleted TextEvent.C
    • Updated docs on Surf, MSMS for new "Wireframe" display option, and eliminated commentary about environment variables which no longer have any effect.
    • Updated Windows builds for removal of Command.C
    • Moved the delete of commandQueue on shutdown to be after the delete of the UIObject's since UIObjects unregister with their CommandQueue now.
    • Wrote code to draw MSMS and Surf surfaces using a wireframe representation based on DispCmdWireMesh.
    • Added new DispCmdWireMesh class which implements a vertex array based wireframe drawing capability suitable for anything that draw lots of colored lines. Uses the same basic data formats and layout as the DispCmdTriMesh. Will need work before it can be used for more general purpose stuff since it currently demands vertex normals, but with some small changes it could be used by DrawMolItem for the lines reps too.
    • fixed const correctness problem in the atom name finder.
    • Elminated last remnants of old MSMS surface drawing mechanism. Vertex arrays are "The Way" now... :-)
    • Added a wireframe option in the Graphics form for the Surf and MSMS draw styles. No rendering code, just a flag. Also fixed py_label to work with the new CmdLabel constructor.
    • save_state now also saves labels.
    • Made the InterpEvent classes derived from Command instead of from VMDEvent. I really thought the VMDEvent scheme was cleaner, but as it made use of static arrays it doesn't really fit into a multiple-instance framework.
    • Created a save_state command, which calls a method in UIText, rather than having to have the initiator of the command know what the syntax is. Eliminated the TextEvent command; UIText calls eval_text rather than queueing a command and receiving it later.
    • The wait, echo, and play commands now call UIText methods themselves, instead of going through the command queue.
    • Eliminated jregex.
    • Resurrected JRegex, and undid the recent changes to SymbolTableName.
    • Made SymbolTableName a struct, and moved its constructor and destructor to static methods in SymbolTable.
    • Replaced JRegex with jregex, which uses only C instead of C++.
    • UIObjects no longer need a name in their constructor; they register with CommandQueue and get stored in a list instead of a hash table. FormsObj classes still need a name for turning on and off, so the name got moved to the FormsObj class.
    • Eliminated the unused id() method in UIObject.
    • Nothing in VMD was using the result of the return code from the do_execute methods in the CmdXXX classes, so this value is no longer recorded and passed around. A great simplification; as far as I can remember, the return code was only ever used to check whether to close the Files Form after loading a molecule.
    • Rather than having Command create and delete an ostrstream object every time, CommandQueue now maintains a single ostrstream and passes it to Command when it wants text.
    • Eliminated the UIid argument from all the CmdXXX classes.
    • The UIObject classes no longer pass their id() to Command's they queue, since these id's are ignored anyway.
    • Added default UIid=-1 for the CmdTool commands. The Tcl text commands in cmd_xxx now use the default UIid=1 in all the Cmd objects rather than passing in -1 explicitly.
    • liminated getUIid from Command. It was previously used only in MaterialForm, where it appears to be unnecessary, and in FilesForm to close the form after loading a molecule, which can be accomplished by having CmdMolNew queue the CmdMenuShow command.
    • Added py_label, with methods for adding all four label types.
    • Moved the get_atom_from_name routine out of CmdLabel and into cmd_label, since it's really a text interpreter artifact. CmdLabelAdd now takes an array of molids and atomids in its constructor instead of strings.
    • Rewrote find_atom_from_name utility function. Old code supported an undocumented alternate format for specifying the atom; rather than trying to reverse engineer it I'm just eliminating it. (CmdLabel.C)
    • working on it! :)
    • Announced VMD 1.6a3.
  • VMD 1.6 Alpha 3 (10/06/2000)
    • The code to read in the Stride output file matched a buffer of 4 characters with a %4s pattern, resulting in incorrect processing and potential memory corruption. The buffer size was increased to five characters and a check was added to make sure that the resid read from Stride is valid.
    • Fixed a bug that caused VMD to incorrectly reset the view when animating a scene containing molecules with only one frame.
    • Added a "Pinch" tool; similar to the tug tool, except that force is applied only along the axis defined by the orientation of the tracker.
    • MoleculeIMD no longer keeps track of a DrawForce object. CmdIMD adds a DrawForce to the molecule that gets the coordinate updates, and the molecule deletes it as part of the Displayable destructor.
    • Eliminated P_VRPNConnection.[Ch]. VRPNTracker takes care of updates in the registered callback function, rather than accessing vrpn_Connection state.
    • VRPNButtons gets the button state directly from the registered callback, as described in the vrpn documentation web page. This fixes a bug involving the tracker grabbing when a tool is first created even when a button isn't pushed.
    • MoleculeIMD checks to see if a timestep contains forces before writing them into the MolAtom structs. Fixes a bug involving unitialized force arrows in the first timestep.
    • Backed out changes made on 9/22 to IMD code, which introduced a bug related to reconnecting after establishing the initial connection. We've still got that pesky "Can't disconnect; not connected" message.
    • Eliminated MSVC compiler warnings, and added new source files to the project.
    • Touched up the Graphics form to fix labels that were spilling out of their buttons. Reworded labels in the bottom row and made then font non-bold. Made the "Color Defs" button wider - it's now the same width as the "Molecules" button and properly contains its label.
    • Updated README, make_distrib and other misc files for python work.
    • Added py_color.C and commands for setting color rgb and color scale values.
    • Changed the python method declarations back to being static to avoid name collisions, and added a typecast to quiet warnings from the Solaris compiler. Also added a couple more includes before including Python.h, again to keep Python from clobbering Solaris system includes as well as our own utilities.h.
    • Cleaned up warnings issued by Solaris compiler in python by explicitly casting string literals to (char *) and by declaring function pointers passed to Python as extern "C".
    • Moved definitions of default opaque and transparent materials to MaterialUser, making them static const members. This lets Displayables initialize their material to opaque without needing to access an instance of MaterialList or being passed a default material explicitly. Fixed a bug involving DrawForce not getting a material assignment.
    • The Stride input file is now written using the VMD unique resids, rather than writing consecutive residues and keeping a lookup table. This fixes PR 114 which arose from incorrectly assuming that the unique resids increase monotonically with atom id. I honestly don't remember why it wasn't done this way in the first place.
    • eliminated unnecessary Forms/XForms/FLTK references and includes from Win32OpenGLDisplayDevice.C.
    • Replaced all the python molecule commands for setting and modifying the rep/color/style/material with a single command, modrep, which takes keyword arguments. This API thus does not expose the 'default' atom selection, color, etc. stored in MoleculeList; unless the Tcl API is used, addrep() always creates a rep with all atoms drawn as lines colored by name.
    • Replaced the str_tokenize in UIText with simple strcmp's; these are faster and don't require dynamic memory allocation. Also added system includes before #including Python.h in py_commands.h, because somehow Python.h clobbers these header files and causes them to inline function implementations.
    • Updated docs on color and colorinfo commands for changes made when materials were added.
    • Added the the rest of the molecule commands to the python interface, except for urlload and pdbload.
    • Added a molecule python module, with just a 'load' method so far.
    • Decided to make the core VMD Python API statically linked for now, at least until such time as the part of VMD against which the python commands must link becomes a shared object library/dll. Linkers on different platforms have different behavior with regard to finding symbols in the VMD executable. Also made Python and Tcl able to run in the same VMD console window. The commands gopython and gotcl switch between them.
    • Created a python directory in the main VMD root. This will be the location of the python modules defining the core VMD commands, as well as any other python scripts we decide to add. Once we have a python startup module, PythonTextInterp will see that it gets run. No other Python-specific code should be statically compiled into VMD. The configure script creates a file called Make.config and places it in the python directory; this file supplies platform-specific flags for compiling and linking shared libraries.
    • Split MolInfo into generic (MolInfo.C) and Tcl-specific (TclMolInfo.C) parts
    • Further fixes to compile flags for Linux on Alpha, with Compaq compilers.
    • Fixed login name and Lexer/Parser code for Linux on Alpha and PowerPC.
    • Updated configure to build LINUXALPHA compiles using the Compaq compilers by default, unless GCC is specifically requested in the configure options.
    • Split MolInfo into two files: a generic part called MolInfo which fills in a SymbolTable with the molecular information keywords, and a Tcl-specific part called TclMolInfo which provides the Tcl interface to MolInfo.
    • Fixed the open_file virtual function signature on SnapshotDisplayDevice to match the one declared in FileRenderer.
    • Fixed string literal conversion warnings.
    • Replaced tcl_get_frame_value with AtomSel::get_frame_value, which does the same thing and doesn't need Tcl.
    • Took tcl_append_double out of TclCommands and moved it to MoleculeEDM, since that's the only place it's used.
    • Added callbacks to delete the MolInfo and atomsel hash tables when the Tcl interpreter is deleted.
    • The exit and quit commands are now handled by the UIText object itself, rather than by an embedded interpreter. Previously, we had not explicitly deleted the embedded interpreter handle on exit from VMD because the interpreter would be in the middle of a command evaluation, causing a core dump. The interpreter is now deleted safely.
    • The Tcl atom selection code now keeps its NameList of active atom selections in the Tcl associated-data table. It now takes care of its own Tcl command registration and uses no static variables. The NameList is also stored in the ClientData of the created atom selection functions, so we don't have to go the Tcl hash table all the time, only when we create and destroy atom selections.
    • Created a Vec_Init function which takes care of registering individual vec methods. The function gets called from TclTextInterp at startup time.
    • Repackaged MolInfo, making it much more...package-like. MolInfo exports a Molinfo_Init function, which receives a Tcl_Interp pointer. TclTextInterp passes its VMDApp instance to the Tcl interpreter as "associated data" through the SetAssocData function. MolInfo gets the VMDApp instance back out and adds its own data, the MolInfo SymbolTable instance. MolInfo now has no static variables and could in principle be dynamically loaded, though we choose to call Molinfo_Init statically.
    • Fixed a bug in IMDMgr's destructor - need to delete the IMDSim object _after_ calling methods on it!
    • Got rid of basic.tcl - just moved everything into atomselect, since that's where it's all used anyway. Also no need to autoload any of it since it can just be source'd.
    • Eliminated the SaveState text event, as well as the Tcl code that used to be used to query the user for the save_state file (this is now handled by a popup menu when activated from the forms). popup.tcl has been eliminated.
    • When then user hits the "Save Config" button in the Mouse form, rather than using an interactive prompt in the text window, a window pops up where the user can enter a filename. Ever so much more user friendly! The save_state command still works from the command line.
    • Eliminated vmd_atomselect Tcl procs which had long since been recoded in C. This frees TclTextInterp from the restriction of having to define the C versions _after_ reading vmdinit.tcl.
    • Eliminated vmd_atomselect Tcl procs which had long since been recoded in C. This frees TclTextInterp from the restriction of having to define the C versions _after_ reading vmdinit.tcl.
    • Eliminated measure.tcl. The fit_2_points and fit_3_points functions contained therein had already been recoded in C, and the wrapper code was just a legacy from the days when we used an external library. If someone wants to wrap 'measure' with their own code, there's nothing to stop them.
    • Added some python text commands. The VMDApp instance gets passed to a module of the same same so that text commands can reference it using the Py_GetAssocData call. Changed python library to version 1.6 - this is the last stable version at this time.
    • Beginnings of Python support in VMD. Add the keyword PYTHON to configure.options to compile in Python. PYTHON is mutually exclusive with TCL, and doesn't yet allow TK. Added a rudimentary Python text interpreter. I would like it to be as nice as the regular python command line interpreter, but it still lacks a few niceties, such as printing results of functions (like 4+5 or fun()) and understanding multi-line input. However, we can import modules and such.
    • Beginnings of Python support in VMD. Add the keyword PYTHON to configure.options to compile in Python. PYTHON is mutually exclusive with TCL, and doesn't yet allow TK.
    • Made Tcl a compile-time option instead of default option.
    • Added #include of SymbolTable, as was done for AtomLexer.l in Win32AtomLexer.
    • Fixed mistaken error message on destruction of IMDMgr.
    • Eliminated Tcl-DP external interface.
    • Removed all dependence of TclVec on Matrix4 by inlining the matrix multiplication code. The idea is to make TclVec (along with vectors.tcl) a stand-alone package.
    • Removed all dependence of TclVec on Matrix4 by inlining the matrix multiplication code. The idea is to make TclVec (along with vectors.tcl) a stand-alone package.
    • tcl_append_matrix and tcl_get_matrix take a float * instead of a Matrix4 object, for future portability.
    • Cleanup of vectors.tcl: use call to veclength rather than recoding it every time, and return Tcl lists rather than strings that just look like lists.
    • Merged the chapters on molecular rendering, coloring, and selection into a single chapter. The new organization better reflects the rep/color/sel triad that users need to understand to really make use of VMD features. The introductory text in the drawing methods chapter was already making that point anyway.
    • Distributed the content of ug_misc.tex to more appropriate parts of the docs. Also eliminated references to $ and @ Tcl references since these are no longer supported.
    • Moved the hot key instructions to the hot key section.
    • Eliminated references to UIExternal and pvm.
    • Eliminated references to Tcl-DP. Corrected references to version numbers of Tcl/Tk. Fixed a missing close-brace in ug_form_render.
    • Fixed RMS fit code; had a bug that caused measure fit to sometimes return a matrix with -1 determinant.
    • Fixed broken materials on tools.
    • The render text command executes CmdDisplayUpdate before CmdRender to make sure the VMD has processed viewpoint changes, etc.
    • Eliminated the long-dead UIExternal code, which hadn't even been compiled into VMD for some time.
    • FileRenderList is no longer a UIObject.
    • Deleted start_wait/stop_wait - it has no visible effect on any platform I've seen. Also eliminated the unused DisplayDevice::get_cursor().
    • Replaced vmdsock_accept with a version that returns a new socket handle, rather than overwriting the listening socket descriptor. Matches NAMD's version, though it's not currently used in VMD.
    • Cleanup and refactoring of the higher-level IMD code. The IMDMgr and IMDSim classes no longer depend on the MoleculeIMD class, making the IMD system as a whole much more orthogonal/self contained. Fixed a bug that caused VMD to erroneously report already connected, only to go on and connect anyway. SimForm still needs a little more cleanup but that shouldn't be hard...
    • MoleculeIMD gets its saveFrameRate from IMDSim. This is so we will be able to change this rate without going through display-specific classes.
    • DrawMolecule queues a CmdAnimNewFrame when force_recalc is called.
    • improved commentary on calling the queue_events method on the display device.
    • Eliminated change_cursor_shape method in the display devices, and removed related functionality and data from the mouse code.
    • Folded various helper functions back into the main line of code, since the X11 OpenGL interface no longer gets mixed with Forms/XForms/FLTK code.
    • IMDMgr is no longer a UIObject. CmdIMD calls methods on the IMDMgr reference passed in to the constructor.
    • Eliminated as much duplication of effort as possible, reducing each of the derived OpenGL display devices, and moving shared methods into OpenGLRenderer.
    • Zapped some #includes.
    • Cut down on some #include dependencies.
    • Pulled Inform.h out of Stack.h, and error messages out of near clip and far clip set functions in DisplayDevice. The rest are necessary #includes of Inform in the .C files.
    • Eliminated msgErr messages from Matrix4.
    • Matrix::inverse returns -1 when a singular matrix is encountered. TclMeasure issues a warning when the user tries to invert a singular matrix.
    • Fixed broken VMD 'draw' and 'graphics' commands; the MoleculeGraphics object wasn't getting registered with a MaterialList.
    • Added documentation for the "mol modmaterial" command.
    • Deleted text used for debugging.
    • Disabled precompiled headers (PCH) for the startvmd project, and added VMD header files to the MSVC project, we'll see if it slows down compilation speed a lot or not.
    • Updated CVS commit email logger to avoid a Y2K glitch in the older Perl code.
    • Eliminated unnecessary #includes of Inform in Cave- and FreeVRDisplayDevice.h.
    • Removed #include of Inform.h from Command.h; added necessary #includes to .C files.
    • Eliminated unnecessary #include of Inform.h
    • Residue returns nonzero when adding a bond fails. BaseMolecule prints the actual error message. The other changes are files that need to #include Inform.h for themselves now.
    • Removed the friend stream operators from Matrix4. They were only used by CmdRotMat, and incorrectly at that, since the text version produced by the command was invalid. Correct text versions of the command are now produced, without a Matrix4 stream operator.
    • Moved warning about exceeding maximum number of bonds from MolAtom to BaseMolecule.
    • Replaced msgErr in cmd_animate with Tcl_AppendResult. cmd_animate.C
    • Eliminated unnecessary casts of string literals to (char *).
    • Eliminated various pedantic warnings from g++ builds.
    • Reverted to pre-exception versions of ReadPARM.* due to compilation problems on AIX, will try and re-do this again later.
    • Moved more replicated functions from os/window-system-specific versions of the display devices up into OpenGLRenderer for better maintainability, since they were independent of the actual windowing system etc.
    • Consolidated much of the OpenGL state setup code into OpenGLRenderer, eliminating duplicated code and improving maintainability.
    • Added version number to VMD graphics window title bar.
    • Updated documentation for new renderman support.
    • Open CRD files in binary mode for Windows.
    • Eliminated chatty warnings issued by Animation when molinfo set frame gives a frame that is outside the current range. It simply clamps the value to the correct range. Also eliminated warnings and checks in Animation::change_current_frame, since this is a private function and all the checking has already been done internally.
    • Implemented full mouse capture feature for VMD on Windows.
    • Updated Windows build for recent source changes.
    • Extensive changes to pass VMDApp pointers into objects rather than using global references to same. Similar techniques were used to boil down many of the other singleton or global accesses to VMD data structure etc.
    • MaterialList is no longer a singleton. Instances of MaterialList are obtained from VMDApp and passed around in the usual way.
    • MoleculeGrasp gets it color in its constructor, rather than looking it up in MoleculeList.
    • Molecule takes a VMDApp pointer and passes it on to DrawMolecule, which accesses various data structures. Also made MoleculeRaster3D and MoleculeGrasp get their ColorList through inheritance from ColorUser.
    • CmdMolNew takes a VMDApp pointer instead of just a MoleculeList pointer, since it needs access to Babel, display, and other things.
    • Added a MoleculeList reference to the constructors of CmdAnim commands; avoids use of VMDApp::Obj()->moleculeList.
    • All the FormsObj classes take a single argument, a VMDApp, in their constructor. The pointer is cached in FormsObj, and all forms use it to access their data structures. This was considered preferable to passing in 2-5 different pointers for each form and caching them separately; this way, there is one point of access, and we are free later to change VMDApp's interface without external changes to the forms.
    • In-progress..
  • VMD 1.6 Alpha 2 (9/14/2000)
    • Fixes to make VMD call clear() on the MSMS and Surf reps when it should.
    • SymbolTable is back to being a normal class, with global access to atomSelParser through VMDApp again.
    • Removed type conversion from set_keyword_info methods.
    • Eliminated a class of unused methods in SymbolTable. Also revised the "atomselect set" functionality to pass in the correct data type, rather than relying on automatic conversions. It seems kind of clunky now, but we will be rewarded with massive speedups when we change the atomselect code over to the new Tcl Obj interface. SymbolTable's interface is looking much more orthogonal now.
    • MolInfo calls set_keyword_info using the correct data type instead of relying upon automatic conversion.
    • Eliminated three unused and redundant methods from SymbolTable. Also got rid of sorting in the extract_keyword_info methods since it's only used in GraphicsFormsObj; pulled the sorting into external functions and made GraphicsFormsObj make the sorting decisions itself.
    • Got rid of SymbolTable::add_function. add_cfunction is all we need right now. Changed atomsel_square to be a C function so it could use the C interface.
    • FileRenderList passes the DisplayDevice into SnapshotDisplayDevice, and the ColorList into PSDisplayDevice.
    • Fixed PR 111 (VMD crashes when reading zero-length PARM/CRD files)
    • Fixed PR 112 (VMD hangs reading certain PARM files)
    • TclTextInterp passes its VMDApp instance as the ClientData for the base text commands. That way the text commands don't need to call VMDApp::Obj(). Eventually we should be able to pass just a struct with the necessary pointers...
    • SymbolTable now uses a static NameList<>* and new's it in the Instance method, because g++ doesn't instantiate static templated objects like all the other compilers do. Also made the constructors/destructors of SymbolTable and MaterialList protected instead of private to quiet g++.
    • Changed calls to exit() to be calls to VMDApp::Obj()->VMDexit(), so that fatal VMD errors will be handled just a bit more gracefully than they were previously. We still want to eliminate these kinds of error conditions by using more graceful "soft failure" strategies rather than aborting the whole program and causing the user to lose her work.
    • Added singleton access to SymbolTable. Classes get the atomSelParser instance by calling SymbolTable::Instance("ATOMSEL") rather than getting it out of VMDApp. Similar for MolInfo's symbol table.
    • Got rid of the UIEvent class. the INIT code was moved to the child class constructors where it properly belongs; the init() functions defined in the child classes are still called after all the class constructors complete. The CHECK event was eliminated and a method was added to CommandQueue to call UIObject::check_event directly; this CommandQueue method gets called by VMDApp when it's time to check for events.
    • Made UIEvent a VMDEvent instead of a command, CommandQueue can call act_on_command rather than recv_command, got rid of compiler warnings and cleaned up UIObject a bit too.
    • Updated the web page and fixed a bug in the download database.
    • Fixed a display update problem when loading some files, which prevented one TB user's VMD scripts from working correctly.
    • Fixed PR 106 (Startup flags "-pdb file.pdb -dcd file.dcd" don't work.)
    • Improved the Renderman .RIB export capability, adding support for per-vertex normals and material properties.
  • VMD 1.6 Alpha 1 (8/24/2000)
    • Many small improvements to eliminate compiler warnings, and force initialization of variables that were used in a questionable way.
    • Updated README comments.
    • Added LogfileEvent, so that lines written to the logfile are also sent to a Tcl variable. This enables one VMD running a Tcl server socket to control other VMD's connected to it via Tcl client sockets. Pretty cool!
    • Instead of queueing a TextEvent to output the result of menu commands, I override the output stream of msgInfo so that I can get the result back and stick it in the TclResult. A truly inspired hack, if I do say so myself.
    • Made stage public again for now to get rid of cumbersome TextEvent commands.
    • CmdLabel no longer tries to set the Tcl result to the value of the label. It wasn't working, it's undocumented, and the value is available from the Tcl variable vmd_pick_value anyway.
    • In places where VMD wants to set a callback to notify the text interpreter of a change in VMD's state, we've created InterpEvent classes that encapsulate the desired behavior and will work for Tcl as well as other types of interpreters. This has the nice organizational side effect of grouping all our callbacks into one file where they are easily documented and where the implementations (i.e. which Tcl variables are set) can be viewed together. I would be surprised if we didn't find other uses for VMDEvent which is why I put it in a separate file.
    • Made fileRenderList public again - it was goofy having FileRenderList queue TextEvents to print information. It makes more sense to have the text command query the FileRenderList itself. We can find other ways of making fileRenderList less visible later.
    • Replaced the allocator template parameter in ResizeArray with methods which get overridden by subclasses. The new way is just as efficient and more familiar to crufty old compilers.
    • Fixed PR 109 (Certain PDB files could crash VMD in the bond search code).
    • Added the Tru64 OpenGL builds to the everyday "makeworld" script now that we've patched configure to work around the tcl 7.x libraries that come with Tru64 unix by default.
    • Made Tachyon a standard part of the VMD distribution, and updated TachyonDisplayDevice to find the program based on environment variables and updated the default command options to make Windows users happier etc.
    • Altered the configure script so that dynamic builds of Tru64 can link against the right Tcl/Tk/TclX libraries, avoiding the 7.x libraries that come with Tru64 be default.
    • Improved IMD force feedback by moving the constraint along with the atom(s) force is applied to when they move.
    • Documented new RMSD fit GUI.
    • Added new tk RMSD fit GUI script.
    • Removed old non-working RMSD fit GUI code, in favor of new Tk script for now.
    • Updated all VMD versions to be built with VRPN 5.01
    • Re-checked Solaris x86 build flags on gcc, and changed to gcc for our builds since our Sun license expired.
    • Fixed a problem in GeometryMol.C related to recent ResizeArray changes.
    • Updated FreeVR code for new version of library, and got VMD minimally working in the FreeVR simulator mode.
    • Fixed order of inclusion of strstreams.h and freevr.h on Solaris.
    • Fixed handling of multi-line input, using the \ character.
    • Updated the FreeVR interface in VMD, is now working minimally.
    • Changed Surf interface to use C file I/O routines instead of iostreams, gaining a 5-fold increase in speed over the old code on some platforms.
    • Fixed some string literal/char * mismatches in TclMeasure and other files.
    • Changed the getnames method of SensorConfig to return a ResizeArray of JString pointers, rather than JString. Because of the memcpy behavior of ResizeArray, the old way would bomb if the array ever got larger than its initial size.
    • Eliminated ResizeArray template implicit expansion behavior/function, ResizeArray instantiations must now extend the arry using the append() methods, or by setting the size explicitly.
    • Changed MoleculeIMD to use append when it puts the forces into the new timestep. Also fixed a name clash in Tool's constructor.
    • Got rid of the enum of Tool subclasses in the Tool class.
    • Added a clear() method to ResizeArray, which replaces remove(-1,-1). The remove method now takes just one argument. Since remove(-1,-1) is the common case, the new code should be smaller and faster.
    • Took out the Tcl-specific wrapper code in Measure and put it in TclMeasure. Measure.h makes the measure functions available to the rest of VMD.
    • Fixes to make VMD compile without Tcl.
    • Finished changing the rest of TclVec and TclCommand procs to use the Tcl_Obj API. measure inverse is something like 200 times faster than what it used to be.
    • Significant speed improvedments to the Tcl commands by using Tcl 8.x C "obj" API instead of old string based functions.
    • Improved RenderManDisplayDevice shading and transparency handling.
    • Fixed an error in the configure script.
    • Fixed GraphicsFormsObj update problem (getting caught in a loop when representation buttons for resolution, size where clicked)
    • Fixed PR 108 (VMD wrote incorrect PDB files when using animate writepdb on a molecule with more than 100,000 atoms)
    • Fixed PR 60 (RMSD fit sometimes crashed VMD)
    • 1) Moved all the text_cmd_* function callbacks into their own files and made them Tcl function callbacks. Command objects created by these functions are run immediately rather than queued in order to match the previous behavior. In the previous formulation, successful completion of any of these text function callbacks triggered a call to VMDupdate. This is no longer the case, since the functions are called directly from Tcl, so scripts that require screen updates must call "display update" themselves, or be "played" instead of "sourced". This is the first step in a process of making VMD scripting-language neutral; the code in the cmd_* files will be turned into straight C++ code, with the scripting language wrapper functions loaded dynamically by the scripting language itself. 2) Moved TextEvent and CmdText stuff into a separate file.
    • Updated several VMD Tcl vector routines to use the Tcl 8.x C API, which yields significant performance increases, several routines now run 3-5 times faster than they did before.
    • Eliminated unused default material values leftover in ColorList.C from the initial materials and vertex array implementations.
    • Improved OpenGL renderer's implementation of materials, fixed a problem with ambient lighting, and improved default material characteristics so that the defaults are much more attractive to look at.
    • Added commands CmdTextVar and CmdTextMap, which allow VMD to set variables in the text interpreter while encapsulating the calls the Tcl C API within the UIText object.
    • Newly rewritten Surf.C interface.
    • First revs of isosurface generation code tested (external to VMD) and works fine, working on integrating this into VMD.
    • Attempt to fix MoleculeRaster3D to read in files it didn't read in correctly previously.
    • New RenderMan .RIB scene export capability, RenderManDisplayDevice.C
    • Eliminated tkRaster3D stuff from VMD, since they sent me email saying that its no longer supported and that they are killing off the web site for it.
    • Displayables are now registered/unregistered from a Scene by their creator, rather than doing it themselves. The "parent" constructor for Displayable was removed; Displayables with no parent (like molecules or Axes) are given a NULL Displayable in their constructor. This simplifies the Displayable class by eliminating the distinction between parent and child Displayables, and hiding the Scene class from Displayable entirely. Classes that instantiate Displayables are responsible for their registration, de- registration, and destruction. Also fixed up some UMR's caused by mistakes in UIVR.
    • Minor changes to please latest Sun C++ compilers
    • VMDApp now passes its atomSelParser object to the init function explicitly.
    • further preparations for changing the surf/msms drawing code.
    • Putting the TclSetVar2 in the destructor of BaseMolecule causes VMD to segfault on exiting because the UIText object gets deleted before the MoleculeList object (the MoleculeList deletes the Molecules). We moved the delete of UIText later in the exit sequence.
    • Fixed missing include of string.h in TclVec.C
    • Replaced the Tcl_HashTable that was used to keep track of atom selections in the text console with a NameList.
    • Moved vector commands into a separate file, TclVec.
    • Moved EDM code from TclCommands into MoleculeEDM.
    • Added a MoleculeList reference to the constructors of a couple forms.
    • Added a static alloc/dealloc to VMDApp for dealing with shared memory. It calls the virtual function in the scene object.
    • UIVR Tools take a Scene in their constructor so they don't have to refer to a global Scene.
    • When a molecule is deleted, the Tcl variable vmd_initialize_structure(molid) is set to 0.
    • Created class "VMDApp" which represents one VMD instance. Methods and data in Global.C and startup.C have been absorbed into the class definition. Global variables have been replaced by a singleton access method in VMDApp, so apart from cosmetic differences little has changed in the rest of VMD.
    • Eliminated uiExternal global, and did some cleanup therein.
    • Made FileRenderList a UIObject that handles all render requests, and thereby eliminated the FileRenderList global pointer.
    • Moved the execution of CmdTool commands from the do_execute methods to UIVR itself. The global UIVR pointer has been eliminated.
    • Cleaned up the Surf interface somewhat and migrated the degenerate triangle test code into utilities.C.
    • Eliminated old style accessors in AtomRep.
    • Eliminated various hacks to limit the max sphere resolution value used when drawing the Solvent representation.
    • Moved the Surf and MSMSInterface objects from AtomRep to DrawMolItem.
    • Moved AmberBoxInfo from BaseMolecule into Molecule, made coord readers use a pointer to Molecule instead of BaseMolecule.
    • Fixed various problems in the new surface rendering codes, including a bug in DispCmdTriMesh, and some minor problems with OpenGLRenderer..
    • Removed various cruft from MoleculeGraphics.
    • Eliminated the prepare2D(), dim(), has2D, has_2D(), dim(), and Dim functions and data from the display devices, until such time that we actually use this feature, in the mean time, it was just slowing us down in our efforts to improve the rendering code.
    • Updated VMD builds to use FLTK 1.0.9 on all platforms including Windows.
    • Eliminated mentions of GL and onstereo/offstereo in web docs etc.
    • Eliminated mentions of GL and GL-specific stuff from the VMD documentation.
    • Migrated code for the molinfo functions from TclCommands to Molinfo.C
    • Updated make_distrib and lib/use scripts for new build structure, and got rid of lib/scripts/vmd since its in scripts/vmd now.
    • Fixed a leftover instance of the clear() method in CaveScene.C
    • Eliminated unRegister method for Displayables, they unregister themselves when they are destroyed, except for VMDTitle which is a special case.
    • Eliminated redundant checks on array bounds in the Scene classes.
    • Restructured VMD build tree, moving VMD scripts into the CVS tree for ease of maintenance.
    • Displayable::prepare no longer takes a displaydevice argument, only Axes and VMDTitle ever used it. Now they get a pointer in their constructor.
    • Eliminated Displayable2D, only 3-D displayables in the current version of VMD, this is the first step in refactoring the rendering code in VMD again. Scenes only manage one displayable now.
    • Renamed instances of "OSF1" to "TRU64" to reduce confusion and since Compaq seems to be sticking with the name "TRU64" for a while.
    • VMDTitle takes a display device in its constructor.
    • Periodic cell information is now stored in Timestep rather than in BaseMolecule, since these values can change over time during constant pressure simulations.
    • Added a "Surface" color category which currently contains just one name, "Grasp". The color of a Grasp surface can now be set at load time with the color menu, or with a text command e.g.: color Surface Grasp red
    • Replaced various istances of Tcl_DString with JString.
    • Added CmdBond, which replaces the "atomselect set bondlist" method which used a Tcl-specific interface.
    • Eliminated various Tcl-specific items from the atom selection code in VMD. The functionality of set_bondlist has been replaced by a command that's easier to use, "bond". This needs to be documented still.
    • Got rid of old Sigma code. This code badly needed to be rewritten to work with modern versions of VMD anyway. To our knowledge it hasn't worked for quite some time. We would want to reimplement this using new IMD APIs we are currently developing, which would be much cleaner.
    • Got rid of lots of GL/OpenGL related #ifdefs which are no longer needed.
    • Removed support for Iris GL builds of VMD.
    • Burned 3 CD-ROM backups of the VMD 1.5 source and binaries.
  • VMD 1.5 final release (June 28, 2000)

Please email any questions to vmd@ks.uiuc.edu.