trk_io/
vs_reader.rs

1use crate::{Header, Points, Reader, Spacing, StreamlinesIter};
2
3/// Generator to read a TrackVis file, streamline per streamline.
4///
5/// Will never hold more than one streamline in memory.
6pub struct VoxelSpaceReader {
7    reader: StreamlinesIter,
8}
9
10impl VoxelSpaceReader {
11    /// Build a new `VoxelSpaceReader` object.
12    ///
13    /// * `path` - Path to TrackVis file
14    /// * `spacing` - Spacing (pixel dimension `pixdim`) obtained from the `Header` or from a
15    ///   reference image.
16    pub fn new<P: AsRef<std::path::Path>>(path: P, spacing: Spacing) -> (Header, VoxelSpaceReader) {
17        let reader = Reader::new(path).unwrap().to_voxel_space(spacing);
18        let header = reader.header.clone();
19        (header, VoxelSpaceReader { reader: reader.into_streamlines_iter() })
20    }
21}
22
23impl Iterator for VoxelSpaceReader {
24    type Item = Points;
25
26    fn next(&mut self) -> Option<Points> {
27        if let Some(points) = self.reader.next() {
28            return Some(points);
29        } else {
30            return None;
31        }
32    }
33}