Skip to content

Releases: TomographicImaging/CILViewer

Version 25.1.0

28 Nov 14:08
d52887a

Choose a tag to compare

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:
    • removed python pinning (#482)
    • removed importlib_metadata, required for python <3.8 (#482)
  • CI:
    • Created new action for conda build and publish - no longer uses conda-package-publish-action (#486)

Version 25.0.0

04 Jul 15:05
1fafc95

Choose a tag to compare

Enhancements:

  • Have hdf5_attrs as attribute to HDF5InputDialog #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.yml file #451
  • Use the qtpy abstraction layer #464

Documentation:

  • Update readme, contributing, documentation #451

Build and CI:

  • Renamed mambaforge to miniforge to fix docker action #446
  • Use ubuntu v22.04 in the actions #446
  • Add setuptools as a build requirement #446

Version 24.1.0

10 Oct 14:15
076cfb9

Choose a tag to compare

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

31 Jul 10:18
7934860

Choose a tag to compare

Build and CI:

  • removed python pinning from conda recipe #418

Bugfix:

  • removed deprecated code by numpy v2.0 #418

Version 24.0.0

11 Jun 15:26
ded786f

Choose a tag to compare

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

  • Add CONTRIBUTING.md #403
  • Edit web-viewer readme #401
  • Transfer repository to 'TomographicImaging' #402
  • Add PR template #244 #373
  • Edit README.md #344

Version 23.1.0

22 May 14:24
b7794ca

Choose a tag to compare

  • Adds a cilviewer entrypoint:
    • 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 StandaloneViewer instance (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 ViewerMainWindow and ViewerMainWindowWithSessionManagement - base classes for windows which would house viewers, with methods needed for creating settings dialogs, creating a coordinate settings dockwidget, and loading images.
    • Add TwoViewersMainWindow and TwoViewersMainWindowWithSessionManagement - baseclasses which create a main window with 2 linked viewers in dockwidgets.
    • TwoViewersMainWindowMixin - a mixin which provides methods to both TwoViewersMainWindowWithSessionManagement and TwoViewersMainWindow. These methods are for adding viewers to the window, setting them up, linking them and adding a dockwidget for coordinate settings.
  • 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 to ui.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:
    • setVolumeMapper
    • getVolumeMapper
  • Modifies ImageReader:
    • Previously could read only from a file, now can read from memory instead by setting vtk_image parameter instead of file_name parameter.
    • Add SetVTKImage method
    • Added unit tests to cover providing a VTK image instead of file name
  • Add methods to cilviewerHDF5Reader:
    • GetOriginalImageAttrs
    • GetLoadedImageAttrs
    • These methods are the same as those in ImageReader to be consistent.

Version 23.0.0

31 Mar 15:18

Choose a tag to compare

  • add deleteWidget method 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

19 Aug 10:42
70b1f28

Choose a tag to compare

  • 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.
  • 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.
  • Add cilviewerHDF5Reader:
    • for reading datasets generated by the cilviewerHDF5Writer.
  • Add new requirements:
    • schema
    • pyyaml
  • Examples:
    • examples/image_reader_and_writer.py is an example of using the ImageReader and ImageWriter
    • examples/opacity_in_viewer.py updated to use head dataset from utils/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:
    • vtkTiffStack2numpy
    • tiffStack2numpy
    • tiffStack2numpyEnforceBounds
    • _tiffStack2numpy
    • normalize
    • highest_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 iviewer with display of volume render.
  • iviewer now shows gradient opacity volume render of head dataset from utils/example_data.py by default.
  • Fix bug in CILViewer if volume render method is adjusted before volume render turned on.

Version 22.3.0

11 Aug 16:55
4cc7472

Choose a tag to compare

  • Add a dictionary of widgets to the CILViewerBaseClass, and ability to add and retrieve widgets to/from the dict with methods .addWidgetReference and .getWidget
  • Add a new file widgets/box_widgets.py which contains classes cilviewerBoxWidget and cilviewerLineWidget for creating Box and Line widgets on the viewer.
  • Add example: BoxWidgetAroundSlice.py - which demonstrates using the above classes.
  • Use the cilviewerBoxWidget class for creating and positioning the ROIWidget on the CILViewer2D, which involved removing the CILViewer2D._truncateBox method.

Version 22.2.0

01 Aug 15:38
c9d8604

Choose a tag to compare

  • 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