diff options
author | Daniel Schadt <kingdread@gmx.de> | 2025-07-29 22:31:53 +0200 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2025-07-29 22:31:53 +0200 |
commit | a4784d5b783484e2009acf466f6af09f80d0b3b0 (patch) | |
tree | 8689da9955e8248c0b6b42be8359c821b9094351 | |
parent | 8025f682fdd49b4e52b4356952ec1f64890d6c4c (diff) | |
download | hittekaart-a4784d5b783484e2009acf466f6af09f80d0b3b0.tar.gz hittekaart-a4784d5b783484e2009acf466f6af09f80d0b3b0.tar.bz2 hittekaart-a4784d5b783484e2009acf466f6af09f80d0b3b0.zip |
implement other renderers in python module
-rw-r--r-- | hittekaart-py/src/lib.rs | 46 |
1 files changed, 45 insertions, 1 deletions
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::<HeatmapRenderer>() { do_generate(tracks, &r.borrow().inner, &mut *storage.borrow().open()?) + } else if let Ok(r) = renderer.downcast::<MarktileRenderer>() { + do_generate(tracks, &r.borrow().inner, &mut *storage.borrow().open()?) + } else if let Ok(r) = renderer.downcast::<TilehuntRenderer>() { + 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::<Track>()?; m.add_class::<HeatmapRenderer>()?; + m.add_class::<MarktileRenderer>()?; + m.add_class::<TilehuntRenderer>()?; m.add_class::<Storage>()?; m.add_function(wrap_pyfunction!(generate, m)?)?; m.add_function(wrap_pyfunction!(set_threads, m)?)?; |