Releases: TomographicImaging/CILViewer
Releases · TomographicImaging/CILViewer
Version 25.1.0
New Functionality:
- Added toolbar to control the slice and volume render in QCILViewerWidget (#458)
- added methods to access the state of the viewer3D (#479)
Enhancements:
- Update recipe to require eqt Version 2.0.0 #458
- Add a toolbar and settings menus to the 3D viewer #458
- Add script to generate numpy array test data #458
- Removed init.py in ccpi namespace, PEP-420 #483
- Dependencies:
- CI:
- Created new action for conda build and publish - no longer uses conda-package-publish-action (#486)
Version 25.0.0
Enhancements:
- Have
hdf5_attrsas attribute toHDF5InputDialog#452 - Add
SaveableRawInputDialog#444 - Standalone viewer uses
SaveableRawInputDialog- this allows user to save and reload settings for loading raw data #444
Bugfix:
- Fix
cilHDF5CroppedReader#462 - Correctly handle the Alt modifier and non 1 display pixel ratio, for Qt application with the viewer #464
Requirements:
- Reduced the requirements to the basic packages, add extra requirements in
ui_env.ymlfile #451 - Use the
qtpyabstraction layer #464
Documentation:
- Update readme, contributing, documentation #451
Build and CI:
Version 24.1.0
Enhancements:
- Add option to edit help text #441
- Update corner annotation with axis label #433
- Add title to ViewerCoordsDockWidget #422
- Adds methods to CILviewer and CILviewer2D #425
Bugfix:
- Fix error when visualising 2D images #439
- Hides the slider when one image dimension is 1 #432
- Differentiate 3D and 2D images in the converter
numpy2vtkImage#437 - Edit slider min value #420
- Fix extent error when user clicks in the viewer to create a box by clicking outside of the image #425
- Fix extent error when user enlarges the box outside the image #425
- Deprecates
GetImageWorldExtent#425
Version 24.0.1
Version 24.0.0
New functionality:
- Added preview to 'RawImportDialog' #410
- Add method to edit axes label text and tests, hide one label on 2D viewer #389 #408
- Add slider widget #365 and option to not install it #386. Link slider events #413
Bugfixes:
- Fix failing unit test #394
- Bugfix on resample reader. Standalone viewer app defaults to downsample in all dimensions. #362
- Fix bug with 'setInputAsNumpy' using deprecated 'numpy2vtkImporter' in 'CILViewer2D' - now uses 'numpy2vtkImage' #346
CI:
- Update eqt requirements to >=1.0.0 and update yml recipe #385
- Remove VTK 8 variants from conda recipe #375
- Change Python variants: removed 3.6 and 3.7, added 3.11 #375 (not Python 3.12 for incompatibility with EQT #399)
- Removed the 'paskino' channel from the install command as eqt is on 'conda-forge' #368
- Edit conda build and publish #371
- Fix dependencies in recipe #369
Documentation
Version 23.1.0
- Adds a
cilviewerentrypoint:- This launches a standalone viewer application with a 2D and 3D viewer and allows users to load any image file types we support using the File menu.
- This launches a
StandaloneViewerinstance (standalone_viewer.py)
- Updates README with how to run standalone viewer app and web viewer, and more image examples
- Raise error if try to add multiple widgets with the same name to CILViewer or CILViewer2D.
- Adds the following base classes to
ui.main_windows.py:- Add
ViewerMainWindowandViewerMainWindowWithSessionManagement- base classes for windows which would house viewers, with methods needed for creating settings dialogs, creating a coordinate settings dockwidget, and loading images. - Add
TwoViewersMainWindowandTwoViewersMainWindowWithSessionManagement- baseclasses which create a main window with 2 linked viewers in dockwidgets. TwoViewersMainWindowMixin- a mixin which provides methods to bothTwoViewersMainWindowWithSessionManagementandTwoViewersMainWindow. These methods are for adding viewers to the window, setting them up, linking them and adding a dockwidget for coordinate settings.
- Add
- Adds the following dialogs to
ui.dialogs.py:ViewerSettingsDialog- allows user to set downsample size settings and whether to use GPU for volume render.RawInputDialog- for setting info for loading a raw file including, size of dimensions, data type etc.HDF5InputDialog- for setting info for loading a HDF5 file, including the dataset name- Unit tests for creating each dialog.
Adds the following widgets toui.qt_widgets.py: ViewerCoordsDockWidget- for showing original and downsampled image size and allowing user to select which coord system to show on viewer.
- Adds methods to
CILViewerBase: setVisualisationDownsampling(moved out of CILViewer2D)getVisualisationDownsampling(moved out of CILViewer2D)- Adds methods to
CILViewer:setVolumeMappergetVolumeMapper
- Modifies
ImageReader:- Previously could read only from a file, now can read from memory instead by setting
vtk_imageparameter instead offile_nameparameter. - Add
SetVTKImagemethod - Added unit tests to cover providing a VTK image instead of file name
- Previously could read only from a file, now can read from memory instead by setting
- Add methods to
cilviewerHDF5Reader:- GetOriginalImageAttrs
- GetLoadedImageAttrs
- These methods are the same as those in
ImageReaderto be consistent.
Version 23.0.0
- add
deleteWidgetmethod to CILViewerBase - Add environment file for development of the viewer
- ImageWriter writes out with file extension set in FileFormat variable - previously didn't necessarily
do this for some hdf5 formats. - Fix bug with returning HDF5 attributes from HDF5Reader
- Move code for resetting camera out of TrameViewer3D and into CILViewer
- Adds the following methods to CILViewer (and corresponding unit tests):
- getGradientOpacityPercentiles
- getScalarOpacityPercentiles
- getVolumeColorPercentiles
- Adds to CILViewerBase (and corresponding unit tests):
- getSliceColorPercentiles
- setup.py:
- Always normalise the version from git describe to pep440
Version 22.4.0
- Add command line tool for resampling a dataset, with entrypoint: resample (and unit tests)
- Add
ImageReader:- Generic reader for reading to vtkImageData
- Reads: HDF5, MetaImage, Numpy, Raw, TIFF stacks
- Supports resampling OR cropping the dataset whilst reading.
- Add
ImageWriter:- Writer for writing out a modified i.e. resampled or cropped dataset.
- Supports writing to HDF5 and metaimage.
- Add
ImageWriterInterface:- Interface for writers, with methods for setting and getting information about modified
(i.e. resampled or cropped) image data to write to a file.
- Interface for writers, with methods for setting and getting information about modified
- Add
cilviewerHDF5Writer:- This is a writer which expects to be writing an original dataset or attributes of the original dataset,
plus one or more 'child' versions of the dataset which have been resampled and/or cropped. - Stores the information needed to reload a resampled or cropped dataset on the viewer.
- This is a writer which expects to be writing an original dataset or attributes of the original dataset,
- Add
cilviewerHDF5Reader:- for reading datasets generated by the cilviewerHDF5Writer.
- Add new requirements:
schemapyyaml
- Examples:
examples/image_reader_and_writer.pyis an example of using theImageReaderandImageWriterexamples/opacity_in_viewer.pyupdated to use head dataset fromutils/example_data.py
- Unit tests for all of the new readers and writers.
- Removed obsolete TIFF code from conversion.py. The following have been removed:
vtkTiffStack2numpytiffStack2numpytiffStack2numpyEnforceBounds_tiffStack2numpynormalizehighest_tuple_element
- Fixed cilTIFFResampler so that if original TIFF file has a set spacing and origin, this is taken into account when resampling.
- Fixed bug in
iviewerwith display of volume render. - iviewer now shows gradient opacity volume render of head dataset from
utils/example_data.pyby default. - Fix bug in CILViewer if volume render method is adjusted before volume render turned on.
Version 22.3.0
- Add a dictionary of widgets to the CILViewerBaseClass, and ability to add and retrieve widgets to/from the dict with methods
.addWidgetReferenceand.getWidget - Add a new file
widgets/box_widgets.pywhich contains classescilviewerBoxWidgetandcilviewerLineWidgetfor creating Box and Line widgets on the viewer. - Add example:
BoxWidgetAroundSlice.py- which demonstrates using the above classes. - Use the
cilviewerBoxWidgetclass for creating and positioning the ROIWidget on the CILViewer2D, which involved removing theCILViewer2D._truncateBoxmethod.
Version 22.2.0
- Qt examples use example_data
- Updates in all classes to take into account the backward incompatible methods name changes (see below)
- cilPlaneClipper:
- change signature of creator, and defaults to empty list of items to be clipped on init
- renamed Get/SetInteractor->Get/SetInteractorStyle
- Renamed all classes bearing name baseReader to ReaderInterface as they provide the interface not a abstract reader class.
- Added TIFF resample and cropped readers with unit tests.
- Add Set/GetOrientationType methods to TIFF resample and cropped readers, with default value 1: ORIENTATION_TOPLEFT (row 0 top, col 0 lhs)
- web_viewer:
- added web viewer using trame for viewer3D and viewer2D
- add entry point for running the web viewers
- added docker container to be deployed
- GitHub Action: autoyapf added
- Added example_data module to load the head data from the CIL-Data repository
- CILViewer2D:
- add ChangeOrientation, AutoWindowLevel, getSliceWindowLevelFromRange
- Backward incompatible rename of a few methods:
- Get/SetActiveSlice -> get/setActiveSlice,
- GetSliceOrientation -> getSliceOrientation,
- setColourWindowLevel -> setSliceColorWindowLevel,
- getColourLevel -> getSliceColourLevel,
- getColourWindow -> getSliceColorWindow,
- setColourWindowLevel -> setSliceColorWindowLevel
- fix definition of window range to be = max - min
- use CILViewerBase as base class
- CILViewer3D:
- added methods in interactor style to enable interaction with web app, rather than just key event binding
- add volume render opacity scalar and gradient
- add slice histogram
- fix method to change window and level for slice actor, by range or percentiles
- fix definition of window range to be = max - min
- use CILViewerBase as base class
- colormaps: added get_color_transfer_function
- added examples of running the 2D and 3D viewers without Qt
- Added CILViewer base class
- Conda recipe:
- Fix windows build recipe
- Add build variants for VTK to prevent need for multiple viewer release numbers for different VTK versions