Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,64 @@ Fragment files in ``upcoming_changes/`` are assembled into this file by

.. towncrier release notes start

0.6.0 (2026-07-31)
==================

API and Behaviour Changes
-------------------------

- **3-D orbit drags have reversed direction.** Both azimuth and elevation now
move the geometry *with* the cursor instead of away from it, matching
matplotlib's ``mplot3d`` and every other turntable control — dragging right
spins a globe right. Azimuth and elevation position the *camera*, so adding
the drag delta swept the surface the opposite way, as if you had grabbed its
far side. Any muscle memory (or scripted pointer drag) built against the old
direction is inverted; panels driven from Python with
:meth:`~anyplotlib.Plot3D.set_view` are unaffected.


New Features
------------

- :class:`~anyplotlib.Event` now carries ``azimuth`` and ``elevation`` for 3-D
orbit events. The renderer had always emitted them alongside ``zoom``, but they
were dropped on the way to Python — and since a JS-side drag does not sync back
into ``Plot3D._state``, a handler had no way to react to an orbit at all. See
the new ``Star Globe Explorer`` gallery example, which links a celestial sphere
to a sky map through them.
- Added :meth:`~anyplotlib.Plot2D.add_brush_widget` for painting freehand
multi-class label strokes on a 2-D image with Shift-drag, leaving a bare drag to
pan as before.
- Added :meth:`~anyplotlib.Plot3D.set_texture` for wrapping an image around a 3-D
surface — a globe, a planet, or a star chart on the celestial sphere — with
optional diffuse shading and backface culling. ``Axes.plot_surface`` gained
``texture=``, ``bounds=``, and ``gpu=`` to match. Textured surfaces render on
WebGPU when it is available (roughly 9k triangles at 54 ms/frame on Canvas2D
versus 0.4 ms on the GPU), falling back to Canvas2D silently otherwise.
``set_axis_off()`` now also hides a 3-D panel's axis lines, labels, and ticks.


Bug Fixes
---------

- Fixed WebGPU 3-D geometry being clipped at the corners of a cube-shaped
dataset. The clip-space depth scale let ``clip.z`` reach 1.09 for a point at
the far corner of the normalised bounds box, outside the ``[0, 1]`` range
WebGPU keeps, so the nearest corner of a dense :meth:`~anyplotlib.Axes.scatter3d`
cloud silently vanished at the default camera angles. Spherical geometry was
never affected.
- Fixed an inverted depth comparison in the WebGPU 3-D projection: a GPU-rendered
:meth:`~anyplotlib.Axes.scatter3d` cloud drew its far points on top of its near
ones wherever two points overlapped on screen. Voxel panels were unaffected
(they disable depth writes), and the Canvas2D path was always correct.
- Fixed the docs deployment racing itself on release. A push to ``main`` and its
release tag are different refs, so the ``docs-${{ github.ref }}`` concurrency
group put them in separate groups and both pushed to ``gh-pages`` at once; the
loser was rejected and its versioned directory never appeared, while
``switcher.json`` still advertised the version. The deploy job now uses a
ref-independent group so deployments queue instead.


0.5.0 (2026-07-26)
==================

Expand Down
6 changes: 3 additions & 3 deletions docs/_root/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
<meta charset="utf-8" />
<title>anyplotlib – redirecting…</title>
<!-- Redirect to the latest dev docs. -->
<meta http-equiv="refresh" content="0; url=v0.5.0/" />
<link rel="canonical" href="v0.5.0/" />
<meta http-equiv="refresh" content="0; url=v0.6.0/" />
<link rel="canonical" href="v0.6.0/" />
</head>
<body>
<p>
Redirecting to <a href="v0.5.0/">v0.5.0 documentation</a>…
Redirecting to <a href="v0.6.0/">v0.6.0 documentation</a>…
</p>
</body>
</html>
Expand Down
5 changes: 5 additions & 0 deletions docs/_root/switcher.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"version": "dev",
"url": "https://cssfrancis.github.io/anyplotlib/dev/"
},
{
"name": "v0.6.0 (stable)",
"version": "v0.6.0",
"url": "https://cssfrancis.github.io/anyplotlib/v0.6.0/"
},
{
"name": "v0.5.0 (stable)",
"version": "v0.5.0",
Expand Down
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
project = "anyplotlib"
copyright = "2026, anyplotlib contributors"
author = "anyplotlib contributors"
release = "0.5.0"
release = "0.6.0"

# When built in CI the workflow sets DOCS_VERSION to the tag name (e.g.
# "v0.1.0") or "dev". Fall back to "dev" for local builds.
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ exclude = [

[project]
name = "anyplotlib"
version = "0.5.0"
version = "0.6.0"
description = "A plotting library using python, javascript and anywidget for performant in browser plotting."
readme = "README.md"
license = { text = "MIT" }
Expand Down
3 changes: 0 additions & 3 deletions upcoming_changes/+brush_widget.new_feature.rst

This file was deleted.

6 changes: 0 additions & 6 deletions upcoming_changes/+docs-deploy-race.bugfix.rst

This file was deleted.

6 changes: 0 additions & 6 deletions upcoming_changes/+event_camera_angles.new_feature.rst

This file was deleted.

6 changes: 0 additions & 6 deletions upcoming_changes/+gpu_depth_range.bugfix.rst

This file was deleted.

4 changes: 0 additions & 4 deletions upcoming_changes/+gpu_depth_sign.bugfix.rst

This file was deleted.

8 changes: 0 additions & 8 deletions upcoming_changes/+orbit_direction.api_change.rst

This file was deleted.

7 changes: 0 additions & 7 deletions upcoming_changes/+surface_texture.new_feature.rst

This file was deleted.

Loading