Calcam Changelog
================

Minor Release 2.11.0 (August 2023)
----------------------------------

New & Enhancements:
* Added ability to turn off automatic trimming of geometry matrix rows and columns when creating GeometryMatrix objects.
* Add input fields for both vertical and horizontal FOV in virtual calibration editor so the user can specify either instead of only vertical.
* Added function intersect_with_line() to CADModel class and include in pbulic API.
* Improved performance of generating field of view representations and mapping camera images to CAD surface.
* Improved behaviour of "Set CAD view to match fit" button when using images with multiple sub-views in the fitting calibration tool.
* Added basic documentation of file formats.
* Improved image enhancement for some images where it previously had little effect

Compatibility:
* Move to new style packaging with pyproject.toml for compatibility with pip > 23. This means less flexible dependency management, but the dependencies are readily available enough now that this should be OK. (#83, #100)
* Fixed various additional compatibility issues under Python 3.9+ which raised exceptions due to floats being passed to PyQt calls which now require ints.
* Fixed ray casting compatibility with VTK7 which was inadvertently broken by 2.10.0
* Fixed compatibility of movement correction with newer versions of OpenCV.
* Fixed compatibility with NumPy >=1.24 which previously caused exceptions when using chessboard images (#99)

Fixes:
* When trying to save images, if an image file cannot be written (e.g. no disk space, permissions wrong etc) the user now gets an error message instead of silent failure.
* Fixed a bug which caused erratic behaviour in image analyser when using a calibration with multiple sub-views and movement correction.
* Fixed an exception which could be raised by certain combinations of clicks & key presses on VTK GUI elements.
* Fixed an issue which could raise exceptions if trying to perform a calibration fit with < 6 points (fit button is now disabled in this case).
* Field of view now updates correctly when changing pixel size or number of pixels in virtual calibration editor.
* Fixed issue with "lefover image" staying visible when changing sensor aspect ratio in the virtual calibration editor.
* Fixed a bug in the 3D viewer which caused a calibration legend with multiple entries to appear when rendering images with only 1 calibration visible.
* Fixed a bug which raised exceptions when using the "Set CAD view to match fit" button in the fitting calibration editor, for images with multiple sub-views if not all sub-views were fitted.
* Improved reliability of fitting calibration for high resolution images.
* Fixed PyQt error message to correctly reflect supported PyQt versions.
* Fixed bug in render.get_wall_coverage_actor() which caused status not to be reported properly when verbose=True
* Fixed bug in render.get_wall_coverage_actor() where providing a binned image caused the calculation to happen at higher instead of lower resolution.
* Fixed bug with 60s / 1min roll-over in duration estimate for long calculations which caused estimated times such as "0 min 60 sec"
* Fixed some typos / wording issues in GUI
* Switch from using 32bit int to 32bit float for saving pixel coordinates and binning values in Raycast NetCDF files, to allow correct saving & loading of raycasting witj sub-pixel sampling.
* Fixed bug in detection of monochrome images in enhance_image.scale_to_8bit()
* Fixed a bug in Calibration.set_detector_window() when using a detector window not completely overlapping the originally calibrated one.
* Fixed a bug which could raise exceptions in the image analyser if using a detector sub-window and movement correction.
* Removed some RuntimeWarnings raised by enhance_image() for some images.


Minor Release 2.10.0 (November 2022)
------------------------------------

New & Enhancements:
* Improved handling of errors which prevent the GUI from starting, so the user should always at least get an error message instead of silent failure.
* Added missing documentation for calcam.movement.phase_correlation_movement() so this is now part of the public API.
* Added WSAD & Up/Down/Left/Right keyboard controls for "walking" in the 3D views (#93)
* Switched to using vtkStaticCellLocator() for ray-casting because it's much faster but also for some reason much more accurate with newer versions of VTK.
* Minor documentation improvements

Compatibility:
* Removed support for PyQt6, because it causes more problems than it's worth on most platforms so sticking with PyQt5 for now gives an easier / more reliable user experience.
* Fixed various problems with the GUI under Python 3.10:
   * Fixed an issue which prevented the main GUI tools from opening at alll (silent failure) (#94)
   * Fixed non-working colour chooser (#95)
   * Fix exceptions related to sliders (part of #78)
   * Fixed exception raised when rendering unfolded wall in Viewer tool
* Added workaround / mitigation for silent Python crashes with VTK => 9.1 when setting some CAD models to wireframe (#78)
	* Removed restriction of VTK version < 9.1 in setup.py and updated docs accordingly.

Fixes:
* Fixed an exception raised when adding CAD viewports from a calibration file in the Viewer GUI if the user had not manually resized the window since it was opened. (#96)
* Fixed an exception raised by Calibration.project_points() for fisheye lens calibrations if it was called with only a single 3D point to project.
* Fixed a bug where calling get_model_normals() on a raycast result with no model normals would return an exception class, instead of raising an exception.
* Fixed a couple of left-over legacy variable names in the CADModel class


Patch Release 2.9.1 (23rd July 2022)
------------------------------------

Fixes:
* Fixed bug which caused the Settings GUI to fail to open under PyQt6 in some circumstances.
* Fixed bug in RayData class where getting a data array from a Raydata object loaded from disk could produce garbled results.
* Fixed exception raised by QVTKRenderWindowInteractor in PyQt6 if QGLWidget is not available.
* Fixed (hopefully) invalid .zenodo.json so future releases get successfully published on Zenodo.
* Try to save a little memory by adding de-registration of ZipSaveFile.close() method from atexit when the file is closed.


Minor Release 2.9.0 (17th July 2022)
------------------------------------

New & Enhancements:
* Calcam now available on PyPi (but could use improvements to make distribution more PEP compliant in future) (#83)
* Support masking of images (i.e marking parts of the image which do not contain any actual image) in fitting and manual alignment calibration tools (#46).
* Add vertical field of view input in virtual calibration editor as an alternative to focal length (#85).
* Remove error message if fitting determines the camera is upside-down; camera roll now settable in range -180,180 instead of -90,90 degrees.
* In the virtual calibration editor, hide pinhole model parameters if another intrinsics type is selected (otherwise could be misleading).
* In the virtual calibration editor, when using intrinsics from an existing calibration, display the filename of that calibration.
* Add button to save image to use as a template for creating image masks.
* Add ability to place a default configuration file in the calcam directory which will be checked for new users on multi-user systems.
* Version number is now stored in 1 place (calcam/__version__) instead of 3 different places.
* Re-work setup.py for compatibility with PyPi and pip.
* Make handling of missing dependencies smoother & error messages more helpful (hopefully), including raising ImportWarnings at import instead of print statements.
* Try to improve documentation for installation & setup.
* Change new version update prompt link from linking to code archive to linking to the relevant doc page.
* Improve image quality and status printing in render_unfolded_wall()
* Added function GeometryMatrix.unformat_image() to do the inverse of format_image(). This is convenient to have when using the new masking functions.

Fixes:
* Fix issue where setting the 3D CAD view to match a calibration result set the camera roll inaccurately.
* Fix a bug which caused invisible wall coverage shading on some platforms (#86).
* Fix an exception raised in the CAD definition editor when deteling model variants in a new CAD model definition (#87).
* Fix exception raised when opening calibration info box with PyQt6 (#88)
* Fix a bug where the filename of a calibration is not updated in the calibration info after "Save As"
* Fix a bug in the virtual calibration editor where changing intrinsics type did not enable the correct set of options.
* Fix a bug where the virtual calibration editor would prompt to save changes even with no CAD model loaded.
* Fixed a bug where the "new version available" prompt could be shown incorrectly.
* Fixed a bug in 3D viewer where loading a calibration while "CAD model shading" view type was selected raised an exception.
* Fixed an issue which sometimes caused exceptions from MatPlotLib if plotting a tomography grid without data.
* Fitting options no longer reset for no reason when changing image masking in fitting calibration tool.
* Fix an exception raised when pressing Alt+Shift keys together over VTK views.
* Replace exception raised in image analyser if the image window metadata does not match calibration with a more helpful error message.
* Fixed an issue where the CAD model definition editor would not recognise a path was in the Calcam config even when it was.


Patch Release 2.8.3 (01 Apr 2022)
---------------------------------

* Fixed a bug in the 3D viewer tool which raised exceptions when enabling/disabling CAD model features with 1 or more calibrations loaded but un-checked.


Patch 2.8.2 (26 Mar 2022)
---------------------------------

* Fixed a bug in the image analysis tool which caused exceptions to be raised when toggling image save options in the "Position Analysis" tab.


Patch 2.8.1 (15 Feb 2022)
---------------------------------

* Fixed a bug when using the image movement tool to adjust points within the fitting calibration tool, when loading a new image. Points which moved outside the image area were not being updated, when in fact they should be removed.


Minor Release 2.8.0 (10 Feb 2022)
---------------------------------

New & Enhancements:
* Added ability to render un-folded image of tokamak interior on to a rectangular image (render.render_unfolded_wall() and available through 3D Viewer GUI)
* Added ability for ray-casting to calculate the CAD model surface normal vectors where sight-lines intersect the CAD model, these are now stored in RayData objects.
* Added option to show camera fields of view as shading of the CAD model in the 3D Viewer GUI
* When loading calibrations with multiple sub-views in to the 3D Viewer GUI, the appearance of the field of view for each sub-view can now be changed independently.
* Display of 3D coordinate data loaded in to the 3D viewer GUI can now be much more customised (showing as lines / points, line width & marker size adjustment, legend support)
* Layout of the movement correction GUI has been re-organised.
* Image analyser GUI can now show an image mapped on to the CAD model surface in its 3D view.
* Image analyser GUI can now apply colour-maps to loaded gresycale images.
* Image analyser GUI now supports applying movement correction to a loaded image for more accurate results.
* Layout of displayed position information in the image analyser GUI has been improved
* Image analyser GUI now supports saving images.
* When loading a new image in the fitting calibration tool, there is now a prompt to use the movement correction tool to quickly adjust all calibration points at once.
* In the fitting calibration tool, image enhancement options in the main window are now also applied in the sub-view definition editing dialog.
* CAD overlays in the fitting calibration tool are now always rendered at 1 megapixel or greater resolution, even for low resolution images being calibrated. (#74)
* Added additional options to customise display of the CAD overlay image in the fitting calibration tool (can be wireframe or solid CAD; adjustable opacity).
* Added "undo" function to fitting calibration tool which can undo up to the last 20 changes to the calibration point coordinates. (#75)
* When saving the current view in the 3D viewier tool, any legend displayed in the window is now included in the output image.

Compatibility Updates:
* Now compatible with PyQt6
* Changed dependency in setup.py from opencv-python to opencv-python-headless to reduce likelihood of problems with OpenCV vs PyQt version conflicts. (#72)
* Restricted versions of VTK installed by setup.py to avoid issues with newer versions of VTK (see #78)

Fixes:
* On Windows, stopped separate VTK error output window opening to show VTK warnings.
* Fixed bug in Image analyser which could cause exceptions when loading images in display orientation.
* Fixed bug where image enhancement was unexpectedly turned off (but the checkbox stayed checked) when editing sub-view definitions in the fitting calibration tool
* Fixed issue where the colour used for the CAD overlay did not correctly follow the colour picked by the user.


Minor Release 2.7.0 (17 Apr 2021)
---------------------------------

Compatibility Updates:
* Now compatible with VTK versions newer than 8.1 (tested up to 9.0.1) (Closes iussues #58 and #65)
* Should now be ready to work with Python 3.10 (removed dependency on deprecated standard library module "imp") (Closes issue #27)
* Due to the above changes, from this version on, Calcam will not work with versions of Python older than 3.5

New & Enhancements:
* Improved wording of buttons on GUI exception dialog box
* Improved rendering quality when using anti-aliasing
* Improved display of exceptions in user plugin code
* Uses an improved method for opening files outside Calcam wherever this is used
* Add photoshop files for logo graphics to repo.

Fixes:
* Fix bug in Calibration.set_detector_window() which raised exceptions for calibrations with multiple sub-views
* Fix a bug in Calibration.get_fov() which could raise exceptions when calling with fullchip=True, sometimes caused errors in fitting tool
* Fix a bug in the MovementCorrection class which caused inaccurate results when calculating coordinate transformations between moved images
* Fix exception raised when deleting the default view in CAD model editor (Issue #68)
* Fix various other bugs in CAD model editor, including one which could break some old CAD model definition files!
* Removed non-functional close button on GUI exception dialog box
* Fix various bugs which related to image metadata and detector windowing in analyser tool
* Fix a bug which caused minor inaccuracy in results of render_cam_view()


Patch 2.6.1 (08 Dec 2020)
-------------------------

Fixes:
* Fix exception raised by Calibration.set_detector_window() for some combinations of calibrated and set detector windows.
* Fix spurious update notifications when using development versions.


Minor Release 2.6.0 (05 Dec 2020)
---------------------------------

New & Enhancements:
* Allow setting of detector window using Calibration.set_detector_window() for multi sub-view calibrations if the requested window is not entirely overlapping with the original.
* Enable direct opening of .ccc files by passing the filename to the Calcam GUI executable.
* Change references to "perspective" lens model to "rectilinear"

Fixes:
* Roll back changes to render_cam_view() made in v2.5.0 because they break rendering for images with multiple sub-views.
* Fixed bug in version checking logic so the upgrade message is not shown when using the master branch version.
* Fix bug in coordtransformer() in image size checking logic which would cause erroneous errors about expected image size (possibly related to #56).
* Properly format docstrings in coordtransformer.py
* Enable rendering with oversampling and original coords (previously raised an exception saying not supported)
* Fix bug in CoordTransformer.original_to_display_shape() and display_to_original_shape() where the pixel aspect ratio was ignored.
* Fix a bug which raised an exception and prevented loading saved geometry matrices with newer versions of NumPy.
* Replace exception raised when saving an empty alignment calibration with a friendlier dialog box.
* Fix pop-up of VTK error window when closing Calcam GUI on Windows.
* Fix Calibration.subview_mask not being restored properly when resetting detector windowing using Calibration.set_detector_window(None) (Issue #60)
* Fix image cropping not working properly in Calibration.set_detector_window() if the requested window is bigger than the original calibration.
* Fix un-paired 3D cursors being added when importing point pairs from a calibration with a bigger readout window.
* Fix exception raised when loading a new image in to a calibration with multuple sub-views (by keeping subview mask when loading new image)


Minor Release 2.5.0 (22 Jul 2020)
---------------------------------

New & Enhancements:
* Improved brightness scaling of images with >8 bits per pixel to give better image display for high bit-depth images.
* Added new keyword arguments "exclusion_radius" and "intersecting_only" to raycast_sightlines() (#49) (see documentation for details)
* Add options for specifying original or display coordinates and ROI offset when loading image files.
* Improve setup script messages for more user-friendliness
* Improve introductory documentation, mainly installation guide / dependencies.
* Possibly slightly increased the speed of render_cam_view()

Fixes:
* Fix a bug which raised exceptions when loading calibration sight-lines in to the 3D viewer
* Fix exception raised by raycast_sightlines() if no CAD model features are loaded
* Fix bug where split field calibrations did not always load properly in the fitting tool
* Fix exceptions raised in the point fitting tool if changing split-field definition with point pairs already defined.
* Fix exceptions raised in image analyser when loading an image before a calibration
* Fix several bugs in the CAD model editor which raised exceptions and/or resulted in broken .ccm files.
* Image analyser now correctly updates wireframe overlays when selecting or deselecting CAD features or loading images with different detector windows
* Fix issue where cursor position information was not updated when creating a new point in the fitting calibration tool.
* Remove now unnecessary (I think) setting of matplotlib backend which could cause crashes on import if using matplotlib > 3.2.
* Change setup.py to avoid installing VTK > 8.2 (workaround for issue #58)


Patch 2.4.1 (08 Jan 2020)
-------------------------

Fixes:
* Fixed long-standing issue with corrupted CAD model rendering on some unix systems (#55). Requires QtOpenGL submodule of PyQt to be available (otherwise falls back to previous behaviour).
* Fixed issue where image enhancement made some images look much worse (#51).
* Fixed camera roll angle entry not working properly in CAD model editor (#54).
* Fixed bug where after turning on the axisymmetric wall contour display in the 3D viewer, it could not be turned off again (#52).
* Fixed bug where the detector window information was not loaded properly when loading calibrations in the fitting tool, which led to exceptions when loading point pairs from other calibrations, and possibly other errors.

New & Enhancements:
* Added display of QtOpenGL module availability to the system information in the Settings dialog box, for troubleshooting rendering issues.


Minor Release 2.4.0 (06 Nov 2019)
---------------------------------

New & Enhancements:
* Vastly improve treatment of detector sub-windowing: added Calibration.set_detector_window() and RayData.set_detector_window() methods
* Implement support for detector sub-windowing in image analyser
* Implement adjustment for different detector windowing when loading point pairs from existing calibrations in fitting tool
* Add optional arguments to enhance_image() to enable or disable enhanecement steps. This allows better image detail retention when enhancing low pixel count images.
* Image Analysis GUI now shows images in display coordinates immediately even if a calibration is not loaded.

Fixes:
* Fixed a bug in fitting calibration GUI where an exception could be raised when points were cleared.
* Fixed a bug in 3D viewer GUI which would raise an exception after editing the name of a 3D line not currently selected.
* Fix image transforms in CoordTransformer to work with arrays with non integer dtypes, provided the camera pixels are square.
* Fixed a bug when loading calibrations with no detector window offset stored (i.e. from older Calcam versions) which caused exceptions in set_detector_window().


Patch 2.3.1 (30 Jul 2019)
-------------------------

Fixes:
* Fix image_enhancement.enhance_image() not working properly with 16-bit images.
* Fix slightly broken layout of chessboard image dialog box.
* Fix various typos in docs (both standalone and docstrings).
* Tweaks to exception messages.
* Manual movement correction diaglog now auto-sizes based on screen resolution like other GUIs.
* Chessboard images loaded in virtual calibration editor now define the sensor size, instead of being checked for consistency with the pinhole model pixel dimensions.
* Remove surplus debug print statements.


Minor Release 2.3.0 (20 Jul 2019)
---------------------------------

New & Enhancements:
* Added calcam.movement module for camera movement correction
* New GUI tool for manual camera movement correction
* Add prompt to automatically detect image movement when loading a new image in the fitting calibration tool
* Added image_enhancement module for movement detection pre-processing and Improved image enhancement in GUI tools
* Added support for detector sub-windowing via "offset" parameter

Fixes since 2.2.3:
* Fixed bug where clicking "Browse" when using an image source which had a filename as not the final input raised an exception.
* Fixed bug where Loading chessboard images for intrinsics calibration in the alignment calibration tool reset the image orientation after clicking "apply".
* Fixed exception when loading a multi sub-view image and then running a fit in the fitting calibration tool.
* Fixed bug when loading R,Z,phi data from a file to plot in the 3D viewer which caused the data to be displayed incorrectly
* Fixed issue where config.get_cadmodels() raised an exception if one (or more) CAD model file(s) is not readable.
* Fixed a bug in the CAD model editor where browsing for a mesh file to add, then clicking cancel on the browse window, raised an exception.
* Fixed a bug where an image could be loaded in the wrong orientation when loading a new image in to the fitting calibration tool.


Patch 2.2.3 (2nd Apr 2019)
--------------------------

Fixes:
* Replacing a mesh file with one of the same filename in the CAD model editor no longer results in a broken .ccc file.
* Fix default 2D array flattening order in GeometryMatrix being different from NumPy's default (resulted in transposed images).
* Fix exceptions raised when opening a calibration with a CAD model not available on your install.
* Fix image rendering from 3D viewer GUI always rendering in display orientation regardless of selected settings.
* Fix re-arrangement of model features between groups in the CAD model editor not being saved.
* Make error message less obnoxious when trying to load the Calcam GUI with the launcher script on a system without the GUI available.
* Remove redundant debug message box in Image Anslyser.


Patch 2.2.2 (26th Feb 2019)
---------------------------

Fixes:
* Fix bug raising exceptions from raycast_sightlines when using status_callback=None.


Patch 2.2.1 (25th Feb 2019)
---------------------------

Changed:
* Latest version check in launcher GUI now checks GitHub tags instead of releases (and gives download link).

Fixes:
* "--user" option to setup script now correctly carries through to pip for dependency installations (Issue #38)
* Fix exception when prompted to browse for CAD models under python 2.x (Issue #39)
* Fix various typos and tweaks to docs


Minor Release 2.2.0 (25th Feb 2019)
-----------------------------------

New & Enhancements:
* Replaced undocumented geometry matrix functionality in calcam.geometry_matrix with new calcam.gm module and add corresponding documentation.
* Re-written setup script with better dependency handling (checks presence and tries to use PIP to get them) and better messages. Update docs accordingly.
* Added provenance tracking capabilities to RayData class.

Fixes:
* Fix bug where loading chessboard images in the fitting calibration tool would cause an exception.
* Fix bug where calcam.gui and matplotlib could try to use different PyQt versions leading to exceptions.
* Fix bugs in VirtualCalib.__init__ and AlignmentCalib.__init__ which caused segfaults when launching virtual and alignment calibration GUIs on some platforms.
* Fix broken Fitter.set_fitflags_strings() method.
* Fix loading of calibrations with intrinsics constraints in fitting calib tool (previously intrinsics constraints disappeared)
* Fix incorrect number of point pairs reported when using another calibration for intrinsics constraints.
* Various typo fixes and minor tweaks in docs
* Fix a bug in CoordTransformer which resulted in strange image point types in transformed pointpairs objects, leading to exceptions


Bug fix release 2.1.2 (5th Feb 2019)
------------------------------------

Hot on the heels of yesterday's serious bug...another!

Fixes:
* Change explicit check for OpenCV major version == 3 to major version > 2, for compatbility with OpenCV 4.


Bug fix release 2.1.1 (4th Feb 2019)
------------------------------------

Fixes:
* Performing a fit in a newly created calibration raises an exception


Minor Release 2.1.0 (18 Jan 2019)
---------------------------------

New & Enhancements:
* Add Calibration.get_undistort_coeffs() method (Issue #24)
* Add ability to customise the colour of the wireframe overlay including transparency in fitting tool (Issues #31 & 25)
* Add fallback method for histogram equilisation if OpenCV hist eq unavailable, and adjust OpenCV Hist Eq parameters (Issue #25)
* In fitting tool, the current points, fit and display are preserved when loading another image of compatible dimensions (Issue #30 + general improvement)
* Add ability to load another calibration for overlay comparison in fitting tool (Issue #32)
* Add ability to specify camera extrinsics by roll instead of upvec in Calibration.set_extrinsics() and also add check that upvec and viewdir are orthogonal.
* Add ability to manually specify source directory in Calcam 1.x file converter
* Various GUI appearance enhancements for non-Windows OSs.
* Added friendlier error message if permission denied trying to save a file.

Fixes:
* Fix bug in Calcam 1.x file converter which caused fit results not to be converted properly.
* Fixed incomplete reset of GUI state when resetting the fit (Issue #30)
* Fix mesh files not being loadable in the CAD model editor under python 2.x
* Fix incorrect classification of "user code" in exception handling
* Add QVTKRenderWindowInteractor.py to Calcam distribution to work around compatibility issue with VTK + PyQt5 as distributed with Enthought Canopy.
* Fix exceptions when opening calibrations not containing images.



Bug fix release 2.0.1 (18 Dec 2018)
-----------------------------------

Fixes:
* Fixed bug in CAD model editor causing exceptions when removing model features which had been moved between groups.
* Fixed CAD model editor often spuriously reported that there were unsaved changes to the CAD model.
* Fixed reloading of user coordinate formatter in CAD model editor hitting recursion limit.
* Fixed missing "Are you sure" prompt when removing viewports in CAD model editor.
* Fixed some GUI elements not being reset properly when un-loading a model in the CAD model editor.
* Changed exception raised in CAD model editor when loading UTF8 encoded data to a friendlier message.
* Fixed exceptions raised in calibration tools when loading calibrations if the CAD model has a different set of features than expected.
* Fixed checked features in CAD model feature tree becoming out of sync when loading calibrations.
* Fixed bug which could cause CAD model definitions to be corrupted if they did not close cleanly.
* Fixed undesirable behaviour which caused 1 broken CAD definition file to stop all others being detected.
* Fixed bug where custom coordinate formatters were not properly reloaded when reloading CAD models (can cause exceptions in some circumstances).
* Minor typo fixes
* Added missing image + notes on user code structure in documentation



Calcam v2.0.0 (16 Dec 2018)
--------------------------------

New major version with many API, GUI and file format changes.

See full documentation pages for notes on upgrading from Calcam 1.x.



Bug fix release 1.9.4 (06 Nov 2018)
-----------------------------------

Fixes:
* Fixed bug causing unhandled exceptions when opening GUI with no CAD models set up (e.g. on first run)



Bug fix release 1.9.3 (11 Mar 2018)
-----------------------------------

Fixes:
* Fixed bug in loading legacy CSV format fit files under Python 3.6
* Fixed string formatting in exception handling under Python 3.6
* Fixed bug when checking if "Do Fit" button should be enabled which caused exceptions when loading some previously used images.
* Fixed image points disappearing when loading a different image of the same shape when they should be persistent.



Bug fix relase 1.9.2 (21 Feb 2018)
----------------------------------

Fixes:
* Fix inaccurate rendering in render_cam_view() for images with the centre of perspective not at the image centre (as far as I know this bug has existed since the very earliest versions of Calcam, but only now been noticed).
* Only enable "Do Fit" button in calibration tool when there are enough points that OpenCV won't raise an exception.



Update to 1.9.1 (18 Feb 2018)
-----------------------------

Fixes:
* Fixed exception raised when clicking "Apply" in the split field definition dialog.
* Fixed zoom not working properly in split field definition dialog.
* Fixed broken field mask behaviour when using 2-point split-field definition (and greatly simplify algorithm in the process).
* In point fitting calibration tool, fixed various GUI elements with text being cut-off due to being too narrow.
* Fixed a bug where performing some image geometrical transformations would cause the image to move off-centre in the window.
* Hard code version string in __init__.py; the way I did it before was stupid.
* Fixed bug where the numbers of paired and un-paired points was not being reported correctly.
* Fix off-by-1 issue when converting between VTK and image coordinates (effects point pair calibration and image analyser).

New & Enhancements:
* Make RayCaster class available in the root of the calcam package instead of only in calcam.raytrace.
* Switch to Sphinx for documentation. The documentation is not yet complete, but it's no less complete than it was before.
* Tweaks to launcher GUI including displaying calcam version in the window title
* Update GUI window titles
* Whether or not the 'Do Fit' button is enabled is now decided a bit more cleverly depending on how many fit parameters are enabled.

Removed:
* Removed unused exclude_feature_edges and include_feature_edges arguments in calcam.render.render_cam_view()



Release 1.9.0 (15 Feb 2018)
---------------------------

Fixes:
* Various fixes to mouse interaction (juddering, not recognising button-up etc)
* Many other bug fixes (see commit messages)

New:
* Add setup script
* First version with a proper release tag, and add __version__ attribute to package
* Actually start using Changelog somewhat properly
