in pathology/viewer/src/services/dicom-annotations.service.ts [900:961]
codingSchemeDesignator: Number(getValue(
annotationPropertyCategoryCodeModel,
DicomTag.CODING_SCHEME_DESIGNATOR)),
codingSchemeVersion: getValue(
annotationPropertyCategoryCodeModel,
DicomTag.CODING_SCHEME_VERSION),
contextIdentifier: getValue(
annotationPropertyCategoryCodeModel,
DicomTag.CONTEXT_IDENTIFIER),
};
annotationGroup.annotationPropertyCategoryCodeSequence =
[annotationPropertyCategoryCode];
}
annotationGroup.graphicType =
(annotationGroupModel[DicomTag.GRAPHIC_TYPE].Value as ['POINT'] |
['POLYGON'] | ['RECTANGLE'])[0];
const binaryPointIndexList =
annotationGroupModel[DicomTag.LONG_PRIMITIVE_POINT_INDEX_LIST]
?.InlineBinary ??
'';
const binaryPointIndexType =
annotationGroupModel[DicomTag.LONG_PRIMITIVE_POINT_INDEX_LIST]
?.vr ??
'OL';
const inlineBinaryNumber = inlineBinaryToNumberArray(
vrToType(binaryPointIndexType as string), binaryPointIndexList);
if (!inlineBinaryNumber.length) {
inlineBinaryNumber.push(1); // default, assume single shape
}
const indecesArr =
(inlineBinaryNumber).map((v) => v - 1); // change to 0 based indeces.
// Parse out Point Coordinates Data.
const coordinatesTag =
annotationGroupModel[DicomTag.DOUBLE_POINT_COORDINATES_DATA]
?.InlineBinary ?
DicomTag.DOUBLE_POINT_COORDINATES_DATA :
DicomTag.POINT_COORDINATES_DATA;
const binaryCoordinates =
annotationGroupModel[coordinatesTag]?.InlineBinary ?? '';
const binaryCoordinatesType =
annotationGroupModel[coordinatesTag]?.vr ?? '';
const coordsArr = inlineBinaryToNumberArray(
vrToType(binaryCoordinatesType as string), binaryCoordinates);
// Check if the indeces array ends with the end of the coord array index
if (indecesArr.slice(-1)[0] !== coordsArr.length) {
indecesArr.push(coordsArr.length);
}
const annotationGroups: AnnotationGroup[] = [];
if (annotationGroup.graphicType === 'POINT') {
const newAnnotationGroup = { ...annotationGroup };
newAnnotationGroup.pointCoordinatesData =
this.pixelsToMetersWithYFlip(coordsArr, pixelSize);
annotationGroups.push(newAnnotationGroup);
} else {
for (let i = 0; i < indecesArr.length - 1; i++) {