aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2025-07-29 22:31:53 +0200
committerDaniel Schadt <kingdread@gmx.de>2025-07-29 22:31:53 +0200
commita4784d5b783484e2009acf466f6af09f80d0b3b0 (patch)
tree8689da9955e8248c0b6b42be8359c821b9094351
parent8025f682fdd49b4e52b4356952ec1f64890d6c4c (diff)
downloadhittekaart-a4784d5b783484e2009acf466f6af09f80d0b3b0.tar.gz
hittekaart-a4784d5b783484e2009acf466f6af09f80d0b3b0.tar.bz2
hittekaart-a4784d5b783484e2009acf466f6af09f80d0b3b0.zip
implement other renderers in python module
-rw-r--r--hittekaart-py/src/lib.rs46
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)?)?;