feat(thumbnails): Enhance DICOM Thumbnail Rendering with different strategies (#5004)

Co-authored-by: Martin Bellehumeur, M. Eng. <23396581+mbellehumeur@users.noreply.github.com>
This commit is contained in:
Bill WallaceandMartin Bellehumeur, M. Eng. authored and GitHub committed 2025-05-08 12:44:56 -04:00
1 parent dee6909a99
commit 578c3939f0
80 files changed
+371 -284

No files matched your search

+2 -2
View File
@@ -37,8 +37,8 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.4",
"@cornerstonejs/codec-openjph": "^2.4.5",
"@cornerstonejs/core": "^3.12.1",
"@cornerstonejs/dicom-image-loader": "^3.12.1",
"@cornerstonejs/core": "^3.12.2",
"@cornerstonejs/dicom-image-loader": "^3.12.2",
"@ohif/ui": "3.11.0-beta.27",
"cornerstone-math": "0.1.9",
"dicom-parser": "^1.8.21"
+12 -1
View File
@@ -18,10 +18,21 @@ export type DisplaySet = {
isOverlayDisplaySet?: boolean;
// Details about how to display:
/** A URL that can be used to display the thumbnail. Typically a data url */
/**
* A URL that can be used to display the thumbnail. Typically a data url
* This can be set to null to avoid trying to display a thumbnail, eg for
* display sets without a thumbnail.
*/
thumbnailSrc?: string;
/** A fetch method to get the thumbnail */
getThumbnailSrc?(imageId?: string): Promise<string>;
/**
* A fetch URL to display the content. This is used for content such as
* pdf display.
*/
renderedUrl?: string;
SeriesDate?: string;
SeriesTime?: string;
instance?: InstanceMetadata;
+2
View File
@@ -35,6 +35,7 @@ import {
sortStudyInstances,
sortingCriteria,
seriesSortCriteria,
instancesSortCriteria,
} from './sortStudy';
import { splitComma, getSplitParam } from './splitComma';
import { createStudyBrowserTabs } from './createStudyBrowserTabs';
@@ -56,6 +57,7 @@ const utils = {
sortStudyInstances,
sortingCriteria,
seriesSortCriteria,
instancesSortCriteria,
writeScript,
formatDate,
formatTime,
+21 -2
View File
@@ -42,7 +42,19 @@ const seriesSortCriteria = {
};
const instancesSortCriteria = {
default: (a, b) => parseInt(a.InstanceNumber) - parseInt(b.InstanceNumber),
default: (a, b) => {
// Sort by InstanceNumber (0020,0013)
const aInstance = parseInt(a.InstanceNumber) || 0;
const bInstance = parseInt(b.InstanceNumber) || 0;
if (aInstance !== bInstance) {
return (parseInt(a.InstanceNumber) || 0) - (parseInt(b.InstanceNumber) || 0);
}
// Fallback rule to enable consistent sorting
if (a.SOPInstanceUID === b.SOPInstanceUID) {
return 0;
}
return a.SOPInstanceUID < b.SOPInstanceUID ? -1 : 1;
},
};
const sortingCriteria = {
@@ -116,4 +128,11 @@ export default function sortStudy(
return study;
}
export { sortStudy, sortStudySeries, sortStudyInstances, sortingCriteria, seriesSortCriteria };
export {
sortStudy,
sortStudySeries,
sortStudyInstances,
sortingCriteria,
seriesSortCriteria,
instancesSortCriteria,
};