1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

#[cfg(feature = "use_nifti")] 
use nifti::NiftiHeader;
use nalgebra::U3;

#[cfg(feature = "use_nifti")] use CHeader;
use {Affine, Affine4, Translation};

pub fn get_affine_and_translation(
    affine: &Affine4
) -> (Affine, Translation) {
    let translation = Translation::new(
        affine[12], affine[13], affine[14]);
    let affine = affine.fixed_slice::<U3, U3>(0, 0).into_owned();
    (affine, translation)
}

#[cfg(feature = "use_nifti")]
pub fn raw_affine_from_nifti(h: &NiftiHeader) -> Affine4 {
    Affine4::new(h.srow_x[0], h.srow_x[1], h.srow_x[2], h.srow_x[3],
                 h.srow_y[0], h.srow_y[1], h.srow_y[2], h.srow_y[3],
                 h.srow_z[0], h.srow_z[1], h.srow_z[2], h.srow_z[3],
                 0.0, 0.0, 0.0, 1.0)
}

#[cfg(feature = "use_nifti")] 
pub fn rasmm_to_trackvis(h: &NiftiHeader) -> Affine4 {
    trackvis_to_rasmm(h).try_inverse().unwrap()
}

#[cfg(feature = "use_nifti")] 
pub fn trackvis_to_rasmm(h: &NiftiHeader) -> Affine4 {
    let c_header = CHeader::from_nifti(
        h.dim, h.pixdim, h.srow_x, h.srow_y, h.srow_z);
    c_header.get_affine()
}