SR Viewport WIP

This commit is contained in:
James A. Petts 2020-06-04 13:26:06 +01:00
parent 99bf0e07b0
commit d39d103552

View File

@ -17,6 +17,7 @@ const CodeNameCodeSequenceValues = {
ImagingMeasurements: '126010',
MeasurementGroup: '125007',
ImageLibraryGroup: '126200',
TrackingUniqueIdentifier: '112040',
};
/**
@ -100,29 +101,119 @@ function _getMeasurements(
CodeNameCodeSequenceValues.MeasurementGroup
);
const measurements = [];
const mergedContentSequencesByTrackingUniqueIdentifiers = _getMergedContentSequencesByTrackingUniqueIdentifiers(
MeasurementGroups
);
debugger;
let allMeasurements = [];
Object.keys(mergedContentSequencesByTrackingUniqueIdentifiers).forEach(
trackingUniqueIdentifier => {
const mergedContentSequence =
mergedContentSequencesByTrackingUniqueIdentifiers[
trackingUniqueIdentifier
];
const measurements = _processMeasurement(mergedContentSequence);
if (measurements) {
allMeasurements = allMeasurements.concat(measurements);
}
}
);
}
function _getMergedContentSequencesByTrackingUniqueIdentifiers(
MeasurementGroups
) {
const mergedContentSequencesByTrackingUniqueIdentifiers = {};
MeasurementGroups.forEach(MeasurementGroup => {
const measurement = _processMeasurementGroup(MeasurementGroup);
debugger;
if (measurement) {
measurements.push(measurement);
const ContentSequence = _getSequenceAsArray(
MeasurementGroup.ContentSequence
);
const TrackingUniqueIdentifierItem = ContentSequence.find(
item =>
item.ConceptNameCodeSequence.CodeValue ===
CodeNameCodeSequenceValues.TrackingUniqueIdentifier
);
if (!TrackingUniqueIdentifierItem) {
console.warn(
'No Tracking Unique Identifier, skipping ambiguous measurement.'
);
}
const trackingUniqueIdentifier = TrackingUniqueIdentifierItem.UID;
if (
mergedContentSequencesByTrackingUniqueIdentifiers[
trackingUniqueIdentifier
] === undefined
) {
// Add the full ContentSequence
mergedContentSequencesByTrackingUniqueIdentifiers[
trackingUniqueIdentifier
] = [...ContentSequence];
} else {
// Add the ContentSequence minus the tracking identifier, as we have this
// Information in the merged ContentSequence anyway.
ContentSequence.forEach(item => {
if (
item.ConceptNameCodeSequence.CodeValue !==
CodeNameCodeSequenceValues.TrackingUniqueIdentifier
) {
mergedContentSequencesByTrackingUniqueIdentifiers[
trackingUniqueIdentifier
].push(item);
}
});
}
});
_getSequenceAsArray(MeasurementGroup.ContentSequence).forEach(item => {});
return mergedContentSequencesByTrackingUniqueIdentifiers;
}
function _processMeasurementGroup(MeasurementGroup) {
const contentItemNum = _getSequenceAsArray(
MeasurementGroup.ContentSequence
).find(group => group.ValueType === 'NUM');
function _processMeasurement(mergedContentSequence) {
debugger;
// TODO: Need to process MeasurementGroups as they may be implictly linked, or explictly linked by tracking uids.
if (
mergedContentSequence.some(
group => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D'
)
) {
return _processTID1410Measurement(mergedContentSequence);
}
const NUMContentItems = mergedContentSequence.filter(
group => group.ValueType === 'NUM'
);
NUMContentItems.forEach(item => {
debugger;
});
// Need to deal with TID 1410 style measurements, which will have a SCOORD or SCOORD3D at the top level,
// And non-geometric representations where each NUM has "INFERRED FROM" SCOORD/SCOORD3D
// TODO -> Look at RelationshipType => Contains means
debugger;
return [];
}
function _processTID1410Measurement(mergedContentSequence) {
// TODO
console.error('TODO => Process TID1410Measurement');
debugger;
return [ß];
}
function _getReferencedImagesList(ImagingMeasurementReportContentSequence) {