# ieegio 0.1.2

* Added `as_ieegio_roi` to mark an image volume, surface, point cloud, or streamlines object as a region of interest, recording the selection criteria (intensity bounds, threshold expressions, arc length filters) rather than applying them right away
* Added `resolve_roi_as` to carry out those criteria and convert the region into a chosen representation (volume, point cloud, surface, or streamlines), always in world `RAS` coordinates so two resolved regions can be compared directly
* Added `detect_roi_overlap` to test whether two regions overlap, with distance tolerance, an optional interior test for closed surfaces, and per-unit hit ratios written back onto the second region
* Added `io_read_niml` and `niml_find` to read `AFNI` and `SUMA` `NIML` datasets, supporting every storage form (plain text, binary and `base64` in either byte order, optionally `gzip` compressed) and every column type, including `String`, `Line`, `complex`, `rgb`, and `rgba`
* Added `niml_as_surface` and an `as_ieegio_surface` method for `NIML` objects; `read_surface` now recognizes `'.niml.dset'` files and decides between annotations and measurements from the dataset itself
* `read_colormap` now reads the `AFNI` label table from `NIML` datasets that store it in binary form
* The `HDF5` back-end is now resolved at run time, choosing among `readNSx`, `h5lite`, `hdf5r`, and `h5py`; `hdf5r` is no longer required and has been removed from `Suggests`
* Fixed the `h5py` back-end returning 32-bit integer datasets as double, which turned the missing value sentinel into a large negative number
* Added a `sanitize` argument to `read_streamlines` and `as_ieegio_streamlines` that discards tracts which are not lines and points with missing coordinates; set it to `FALSE` to read a file exactly as written
* Fixed streamline scalar and property naming when the scalars are stored as a matrix, and gave automatically generated property names their own prefix
* Fixed `as_ieegio_volume` choosing an integer data type for arrays that contain `Inf`
* Added `NIML` sample datasets and `std.141` inflated surfaces to example data

# ieegio 0.1.1

* Added `io_read_vtk_polys` and `io_write_vtk_polys` to read and write surface meshes stored in `VTK` polygon formats (legacy `.vtk`, `XML`-based `.vtp`, `.pvtp`, `.vtu`, and `HDF5`-based `.vtpb`), including vertex colors and vertex-wise measurements; `read_surface` and `write_surface` now recognize these formats
* Added read and write functions for color-map files
* Fixed a graphics bug that causes `par` not reset after showing surfaces
* Added a helper function to convert volume atlases to surface with proper smoothing
* Added `YBA696` atlas to example data

# ieegio 0.1.0

* Added `burn_curve` to burn electrode trajectories (e.g. depth/`sEEG` leads or `DBS` shafts) into a volume given start and end positions in image native `RAS` coordinates, with configurable radius and per-segment colors
* Added a `merge` mode to `burn_curve` so newly burned trajectories can be composted onto an existing volume instead of overwriting it
* Added a base `R` graphics `plot` method for `ieegio_surface` objects as an alternative to the default `r3js` rendering, useful for static figures and environments without `WebGL`
* Fixed `get_channel` so channels can be looked up by label (in addition to index) for `BCI2000` and `BrainVision` formats
* Fixed `mat_to_quaternion` to correctly handle handedness changes, aligning the `quaternion` sign convention with `FreeSurfer`
* Code style and lint cleanup across the package; rebuilt documentation

# ieegio 0.0.9

* Fixed `CRAN` check issues
* Added volume and surface related functions as `MCP` tools (can be loaded via package `ravepipeline` and `ellmer`)

# ieegio 0.0.8

* Added `new_space` and `as_ieegio_transform` to define coordinate spaces and chain transforms
* Added `io_read_ants_transform` to read `ANTs` affine and displacement field transforms
* Added `io_read_flirt_transform` to read `FSL FLIRT` affine transforms
* Added `volume_to_surface` and `surface_to_surface` for mapping data between volumes and surfaces
* Fixed point transform ambiguity when chaining transforms with different interpretations
* Improved `plot.ieegio_volume` intensity windowing using percentile-based display range (2-98 percentiles), following conventions from `FSLeyes`, `AFNI`, `MRIcroGL`, and `SPM`
* Auto-detection for `CT` vs `MRI` data: excludes zeros by default but includes them when lower percentile is below -500 (indicating `CT` with -1024 background)
* Statistical overlay detection: applies symmetric range for z-score-like data
* Values outside display range are now clamped to boundary colors instead of rendering as transparent

# ieegio 0.0.7

* Added `as_nifti_header` as a workaround when `RNifti` is missing (not installed or running in `WebAssembly`)
* Added automatic checks when pushing commits the repository to `Github`

# ieegio 0.0.6

* Added `write_edf` to save signals as continuous `EDF` format
* Added `YBA` atlas (690 segments) to example data
* Improved `HDF5` checking error messages

# ieegio 0.0.5

* Added `LazyFST` class
* Fixed a bug where `gzipped` is ignored in `io_write_nii.array`
* `LazyH5` fall back to alternatives when `HDF5` is not supported in `wasm`
* Plotting surfaces use `r3js` by default
* Fixed `BrainVision` annotation bugs
* Supported writing to `STL` format (to support importing to `BrainLab`)
* Added supports to read streamlines data (`trk`, `tck`, `tt`, `vtk`)
* Writing to `freesurfer` surfaces also appends orientation information at the end.

# ieegio 0.0.4

* Added merge support for both volume and surface objects; for surface objects, users can choose whether to merge the objects in model or world space
* Added dependency `ravetools` to help speed up sample volumes using `C++`
* Fixed missing transform issue in writing to `GIfTI` format
* Fixed `write_surface` not working when writing to `FreeSurfer` measurement (curvature) format
* Fixed a typo that caused setting volume data resulting in errors
* `as_ieegio_surface` does not require vertices

# ieegio 0.0.3

* Cleaned `h5py` loader
* `mat_to_quaternion` always returns non-negative `w` now
* Added generics `dim` and `length` to volume object
* Fixed annotation issues in `EDF` format
* Time selection is double-sided using greater equal and less equal signs
* Added more sample data
* Supports colored (`RGB[A]`) formats
* Fixed color intensity when `cal_min` and `cal_max` is set
* Using `r3js` for visualizing surfaces
* Added `resample_volume` to sample images (currently only nearest neighbor)
* Added `burn_volume` to burn contacts (positions given in the image native `RAS` coordinate) with any given colors
* Fixed `io_h5_names` returning wrong names when using with `h5py`
* Exported internal class `LazyH5` for down-stream packages
* Added `as_ieegio_volume` and `as_ieegio_surface` to enclose volume or surface data
* Added a flag to disable using `Python`


# ieegio 0.0.2

* Added `h5py` as an alternative back-end support
* Fixed a bug where images are not loaded correctly due to image format being ignored
* Fixed `Torig` (index to `tkr` coordinate transform) issue
* Fixed a global variable issue
* Fixed a bug where file name is not respected


# ieegio 0.0.1

* Initial CRAN submission.
