feat(core): use a real DICOM context to manage DICOM attributes
Description
Currently, Sight stores in memory a very, very small number of DICOM attributes as simple std::string, essentially located in sight::data::Series
data object. This is very limiting as many more exists that could definitively be useful, like "Pixel Aspect Ratio", "Burned In Annotation", or "Image Type". Furthermore, we don't want to manage "by hand" all possible DICOM tags, as this will require constant modification of underlying classes, but rather rely on a dedicated library (GDCM/DCMTK/ODIL ?)
We also want to expose DICOM attributes only on relevant objects. For example, an Activity or a Camera is not directly related to a DICOM Series. Some cleanup need to be done in this regard.
This is a required step for #862 (closed).
Proposal
- Use DCMTK / GDCM to hold a DICOM context.
- Provide an API to read / write data to this context.
- Refactor some class hierarchy to only expose DICOM when it is meaningful.
- Overall cleanup
Functional specifications
See #862 (closed).
Technical specifications
See #862 (closed).
Test plan
See #862 (closed).