diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6c6049f0..a1126d0e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -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) ================== diff --git a/docs/_root/index.html b/docs/_root/index.html index 288fe10c..c630d799 100644 --- a/docs/_root/index.html +++ b/docs/_root/index.html @@ -4,12 +4,12 @@ anyplotlib – redirecting… - - + +

- Redirecting to v0.5.0 documentation… + Redirecting to v0.6.0 documentation

diff --git a/docs/_root/switcher.json b/docs/_root/switcher.json index 0aaf54ca..62295a05 100644 --- a/docs/_root/switcher.json +++ b/docs/_root/switcher.json @@ -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", diff --git a/docs/conf.py b/docs/conf.py index 60eb43ed..010269a3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -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. diff --git a/pyproject.toml b/pyproject.toml index 7916e18d..57eb192b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" } diff --git a/upcoming_changes/+brush_widget.new_feature.rst b/upcoming_changes/+brush_widget.new_feature.rst deleted file mode 100644 index 11e1d18a..00000000 --- a/upcoming_changes/+brush_widget.new_feature.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. diff --git a/upcoming_changes/+docs-deploy-race.bugfix.rst b/upcoming_changes/+docs-deploy-race.bugfix.rst deleted file mode 100644 index 9a5fc788..00000000 --- a/upcoming_changes/+docs-deploy-race.bugfix.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. diff --git a/upcoming_changes/+event_camera_angles.new_feature.rst b/upcoming_changes/+event_camera_angles.new_feature.rst deleted file mode 100644 index 0869e100..00000000 --- a/upcoming_changes/+event_camera_angles.new_feature.rst +++ /dev/null @@ -1,6 +0,0 @@ -: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. diff --git a/upcoming_changes/+gpu_depth_range.bugfix.rst b/upcoming_changes/+gpu_depth_range.bugfix.rst deleted file mode 100644 index aaadec12..00000000 --- a/upcoming_changes/+gpu_depth_range.bugfix.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. diff --git a/upcoming_changes/+gpu_depth_sign.bugfix.rst b/upcoming_changes/+gpu_depth_sign.bugfix.rst deleted file mode 100644 index eb696967..00000000 --- a/upcoming_changes/+gpu_depth_sign.bugfix.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. diff --git a/upcoming_changes/+orbit_direction.api_change.rst b/upcoming_changes/+orbit_direction.api_change.rst deleted file mode 100644 index a0b2d9da..00000000 --- a/upcoming_changes/+orbit_direction.api_change.rst +++ /dev/null @@ -1,8 +0,0 @@ -**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. diff --git a/upcoming_changes/+surface_texture.new_feature.rst b/upcoming_changes/+surface_texture.new_feature.rst deleted file mode 100644 index a88b54e5..00000000 --- a/upcoming_changes/+surface_texture.new_feature.rst +++ /dev/null @@ -1,7 +0,0 @@ -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.