@ohif/app 3.12.0-beta.41 → 3.12.0-beta.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{1447.bundle.e01fc0a6bedb558ddbbd.js → 1447.bundle.3c71e9ea053b7069b73e.js} +2 -2
- package/dist/{4113.bundle.35b2bf02f79a9705f3de.js → 4113.bundle.3edfb5a8a5aab9679211.js} +101 -49
- package/dist/{7656.bundle.895648e6ae0045998bf9.js → 7656.bundle.3d4e565ee35e891f3b76.js} +15 -8
- package/dist/{app.bundle.7f8c13ed1319c8a7049a.js → app.bundle.3ddff05a929e648bc39b.js} +190 -27
- package/dist/app.bundle.css +1 -1
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/package.json +20 -20
- /package/dist/{1459.bundle.bc37d11dc7f2c4122619.js → 1459.bundle.fb8d3e9b86d6db3d2baa.js} +0 -0
- /package/dist/{1604.bundle.a2789e3171b7f5cda06f.js → 1604.bundle.4bb34d57bfd5050b9b03.js} +0 -0
- /package/dist/{1807.bundle.ffd600f15e0545556f34.js → 1807.bundle.63c05523037c24c627e4.js} +0 -0
- /package/dist/{1919.bundle.c2ff3b06a6cfae9aad12.js → 1919.bundle.c1a2b483fdcd10d2e8ee.js} +0 -0
- /package/dist/{213.bundle.93c68a8e8a98fed04614.js → 213.bundle.419b1126df29ff894196.js} +0 -0
- /package/dist/{2243.bundle.76cfcf962c371942d1d8.js → 2243.bundle.6262071c8202d60d9e8f.js} +0 -0
- /package/dist/{2424.bundle.2c5ba1c091efa1977f5b.js → 2424.bundle.b35da11dfb95519a14a8.js} +0 -0
- /package/dist/{414.bundle.0b8d3166cc869e4c5ab5.js → 414.bundle.28e014952a93b6e6b58e.js} +0 -0
- /package/dist/{5457.bundle.d8bbca1928f328800d43.js → 5457.bundle.4d46dae65f6ff8686af3.js} +0 -0
- /package/dist/{5485.bundle.2bc2cffc4d55990d634a.js → 5485.bundle.a6b4e8afb47c331a8dcc.js} +0 -0
- /package/dist/{6027.bundle.91791f3f8272c71a3493.js → 6027.bundle.96d1d0a4c04074ff731b.js} +0 -0
- /package/dist/{6201.bundle.2c76115f5574dfc700bf.js → 6201.bundle.03852e3e4812fa47c288.js} +0 -0
- /package/dist/{6991.bundle.8afb532d189985a8bf69.js → 6991.bundle.4488b5fd30b74768c464.js} +0 -0
- /package/dist/{7197.bundle.add4eca11793601af89d.js → 7197.bundle.501245e2a7a876575e2f.js} +0 -0
- /package/dist/{7639.bundle.47b22290338b84c820fa.js → 7639.bundle.a6afd7326c87e1c8df70.js} +0 -0
- /package/dist/{810.bundle.b781054d2600923bf4c0.js → 810.bundle.9df1fe8a988f0ebcd390.js} +0 -0
- /package/dist/{85.bundle.90069f6ed46fcad1fa29.js → 85.bundle.e0e7e67dcf5e01311986.js} +0 -0
- /package/dist/{8558.bundle.8065fa8a2be98f7b55a7.js → 8558.bundle.8131ec4e6f5f45f561fc.js} +0 -0
- /package/dist/{8815.bundle.9b1ff0a9c38831063b54.js → 8815.bundle.e59565eceae997a0afdf.js} +0 -0
- /package/dist/{934.bundle.656c67918146c2882aa4.js → 934.bundle.ffa8ecef7b8d34b0dd66.js} +0 -0
|
@@ -10371,8 +10371,8 @@ function AboutModalDefault() {
|
|
|
10371
10371
|
name
|
|
10372
10372
|
} = (0,browser_detect_es5/* default */.A)();
|
|
10373
10373
|
const browser = `${name[0].toUpperCase()}${name.substr(1)} ${version}`;
|
|
10374
|
-
const versionNumber = "3.12.0-beta.
|
|
10375
|
-
const commitHash = "
|
|
10374
|
+
const versionNumber = "3.12.0-beta.43";
|
|
10375
|
+
const commitHash = "851e74d7b867a806befb5d85fd71ff9a75e9f2d2";
|
|
10376
10376
|
const [main, beta] = versionNumber.split('-');
|
|
10377
10377
|
return /*#__PURE__*/react.createElement(ui_next_src/* AboutModal */.VTU, {
|
|
10378
10378
|
className: "w-[400px]"
|
|
@@ -256,8 +256,59 @@ const toolNames = {
|
|
|
256
256
|
const {
|
|
257
257
|
MeasurementReport
|
|
258
258
|
} = esm/* adaptersSR */.QX.Cornerstone3D;
|
|
259
|
-
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Adds a DICOM SR (Structured Report) annotation to the annotation manager.
|
|
262
|
+
* This function processes measurement data from DICOM SR and converts it into
|
|
263
|
+
* a format suitable for display in the Cornerstone3D viewer.
|
|
264
|
+
*
|
|
265
|
+
* @param {Object} params - The parameters object
|
|
266
|
+
* @param {Object} params.measurement - The DICOM SR measurement data containing coordinates, labels, and metadata
|
|
267
|
+
* @param {Array} params.measurement.coords - Array of coordinate objects with GraphicType, ValueType, and other properties
|
|
268
|
+
* @param {string} params.measurement.TrackingUniqueIdentifier - Unique identifier for the measurement
|
|
269
|
+
* @param {string} params.measurement.TrackingIdentifier - Tracking identifier for adapter lookup
|
|
270
|
+
* @param {Array} [params.measurement.labels] - Optional array of label objects
|
|
271
|
+
* @param {string} [params.measurement.displayText] - Optional display text for the annotation
|
|
272
|
+
* @param {Object} [params.measurement.textBox] - Optional text box configuration
|
|
273
|
+
* @param {string|null} [params.imageId] - Optional image ID for the referenced image (defaults to null)
|
|
274
|
+
* @param {number|null} [params.frameNumber] - Optional frame number for multi-frame images (defaults to null)
|
|
275
|
+
* @param {Object} params.displaySet - The display set containing the image
|
|
276
|
+
* @param {string} params.displaySet.displaySetInstanceUID - Unique identifier for the display set
|
|
277
|
+
* @returns {void}
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
280
|
+
* ```typescript
|
|
281
|
+
* addSRAnnotation({
|
|
282
|
+
* measurement: {
|
|
283
|
+
* TrackingUniqueIdentifier: '1.2.3.4.5',
|
|
284
|
+
* TrackingIdentifier: 'POINT',
|
|
285
|
+
* coords: [{
|
|
286
|
+
* GraphicType: 'POINT',
|
|
287
|
+
* ValueType: 'SCOORD',
|
|
288
|
+
* // ... other coordinate properties
|
|
289
|
+
* }],
|
|
290
|
+
* labels: [{ value: 'Measurement Point' }],
|
|
291
|
+
* displayText: 'Point measurement'
|
|
292
|
+
* },
|
|
293
|
+
* imageId: 'wadouri:file://path/to/image.dcm', // Optional
|
|
294
|
+
* frameNumber: 0, // Optional
|
|
295
|
+
* displaySet: { displaySetInstanceUID: '1.2.3.4' }
|
|
296
|
+
* });
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
function addSRAnnotation({
|
|
300
|
+
measurement,
|
|
301
|
+
imageId = null,
|
|
302
|
+
frameNumber = null,
|
|
303
|
+
displaySet
|
|
304
|
+
}) {
|
|
305
|
+
/** @type {string} The tool name to use for the annotation, defaults to DICOMSRDisplay */
|
|
260
306
|
let toolName = tools_toolNames.DICOMSRDisplay;
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* @type {Object} Renderable data organized by graphic type
|
|
310
|
+
* Groups coordinate data by GraphicType for efficient rendering
|
|
311
|
+
*/
|
|
261
312
|
const renderableData = measurement.coords.reduce((acc, coordProps) => {
|
|
262
313
|
acc[coordProps.GraphicType] = acc[coordProps.GraphicType] || [];
|
|
263
314
|
acc[coordProps.GraphicType].push(utils_getRenderableData({
|
|
@@ -302,10 +353,16 @@ function addSRAnnotation(measurement, imageId, frameNumber) {
|
|
|
302
353
|
FrameOfReferenceUID: frameOfReferenceUID,
|
|
303
354
|
referencedImageId: imageId
|
|
304
355
|
};
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @type {Types.Annotation} The annotation object to be added to the annotation manager
|
|
359
|
+
* Contains all necessary metadata and data for rendering the DICOM SR measurement
|
|
360
|
+
*/
|
|
305
361
|
const SRAnnotation = {
|
|
306
362
|
annotationUID: TrackingUniqueIdentifier,
|
|
307
363
|
highlighted: false,
|
|
308
364
|
isLocked: false,
|
|
365
|
+
isPreview: toolName === tools_toolNames.DICOMSRDisplay,
|
|
309
366
|
invalidated: false,
|
|
310
367
|
metadata: {
|
|
311
368
|
toolName,
|
|
@@ -313,7 +370,8 @@ function addSRAnnotation(measurement, imageId, frameNumber) {
|
|
|
313
370
|
valueType,
|
|
314
371
|
graphicType,
|
|
315
372
|
FrameOfReferenceUID: frameOfReferenceUID,
|
|
316
|
-
referencedImageId: imageId
|
|
373
|
+
referencedImageId: imageId,
|
|
374
|
+
displaySetInstanceUID: displaySet.displaySetInstanceUID
|
|
317
375
|
},
|
|
318
376
|
data: {
|
|
319
377
|
label: measurement.labels?.[0]?.value || undefined,
|
|
@@ -331,8 +389,11 @@ function addSRAnnotation(measurement, imageId, frameNumber) {
|
|
|
331
389
|
};
|
|
332
390
|
|
|
333
391
|
/**
|
|
334
|
-
*
|
|
335
|
-
*
|
|
392
|
+
* Add the annotation to the annotation state manager.
|
|
393
|
+
* Note: Using annotation.state.addAnnotation() instead of annotationManager.addAnnotation()
|
|
394
|
+
* because the latter was not triggering annotation_added events properly.
|
|
395
|
+
*
|
|
396
|
+
* @param {Types.Annotation} SRAnnotation - The annotation to add
|
|
336
397
|
*/
|
|
337
398
|
dist_esm.annotation.state.addAnnotation(SRAnnotation);
|
|
338
399
|
}
|
|
@@ -459,9 +520,10 @@ function addInstances(instances, _displaySetService) {
|
|
|
459
520
|
* DICOM SR SOP Class Handler
|
|
460
521
|
* For all referenced images in the TID 1500/300 sections, add an image to the
|
|
461
522
|
* display.
|
|
462
|
-
* @param instances
|
|
463
|
-
* @param servicesManager
|
|
464
|
-
* @
|
|
523
|
+
* @param {InstanceMetadata[]} instances - A set of instances all from the same series
|
|
524
|
+
* @param {AppTypes.ServicesManager} servicesManager - The services that can be used for creating
|
|
525
|
+
* @param {AppTypes.ExtensionManager} extensionManager - The extension manager
|
|
526
|
+
* @returns {Types.DisplaySet[]} The list of display sets created for the given instances object
|
|
465
527
|
*/
|
|
466
528
|
function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
|
|
467
529
|
// If the series has no instances, stop here
|
|
@@ -589,15 +651,6 @@ function _measurementBelongsToDisplaySet({
|
|
|
589
651
|
}) {
|
|
590
652
|
return measurement.coords[0].ReferencedFrameOfReferenceSequence === displaySet.FrameOfReferenceUID;
|
|
591
653
|
}
|
|
592
|
-
|
|
593
|
-
/**
|
|
594
|
-
* Checks if measurements can be added to a display set.
|
|
595
|
-
*
|
|
596
|
-
* @param srDisplaySet - The source display set containing measurements.
|
|
597
|
-
* @param newDisplaySet - The new display set to check if measurements can be added.
|
|
598
|
-
* @param dataSource - The data source used to retrieve image IDs.
|
|
599
|
-
* @param servicesManager - The services manager.
|
|
600
|
-
*/
|
|
601
654
|
function _checkIfCanAddMeasurementsToDisplaySet(srDisplaySet, newDisplaySet, dataSource, servicesManager) {
|
|
602
655
|
const {
|
|
603
656
|
customizationService
|
|
@@ -639,11 +692,10 @@ function _checkIfCanAddMeasurementsToDisplaySet(srDisplaySet, newDisplaySet, dat
|
|
|
639
692
|
measurement,
|
|
640
693
|
displaySet: newDisplaySet
|
|
641
694
|
})) {
|
|
642
|
-
|
|
695
|
+
addSRAnnotation({
|
|
643
696
|
measurement,
|
|
644
697
|
displaySet: newDisplaySet
|
|
645
698
|
});
|
|
646
|
-
addSRAnnotation(measurement, null, null);
|
|
647
699
|
measurement.loaded = true;
|
|
648
700
|
measurement.displaySetInstanceUID = newDisplaySet.displaySetInstanceUID;
|
|
649
701
|
unloadedMeasurements.splice(j, 1);
|
|
@@ -660,9 +712,12 @@ function _checkIfCanAddMeasurementsToDisplaySet(srDisplaySet, newDisplaySet, dat
|
|
|
660
712
|
const key = `${ReferencedSOPInstanceUID}:${frame}`;
|
|
661
713
|
const imageId = imageIdMap.get(key);
|
|
662
714
|
if (imageId && _measurementReferencesSOPInstanceUID(measurement, ReferencedSOPInstanceUID, frame)) {
|
|
663
|
-
addSRAnnotation(
|
|
664
|
-
|
|
665
|
-
|
|
715
|
+
addSRAnnotation({
|
|
716
|
+
measurement,
|
|
717
|
+
imageId,
|
|
718
|
+
frameNumber: frame,
|
|
719
|
+
displaySet: newDisplaySet
|
|
720
|
+
});
|
|
666
721
|
measurement.loaded = true;
|
|
667
722
|
measurement.imageId = imageId;
|
|
668
723
|
measurement.displaySetInstanceUID = newDisplaySet.displaySetInstanceUID;
|
|
@@ -675,10 +730,10 @@ function _checkIfCanAddMeasurementsToDisplaySet(srDisplaySet, newDisplaySet, dat
|
|
|
675
730
|
|
|
676
731
|
/**
|
|
677
732
|
* Checks if a measurement references a specific SOP Instance UID.
|
|
678
|
-
* @param measurement - The measurement object.
|
|
679
|
-
* @param
|
|
680
|
-
* @param frameNumber - The frame number to check against (optional).
|
|
681
|
-
* @returns True if the measurement references the specified SOP Instance UID, false otherwise.
|
|
733
|
+
* @param {any} measurement - The measurement object.
|
|
734
|
+
* @param {string} sopInstanceUID - The SOP Instance UID to check against.
|
|
735
|
+
* @param {number} frameNumber - The frame number to check against (optional).
|
|
736
|
+
* @returns {boolean} True if the measurement references the specified SOP Instance UID, false otherwise.
|
|
682
737
|
*/
|
|
683
738
|
function _measurementReferencesSOPInstanceUID(measurement, SOPInstanceUID, frameNumber) {
|
|
684
739
|
const {
|
|
@@ -708,10 +763,8 @@ function _measurementReferencesSOPInstanceUID(measurement, SOPInstanceUID, frame
|
|
|
708
763
|
/**
|
|
709
764
|
* Retrieves the SOP class handler module.
|
|
710
765
|
*
|
|
711
|
-
* @param {
|
|
712
|
-
* @
|
|
713
|
-
* @param {Object} options.extensionManager - The extension manager.
|
|
714
|
-
* @returns {Array} An array containing the SOP class handler module.
|
|
766
|
+
* @param {OhifTypes.Extensions.ExtensionParams} params - The extension parameters.
|
|
767
|
+
* @returns {Array} An array containing the SOP class handler modules.
|
|
715
768
|
*/
|
|
716
769
|
function getSopClassHandlerModule(params) {
|
|
717
770
|
const {
|
|
@@ -735,8 +788,8 @@ function getSopClassHandlerModule(params) {
|
|
|
735
788
|
/**
|
|
736
789
|
* Retrieves the measurements from the ImagingMeasurementReportContentSequence.
|
|
737
790
|
*
|
|
738
|
-
* @param {
|
|
739
|
-
* @returns {
|
|
791
|
+
* @param {any[]} imagingMeasurementReportContentSequence - The ImagingMeasurementReportContentSequence array.
|
|
792
|
+
* @returns {any[]} The array of measurements.
|
|
740
793
|
*/
|
|
741
794
|
function _getMeasurements(ImagingMeasurementReportContentSequence) {
|
|
742
795
|
const ImagingMeasurements = ImagingMeasurementReportContentSequence.find(item => item.ConceptNameCodeSequence.CodeValue === enums/* CodeNameCodeSequenceValues */.n7.ImagingMeasurements);
|
|
@@ -759,8 +812,8 @@ function _getMeasurements(ImagingMeasurementReportContentSequence) {
|
|
|
759
812
|
/**
|
|
760
813
|
* Retrieves merged content sequences by tracking unique identifiers.
|
|
761
814
|
*
|
|
762
|
-
* @param {
|
|
763
|
-
* @returns {Object}
|
|
815
|
+
* @param {any[]} measurementGroups - The measurement groups.
|
|
816
|
+
* @returns {Object} The merged content sequences by tracking unique identifiers.
|
|
764
817
|
*/
|
|
765
818
|
function _getMergedContentSequencesByTrackingUniqueIdentifiers(MeasurementGroups) {
|
|
766
819
|
const mergedContentSequencesByTrackingUniqueIdentifiers = {};
|
|
@@ -793,8 +846,8 @@ function _getMergedContentSequencesByTrackingUniqueIdentifiers(MeasurementGroups
|
|
|
793
846
|
* it calls the _processTID1410Measurement function.
|
|
794
847
|
* Otherwise, it calls the _processNonGeometricallyDefinedMeasurement function.
|
|
795
848
|
*
|
|
796
|
-
* @param {
|
|
797
|
-
* @returns {any}
|
|
849
|
+
* @param {any[]} mergedContentSequence - The merged content sequence to process.
|
|
850
|
+
* @returns {any} The processed measurement result.
|
|
798
851
|
*/
|
|
799
852
|
function _processMeasurement(mergedContentSequence) {
|
|
800
853
|
if (mergedContentSequence.some(group => isScoordOr3d(group) && !isTextPosition(group))) {
|
|
@@ -808,8 +861,8 @@ function _processMeasurement(mergedContentSequence) {
|
|
|
808
861
|
* TID 1410 style measurements have a SCOORD or SCOORD3D at the top level,
|
|
809
862
|
* and non-geometric representations where each NUM has "INFERRED FROM" SCOORD/SCOORD3D.
|
|
810
863
|
*
|
|
811
|
-
* @param mergedContentSequence - The merged content sequence containing the measurements.
|
|
812
|
-
* @returns The measurement object containing the loaded status, labels, coordinates, tracking unique identifier, and tracking identifier.
|
|
864
|
+
* @param {any[]} mergedContentSequence - The merged content sequence containing the measurements.
|
|
865
|
+
* @returns {any} The measurement object containing the loaded status, labels, coordinates, tracking unique identifier, and tracking identifier.
|
|
813
866
|
*/
|
|
814
867
|
function _processTID1410Measurement(mergedContentSequence) {
|
|
815
868
|
// Need to deal with TID 1410 style measurements, which will have a SCOORD or SCOORD3D at the top level,
|
|
@@ -868,8 +921,8 @@ function _processTID1410Measurement(mergedContentSequence) {
|
|
|
868
921
|
/**
|
|
869
922
|
* Processes the non-geometrically defined measurement from the merged content sequence.
|
|
870
923
|
*
|
|
871
|
-
* @param mergedContentSequence The merged content sequence containing the measurement data.
|
|
872
|
-
* @returns The processed measurement object.
|
|
924
|
+
* @param {any[]} mergedContentSequence The merged content sequence containing the measurement data.
|
|
925
|
+
* @returns {any} The processed measurement object.
|
|
873
926
|
*/
|
|
874
927
|
function _processNonGeometricallyDefinedMeasurement(mergedContentSequence) {
|
|
875
928
|
const NUMContentItems = mergedContentSequence.filter(group => group.ValueType === 'NUM');
|
|
@@ -938,8 +991,8 @@ function _processNonGeometricallyDefinedMeasurement(mergedContentSequence) {
|
|
|
938
991
|
|
|
939
992
|
/**
|
|
940
993
|
* Extracts coordinates from a graphic item of type SCOORD or SCOORD3D.
|
|
941
|
-
* @param {
|
|
942
|
-
* @returns {
|
|
994
|
+
* @param {any} graphicItem - The graphic item containing the coordinates.
|
|
995
|
+
* @returns {any} The extracted coordinates.
|
|
943
996
|
*/
|
|
944
997
|
const _getCoordsFromSCOORDOrSCOORD3D = graphicItem => {
|
|
945
998
|
const {
|
|
@@ -959,9 +1012,9 @@ const _getCoordsFromSCOORDOrSCOORD3D = graphicItem => {
|
|
|
959
1012
|
|
|
960
1013
|
/**
|
|
961
1014
|
* Retrieves the label and value from the provided ConceptNameCodeSequence and MeasuredValueSequence.
|
|
962
|
-
* @param {
|
|
963
|
-
* @param {
|
|
964
|
-
* @returns {Object}
|
|
1015
|
+
* @param {any} conceptNameCodeSequence - The ConceptNameCodeSequence object.
|
|
1016
|
+
* @param {any} measuredValueSequence - The MeasuredValueSequence object.
|
|
1017
|
+
* @returns {Object} An object containing the label and value.
|
|
965
1018
|
* The label represents the CodeMeaning from the ConceptNameCodeSequence.
|
|
966
1019
|
* The value represents the formatted NumericValue and CodeValue from the MeasuredValueSequence.
|
|
967
1020
|
* Example: { label: 'Long Axis', value: '31.00 mm' }
|
|
@@ -987,8 +1040,8 @@ function _getLabelFromMeasuredValueSequence(ConceptNameCodeSequence, MeasuredVal
|
|
|
987
1040
|
/**
|
|
988
1041
|
* Retrieves a list of referenced images from the Imaging Measurement Report Content Sequence.
|
|
989
1042
|
*
|
|
990
|
-
* @param {
|
|
991
|
-
* @returns {
|
|
1043
|
+
* @param {any[]} imagingMeasurementReportContentSequence - The Imaging Measurement Report Content Sequence.
|
|
1044
|
+
* @returns {any[]} The list of referenced images.
|
|
992
1045
|
*/
|
|
993
1046
|
function _getReferencedImagesList(ImagingMeasurementReportContentSequence) {
|
|
994
1047
|
const ImageLibrary = ImagingMeasurementReportContentSequence.find(item => item.ConceptNameCodeSequence.CodeValue === enums/* CodeNameCodeSequenceValues */.n7.ImageLibrary);
|
|
@@ -1030,7 +1083,7 @@ function _getReferencedImagesList(ImagingMeasurementReportContentSequence) {
|
|
|
1030
1083
|
* Otherwise, the sequence is wrapped in an array and returned.
|
|
1031
1084
|
*
|
|
1032
1085
|
* @param {any} sequence - The DICOM sequence to convert.
|
|
1033
|
-
* @returns {any[]}
|
|
1086
|
+
* @returns {any[]} The converted array.
|
|
1034
1087
|
*/
|
|
1035
1088
|
function _getSequenceAsArray(sequence) {
|
|
1036
1089
|
if (!sequence) {
|
|
@@ -2268,8 +2321,7 @@ function init({
|
|
|
2268
2321
|
servicesManager
|
|
2269
2322
|
}) {
|
|
2270
2323
|
const {
|
|
2271
|
-
measurementService
|
|
2272
|
-
cornerstoneViewportService
|
|
2324
|
+
measurementService
|
|
2273
2325
|
} = servicesManager.services;
|
|
2274
2326
|
addToolInstance(tools_toolNames.DICOMSRDisplay, DICOMSRDisplayTool);
|
|
2275
2327
|
addToolInstance(tools_toolNames.SRLength, dist_esm.LengthTool);
|
|
@@ -1613,7 +1613,17 @@ function useViewportSegmentations({
|
|
|
1613
1613
|
return;
|
|
1614
1614
|
}
|
|
1615
1615
|
const representations = segmentationService.getSegmentationRepresentations(viewportId);
|
|
1616
|
-
|
|
1616
|
+
|
|
1617
|
+
// Deduplicate representations by segmentationId to prevent showing
|
|
1618
|
+
// the same segmentation multiple times in the panel when it has
|
|
1619
|
+
// multiple representation types (e.g., labelmap and surface)
|
|
1620
|
+
const uniqueSegmentationMap = new Map();
|
|
1621
|
+
representations.forEach(representation => {
|
|
1622
|
+
if (!uniqueSegmentationMap.has(representation.segmentationId)) {
|
|
1623
|
+
uniqueSegmentationMap.set(representation.segmentationId, representation);
|
|
1624
|
+
}
|
|
1625
|
+
});
|
|
1626
|
+
const newSegmentationsWithRepresentations = Array.from(uniqueSegmentationMap.values()).map(representation => {
|
|
1617
1627
|
const segmentation = segmentationService.getSegmentation(representation.segmentationId);
|
|
1618
1628
|
const mappedSegmentation = mapSegmentationToDisplay(segmentation, customizationService);
|
|
1619
1629
|
return {
|
|
@@ -5982,7 +5992,7 @@ const connectMeasurementServiceToTools = ({
|
|
|
5982
5992
|
if (measurement?.metadata?.referencedImageId) {
|
|
5983
5993
|
imageId = measurement.metadata.referencedImageId;
|
|
5984
5994
|
frameNumber = getSOPInstanceAttributes(measurement.metadata.referencedImageId).frameNumber;
|
|
5985
|
-
} else {
|
|
5995
|
+
} else if (instance) {
|
|
5986
5996
|
imageId = dataSource.getImageIdsForInstance({
|
|
5987
5997
|
instance
|
|
5988
5998
|
});
|
|
@@ -23207,8 +23217,7 @@ function AccordionGroup(props) {
|
|
|
23207
23217
|
grouping,
|
|
23208
23218
|
items,
|
|
23209
23219
|
children,
|
|
23210
|
-
sourceChildren
|
|
23211
|
-
type
|
|
23220
|
+
sourceChildren
|
|
23212
23221
|
} = props;
|
|
23213
23222
|
const childProps = (0,src/* useSystem */.Jg)();
|
|
23214
23223
|
let defaultValue = props.defaultValue;
|
|
@@ -23575,8 +23584,6 @@ function StudySummaryWithActions(props) {
|
|
|
23575
23584
|
;// ../../../extensions/cornerstone/src/components/StudyMeasurements.tsx
|
|
23576
23585
|
|
|
23577
23586
|
|
|
23578
|
-
// import { AccordionContent, AccordionItem, AccordionTrigger } from '@ohif/ui-next';
|
|
23579
|
-
|
|
23580
23587
|
|
|
23581
23588
|
|
|
23582
23589
|
|
|
@@ -23636,8 +23643,7 @@ function StudyMeasurements(props) {
|
|
|
23636
23643
|
grouping = {},
|
|
23637
23644
|
children
|
|
23638
23645
|
} = props;
|
|
23639
|
-
const
|
|
23640
|
-
const activeDisplaySets = (0,src/* useActiveViewportDisplaySets */.BZ)(system);
|
|
23646
|
+
const activeDisplaySets = (0,src/* useActiveViewportDisplaySets */.BZ)();
|
|
23641
23647
|
const activeStudyUID = activeDisplaySets?.[0]?.StudyInstanceUID;
|
|
23642
23648
|
return /*#__PURE__*/react.createElement(AccordionGroup, {
|
|
23643
23649
|
grouping: {
|
|
@@ -23735,6 +23741,7 @@ function PanelMeasurement(props) {
|
|
|
23735
23741
|
}));
|
|
23736
23742
|
return cloned;
|
|
23737
23743
|
}
|
|
23744
|
+
|
|
23738
23745
|
// Need to merge defaults on the content props to ensure they get passed to children
|
|
23739
23746
|
return /*#__PURE__*/react.createElement(components_StudyMeasurements, {
|
|
23740
23747
|
items: displayMeasurements
|