|
| 1 | +# Version 2.0 # |
| 2 | + |
| 3 | +## PlotPy Version 2.0.3 (2023-12-22) ## |
| 4 | + |
| 5 | +Bug fixes: |
| 6 | + |
| 7 | +* [Issue #9](https://github.com/PlotPyStack/PlotPy/issues/9) - MacOS: `error: a space is required between consecutive right angle brackets (use '> >')` |
| 8 | + |
| 9 | +## PlotPy Version 2.0.2 (2023-12-15) ## |
| 10 | + |
| 11 | +Bug fixes: |
| 12 | + |
| 13 | +* [Issue #3](https://github.com/PlotPyStack/PlotPy/issues/3) - `PlotWidget`: `ZeroDivisionError` on resize while ignoring constraints |
| 14 | +* [Issue #4](https://github.com/PlotPyStack/PlotPy/issues/4) - Average cross section: `RuntimeWarning: Mean of empty slice.` |
| 15 | +* [Issue #5](https://github.com/PlotPyStack/PlotPy/issues/5) - Contrast panel: levels histogram is sometimes not updated |
| 16 | +* [Issue #6](https://github.com/PlotPyStack/PlotPy/issues/6) - 1D Histogram items are not properly drawn |
| 17 | +* [Issue #7](https://github.com/PlotPyStack/PlotPy/issues/7) - Contrast panel: histogram may contains zeros periodically due to improper bin sizes |
| 18 | +* [Issue #8](https://github.com/PlotPyStack/PlotPy/issues/8) - Contrast panel: switch back to default tool after selecting min/max |
| 19 | + |
| 20 | +## PlotPy Version 2.0.1 (2023-11-29) ## |
| 21 | + |
| 22 | +Bug fixes: |
| 23 | + |
| 24 | +* Fixed `plotpy.tools.AnnotatedEllipseTool`: `AttributeError` when finalizing the shape |
| 25 | +* `plotpy.widgets.select_with_shape_tool`: added missing `toolbar` and `options` parameters |
| 26 | +* `items.XRangeSelection` is now serializable, as expected |
| 27 | + |
| 28 | +Documentation: |
| 29 | + |
| 30 | +* `plotpy.plot.SyncPlotWindow`: added missing documentation |
| 31 | +* Added more information on PlotPyStack |
| 32 | +* New "Motivation" section explaining the reasons behind the creation of PlotPy |
| 33 | + |
| 34 | +## PlotPy Version 2.0.0 (2023-10-25) ## |
| 35 | + |
| 36 | +This version is the first release of the 2.0 series, which is distributed under the [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause). |
| 37 | + |
| 38 | +PlotPy 2.0 is a major release that brings a lot of new features and bug fixes. |
| 39 | + |
| 40 | +When initiated in 2016, PlotPy 1.0 was the result of the merge of two projects (as well as some other changes, e.g. a redesign of the API): |
| 41 | + |
| 42 | +* [guidata](https://pypi.org/project/guidata/), a Python library generating graphical user interfaces for easy dataset editing and display |
| 43 | +* [guiqwt](https://pypi.org/project/guiqwt/), a Python library providing efficient 2D data-plotting features (curve/image visualization and related tools) for interactive computing and signal/image processing application development |
| 44 | + |
| 45 | +With PlotPy 2.0, the [guidata](https://pypi.org/project/guidata/) code base has been reextracted: PlotPy now relies on [guidata](https://pypi.org/project/guidata/) as a dependency, like before the merge. |
| 46 | + |
| 47 | +PlotPy 2.0 also integrates all the bug fixes (>30) and new features that were added to [guiqwt](https://pypi.org/project/guiqwt/) since the merge (i.e. between 2016 and 2023). |
| 48 | + |
| 49 | +Supported versions of Python and Qt bindings have been updated: |
| 50 | + |
| 51 | +* Python: 3.8, 3.9, and 3.10 (3.11 should work too, but will be officially supported when dropping support for Python 3.8, to keep a 3-year support period) |
| 52 | +* Qt bindings: PyQt5 (even if PyQt6 and PySide6 are not officially supported, efforts have been made and will continue to be made to support them) |
| 53 | + |
| 54 | +PlotPy 2.0 is a major release because it also brings a lot of new features: |
| 55 | + |
| 56 | +* `plot.PlotWidget`, `plot.PlotDialog`, and `plot.PlotWindow`: API overhaul (simple, more consistent, more flexible, more extensible - see documentation for details) |
| 57 | +* `plot.SyncPlotWindow`: new class to show multiple plots in a single window, in a synchronized way (zoom, pan, etc.) |
| 58 | +* `widgets.selectdialog.SelectDialog`: a dialog box to select items using a shape tool (segment, rectangle or custom) |
| 59 | +* Image lookup table (LUT): |
| 60 | + * Initially, the LUT alpha channel was either constant (input parameter `alpha` was a float between 0 and 1) or linearly dependent on the image pixel values (when the `alpha_mask` parameter was enabled) |
| 61 | + * Now, the LUT may be either constant (same as before) or dependent on the image pixel values but not only linearly: the LUT alpha channel may follow a linear, a sigmoid or an hyperbolic tangent function (see the new `alpha_function` parameter). The old `alpha_mask` parameter was removed |
| 62 | +* Image pixels are now centered on their coordinates: |
| 63 | + * This means that the pixel at row `i` and column `j` is centered on the point `(j, i)` (before, the top-left corner of the pixel at row `i` and column `j` was centered on the point `(j, i)`) |
| 64 | + * This convention is more consistent with the way images are displayed in other scientific image processing tools |
| 65 | + * This is one of the benefits of porting back [guiqwt](https://pypi.org/project/guiqwt/) changes since the merge (i.e. between 2016 and 2023) |
| 66 | +* New SVG-based shapes: |
| 67 | + * `items.RectangleSVGShape`: rectangle shape based on SVG data or file |
| 68 | + * `items.SquareSVGShape`: square shape based on SVG data or file |
| 69 | + * `items.CircleSVGShape`: circle shape based on SVG data or file |
| 70 | +* `builder.PlotBuilder`: |
| 71 | + * Renamed `PlotBuilder` (originally `guiqwt.builder.PlotItemBuilder`) |
| 72 | + * Builder instance is still available using `from plotpy.builder import make` |
| 73 | + * Plot widget creation is now supported: |
| 74 | + * `make.widget()` for `plot.PlotWidget` |
| 75 | + * `make.dialog()` for `plot.PlotDialog` |
| 76 | + * `make.window()` for `plot.PlotWindow` |
| 77 | + * Added support for more plot items: |
| 78 | + * `make.contours()` for generating a list of `items.ContourItem` objects |
| 79 | + * `make.annotated_point()` for `items.AnnotatedPoint` |
| 80 | + * `make.polygon()` for `items.PolygonShape` |
| 81 | + * `make.svg()` for `items.RectangleSVGShape`, `items.SquareSVGShape`, and `items.CircleSVGShape` |
| 82 | +* Added JSON serialization support for all plot items (curve, image, etc.) |
| 83 | + |
| 84 | +* Brand new documentation, based on Sphinx with links to other projects API, examples and tutorials (e.g. on development related topics). |
| 85 | +* Black code formatting on all Python files |
| 86 | +* New automated test suite: |
| 87 | + * Automatic execution: `--unattended` command line option (Qt loop is bypassed) |
| 88 | + * Test suite based on `pytest`, supporting `pytest-cov` for coverage testing, `pytest-xvfb` for headless testing, and `pytest-qt` for Qt testing |
| 89 | + * Added support for Coverage: test coverage improved up to 70% |
| 90 | +* Added typing annotations on (almost) all Python files |
| 91 | +* Distribution: switched to `pyproject.toml` (still relying on `setuptools` and `setup.py` for building Cython/C++ extensions) |
| 92 | +* Added code quality configuration files: |
| 93 | + * `.pylintrc`: pylint configuration file |
| 94 | + * `.isort.cfg`: isort configuration file |
| 95 | + * `.coveragerc`: coverage configuration file |
| 96 | +* Added Visual Studio Code configuration files: |
| 97 | + * `.vscode/settings.json`: Python interpreter, code formatting, etc. |
| 98 | + * `.vscode/tasks.json`: build, test, etc. |
| 99 | + * `.vscode/launch.json`: run current file, run tests, etc. |
| 100 | + |
| 101 | +PlotPy 2.0 also brings a lot of bug fixes and improvements: |
| 102 | + |
| 103 | +* Handled all Cython/C++ extensions compilation warnings |
| 104 | +* Fixed all NumPy deprecation issues (e.g. `numpy.matrix`) |
| 105 | +* Fixed (annotated) circle/ellipse item creation/test |
| 106 | +* Fixed all documentation build warnings |
| 107 | +* Fixed regressions introduced by PlotPy V1 on top of guiqwt: |
| 108 | + * Global references for the Debian package management |
| 109 | + * Major aspect ratio issues: |
| 110 | + * When resizing the plot widget (images were downsized indefinitely) |
| 111 | + * When auto-scaling the plot widget (images were not displayed entirely) |
| 112 | + * `TrImageItem` rotation algorithm |
| 113 | + * Oblique cross-section test |
| 114 | + * About dialog, version informations |
| 115 | +* Ported all [guiqwt](https://pypi.org/project/guiqwt/) bug fixes since the merge (i.e. between 2016 and 2023): |
| 116 | + * Added support for Visual Studio 2015 and earlier |
| 117 | + * Speeding-up image alpha channel calculation |
| 118 | + * Optimized colormap icon caching |
| 119 | + * X-axis direction and auto-scale |
| 120 | + * Added load test (with a very large number of plot widgets) |
| 121 | + * Coordinates inversion in `EllipseShape` |
| 122 | + * ValueError with levels histogram |
| 123 | + * Various fixes regarding plot item creation, cross-section features, PyQt5 support, DICOM support, TIFF support, etc. |
| 124 | + * Etc. |
0 commit comments