import numpy as np
from dipy.testing.decorators import warning_for_keywords
from dipy.tracking.streamline import transform_streamlines
from dipy.utils.optpkg import optional_package
fury, have_fury, setup_module = optional_package("fury", min_version="0.10.0")
if have_fury:
import fury.io
import fury.utils
[docs]
def load_polydata(file_name):
"""Load a vtk polydata to a supported format file.
Supported file formats are OBJ, VTK, VTP, FIB, PLY, STL and XML
Parameters
----------
file_name : string
Returns
-------
output : vtkPolyData
"""
return fury.io.load_polydata(file_name)
[docs]
@warning_for_keywords()
def save_polydata(polydata, file_name, *, binary=False, color_array_name=None):
"""Save a vtk polydata to a supported format file.
Save formats can be VTK, VTP, FIB, PLY, STL and XML.
Parameters
----------
polydata : vtkPolyData
file_name : string
"""
fury.io.save_polydata(
polydata=polydata,
file_name=file_name,
binary=binary,
color_array_name=color_array_name,
)
[docs]
@warning_for_keywords()
def save_vtk_streamlines(streamlines, filename, *, to_lps=True, binary=False):
"""Save streamlines as vtk polydata to a supported format file.
File formats can be OBJ, VTK, VTP, FIB, PLY, STL and XML
Parameters
----------
streamlines : list
list of 2D arrays or ArraySequence
filename : string
output filename (.obj, .vtk, .fib, .ply, .stl and .xml)
to_lps : bool
Default to True, will follow the vtk file convention for streamlines
Will be supported by MITKDiffusion and MI-Brain
binary : bool
save the file as binary
"""
if to_lps:
# ras (mm) to lps (mm)
to_lps = np.eye(4)
to_lps[0, 0] = -1
to_lps[1, 1] = -1
streamlines = transform_streamlines(streamlines, to_lps)
polydata, _ = fury.utils.lines_to_vtk_polydata(streamlines)
save_polydata(polydata, file_name=filename, binary=binary)
[docs]
@warning_for_keywords()
def load_vtk_streamlines(filename, *, to_lps=True):
"""Load streamlines from vtk polydata.
Load formats can be VTK, FIB
Parameters
----------
filename : string
input filename (.vtk or .fib)
to_lps : bool
Default to True, will follow the vtk file convention for streamlines
Will be supported by MITKDiffusion and MI-Brain
Returns
-------
output : list
list of 2D arrays
"""
polydata = load_polydata(filename)
lines = fury.utils.get_polydata_lines(polydata)
if to_lps:
to_lps = np.eye(4)
to_lps[0, 0] = -1
to_lps[1, 1] = -1
return transform_streamlines(lines, to_lps)
return lines