Release 2.9.0 (27-Jul-17):

 - Added the --nthreads command line option to ovitos as an alternative to -nt (issue #35).
 - Brought back missing stderr output from calls to sys.exit() in ovitos interpreter.
 - Extended the Particle Inspection utility to allow expression-based selection of particles in 
   addition to picking them using the mouse (issue #19).
 - Added a bond-based mode to the Cluster Analysis modifier. It allows forming clusters based on 
   the bond network topology.
 - The OVITO main window now accepts data files and .ovito files via drag & drop (issue #28).
 - Extended the Load Trajectory modifier to also copy other varying particle properties in addition 
   to the particle positions (issue #29).
 - The particle indices displayed by the Particle Inspection utility are now zero-based, consistent 
   with the ParticleIndex variable used by the Expression Selection modifier (issue #21).
 - Added the new 'Relative face area' threshold parameter to the Voronoi analysis modifier, which 
   allows filtering out small faces with an area below a specified fraction of the total Voronoi cell 
   surface area (issue #7).
 - Added file parsers for the CASTEP .cell, .geom and .md simulation file formats.
 - Replaced the 'eliminate homogeneous deformation' option of the Displacement Vectors modifier with 
   the more general affine mapping setting.
 - On macOS, data files and .ovito files can now be associated with OVTIO and directly opened from 
   the Finder (issue #22).
 - Added the FileSource.loaded_file attribute, which allows accessing the filename of the currently 
   loaded simulation file from a Python script.
 - New modifier: The Voronoi Topology Analysis modifier can classify the Voronoi polyhedra of particles, 
   e.g. to perform structural filtering. 
 - New modifier: The Correlation Function modifier has been contributed by Lars Pastewka. It allows 
   computing the spatial correlation between two particle properties.
 - Bug fix: LAMMPS data file parser ignored Bonds section at end of file when number of bonds is zero.
 - New modifier: The Create Isosurface modifier allows to visualize field quantities like the electron 
   density that are defined on a structured data grid. So far, only the POSCAR file parser has been 
   extended to read charge density data from CHGCAR files, which can serve as input for the isosurface modifier. 
 - New modifier: The Coordination Polyhedra modifier constructs convex hulls from the bonded neighbours of atoms. 
 - Bug fix: Unexpected error message during file export when the old mapping for the output file columns 
   has become invalid.
 - Added the 'Adjust range (all frames)' function to the Color Coding modifier, which takes into account 
   all frames of the animation sequence when determining the min/max values of the input property.
 - Added a new user option to the Affine Transformation modifier that enables the transformation of 
   vectorial particle properties like Force and velocity together with the particle positions (issue #11).
 - Bug fix: Need to pass /exit option to Windows version of POV-Ray to automatically close message 
   window after rendering is done (issue #16).
 - Bug fix: Assertion error in Ambient Occlusion modifier when modifier input is empty.
 - The ovito Python module is now usable from external Python interpreters as well, not only ovitos. 
 - Complete overhaul of the internals of the asynchronous data pipeline framework; many improvements to the code. 
 - Dropped backward compatibility with Qt library versions less than 5.4.
 - Bug fix: Parser error when reading a LAMMPS file containing very small numbers on the order of 1e-200 (issue #12). 
 - Bug fix: Windows version always appends .pov to expected file names (issue #13).
 - Bug fix: Create trajectories function does not use correct number of frames from input sequence (issue #6).
 - Added support for omnidirectional stereoscopic rendering to the POV-Ray renderer plugin. This allows 
   producing 360 degrees VR movies (requires POV-Ray 3.7.1).
 - The required system library libstdc++.so.6 is no longer bundled with the Linux version of OVITO, 
   because it causes conflicts with OpenGL drivers on some systems.
 - Reading multi-frame GSD files that contain static data now works correctly.
 - Bug fix: Program crash during parallel access to NetCDF files. Calls to NetCDF library functions 
   are now serialized, because they are not thread-safe.

Release 2.8.2 (22-Jan-17):

- The Histogram modifier can now operate on bond properties too.
- Modifiers now report out-of-memory conditions. 
  Before, Ovito simply crashed when a memory allocation failed during modifier evaluation.
- Added Python script interface for trajectory line visualization.
- Fixed viewport rendering and other issues for datasets with a very small length scale (~10^-10).

Release 2.8.1 (17-Dec-16):

 - Bug fix: Segmentation fault after applying a Color Coding modifier with Viridis color map to 
   particle data containing NaN values.
 - Bug fix: Segmentation fault when closing Scatter Plot editor panel.
 - Bug fix: Compute Property modifier failed with an error when preceded by a Dislocation Analysis (DXA) modifier, 
   due to expression variable names containing invalid characters.
 - Added read/write support for LAMMPS data files with atom_style 'sphere'.
 - Added the NearestNeighborFinder.find_at() Python method for querying the nearest particle(s) around 
   an arbitrary spatial position.
 - Added a detailed usage example to the scripting documentation of the WignerSeitzAnalysisModifier to 
   demonstrate the identification of specific point defect types, e.g. antisites.
 - Bug fix: Viewport.render() Python method failed in GUI mode with an error.
 - Bug fix: FileSource.load() Python method failed when called with keyword arguments.
 - Bug fix: Serial computations performed by the data pipeline occupy two processor cores instead of one.  
 - Bug fix: A custom modifier script function, raising an exception and running as part of a data pipeline 
   within ovitos, produced assertion error.
 - Bug fix: Cyclic reference between DataSet and ScriptEngine classes led to a potential memory leak when 
   using Python script modifiers or viewport overlays from a script executed by ovitos.
 - MacOS version of OVITO is now distributed as a signed application bundle in the form of a 
   DMG disk image (avoids "unidentified developer" warning message on first start). 
 - Disabled geometry shaders by default for AMD/ATI hardware on Windows due to compatibility problems 
   reported by some users.
 - Python modifier and Python viewport overlay scripts can now be edited in a separate code editor window.

Release 2.8.0 (23-Nov-16):

 - Added the POV-Ray rendering backend and the POV-Ray scene file exporter.
 - Fully transparent, invisible particles are no longer sent to the Tachyon renderer to avoid artifacts.
 - Replaced QCustomPlot component with QwtPlot component for graph plotting within the GUI.
 - Replaced Boost.Python with pybind11 library to implement OVITO's Python bindings.
 - The DXA modifier now outputs attributes for the computed line lengths which are broken down by dislocation type.
 - Bug fix: Segmentation fault in Color Coding modifier when input particle property contains infinite values.
 - Fixed an issue with the Freeze Property modifier, which didn't attach a display object to vector properties.
 - The "Fusion" UI theme is now explicitly activated on Linux. Older builds of OVITO used the "Windows" theme for some reason.
 - Bug fix: Atomic strain calculation failed for 2d simulation cells with zero length along Z.
 - The Linux binaries are now built with the gcc 5.1 compiler.
 - Bug fix: Identify diamond structure modifier did not output the structure counts as global attributes.
 - Removed restriction of LAMMPS binary dump file reader to less than 200k atoms.
 - Added a command line option to the ovitos program, which gives users control over the number of parallel 
   threads used by OVITO.
 - Added depth-of-field rendering to the Tachyon renderer.
 - OVITO can now color dislocation lines based on their Burgers vectors (only BCC crystals so far). Before, 
   coloring was possible only on the basis of dislocation type or dislocation character.
 - Added the 'Generate perfect dislocations' option to the DXA modifier, which suppresses the identification 
   of partial dislocations.
 - Improved I/O performance of the LAMMPS data file reader when reading bonds information.
 - Made PDB file reader compatible with files generated by the Gromacs trjconv tool.
 - Extended the Color Coding modifier to support the coloring of vector arrows (in addition to particles and bonds).
 - Bug fix: If the Compute Property modifier is used to create a vector property, the display settings for 
   vector arrows are no longer lost every time the modifier is re-evaluated.
 - The Text Label and Color Legend viewport overlays can now draw an outline around text to make it easier to 
   read on all backgrounds.
 - Disabled some strict conformance checks in the SSH module to improve compatibility with some SSH servers.
 - Bug fix: Viewport.render() Python function raised a Boost.Python.ArgumentError when being called in GUI mode.
 - Bug fix: NetCDF file parser did not recognize unwrapped particle coordinates in files written by LAMMPS.
 - Raised the threshold values for the automatic selection of particle rendering quality. High quality mode is 
   now being used for <4,000 particles, medium mode for <400,000 particles, and low quality mode for everything above.
 - OVITO now ships with the matplotlib Python module. This makes it possible to integrate custom data plots into 
   images or movies rendered by OVITO.
 - Bug fix: Unicode characters are now correctly rendered by the Color Legend viewport overlay.
 - Added Python interface for the FreezePropertyModifier.
 - Added two additional colormaps to the Color Coding modifier: Magma and Viridis.
 - Added a 'Combine particle sets' modifier, which allows merging two datasets into one.
 - Added GSD (General Simulation Data) file reader for HOOMD-blue simulation files.
 - Bug fix: Inserting a modifier while scanning an XYZ/LAMMPS input file to discover simulation frames may crash program.
 - The 'ovitos' interactive interpreter now creates/loads a separate IPython profile named 'ovito' instead of 
   the 'default' profile. This reduces inteference with an existing IPython installation on the same system.
 - Workaround: Exporting denormalized floating-point numbers to an output file crashes program due to bug in 
   Boost.Karma library.
 - Regression: Compatibility with high-resolution displays (Retina/Mac OS)
 - Regression: OpenGL rendering does not work in console mode on Windows
 - NetCDF reader now accepts files where particle data is stored in a subgroup named 'AMBER'.

Release 2.7.1 (28-Aug-16):

 - Integrated IPython into Linux and macOS builds of OVITO.
 - Small bug fix in Animation Settings dialog: Changing the frame rate no longer makes the time slider jump.
 - Updated the NetCDF file reader to make it compatible with files written by the SimPARTIX code.
 - Updated the VTK file reader to accept empty lines in the header.
 - Updated the IMD file reader, which did not correctly map file columns to standard particle properties with vector components.
 - Updated the CFG file reader to accept empty lines preceding the first header line.
 - Updated the PDB file reader to parse molecule identifiers and types.
 - Added the ParticleTypeProperty.get_type_by_id() and get_type_by_name() methods to the Python interface.
 - Added the DislocationSegment.spatial_burgers_vector property to the Python interface.
 - Added a confirmation message before resetting the URL history list in the SSH connection dialog.

Release 2.7.0 (22-Jul-16):

 - Improved visual appearance of large number of semi-transparent particles in images generated by the Tachyon renderer.
 - Fixed a bug in the line coarsening routine of the DXA modifier.
 - Periodic image shift vectors of bonds are now accessible from Python scripts.
 - The Atomic Strain calculation modifier can now perform a polar decomposition F=RU of the deformation gradient into 
   a rotation and stretch tensor. 
 - Added a 'Use only selected particles' option to the Histogram and Bin and Reduce modifiers, which lets you to restrict 
   the calculation to a subset of particles.
 - Extended the Color Coding modifier so that it can also operate on bonds instead of particles.
 - Added the Compute Bond Lengths modifier, which can be used in conjunction with the Color Coding modifier to color 
   bonds according to their length.
 - Added the Text Label viewport overlay, which provides an easy way of inserting a text label into rendered images and movies. 
   The text can contain placeholders which are replaced with quantities computed by OVITO.
 - Added a text file export function, which allows exporting scalar quantities computed by OVITO to a tabular text file as 
   functions of simulation time. 
 - OVITO can now load XDATCAR trajectory files written by Vasp.
 - Added the Polyhedral Template Matching modifier, which can robustly identify lattice structures at high temperature. 
 - The LAMMPS dump file exporter now writes out the simulation timestep number read from an input dump file to the file header 
   instead of the animation frame.
 - Added the Load Trajectory modifier, which allows loading datasets that consist of separate topology and trajectory files 
   (e.g. a LAMMPS data file with bond definitions and a LAMMPS dump file with atom trajectories).
 - The pair-wise cutoff mode of the Create Bonds modifier is now usable from Python.
 - Improved visual quality of particle display for very distant and small (sub-pixel) particles.
 - Added a 'lower cutoff' parameter to the Create Bonds modifier.
 - Scene files that refer to external data file in the same directory can now be transferred to another computer without breaking the link. 
 - Documented the CA dislocation file format in the user manual. This makes it possible to export the extracted dislocation lines 
   and process/analyze them outside of OVITO. 
 - Fixed a bug in the Create Bonds modifier, which produced wrong results when all pair-wise cutoffs were set to values smaller than 1.0.
 - OVITO no longer depends on the CGAL library, making it easier to build it from source.
 - The CA dislocation file importer now supports multi-tilmestep files.
 - Fixed a bug in the Show Periodic Images modifier, which did not replicate bond properties.
 - The behavior of the ovito.io.import_file() Python function has been changed. It no longer adds the created node to the scene, and it is now okay 
   to call this function repeatedly. It also accepts wildcard filenames now to import file sequences. See the updated Python documentation for details.
 - The ovito.io.export_file() Python function now gives full control over which animation frames are being exported.
 - Fixed bug in the Coordination Analysis modifier, which prevented the RDF calculation for 2D systems.

Release 2.6.2 (19-Mar-16):

 - Updated the built-in SSH client to support more encryption methods and improve compatibility with some SSH servers.
 - Small bug fix that solves a (rare) problem with the display of dislocation lines in periodic systems.
 - For very small, periodic simulation cells the Elastic Strain Calculation modifier silently failed for 
   diamond crystals. Now the user is informed that the Show Periodic Images modifier should be applied first 
   to extend the box size.
 - Fixed output of animated GIF files on Linux.
 - Reduced memory footprint of the DXA analysis modifier.
 - The Slice modifier now also cuts surface meshes generated by the Construct Surface Mesh modifier and 
   dislocation lines generated by the DXA analysis modifier.
 - Introduced basic support for 2D systems. The 2D flag can be set in the simulation cell properties panel. 
   The Atomic Strain and Coordination Analysis modifiers then perform the computation in 2D (i.e. the XY plane). 
 - Key-value pairs read from extended XYZ file headers and the LAMMPS timestep number are now accessible from 
   Python via the new DataCollection.attributes property.
 - Added the 'Number of bins' parameter to the Coordination Analysis modifier, allowing the user to control 
   the resolution of the generated RDF histogram.
 - Errors generated by Python scripts that are run via the 'Run script file' function are now displayed in the GUI.
 - Re-added the 'Every nth frame' field to the Render Settings panel, which allows rendering only a subset of 
   animation frames.
 - Fixed import of 'Aspherical Shape' particle property values from a file.
 - The export_file() script function can now produce multi-timestep files.
 - Improved automatic detection of PDB files and added parsing of bonds defined by CONECT records.
 - Fixed bug in Elastic Strain Calculation modifier, which got stuck in infinite loop when applied to some 
   complex polycrystalline structures.
 - Moving the viewport camera no longer stops animation playback.
 - Added the 'Vector Color' particle property, which allows changing the display color of vector arrows on a 
   per-particle basis.
 - Bug fix: The Create Bonds modifier reported the number of half-bonds, not the number of full bonds generated.
 - Regression: Restricting the Compute Property modifier to selected particles did not work correctly; 
   existing values for unselected particles were always reset to zero.
 - Added the CA file exporter, which allows saving DXA analysis results to disk (and load them again at a later time).

Release 2.6.1 (15-Nov-15):

 - Vector arrows can now be centered on particles, e.g. to visualize magnetic moments.
 - The Tachyon renderer now supports transparent backgrounds.
 - The Color Legend and Axis Tripod viewport overlays can now be repositioned with the mouse.
 - Display objects, which are generated by long-running modifiers, no longer temporarily disappear 
   from the pipeline editor list while playing an animation. 
 - The PDB file parser now accepts text lines with up to 83 characters to support files written 
   by Accelrys Discovery Studio.
 - Fixed regression in CA file importer, which was broken in last release.

Release 2.6.0 (02-Nov-15):

 - Added the <a+c> dislocation type for HCP crystals to the Dislocation Analysis modifier.
 - Added the Elastic Strain Calculation modifier, which computes the atomic-level elastic 
   strain and deformation gradient tensors in crystalline systems. It can be used to 
   analyze local elastic distortions in a crystal lattice and to determine the local 
   crystal orientation.
 - The modification pipeline editor now supports drag and drop to change the order of 
   modifiers in the pipeline. 
 - Added the Dislocation Inspection utility, which displays further information 
   about dislocation segments extracted by the Dislocation Analysis modifier.
 - Added an introduction to OVITO's animation system to the manual, which explains how to 
   animate parameters and the camera.
 - The Compute Property modifier can now perform computations that take into account the 
   local neighborhood of particles. For example, you can use this to average a quantity 
   over spherical regions around each particle.
 - Added a 'bond-based' mode to the Common Neighbor Analysis modifier, which computes the CNA 
   indices based on existing bonds between particles. The modifier also outputs the computed 
   CNA bond indices as a new bond property. This enables, for example, analyses of disordered 
   systems using the classical CNA.
 - It is now possible to write custom modifiers in Python.
 - The Wigner-Seitz analysis modifier can now break down the computed site occupancy number 
   into per-type numbers. This makes it easier to identify antisite defects, for example.
 - Added a 'Use only selected particles' option to the Common Neighbor Analysis and the 
   Identify Diamond Structure modifiers, which allows identifying sub-lattices.
 - Added the NearestNeighborFinder Python class, which can be used from Python scripts to 
   find the N nearest neighbors of a particle.
 - Viewports are no longer automatically zoomed to show everything when replacing the currently 
   loaded dataset with a new one. This makes it easier to preserve the current view configuration 
   when switching to a different simulation file.
 - Bug fixes in Python-ASE interface - Cell matrix is transposed and duplicate properties are handled.
 - Fixed the assignment of dislocation lines that were loaded from a CrystalAnalysis file to 
   Burgers vectors families. The CA file import was broken since version 2.4.4.
 - Python scripts can now access the dislocation lines extracted by the DislocationAnalysisModifier. 
 - Bug fix: Bond properties like the bond type are now updated when dangling bonds are removed 
   due to deleted particles.
 - Fixed bug in Atomic Strain modifier, which produced weird results when PBC flags of reference 
   configuration do not match PBC flags of deformed configuration. Now PBC flags of deformed 
   configuration always override the boundary conditions of the reference simulation cell.
 - Fixed error in ovito.dataset.scene_nodes.__iter__() Python method.
 - Fixed bug in file parser that led to wrong particle type names when loading a 
   multi-frame XYZ file with varying set of named atom types.

Release 2.5.1 (07-Aug-15):

 - The LAMMPS data file exporter can now produce files with LAMMPS atom styles other than 'atomic'. 
   It also exports bonds if present.
 - Arbitrary triclinic simulation cells can now be exported to the LAMMPS data file format. 
   They will be automatically transformed to the canonical LAMMPS representation.
 - The LAMMPS data file parser now reads bond types, and you can change the display color of 
   individual bond types in OVITO.
 - Added the fmod(A,B) math function to the Compute Property and Expression Select modifiers.
 - Added visualization support for cylindrical and spherocylindrical particles.
 - Added a file parser for FHI-aims log files, which can contain multiple simulation frames.
 - Added the 'Indicate line direction' option to the dislocation display object.

Release 2.5.0 (25-Jul-15):

 - Added Python interface for Bin and Reduce modifier.
 - Fixed viewport font issue on Macs with high-dpi display.
 - Added the Expand Selection modifier.
 - Added a 'No bonds between different molecules' option to the Create Bonds modifier.
 - Changed the behavior of the IMD file exporter: All particle properties to be exported, 
   including the standard ones defined by the IMD format, must now be explicitly selected by the user.
 - Integrated DXA (Dislocation Extraction Algorithm) into OVITO. 
 - Voronoi analysis modifier can now output bonds between neighboring atoms which share a Voronoi face.
 - Python scripting interface now allows conversion to/from ASE Atoms objects.
 - Python scripting interface now supports write access to particle properties and procedural 
   generation of input particle datasets for OVITO's modification pipeline.
 - Bug fix: Large number of simultaneous SFTP download requests led to error message 
   'SFTP error: Server could not start session'.
 - Bug fix: Using the Python viewport overlay led to program crash on Windows 8 x64.
 - Scripting function Viewport.render() now returns the rendered image, which can be manipulated 
   before saving it to disk.
 - Certain modifier and display parameters can now be animated using animation keys.
 - Fixed OpenGL rendering of bonds/arrows on certain Windows/NVidia systems.
 - Added import/export support for FHI-aims file format.
 - Colors and radii used for particle types (as well as structure types) can now be predefined 
   by the user.
 - Migrated to version 5.4 of the Qt library. This may affect OpenGL rendering and the viewport 
   display. Please report any issues that you experience.
 - Bin & Reduce modifier now takes into account the simulation box origin, uses double precision 
   numbers to perform calculations, and 1D-plot now spans the entire interval.
 - Bug fix: NetCDF file importer doesn't close file handle, leading to error after loading several thousand frames.
 - Bug fix: LAMMPS data file parser stumbles over 'AngleTorsion Coeffs' file section.
 - Visualization of particle trajectory lines.
 - Frequently used modifiers or combinations of modifiers can be saved (including modifier settings) for quick access. 
 - Rendering of ellipsoidal and box particles with orientation.
 - Positioning the mouse over a bond shows its properties in the status bar.
 - Fixed initialization of the Select Particle Type modifier.
 - Fixed error when loading a compressed simulation file >2GB.

Release 2.4.4 (29-Mar-15):

 - Fixed error when rendering and encoding high-resolution videos.
 - Surface geometry computed by ConstructSurfaceModifier can now be exported to a VTK file from Python.
 - Added Python class ovito.data.CutoffNeighborFinder, which enables access to particle neighbor lists from Python.
 - Particles and bonds are now rendered in chunks in the OpenGL viewports to workaround a memory limit on
   some graphics hardware.
 - Bond cylinders will now be rendered using a geometry shader if supported by graphics card.
 - The IMD file exporter now lets the user select the particle properties to export (instead of exporting all).
 - The VTK triangle mesh importer now reads per-face color information.

Release 2.4.3 (02-Mar-15):

 - Added a dialog box to Affine Transformation modifier, which lets the user enter a rotation axis, angle, and center.
 - Removed cutoff option from Voronoi Analysis modifier in favor of a faster algorithm for orthogonal simulation cells, which is based on Voro++'s container classes.
 - OVITO can now load bonds from LAMMPS data files.
 - The Atomic Strain analysis can now be performed even when the number of particles changes with time (but only for the particles that are present in both the reference and the current configuration).
 - The Freeze Property modifier now works when particles are lost during the simulation.
 - The Wrap at Periodic Boundaries modifier now wraps bonds crossing a periodic boundary too.
 - The Show Periodic Images modifier now replicates bonds too.
 - Changed integrated script interpreter from Python 2.7 to Python 3.4.
 - Switched from MinGW to Visual C++ 2013 compiler for Windows builds. 
 - Python scripting is now supported by the 64-bit version of OVITO for Windows too.
 - Added a scriptable viewport overlay, which allows to paint arbitrary 2d contents over the rendered image.
 - Created C++ API documentation.
 - Removed old Javascript plugin.

Release 2.4.2 (14-Nov-14):

 - The Color Coding modifier now supports user-defined color maps.
 - Significantly improved performance of cutoff-based neighbor finding and k-nearest neighbor search routines.
   This code optimization speeds up many analysis algorithms in OVITO, in particular for large datasets.
 - Added the Identify Diamond Structure modifier, which finds atoms that form a cubic or hexagonal diamond lattice.
 - The Color Legend overlay now provides an option to overwrite the numeric labels with a custom text.
 - Dialog box asking to save changes is only shown when scene has already been saved before.
 - Bug fix: Periodic boundary flags were not correctly updated when loading a new file using the 'Pick new local input file' button.
 - Bug fix: Viewport.render() Python function throws exception when called without a RenderSettings object.
 
Release 2.4.1 (01-Nov-14):

 - Introduced viewport overlay concept, which allows to include the coordinate system tripod and a color legend in the rendered image. 
 - The OpenGL renderer now supports the display of semi-transparent particles and surfaces.
 - Particle properties are displayed in the status bar when hovering over a particle in the viewports.
 - Periodic boundary conditions can be overridden by the user without the changes being lost when a new simulation frame is loaded.
 - Bug fix: Implemented workaround for high-quality particle rendering on Windows computers with Intel HD 4000 graphics.
 - Bug fix: StrainTensor.XZ and StrainTensor.YZ components output by Atomic Strain modifier were swapped.
 - Bug fix: Fixed issue in Histogram modifier that occured when the fixed x-range is smaller than the value range.
 - Bug fix: Atom type ordering is now maintained when importing a sequence of LAMMPS dump files with named atom types.
 - Performance improvements in modification pipeline by avoiding unnecessary particle data copies and initialization operations.
 - The 'Freeze Selection' modifier has been superseded by the more general 'Freeze Property' modifier.
 
Release 2.4.0 (16-Sep-14):

 - New Python script engine (see user manual for more information).
 - Added the 'Voronoi analysis' modifier, which can compute atomic volumes, coordination numbers and Voronoi indices.
 - Added import/export support for extended XYZ format (see http://jrkermode.co.uk/quippy/io.html#extendedxyz),
   which includes metadata describing the file's columns and the simulation cell.
 - Improved input and output performance for text-based file formats.
 - Added calculation of non-affine displacements to 'Atomic strain' modifier. 
   (This is Falk & Langer's D^2_min measure, see the 1998 PRB.)
 - Added 'Bin and reduce' analysis modifier.
 - The 'Create bonds' modifier can now handle particles that are located outside the (periodic) simulation box.
 - Added a file parser for PDB files (still experimental).
 - The 'Show periodic images' modifier can now assign unique IDs to particle copies.
 - LAMMPS data file parser now supports additional LAMMPS atom styles such as 'charge' and 'bond'.
 - Command line options to run old Javascript programs have been renamed to --jsscript and --jsexec.
   Javascript plugin has been deprecated and will be removed in a future program version.
 - Bug fix: Export of compressed LAMMPS data files could result in truncated files.
 - Bug fix: Solid volume computed by 'Construct surface mesh' modifier could be inaccurate due to low numerical precision
 - Bug fix: 'Construct surface mesh' modifier crashed with certain input data.
 - Bug fix: VTK mesh file parser couldn't handle multiple points per line (as written by ParaView).
 - Bug fix: LAMMPS data file parser did not parse atom IDs.  

Release 2.3.3 (22-May-14):

 - Added user options to application settings dialog that give control over sharing of 
   OpenGL contexts and the use of OpenGL point sprites. This allows to work around compatibility
   problems on some systems.
 - User can now choose between dark and light viewport color schemes.
 - Added scripting interface for Tachyon renderer.
 - Added support for variable particle numbers in NetCDF reader (i.e. support for unlimited atom dimension)
   and for NC_CHAR variables as particle types. (I.e. particle types given by names instead of numbers.)
 - Added user options that control the automatic fetching of the news page from the web server and 
   the transmission of the installation ID.
 - Fixed bug in camera orbit mode, not correctly restricting camera's orientation when coordinate system 
   orientation has been changed.

Release 2.3.2 (07-Apr-14):

 - Fixed bug in Wigner-Seitz analysis modifier, which could cause a program crash when numbers of 
   atoms in reference and current configuration differ.
 
Release 2.3.1 (01-Apr-14):

 - Added saving/loading of presets to the file column mapping dialog.
 - Added the --exec command line option, which allows to directly execute a script command or to pass parameters to a script file.
 - When opening a XYZ file, the column mapping dialog displays an excerpt of the file content to help the user in figuring out the mapping.
 - The Construct Surface Modifier no longer creates cap polygons if the simulation cell doesn't contain any particles.

Release 2.3.0 (29-Mar-14):

 - Added the new scripting interface, which allows to automate tasks.
 - Added the 'Freeze property' modifier, which can prevent a particle property from changing over time.
 - Added the 'Scatter plot' modifier, which plots one particle property against another. 
   This modifier has been contributed by Lars Pastewka.
 - Added the 'Wigner-Seitz analysis' modifier, which can identify vacancies and interstitials in a lattice.
 - Added a file importer for NetCDF files. Code was contributed by Lars Pastewka.
 - Added more input variables to the 'Compute property' and 'Expression select' modifiers (e.g. reduced particle 
   coordinates and simulation cell size).
 - It's now possible to load a sequence of files with each file containing multiple frames. To do this, import the 
   first file from the sequence, activate the option "File contains multiple timesteps", finally open the 
   "Frame sequence" panel and change the wildcard pattern to include the '*' placeholder character again.
 - Fixed bug in CFG file importer, which did not read triclinic simulation cells correctly.
 - Fixed shader compilation error on OpenGL 2.0 systems and some other OpenGL related issues.
   
Release 2.2.4 (29-Jan-14):

 - Modified particle file importers to ensure stable ordering of particle types (using 
   lexicographical ordering when atom types have names, and ID-based ordering otherwise). 
   The ordering of named particle types is now independent of their first occurrence in the input file.
 - Fixed particle picking issue on computers with Intel graphics.
 - Fixed OpenGL issues on systems with Intel graphics.
 - Fixed blurred display of viewport captions.
 - Fixed program crash when changing particle radius/color without having selected a particle type first. 
 - OVITO is now built using version 5.2.1 of the Qt library. 
   This fixes several issues related to the graphical user interface. 

Release 2.2.3 (15-Jan-14):

 - Fixed the CFG file importer, which is now able to read CFG files written by newer versions of LAMMPS correctly.
   Auxiliary file columns are now automatically mapped to OVITO's standard particle properties if possible.
 - Improved compatibility with some OpenGL implementations (Intel HD graphics on Windows and ATI Mobility Radeon HD 5470).
 - A 64-bit version of the program for Windows has been built.
 - A construction grid can now be shown in the viewports (like it was possible with OVITO 1.x). 

Release 2.2.2 (05-Jan-14):

 - Fixed regression: Rendering a movie with Ovito 2.2.1 resulted in an empty file.
 - Fixed display of the selection polygon when using the Fence selection mode of the Manual Selection modifier.
 - Added --glversion command line option, which allows to request a specific OpenGL standard.

Release 2.2.1 (26-Dec-13):

 - Added a file parser for binary LAMMPS dump files.
 - Added a dialog window that displays information about the system's OpenGL graphics driver. This dialog can be accessed via the Help menu.
 - Fixed bug in the Expression Select and Compute Property modifiers, which couldn't handle particle property names that start with a number.
 - The OpenGL compatibility profile is now used instead of the core profile on Windows and Linux platforms.
 - Fixed an issue in the Construct Surface Mesh modifier, which sometimes led to a program crash on Windows.

Release 2.2.0 (15-Dec-13):

 - Added the Cluster Analysis modifier.
 - Added the Construct Surface Mesh modifier.
 - Added possibility to open multiple application windows (useful on Mac OS X platform).
 - Added user option to the viewport settings dialog that allows to turn off the restriction of 
   the vertical camera rotation. 
 - Added first version of the CrystalAnalysis plugin, which allows working with data 
   produced by the Crystal Analysis Tool.
 - The XYZ file exporter now writes particle type names instead of numeric type IDs.
 - Extended user documentation.
 - The user manual is now distributed with the program. An Internet connection is no longer
   necessary to access it.
 - A few bug fixes and OpenGL compatibility improvements.

Release 2.1.0 (15-Nov-13):

 - Added the Manual Selection modifier, which allows selecting individual particles
   with the mouse in the viewports. Using its "Fence selection" mode, a group of particles
   can be selected by drawing a closed path around them.
 - In addition to spherical particles, OVITO can now display particles with cubic and square shape.
   This can be useful for visualization of large lattice systems, Ising models, etc.
 - OVITO can now import more than one dataset into the scene and display them side by side. 
   Use the "Import Local/Remote File" function multiple times to load 
   several simulation files (or multiple instances of the same file) into the program.
   Each dataset has its own modification pipeline, i.e., one can customize the 
   visualization of each dataset separately. Use the Affine Transformation modifier
   to move one of the datasets to a different location such that multiple
   objects do not overlap.
 - A new VTK file importer allows reading triangle meshes into OVITO to visualize
   geometric objects such as an indentor tip. The VTK format is the native format
   used by the ParaView software and can, for instance, be written by LIGGGHTS/LAMMPS.
 - Camera objects can be created through the viewport context menu. A viewport can be 
   linked to a camera object to show the the corresponding view. Camera objects can
   be animated (that's still an experimental and incomplete feature).
 - When importing a sequence of simulation snapshots into OVITO, one can now configure
   the mapping of input frames to OVITO's animation frames. This allows to generate output
   movies with less (or more) frames than the imported snapshot sequence. 
 - The Tachyon renderer now supports semi-transparent particles. The transparency is controlled
   through the "Transparency" particle property. Use, for instance, the Computer Property
   modifier to set this property for certain particles. The transparency values can range
   from 0 (=fully opaque) to 1 (=not visible).
 - Fixed saving/loading of the selected gradient type in the Color Coding modifier.
 - Fixed a program deadlock when when dragging the time slider after loading a file sequence.
   from a remote location.

Release 2.0.3 (22-Oct-13):

 - Ported Tachyon raytracing renderer from old OVITO 1.1.0 release. This software-based 
   rendering engine allows to produce images with high-quality shading and ambient
   occlusion lighting.
 - The Create Bonds modifier will automatically turn off the display of bonds when 
   creating a large number of bonds (>1 million), which would make the program freeze.
 - The Displacement Vectors modifier now supports relative reference frames, i.e.,
   displacements can be calculated from two snapshots separated by a fixed time interval.
   Before this addition, the modifier could only compute displacements with respect
   to a fixed simulation snapshot.
 - Fixed bug in the Affine Transformation modifier leading to recursive updates.
 - Added support for computers with high-resolution (Retina) displays.
 - The 'Inspect Particle' applet now lets one select multiple particles and can report 
   distances and angles.
 - Added 'Clear history' button to remote file import dialog.
 - POSCAR file exporter now writes the new file format, which includes atom type names.

Release 2.0.2 (30-Sep-13):

 - Fixed loading of multi-timestep files with names containing a digit.
 - Fixed import of CFG file with atom type information.

Release 2.0.1 (27-Sep-13):

 - Fixed loading of file sequences based on wildcard pattern on Windows platform.
 - Replaced const arrays in GLSL shaders with uniform variables to support older Intel graphics chips.
