From a4784d5b783484e2009acf466f6af09f80d0b3b0 Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Tue, 29 Jul 2025 22:31:53 +0200 Subject: implement other renderers in python module --- hittekaart-py/src/lib.rs | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/hittekaart-py/src/lib.rs b/hittekaart-py/src/lib.rs index 8cd51d9..fe97aa7 100644 --- a/hittekaart-py/src/lib.rs +++ b/hittekaart-py/src/lib.rs @@ -156,6 +156,44 @@ impl HeatmapRenderer { } } +/// A renderer that only marks visited tiles. +/// +/// The constructor takes no parameters: MarktileRenderer() +#[pyclass] +struct MarktileRenderer { + inner: renderer::marktile::Renderer, +} + +#[pymethods] +impl MarktileRenderer { + #[new] + fn new() -> MarktileRenderer { + MarktileRenderer { + inner: renderer::marktile::Renderer, + } + } +} + +/// A renderer that renders a "tile hunt". +/// +/// A tile hunt marks visited tiles on a fixed zoom level. +/// +/// The constructor takes the tile hunt level as parameter: TilehuntRenderer(zoom) +#[pyclass] +struct TilehuntRenderer { + inner: renderer::tilehunt::Renderer, +} + +#[pymethods] +impl TilehuntRenderer { + #[new] + fn new(zoom: u32) -> TilehuntRenderer { + TilehuntRenderer { + inner: renderer::tilehunt::Renderer::new(zoom), + } + } +} + /// Generate the heatmap. /// /// * items is an iterable of Track @@ -176,8 +214,12 @@ fn generate( if let Ok(r) = renderer.downcast::() { do_generate(tracks, &r.borrow().inner, &mut *storage.borrow().open()?) + } else if let Ok(r) = renderer.downcast::() { + do_generate(tracks, &r.borrow().inner, &mut *storage.borrow().open()?) + } else if let Ok(r) = renderer.downcast::() { + do_generate(tracks, &r.borrow().inner, &mut *storage.borrow().open()?) } else { - Err(PyTypeError::new_err("Expected a HeatmapRenderer")) + Err(PyTypeError::new_err("Expected a HeatmapRenderer, MarktileRenderer or TilehuntRenderer")) } } @@ -233,6 +275,8 @@ fn set_threads(threads: usize) -> PyResult<()> { fn hittekaart_py(py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_class::()?; m.add_class::()?; + m.add_class::()?; + m.add_class::()?; m.add_class::()?; m.add_function(wrap_pyfunction!(generate, m)?)?; m.add_function(wrap_pyfunction!(set_threads, m)?)?; -- cgit v1.2.3