Releases: ABRG-Models/morphologica
The Colourful Release
Summary
This release brings you:
- Over 100 new, beautiful, perceptually uniform colourmaps from Crameri and CET (also incorporating code from William Lenthe). The screenshots come from the example programs colourmaps_crameri, hsvwheel, colourmaps_cet and colourmap_browser.
- The ability to read and visualize spherical HEALPix grids (images from healpixviewer)
- Some refactoring of core maths classes (including
Scale
->scale
;Quaternion
->quaternion
;TransformMatrix
->mat44
) - Improvements in OpenGL context handling along with the ability to coordinate access to the context via a mutex (thanks @connagh-opteran)
- It also introduces some changes and new features in
morph::Grid
andGridVisual
(thanks @blenk13 and @fabien-colonnier). The screenshot is from the example program grid_border.
- The option to use a signed index in
vvec
(wherev.at_signed(-1)
accesses the last element in thevvec
) - Graph axis labelling improvements (especially re-sizing the font for axis tick labels)
- Complex number handling in
morph::range
andmorph::scale
What's Changed
- Adds a Healpix VisualModel by @sebjameswml in #234
- add the auto_rescale_y on the GraphVisual model and make the depth of grid on GridVisual not relative to pixel width by @fabien-colonnier in #235
- Change name of Scale::compute_autoscale by @sebjameswml in #238
- Tweak behavour of monochrome/val maps by @sebjameswml in #241
- Stop branching code for ICC by @sebjameswml in #242
- Adds Matthew Petrov's Planck colour map by @sebjameswml in #245
- Merge pull request #245 from ABRG-Models/221-CMB_colourmap by @sebjameswml in #247
- 221 cmb colourmap by @sebjameswml in #249
- Minor improvements by @sebjameswml in #250
- Adds a function to look up an index from a passed-in coordinate. by @sebjameswml in #251
- 240 vvec of vecs in grid by @sebjameswml in #252
- Healpix astrometry more c++ by @sebjameswml in #253
- Adds a nice test of all the 1D colourmaps for perceptual uniformity by @sebjameswml in #254
- 257 visual destruction opengl error by @sebjameswml in #258
- Adds ushort support for read in a container of data by @sebjameswml in #260
- Correct rounding error in number of pixel computation and grid drawing by @fabien-colonnier in #259
- Adds colourmaps from CET, Fabio Crameri and William Lenthe by @sebjameswml in #262
- setContext() call is not correct in OWNED_MODE by @sebjameswml in #264
- Output a colour map string name which matches the C++ code name for ColourMapType by @sebjameswml in #266
- Adds signed indexing to vvec by @sebjameswml in #267
- A possible solution to keeping text labels all legible. by @sebjameswml in #256
- GraphVisual auto-rescaling review by @sebjameswml in #269
- Adds a Colourmap browser by @sebjameswml in #270
- Demonstrate that += and -= are ok in constexpr fn by @sebjameswml in #271
- Adds constexpr tests of the range class by @sebjameswml in #272
- Adds a 'suggest_dims' static method to the Grid class by @sebjameswml in #274
- find_nearest_neighbours() and indicies_in_radius() functions added to Grid by @blenk13 in #277
- shift_index functions added into Grid class by @blenk13 in #278
- Need to know what the HDF5_INCLUDE_DIR is by @sebjameswml in #281
- Adds axes indicator to healpixvis by @sebjameswml in #284
- Adds complex number handling to morph::range and morph::Scale by @sebjameswml in #273
- Dev/refactor matrix nn by @sebjameswml in #287
- Quaternion refactor by @sebjameswml in #288
- Refactor morph::Scale -> morph::scale by @sebjameswml in #289
- Updates scale docs following refactor by @sebjameswml in #290
- morph::Tools refactor by @sebjameswml in #291
- Slightly nicer string constants in morph::tools by @sebjameswml in #292
- Removes Grid::n attribute, replacing with Grid::n() and removing Grid… by @sebjameswml in #293
- Make it possible to releaseContext after morph::Visual construction by @sebjameswml in #294
- Adds a method to rotate the scene about an axis by @sebjameswml in #295
- Add a lockable context for improved memory safety. by @connagh-opteran in #296
New Contributors
- @connagh-opteran made their first contribution in #296
Full Changelog: v3.1.1...v3.2
The Correctly Rotated Release
This point release fixes some rotations that were coded wrong to compensate for the bugs in Quaternion
and TransformMatrix
. The most significant fix is to correctly rotate y axis labels in GraphVisual
.
What's Changed
- 232 some graph labels are rotated the wrong way by @sebjameswml in #233
Full Changelog: v3.1...v3.1.1
The Rotated Release
This point release fixes important bugs in rotation calculations in morph::Quaternion
and morph::TransformMatrix
and also adds the ability to set angle by axis/angle in the Quaternion
constructor and compute rotations by quaternion multiplication. For example:
morph::Quaternion<double> q (u_x, morph::mathconst<double>::pi);
morph::vec<double, 3> v_in = { 2, 6, 0 };
morph::vec<double, 3> v_out = q * v_in;
I changed the name of one internally used method: Quaternion::initFromAxisAngle(vec<float>, float)
is now called set_rotation
.
It also incorporates some improvements to GridVisual by @fabien-colonnier including the ability to place a border around selected pixels in the Grid. Thanks Fabien!
Other minor changes include github actions for Apple Mac computers and some tweaks to spherical coordinates relating to Geodesics (GeodesicVisual
).
What's Changed
- Adds a cartesian to spherical conversion by @sebjameswml in #220
- Adds a routine to compute the spherical coords of the Geodesic. by @sebjameswml in #222
- Adds an extents function to find the range of x, y and z positions of… by @sebjameswml in #223
- Changes 4 variables from float to bool, making sense. by @sebjameswml in #224
- Add feature in GridVisual to draw border around all pixels and selected pixels by @fabien-colonnier in #225
- Adds the ability to multiply Quaternion and vec (3 or 4D) by @sebjameswml in #226
- Feature/further quaternion tweaks by @sebjameswml in #228
- 229 transformmatrix opposite rotation by @sebjameswml in #231
Full Changelog: v3.0...v3.1
The RSECon24 Release
Overview
This is a new release to coincide with the Research Software Engineering Conference, 2024 in Newcastle upon Tyne, UK.
There are a couple of API-breaking changes since the last release, hence the v3.0 tag. The major change is that when creating a VisualModel
derived object, it is necessary to call Visual::bindmodel()
. This should be the last API change relating to VisualModels, because any new changes can be coded within the bindmodel function.
This release also adds support for the Qt Window system and for integration in wxWindows programs and support for Raspberry Pi and similar platforms (that is, the ability to use OpenGL ES 3.1/3.2).
Several new features include a new Grid class and a colour bar VisualModel.
This release includes a fairly well populated (but not yet finished) documentation website (in docs/).
What's Changed
- Redesign/qtcompatibility by @sebjameswml in #128
- TriaxesVisual didn't get modified with the recent changes by @optseb in #130
- Adds a releaseContext function call by @optseb in #133
- Alex changes. Adding find functions to vvec, and getCoords2D to CartGrid. by @blenk13 in #131
- Just some tutorial morph::Scale examples by @optseb in #134
- vec::set_angle and some math constant stuff by @optseb in #135
- ColourMap: 1 bug fix plus some setType/getType changes by @optseb in #136
- Adds a ColourBarVisual by @optseb in #137
- Adds an HSVWheel widget thing to go with your HSV colourmaps by @optseb in #138
- Small bug fix for CartGrid Triangle rendering by @optseb in #139
- Quaternion improvements. CartGridVisual fixes. Some memory debugging messages by @optseb in #140
- Graph drawing improvements plus some CartGrid tweaks by @optseb in #141
- Makes the graph_logist2 example program react immediately to changes … by @optseb in #142
- Minor stuff. Code tidying and optional BezCurves-in-CartGrid by @optseb in #143
- Get rid of all those horrible std::pair coordinates by @optseb in #144
- Additions to CartGrid class. Move pixels functions and a couple of additinoal member variables by @blenk13 in #145
- Tidying up the shiftCoords/shiftIndicies code from Alex B by @optseb in #146
- Improved logistics by @optseb in #147
- Adds the other kind of monochrome colour map by @optseb in #148
- Adding indexFromCoord function to CartGrid class by @blenk13 in #151
- Issue/150 array with graph visual by @sebjameswml in #153
- add the wxWidgets GUI support, also add wxWidgets sample code and Cod… by @asmwarrior in #156
- remove the -lwxmsw32ud_gl linker option from the cbp file by @asmwarrior in #158
- update the Code::Blocks project file name and use the new wx-graph1.c… by @asmwarrior in #160
- add range.h to the list of file to install by @fabien-colonnier in #163
- put maybe_unused instead of constexpr by @fabien-colonnier in #165
- Update CMakeLists.txt in morph directory by @fabien-colonnier in #168
- Replace raw ptr with unique_ptr by @SeverinDenisenko in #169
- Resolves issue#170 by @sebjameswml in #174
- Issue/171 new delete visual model by @sebjameswml in #175
- Writes new/delete out of morph/gl/shaders.h by @sebjameswml in #176
- Replaces new/delete with unique_ptr for HexGrid memory management by @sebjameswml in #181
- Removes another new/delete in this test program by @sebjameswml in #180
- Issue/173/quads quads mesh by @sebjameswml in #177
- Manage memory with unique_ptr in sg.cpp. Also couple of fixes. by @sebjameswml in #183
- Issue/182/grid problem by @sebjameswml in #184
- Gridct index fixing by @sebjameswml in #185
- Manages the HexGrid memory with a unique_ptr. by @sebjameswml in #178
- Dev/visual no gl include by @sebjameswml in #186
- Dev/constexpr geodesics vec by @sebjameswml in #187
- Completes constexpr-enabling of morph::vec<> by @sebjameswml in #189
- Good spot. I think this is correct. by @sebjameswml in #191
- Handle DPI in Qt correctly by @sebjameswml in #193
- Enables constexpr use of Quaternion by @sebjameswml in #196
- Enables constexpr for TransformMatrix by @sebjameswml in #197
- After changing projection a render should be called by @sebjameswml in #199
- Issue/194/ortho scrollwheel by @sebjameswml in #198
- Dev/geodesic rgb directions by @sebjameswml in #201
- Feature/hideable stdout, plus some HexGrid stuff by @sebjameswml in #202
- Issue/204/hexgrid resample rectangular images by @sebjameswml in #205
- Solves by bringing in code from GridVisual.h by @sebjameswml in #207
- Test and throw any error from lodepng::decode by @sebjameswml in #209
- Adds a visualizer for moving gratings by @sebjameswml in #210
- Adds Grid resampling. Changes default loadpng image ordering by @sebjameswml in #212
- Bug fixes and improvements for computation and graphing of histograms by @sebjameswml in #214
- Dev/grating debugging. More pain. by @sebjameswml in #216
- Refactor away all the idx arguments in the graphics primitives by @sebjameswml in #217
- Changes to compile on Mac by @sebjameswml in #218
New Contributors
- @blenk13 made their first contribution in #131
- @fabien-colonnier made their first contribution in #163
- @SeverinDenisenko made their first contribution in #169
Full Changelog: v2.1...v3.0
The pre-Qt release
This release rolls up all the new features introduced since the unique_ptr release. I'm making this release to mark the fact that the boilerplate for creating and using VisualModels is changing once again in the next release.
The unique_ptr release
This release has a significant improvement to the way in which morph::VisualModel
memory is managed within a morph::Visual
scene. Previously, you used the new
keyword to allocate memory for each VisualModel
, then you had to trust that the morphologica Visual
object would deallocate that memory as it went out of scope. This scheme is retained, but made explicit now by the use of std::unique_ptr
.
If you have a morph::Visual
scene like this:
morph::Visual v (1600, 1000, "Example scene");
Where you would previously have added a morph::VisualModel
by writing (using GraphVisual
as an example of a VisualModel
):
morph::GraphVisual<double>* gptr = new morph::GraphVisual<double> (v.shaderprog, v.tshaderprog, morph::vec<float>({0,0,0}));
You now write the slightly neater:
auto g_uptr = std::make_unique<morph::GraphVisual<double>> (v.shaders, morph::vec<float>({0,0,0}));
this returns an object of type std::unique_ptr<GraphVisual<double>>
. You then add this to the morph::Visual
like before:
auto gptr = v.addVisualModel (g_uptr);
where gptr
is of type morph::GraphVisual<double>*
. The key thing is that by adding the unique_ptr
into the Visual
scene, v
, 'v
takes ownership of the memory of the GraphVisual
object, but you can go on interacting with the GraphVisual
object by using the non-owning pointer, gptr
. Note also that the boilerplate v.shaderprog
and v.tshaderprog
ID values have been collected into the single object v.shaders
.
In this release, there has also been some refactoring, significantly of morph::Vector
-> morph::vec
and morph::vVector
-> morph::vvec
. These mathematical vector classes also have some nice new functionality, such as 1D convolutions, smoothing and differentiation.
The first release
morphologica has been stable for a while, so it's time for a release for download!