Skip to content

Releases: ABRG-Models/morphologica

The Colourful Release

03 Dec 09:56
Compare
Choose a tag to compare

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.

A montage of new morphologica colourmaps

  • The ability to read and visualize spherical HEALPix grids (images from healpixviewer)

Spherical HEALPix data viewed with morph::HealpixVisual

  • 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 and GridVisual (thanks @blenk13 and @fabien-colonnier). The screenshot is from the example program grid_border.

A screenshot of the grid_border example program show a GridVisual with borders around the pixels

  • The option to use a signed index in vvec (where v.at_signed(-1) accesses the last element in the vvec)
  • Graph axis labelling improvements (especially re-sizing the font for axis tick labels)
  • Complex number handling in morph::range and morph::scale

What's Changed

New Contributors

Full Changelog: v3.1.1...v3.2

The Correctly Rotated Release

01 Oct 09:57
907adab
Compare
Choose a tag to compare

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

Full Changelog: v3.1...v3.1.1

The Rotated Release

30 Sep 09:18
800e1fe
Compare
Choose a tag to compare

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

Full Changelog: v3.0...v3.1

The RSECon24 Release

01 Sep 11:09
Compare
Choose a tag to compare

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

New Contributors

Full Changelog: v2.1...v3.0

The pre-Qt release

17 Aug 10:58
e5dc9f7
Compare
Choose a tag to compare

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

10 Feb 11:15
c63e3f4
Compare
Choose a tag to compare

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

30 Jul 09:05
f9e0d80
Compare
Choose a tag to compare

morphologica has been stable for a while, so it's time for a release for download!