diff options
| -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)?)?;  | 
