@ohif/app 3.12.0-beta.90 → 3.12.0-beta.92
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/{1037.bundle.87a5adb8c92bd5bf53f5.js → 1037.bundle.dd9098a9a640f0d0ef0f.js} +129 -96
- package/dist/{1608.bundle.3d904bc76f5d5f78ff21.js → 1608.bundle.f855c4bdb7f00eb66fca.js} +1 -1
- package/dist/{1903.bundle.f0505c6e927d0bef5589.js → 1903.bundle.9a291597f23ebaa3371c.js} +49 -47
- package/dist/{1604.bundle.4f01a6b0b8d5b1cbc294.js → 1933.bundle.a5d41c04da5425d06694.js} +13 -26
- package/dist/{2018.bundle.59c7c4cb3f79f63bab68.js → 2018.bundle.4527f2b0c1c8ff75f568.js} +18 -43
- package/dist/{306.bundle.f9faa2b3cdd7e86b5869.js → 306.bundle.a0af0889477845729c6a.js} +23 -1
- package/dist/{3461.bundle.458597198f24359ec78f.js → 3461.bundle.3cac685ef19f883a0f9d.js} +27 -8
- package/dist/{4019.bundle.1be1cdd0805ad2c59d65.js → 4019.bundle.03029c488a02493cb7f3.js} +17 -1
- package/dist/{2518.bundle.644302643ac0790e7374.js → 4033.bundle.1609f8751de2a6aff280.js} +457 -303
- package/dist/{4819.bundle.f187a4c0517c85e37ab0.js → 4819.bundle.14344bf9acf5c5f6d123.js} +3 -3
- package/dist/{5028.bundle.6003ab9178779929462f.js → 5028.bundle.c61b7cd88172e2d589d5.js} +2 -2
- package/dist/{5400.bundle.c3a3fe8867efa2edfa94.js → 5400.bundle.428fdd2dc347a7fda9e6.js} +96 -92
- package/dist/5457.bundle.af893cd38fdaeafd5c2a.js +89 -0
- package/dist/{5485.bundle.2ee096f57ff7e51d4c23.js → 5485.bundle.929d9add8bdf90a4f3c7.js} +8 -0
- package/dist/{5802.bundle.8922caf16c088b10cdb0.js → 5802.bundle.756d2ed511c06ee8b461.js} +2 -2
- package/dist/{6991.bundle.46bc04720d99fbb06785.js → 6991.bundle.7d091de815571097b96e.js} +8 -10
- package/dist/{7412.bundle.34fe5e72833e857edc0a.js → 7412.bundle.dfe01ae3e53107abe53d.js} +80 -57
- package/dist/{8305.bundle.8ea926425cdffaf84fe3.js → 8305.bundle.08ba73235df90e099838.js} +75 -55
- package/dist/{8558.bundle.c9ffb4f942dbbbff1849.js → 8558.bundle.705446f4883e84021bf4.js} +29 -11
- package/dist/{8583.bundle.7715397a42e8f00a9e3e.js → 8583.bundle.0288cadf5cf8401446b1.js} +12 -13
- package/dist/{874.bundle.92ddc54408fef9debee7.js → 874.bundle.7e543ec9343c9a718e3d.js} +35 -42
- package/dist/{3613.bundle.6157004e0592003c0800.js → 8802.bundle.4958d8ba1d0d521a002a.js} +131 -76
- package/dist/{9548.bundle.7be4f24aeadd0ad4f16c.js → 9195.bundle.70afccd0f802b78c279a.js} +75 -104
- package/dist/{9845.bundle.7e4db5e31b28d73fdac2.js → 9845.bundle.0d22f2210c1d5ac18882.js} +1 -1
- package/dist/{app.bundle.bdd8a45996ed4ca28560.js → app.bundle.2b7e40349f89ffdfd96c.js} +1055 -219
- package/dist/{compute.bundle.f3ca9fb0e7ce9e885b9c.js → compute.bundle.4c0ef8b919cbe5eef44d.js} +3 -3
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.7b8d1bb21d442a48da1d.js → polySeg.bundle.75f37f2780c5375e161e.js} +3 -3
- package/dist/sw.js +1 -1
- package/package.json +22 -22
- package/dist/5457.bundle.535bae0c872c1ca0c2cb.js +0 -1358
- /package/dist/{1459.bundle.0481573ae1bde12b24ee.js → 1459.bundle.c4acfc6df383fc187e9e.js} +0 -0
- /package/dist/{147.bundle.6fc65a239d1ae1c6a918.js → 147.bundle.c191ca0b67633f707aff.js} +0 -0
- /package/dist/{1515.bundle.73d415797a677ae5261e.js → 1515.bundle.3f81b326242dd945ecdb.js} +0 -0
- /package/dist/{1604.css → 1933.css} +0 -0
- /package/dist/{213.bundle.9b152cd4d202cae43af2.js → 213.bundle.33092c23ffe1d81ae242.js} +0 -0
- /package/dist/{2243.bundle.25ca9faa6d0776355adf.js → 2243.bundle.e37c80996a222167dc14.js} +0 -0
- /package/dist/{2424.bundle.57b7484a3b1b1e5a1722.js → 2424.bundle.45583fc64208a2821aa3.js} +0 -0
- /package/dist/{319.bundle.4ea0dbcfeb553c900206.js → 319.bundle.febb2a63634488c11db6.js} +0 -0
- /package/dist/{6027.bundle.06ab1f1cd27f93f826e5.js → 6027.bundle.b2942a0dd2c583374d7b.js} +0 -0
- /package/dist/{7431.bundle.55dd86000e66bee467e2.js → 7431.bundle.b80819b8eb28d2ee897d.js} +0 -0
- /package/dist/{7639.bundle.a89f4a8c6e8b2593d7a4.js → 7639.bundle.2ad4b6cd132d87439fa6.js} +0 -0
- /package/dist/{85.bundle.f3a9149485e3fcf652f0.js → 85.bundle.a772983604a0f9514e33.js} +0 -0
- /package/dist/{9862.bundle.0456a2d473895bf2916e.js → 9862.bundle.eca4ea8821bb040a44c1.js} +0 -0
- /package/dist/{9927.bundle.d7051dac659d827d62d3.js → 9927.bundle.775cb41458de4c28a9ba.js} +0 -0
|
@@ -357,7 +357,7 @@ function useMeasurements({
|
|
|
357
357
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
|
|
358
358
|
/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62051);
|
|
359
359
|
/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
|
|
360
|
-
/* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
|
|
360
|
+
/* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37447);
|
|
361
361
|
/* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42356);
|
|
362
362
|
|
|
363
363
|
|
|
@@ -1482,7 +1482,7 @@ function getCustomizationData(customizationService) {
|
|
|
1482
1482
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
|
|
1483
1483
|
/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62051);
|
|
1484
1484
|
/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
|
|
1485
|
-
/* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
|
|
1485
|
+
/* harmony import */ var _ohif_core_src_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37447);
|
|
1486
1486
|
/* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42356);
|
|
1487
1487
|
|
|
1488
1488
|
|
|
@@ -1808,8 +1808,8 @@ function destroy() {
|
|
|
1808
1808
|
var ai_dist_esm = __webpack_require__(75165);
|
|
1809
1809
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/polymorphic-segmentation/dist/esm/index.js + 14 modules
|
|
1810
1810
|
var polymorphic_segmentation_dist_esm = __webpack_require__(56983);
|
|
1811
|
-
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts +
|
|
1812
|
-
var default_src = __webpack_require__(
|
|
1811
|
+
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 139 modules
|
|
1812
|
+
var default_src = __webpack_require__(39195);
|
|
1813
1813
|
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
|
|
1814
1814
|
var state = __webpack_require__(71353);
|
|
1815
1815
|
;// ../../../extensions/cornerstone/src/utils/getViewportEnabledElement.ts
|
|
@@ -1922,8 +1922,8 @@ function onCompletedCalibrationLine(servicesManager, csToolsEvent) {
|
|
|
1922
1922
|
});
|
|
1923
1923
|
});
|
|
1924
1924
|
}
|
|
1925
|
-
// EXTERNAL MODULE: ../../core/src/utils/index.ts +
|
|
1926
|
-
var utils = __webpack_require__(
|
|
1925
|
+
// EXTERNAL MODULE: ../../core/src/utils/index.ts + 33 modules
|
|
1926
|
+
var utils = __webpack_require__(37447);
|
|
1927
1927
|
;// ../../../extensions/cornerstone/src/tools/OverlayPlaneModuleProvider.ts
|
|
1928
1928
|
|
|
1929
1929
|
const _cachedOverlayMetadata = new Map();
|
|
@@ -6015,6 +6015,9 @@ const connectMeasurementServiceToTools = ({
|
|
|
6015
6015
|
const annotationManager = dist_esm.annotation.state.getAnnotationManager();
|
|
6016
6016
|
const newAnnotation = {
|
|
6017
6017
|
annotationUID: measurement.uid,
|
|
6018
|
+
// Not used in CS3D but stored in the CS3D state so that saving
|
|
6019
|
+
// can apply the predecessor consistently.
|
|
6020
|
+
predecessorImageId: measurement?.predecessorImageId,
|
|
6018
6021
|
highlighted: false,
|
|
6019
6022
|
isLocked: false,
|
|
6020
6023
|
// This is used to force a re-render of the annotation to
|
|
@@ -7486,7 +7489,7 @@ const ExportSegmentationSubMenuItem = ({
|
|
|
7486
7489
|
const {
|
|
7487
7490
|
t
|
|
7488
7491
|
} = (0,es/* useTranslation */.Bd)('SegmentationTable');
|
|
7489
|
-
return /*#__PURE__*/react.createElement(
|
|
7492
|
+
return /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSub */.lvB, null, /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuSubTrigger */.nVd, {
|
|
7490
7493
|
className: "pl-1"
|
|
7491
7494
|
}, /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI1.Export, {
|
|
7492
7495
|
className: "text-foreground"
|
|
@@ -7498,13 +7501,13 @@ const ExportSegmentationSubMenuItem = ({
|
|
|
7498
7501
|
className: "h-5 w-5"
|
|
7499
7502
|
}), /*#__PURE__*/react.createElement("span", {
|
|
7500
7503
|
className: "pl-1"
|
|
7501
|
-
}, t('Download'))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7504
|
+
}, t('Download'))), segmentationRepresentationType === esm_enums.SegmentationRepresentations.Labelmap && /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7502
7505
|
onClick: e => {
|
|
7503
7506
|
e.preventDefault();
|
|
7504
7507
|
actions.downloadCSVSegmentationReport(segmentationId);
|
|
7505
7508
|
},
|
|
7506
7509
|
disabled: !allowExport
|
|
7507
|
-
}, t('CSV Report')), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7510
|
+
}, t('CSV Report')), segmentationRepresentationType === esm_enums.SegmentationRepresentations.Labelmap && /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7508
7511
|
onClick: e => {
|
|
7509
7512
|
e.preventDefault();
|
|
7510
7513
|
actions.onSegmentationDownload(segmentationId);
|
|
@@ -7522,23 +7525,19 @@ const ExportSegmentationSubMenuItem = ({
|
|
|
7522
7525
|
className: "h-5 w-5"
|
|
7523
7526
|
}), /*#__PURE__*/react.createElement("span", {
|
|
7524
7527
|
className: "pl-1 pt-1"
|
|
7525
|
-
}, t('Export'))), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7528
|
+
}, t('Export'))), segmentationRepresentationType === esm_enums.SegmentationRepresentations.Labelmap && /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7526
7529
|
onClick: e => {
|
|
7527
7530
|
e.preventDefault();
|
|
7528
|
-
actions.storeSegmentation(segmentationId);
|
|
7531
|
+
actions.storeSegmentation(segmentationId, 'SEG');
|
|
7529
7532
|
},
|
|
7530
7533
|
disabled: !allowExport
|
|
7531
|
-
}, t('DICOM SEG'))
|
|
7534
|
+
}, t('DICOM SEG')), /*#__PURE__*/react.createElement(ui_next_src/* DropdownMenuItem */._26, {
|
|
7532
7535
|
onClick: e => {
|
|
7533
7536
|
e.preventDefault();
|
|
7534
|
-
actions.
|
|
7537
|
+
actions.storeSegmentation(segmentationId, 'RTSTRUCT');
|
|
7535
7538
|
},
|
|
7536
7539
|
disabled: !allowExport
|
|
7537
|
-
},
|
|
7538
|
-
className: "text-foreground"
|
|
7539
|
-
}), /*#__PURE__*/react.createElement("span", {
|
|
7540
|
-
className: "pl-2"
|
|
7541
|
-
}, t('Download DICOM RTSS')))));
|
|
7540
|
+
}, t('DICOM RTSS')))));
|
|
7542
7541
|
};
|
|
7543
7542
|
;// ../../../extensions/cornerstone/src/customizations/CustomDropdownMenuContent.tsx
|
|
7544
7543
|
|
|
@@ -7583,21 +7582,22 @@ const CustomDropdownMenuContent = () => {
|
|
|
7583
7582
|
segmentation = activeSegmentation;
|
|
7584
7583
|
segmentationId = activeSegmentationId;
|
|
7585
7584
|
}
|
|
7585
|
+
if (!segmentation || !segmentationId) {
|
|
7586
|
+
return null;
|
|
7587
|
+
}
|
|
7586
7588
|
|
|
7587
7589
|
// Determine if export is allowed for this segmentation
|
|
7588
|
-
if (exportOptions
|
|
7590
|
+
if (exportOptions) {
|
|
7589
7591
|
const exportOption = exportOptions.find(opt => opt.segmentationId === segmentationId);
|
|
7590
7592
|
allowExport = exportOption?.isExportable || false;
|
|
7591
7593
|
}
|
|
7592
|
-
if (!segmentation || !segmentationId) {
|
|
7593
|
-
return null;
|
|
7594
|
-
}
|
|
7595
7594
|
const actions = {
|
|
7596
|
-
storeSegmentation: async segmentationId => {
|
|
7595
|
+
storeSegmentation: async (segmentationId, modality = 'SEG') => {
|
|
7597
7596
|
commandsManager.run({
|
|
7598
7597
|
commandName: 'storeSegmentation',
|
|
7599
7598
|
commandOptions: {
|
|
7600
|
-
segmentationId
|
|
7599
|
+
segmentationId,
|
|
7600
|
+
modality
|
|
7601
7601
|
},
|
|
7602
7602
|
context: 'CORNERSTONE'
|
|
7603
7603
|
});
|
|
@@ -9441,6 +9441,10 @@ var html2canvas_esm = __webpack_require__(91037);
|
|
|
9441
9441
|
|
|
9442
9442
|
|
|
9443
9443
|
|
|
9444
|
+
|
|
9445
|
+
const {
|
|
9446
|
+
downloadUrl
|
|
9447
|
+
} = src/* utils */.Wp;
|
|
9444
9448
|
const DEFAULT_SIZE = 512;
|
|
9445
9449
|
const CornerstoneViewportDownloadForm_MAX_TEXTURE_SIZE = 10000;
|
|
9446
9450
|
const VIEWPORT_ID = 'cornerstone-viewport-download-form';
|
|
@@ -9637,10 +9641,7 @@ const CornerstoneViewportDownloadForm = ({
|
|
|
9637
9641
|
return;
|
|
9638
9642
|
}
|
|
9639
9643
|
const canvas = await (0,html2canvas_esm/* default */.A)(divForDownloadViewport);
|
|
9640
|
-
|
|
9641
|
-
link.download = `${filename}.${fileType}`;
|
|
9642
|
-
link.href = canvas.toDataURL(`image/${fileType}`, 1.0);
|
|
9643
|
-
link.click();
|
|
9644
|
+
downloadUrl(canvas.toDataURL(`image/${fileType}`, 1.0));
|
|
9644
9645
|
};
|
|
9645
9646
|
const ViewportDownloadFormNew = customizationService.getCustomization('ohif.captureViewportModal');
|
|
9646
9647
|
return /*#__PURE__*/react.createElement(ViewportDownloadFormNew, {
|
|
@@ -9818,6 +9819,10 @@ function updateSegmentBidirectionalStats({
|
|
|
9818
9819
|
return null;
|
|
9819
9820
|
}
|
|
9820
9821
|
;// ../../../extensions/cornerstone/src/utils/generateSegmentationCSVReport.ts
|
|
9822
|
+
|
|
9823
|
+
const {
|
|
9824
|
+
downloadCsv
|
|
9825
|
+
} = src/* utils */.Wp;
|
|
9821
9826
|
function generateSegmentationCSVReport(segmentationData, info) {
|
|
9822
9827
|
// Initialize the rows for our CSV
|
|
9823
9828
|
const csvRows = [];
|
|
@@ -9903,19 +9908,9 @@ function generateSegmentationCSVReport(segmentationData, info) {
|
|
|
9903
9908
|
});
|
|
9904
9909
|
csvString += formattedRow.join(',') + '\n';
|
|
9905
9910
|
}
|
|
9906
|
-
|
|
9907
|
-
|
|
9908
|
-
const blob = new Blob([csvString], {
|
|
9909
|
-
type: 'text/csv;charset=utf-8;'
|
|
9911
|
+
downloadCsv(csvString, {
|
|
9912
|
+
filename: `${segmentationData.label || 'Segmentation'}_Report_${new Date().toISOString().split('T')[0]}.csv`
|
|
9910
9913
|
});
|
|
9911
|
-
const url = URL.createObjectURL(blob);
|
|
9912
|
-
const link = document.createElement('a');
|
|
9913
|
-
link.setAttribute('href', url);
|
|
9914
|
-
link.setAttribute('download', `${segmentationData.label || 'Segmentation'}_Report_${new Date().toISOString().split('T')[0]}.csv`);
|
|
9915
|
-
link.style.visibility = 'hidden';
|
|
9916
|
-
document.body.appendChild(link);
|
|
9917
|
-
link.click();
|
|
9918
|
-
document.body.removeChild(link);
|
|
9919
9914
|
}
|
|
9920
9915
|
;// ../../../extensions/cornerstone/src/utils/hydrationUtils.ts
|
|
9921
9916
|
function getUpdatedViewportsForSegmentation({
|
|
@@ -12033,18 +12028,17 @@ function commandsModule({
|
|
|
12033
12028
|
* Stores a segmentation and shows it in the viewport
|
|
12034
12029
|
* @param props.segmentationId - The ID of the segmentation to store
|
|
12035
12030
|
*/
|
|
12036
|
-
storeSegmentationCommand: async
|
|
12037
|
-
|
|
12038
|
-
|
|
12031
|
+
storeSegmentationCommand: async args => {
|
|
12032
|
+
const {
|
|
12033
|
+
segmentationId
|
|
12034
|
+
} = args;
|
|
12039
12035
|
const {
|
|
12040
12036
|
segmentationService,
|
|
12041
12037
|
viewportGridService
|
|
12042
12038
|
} = servicesManager.services;
|
|
12043
12039
|
const displaySetInstanceUIDs = await (0,default_src.createReportAsync)({
|
|
12044
12040
|
servicesManager,
|
|
12045
|
-
getReport: () => commandsManager.runCommand('storeSegmentation',
|
|
12046
|
-
segmentationId
|
|
12047
|
-
}),
|
|
12041
|
+
getReport: () => commandsManager.runCommand('storeSegmentation', args),
|
|
12048
12042
|
reportType: 'Segmentation'
|
|
12049
12043
|
});
|
|
12050
12044
|
if (displaySetInstanceUIDs) {
|
|
@@ -19389,11 +19383,15 @@ class SegmentationService extends src/* PubSubService */.Rc {
|
|
|
19389
19383
|
}
|
|
19390
19384
|
async addSegmentationRepresentation(viewportId, {
|
|
19391
19385
|
segmentationId,
|
|
19386
|
+
predecessorImageId,
|
|
19392
19387
|
type,
|
|
19393
19388
|
config,
|
|
19394
19389
|
suppressEvents = false
|
|
19395
19390
|
}) {
|
|
19396
19391
|
const segmentation = this.getSegmentation(segmentationId);
|
|
19392
|
+
if (segmentation && !segmentation.predecessorImageId && predecessorImageId) {
|
|
19393
|
+
segmentation.predecessorImageId = predecessorImageId;
|
|
19394
|
+
}
|
|
19397
19395
|
const csViewport = this.getAndValidateViewport(viewportId);
|
|
19398
19396
|
if (!csViewport) {
|
|
19399
19397
|
return;
|
|
@@ -22153,8 +22151,12 @@ class CornerstoneViewportService extends src/* PubSubService */.Rc {
|
|
|
22153
22151
|
} = this.servicesManager.services;
|
|
22154
22152
|
const segmentationId = displaySet.displaySetInstanceUID;
|
|
22155
22153
|
const representationType = displaySet.Modality === 'SEG' ? dist_esm.Enums.SegmentationRepresentations.Labelmap : dist_esm.Enums.SegmentationRepresentations.Contour;
|
|
22154
|
+
const {
|
|
22155
|
+
predecessorImageId
|
|
22156
|
+
} = displaySet;
|
|
22156
22157
|
segmentationService.addSegmentationRepresentation(viewport.id, {
|
|
22157
22158
|
segmentationId,
|
|
22159
|
+
predecessorImageId,
|
|
22158
22160
|
type: representationType
|
|
22159
22161
|
});
|
|
22160
22162
|
|
|
@@ -23177,7 +23179,7 @@ const hasExportableLabelMapData = (labelmap, displaySetService) => {
|
|
|
23177
23179
|
const SOPInstanceUID = instance.SOPInstanceUID || instance.SopInstanceUID;
|
|
23178
23180
|
const SeriesInstanceUID = instance.SeriesInstanceUID;
|
|
23179
23181
|
const displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
23180
|
-
return displaySet
|
|
23182
|
+
return !!displaySet;
|
|
23181
23183
|
};
|
|
23182
23184
|
|
|
23183
23185
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[
|
|
2
|
+
(globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[1933,2591],{
|
|
3
3
|
|
|
4
|
-
/***/
|
|
4
|
+
/***/ 6015:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
6
|
|
|
7
7
|
// ESM COMPAT FLAG
|
|
@@ -22,8 +22,8 @@ const id = package_namespaceObject.UU;
|
|
|
22
22
|
var react = __webpack_require__(86326);
|
|
23
23
|
// EXTERNAL MODULE: ../../ui-next/src/index.ts + 3073 modules
|
|
24
24
|
var src = __webpack_require__(1246);
|
|
25
|
-
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts +
|
|
26
|
-
var default_src = __webpack_require__(
|
|
25
|
+
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 139 modules
|
|
26
|
+
var default_src = __webpack_require__(39195);
|
|
27
27
|
// EXTERNAL MODULE: ../../core/src/index.ts + 69 modules
|
|
28
28
|
var core_src = __webpack_require__(42356);
|
|
29
29
|
// EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
|
|
@@ -1582,21 +1582,6 @@ function constructSR(metadata, {
|
|
|
1582
1582
|
};
|
|
1583
1583
|
return dataset;
|
|
1584
1584
|
}
|
|
1585
|
-
;// ../../../extensions/dicom-microscopy/src/utils/saveByteArray.ts
|
|
1586
|
-
/**
|
|
1587
|
-
* Trigger file download from an array buffer
|
|
1588
|
-
* @param buffer
|
|
1589
|
-
* @param filename
|
|
1590
|
-
*/
|
|
1591
|
-
function saveByteArray(buffer, filename) {
|
|
1592
|
-
const blob = new Blob([buffer], {
|
|
1593
|
-
type: 'application/dicom'
|
|
1594
|
-
});
|
|
1595
|
-
const link = document.createElement('a');
|
|
1596
|
-
link.href = window.URL.createObjectURL(blob);
|
|
1597
|
-
link.download = filename;
|
|
1598
|
-
link.click();
|
|
1599
|
-
}
|
|
1600
1585
|
;// ../../../extensions/dicom-microscopy/src/components/MicroscopyPanel/MicroscopyPanel.tsx
|
|
1601
1586
|
|
|
1602
1587
|
|
|
@@ -1606,7 +1591,9 @@ function saveByteArray(buffer, filename) {
|
|
|
1606
1591
|
|
|
1607
1592
|
|
|
1608
1593
|
|
|
1609
|
-
|
|
1594
|
+
const {
|
|
1595
|
+
downloadDicom
|
|
1596
|
+
} = core_src/* utils */.Wp;
|
|
1610
1597
|
let saving = false;
|
|
1611
1598
|
const {
|
|
1612
1599
|
datasetToBuffer
|
|
@@ -1778,7 +1765,9 @@ function MicroscopyPanel(props) {
|
|
|
1778
1765
|
if (dataSource.wadoRoot == 'saveDicom') {
|
|
1779
1766
|
// download as DICOM file
|
|
1780
1767
|
const part10Buffer = datasetToBuffer(dataset);
|
|
1781
|
-
|
|
1768
|
+
downloadDicom(part10Buffer, {
|
|
1769
|
+
filename: `sr-microscopy.dcm`
|
|
1770
|
+
});
|
|
1782
1771
|
} else {
|
|
1783
1772
|
// Save into Web Data source
|
|
1784
1773
|
const {
|
|
@@ -1864,16 +1853,14 @@ function MicroscopyPanel(props) {
|
|
|
1864
1853
|
* @param param0
|
|
1865
1854
|
*/
|
|
1866
1855
|
const onMeasurementItemEditHandler = ({
|
|
1867
|
-
uid
|
|
1868
|
-
isActive
|
|
1856
|
+
uid
|
|
1869
1857
|
}) => {
|
|
1870
1858
|
props.commandsManager.runCommand('setLabel', {
|
|
1871
1859
|
uid
|
|
1872
1860
|
}, 'MICROSCOPY');
|
|
1873
1861
|
};
|
|
1874
1862
|
const onMeasurementDeleteHandler = ({
|
|
1875
|
-
uid
|
|
1876
|
-
isActive
|
|
1863
|
+
uid
|
|
1877
1864
|
}) => {
|
|
1878
1865
|
const roiAnnotation = microscopyService.getAnnotation(uid);
|
|
1879
1866
|
microscopyService.removeAnnotation(roiAnnotation);
|
|
@@ -2776,7 +2763,7 @@ const extension = {
|
|
|
2776
2763
|
/* harmony export */ A: () => (/* binding */ getDicomWebClient)
|
|
2777
2764
|
/* harmony export */ });
|
|
2778
2765
|
/* harmony import */ var _ohif_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42356);
|
|
2779
|
-
/* harmony import */ var _ohif_extension_default__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
|
|
2766
|
+
/* harmony import */ var _ohif_extension_default__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39195);
|
|
2780
2767
|
|
|
2781
2768
|
|
|
2782
2769
|
|
|
@@ -9,7 +9,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9
9
|
|
|
10
10
|
// EXPORTS
|
|
11
11
|
__webpack_require__.d(__webpack_exports__, {
|
|
12
|
-
"default": () => (/* binding */ segmentation_src)
|
|
12
|
+
"default": () => (/* binding */ segmentation_src),
|
|
13
|
+
toolbarButtons: () => (/* reexport */ toolbarButtons)
|
|
13
14
|
});
|
|
14
15
|
|
|
15
16
|
;// ../../../modes/segmentation/package.json
|
|
@@ -1357,41 +1358,15 @@ function setUpAutoTabSwitchHandler({
|
|
|
1357
1358
|
unsubscribeAutoTabSwitchEvents
|
|
1358
1359
|
};
|
|
1359
1360
|
}
|
|
1361
|
+
// EXTERNAL MODULE: ../../../modes/basic/src/index.tsx + 4 modules
|
|
1362
|
+
var basic_src = __webpack_require__(35485);
|
|
1360
1363
|
;// ../../../modes/segmentation/src/index.tsx
|
|
1361
1364
|
|
|
1362
1365
|
|
|
1363
1366
|
|
|
1364
1367
|
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack',
|
|
1368
|
-
hangingProtocol: '@ohif/extension-default.hangingProtocolModule.default',
|
|
1369
|
-
leftPanel: '@ohif/extension-default.panelModule.seriesList'
|
|
1370
|
-
};
|
|
1371
|
-
const cornerstone = {
|
|
1372
|
-
viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone',
|
|
1373
|
-
labelMapSegmentationPanel: '@ohif/extension-cornerstone.panelModule.panelSegmentationWithToolsLabelMap',
|
|
1374
|
-
contourSegmentationPanel: '@ohif/extension-cornerstone.panelModule.panelSegmentationWithToolsContour',
|
|
1375
|
-
measurements: '@ohif/extension-cornerstone.panelModule.panelMeasurement'
|
|
1376
|
-
};
|
|
1377
|
-
const segmentation = {
|
|
1378
|
-
sopClassHandler: '@ohif/extension-cornerstone-dicom-seg.sopClassHandlerModule.dicom-seg',
|
|
1379
|
-
viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg'
|
|
1380
|
-
};
|
|
1381
|
-
const dicomRT = {
|
|
1382
|
-
viewport: '@ohif/extension-cornerstone-dicom-rt.viewportModule.dicom-rt',
|
|
1383
|
-
sopClassHandler: '@ohif/extension-cornerstone-dicom-rt.sopClassHandlerModule.dicom-rt'
|
|
1384
|
-
};
|
|
1385
|
-
/**
|
|
1386
|
-
* Just two dependencies to be able to render a viewport with panels in order
|
|
1387
|
-
* to make sure that the mode is working.
|
|
1388
|
-
*/
|
|
1389
|
-
const extensionDependencies = {
|
|
1390
|
-
'@ohif/extension-default': '^3.0.0',
|
|
1391
|
-
'@ohif/extension-cornerstone': '^3.0.0',
|
|
1392
|
-
'@ohif/extension-cornerstone-dicom-seg': '^3.0.0',
|
|
1393
|
-
'@ohif/extension-cornerstone-dicom-rt': '^3.0.0'
|
|
1394
|
-
};
|
|
1368
|
+
|
|
1369
|
+
|
|
1395
1370
|
function modeFactory({
|
|
1396
1371
|
modeConfiguration
|
|
1397
1372
|
}) {
|
|
@@ -1515,41 +1490,41 @@ function modeFactory({
|
|
|
1515
1490
|
servicesManager
|
|
1516
1491
|
}) => {
|
|
1517
1492
|
return {
|
|
1518
|
-
id: ohif.layout,
|
|
1493
|
+
id: basic_src.ohif.layout,
|
|
1519
1494
|
props: {
|
|
1520
|
-
leftPanels: [ohif.
|
|
1495
|
+
leftPanels: [basic_src.ohif.thumbnailList],
|
|
1521
1496
|
leftPanelResizable: true,
|
|
1522
|
-
rightPanels: [cornerstone.labelMapSegmentationPanel, cornerstone.contourSegmentationPanel],
|
|
1497
|
+
rightPanels: [basic_src.cornerstone.labelMapSegmentationPanel, basic_src.cornerstone.contourSegmentationPanel],
|
|
1523
1498
|
rightPanelResizable: true,
|
|
1524
1499
|
// leftPanelClosed: true,
|
|
1525
1500
|
viewports: [{
|
|
1526
|
-
namespace: cornerstone.viewport,
|
|
1527
|
-
displaySetsToDisplay: [ohif.sopClassHandler]
|
|
1501
|
+
namespace: basic_src.cornerstone.viewport,
|
|
1502
|
+
displaySetsToDisplay: [basic_src.ohif.sopClassHandler]
|
|
1528
1503
|
}, {
|
|
1529
|
-
namespace: segmentation.viewport,
|
|
1530
|
-
displaySetsToDisplay: [segmentation.sopClassHandler]
|
|
1504
|
+
namespace: basic_src.segmentation.viewport,
|
|
1505
|
+
displaySetsToDisplay: [basic_src.segmentation.sopClassHandler]
|
|
1531
1506
|
}, {
|
|
1532
|
-
namespace: dicomRT.viewport,
|
|
1533
|
-
displaySetsToDisplay: [dicomRT.sopClassHandler]
|
|
1507
|
+
namespace: basic_src.dicomRT.viewport,
|
|
1508
|
+
displaySetsToDisplay: [basic_src.dicomRT.sopClassHandler]
|
|
1534
1509
|
}]
|
|
1535
1510
|
}
|
|
1536
1511
|
};
|
|
1537
1512
|
}
|
|
1538
1513
|
}],
|
|
1539
1514
|
/** List of extensions that are used by the mode */
|
|
1540
|
-
extensions: extensionDependencies,
|
|
1515
|
+
extensions: basic_src.extensionDependencies,
|
|
1541
1516
|
/** HangingProtocol used by the mode */
|
|
1542
1517
|
// Commented out to just use the most applicable registered hanging protocol
|
|
1543
1518
|
// The example is used for a grid layout to specify that as a preferred layout
|
|
1544
1519
|
hangingProtocol: ['@ohif/mnGrid'],
|
|
1545
1520
|
/** SopClassHandlers used by the mode */
|
|
1546
|
-
sopClassHandlers: [ohif.sopClassHandler, segmentation.sopClassHandler, dicomRT.sopClassHandler]
|
|
1521
|
+
sopClassHandlers: [basic_src.ohif.sopClassHandler, basic_src.segmentation.sopClassHandler, basic_src.dicomRT.sopClassHandler]
|
|
1547
1522
|
};
|
|
1548
1523
|
}
|
|
1549
1524
|
const mode = {
|
|
1550
1525
|
id: id,
|
|
1551
1526
|
modeFactory,
|
|
1552
|
-
extensionDependencies
|
|
1527
|
+
extensionDependencies: basic_src.extensionDependencies
|
|
1553
1528
|
};
|
|
1554
1529
|
/* harmony default export */ const segmentation_src = (mode);
|
|
1555
1530
|
|
|
@@ -5094,6 +5094,7 @@ const projectionRadiographSOPClassUIDs = new Set([
|
|
|
5094
5094
|
'1.2.840.10008.5.1.4.1.1.12.2.1',
|
|
5095
5095
|
'1.2.840.10008.5.1.4.1.1.12.3',
|
|
5096
5096
|
]);
|
|
5097
|
+
const alreadySeenWarn = new Set();
|
|
5097
5098
|
function calculateRadiographicPixelSpacing(instance) {
|
|
5098
5099
|
const { PixelSpacing, ImagerPixelSpacing, EstimatedRadiographicMagnificationFactor, PixelSpacingCalibrationType, PixelSpacingCalibrationDescription, } = instance;
|
|
5099
5100
|
const isProjection = true;
|
|
@@ -5106,7 +5107,10 @@ function calculateRadiographicPixelSpacing(instance) {
|
|
|
5106
5107
|
}
|
|
5107
5108
|
if (!PixelSpacing) {
|
|
5108
5109
|
if (!EstimatedRadiographicMagnificationFactor) {
|
|
5109
|
-
|
|
5110
|
+
if (!alreadySeenWarn.has(instance.SeriesInstanceUID)) {
|
|
5111
|
+
console.warn('EstimatedRadiographicMagnificationFactor was not present on series', instance.SeriesInstanceUID, ' Unable to correct ImagerPixelSpacing.');
|
|
5112
|
+
alreadySeenWarn.add(instance.SeriesInstanceUID);
|
|
5113
|
+
}
|
|
5110
5114
|
return {
|
|
5111
5115
|
PixelSpacing: ImagerPixelSpacing,
|
|
5112
5116
|
type: enums.CalibrationTypes.PROJECTION,
|
|
@@ -8784,6 +8788,24 @@ function defaultGetTextLines(data, targetId) {
|
|
|
8784
8788
|
/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (BidirectionalTool)));
|
|
8785
8789
|
|
|
8786
8790
|
|
|
8791
|
+
/***/ }),
|
|
8792
|
+
|
|
8793
|
+
/***/ 85817:
|
|
8794
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8795
|
+
|
|
8796
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8797
|
+
/* harmony export */ EC: () => (/* reexport safe */ _AnnotationTool__WEBPACK_IMPORTED_MODULE_1__.A),
|
|
8798
|
+
/* harmony export */ oS: () => (/* reexport safe */ _BaseTool__WEBPACK_IMPORTED_MODULE_0__.A)
|
|
8799
|
+
/* harmony export */ });
|
|
8800
|
+
/* harmony import */ var _BaseTool__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37234);
|
|
8801
|
+
/* harmony import */ var _AnnotationTool__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(91350);
|
|
8802
|
+
/* harmony import */ var _AnnotationDisplayTool__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6030);
|
|
8803
|
+
|
|
8804
|
+
|
|
8805
|
+
|
|
8806
|
+
|
|
8807
|
+
|
|
8808
|
+
|
|
8787
8809
|
/***/ }),
|
|
8788
8810
|
|
|
8789
8811
|
/***/ 48736:
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
/* harmony export */ sh: () => (/* binding */ SCOORDTypes)
|
|
12
12
|
/* harmony export */ });
|
|
13
13
|
/* unused harmony export RelationshipType */
|
|
14
|
-
/* harmony import */ var _cornerstonejs_adapters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
|
|
14
|
+
/* harmony import */ var _cornerstonejs_adapters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14041);
|
|
15
15
|
|
|
16
16
|
const {
|
|
17
17
|
CodeScheme: Cornerstone3DCodeScheme
|
|
@@ -79,8 +79,8 @@ var src = __webpack_require__(42356);
|
|
|
79
79
|
var i18n_src = __webpack_require__(68523);
|
|
80
80
|
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 192 modules
|
|
81
81
|
var cornerstone_src = __webpack_require__(71903);
|
|
82
|
-
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js +
|
|
83
|
-
var esm = __webpack_require__(
|
|
82
|
+
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 70 modules
|
|
83
|
+
var esm = __webpack_require__(14041);
|
|
84
84
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js
|
|
85
85
|
var dist_esm = __webpack_require__(4667);
|
|
86
86
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
|
|
@@ -549,7 +549,8 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
|
|
|
549
549
|
SeriesDate,
|
|
550
550
|
SeriesTime,
|
|
551
551
|
ConceptNameCodeSequence,
|
|
552
|
-
SOPClassUID
|
|
552
|
+
SOPClassUID,
|
|
553
|
+
imageId: predecessorImageId
|
|
553
554
|
} = instance;
|
|
554
555
|
validateSameStudyUID(instance.StudyInstanceUID, instances);
|
|
555
556
|
const is3DSR = SOPClassUID === sopClassDictionary.Comprehensive3DSR;
|
|
@@ -574,6 +575,7 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
|
|
|
574
575
|
isImagingMeasurementReport,
|
|
575
576
|
sopClassUids,
|
|
576
577
|
instance,
|
|
578
|
+
predecessorImageId,
|
|
577
579
|
addInstances,
|
|
578
580
|
label: SeriesDescription || `${i18n_src/* default */.A.t('Series')} ${SeriesNumber} - ${i18n_src/* default */.A.t('SR')}`
|
|
579
581
|
};
|
|
@@ -626,6 +628,12 @@ async function _load(srDisplaySet, servicesManager, extensionManager) {
|
|
|
626
628
|
srDisplaySet.referencedImages = [];
|
|
627
629
|
srDisplaySet.measurements = [];
|
|
628
630
|
}
|
|
631
|
+
const {
|
|
632
|
+
predecessorImageId
|
|
633
|
+
} = srDisplaySet;
|
|
634
|
+
for (const measurement of srDisplaySet.measurements) {
|
|
635
|
+
measurement.predecessorImageId = predecessorImageId;
|
|
636
|
+
}
|
|
629
637
|
const mappings = measurementService.getSourceMappings(CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION);
|
|
630
638
|
srDisplaySet.isHydrated = false;
|
|
631
639
|
srDisplaySet.isRehydratable = isRehydratable(srDisplaySet, mappings);
|
|
@@ -1364,13 +1372,20 @@ function hydrateStructuredReport({
|
|
|
1364
1372
|
const codingValues = customizationService.getCustomization('codingValues');
|
|
1365
1373
|
const disableEditing = customizationService.getCustomization('panelMeasurement.disableEditing');
|
|
1366
1374
|
const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
|
|
1375
|
+
const {
|
|
1376
|
+
StudyInstanceUID: studyUID,
|
|
1377
|
+
SeriesInstanceUID: seriesUID,
|
|
1378
|
+
instance: {
|
|
1379
|
+
SOPInstanceUID: sopUID
|
|
1380
|
+
}
|
|
1381
|
+
} = displaySet;
|
|
1367
1382
|
|
|
1368
1383
|
// TODO -> We should define a strict versioning somewhere.
|
|
1369
1384
|
const mappings = measurementService.getSourceMappings(hydrateStructuredReport_CORNERSTONE_3D_TOOLS_SOURCE_NAME, hydrateStructuredReport_CORNERSTONE_3D_TOOLS_SOURCE_VERSION);
|
|
1370
1385
|
if (!mappings || !mappings.length) {
|
|
1371
1386
|
throw new Error(`Attempting to hydrate measurements service when no mappings present. This shouldn't be reached.`);
|
|
1372
1387
|
}
|
|
1373
|
-
const instance = src/* DicomMetadataStore */.H8.getInstance(
|
|
1388
|
+
const instance = src/* DicomMetadataStore */.H8.getInstance(studyUID, seriesUID, sopUID);
|
|
1374
1389
|
const sopInstanceUIDToImageId = {};
|
|
1375
1390
|
displaySet.measurements.forEach(measurement => {
|
|
1376
1391
|
const {
|
|
@@ -1487,6 +1502,7 @@ function hydrateStructuredReport({
|
|
|
1487
1502
|
const annotation = {
|
|
1488
1503
|
annotationUID: toolData.annotation.annotationUID,
|
|
1489
1504
|
data: toolData.annotation.data,
|
|
1505
|
+
predecessorImageId: toolData.predecessorImageId,
|
|
1490
1506
|
metadata: {
|
|
1491
1507
|
...referenceData,
|
|
1492
1508
|
toolName: annotationType
|
|
@@ -1620,6 +1636,9 @@ function choosePoints(points) {
|
|
|
1620
1636
|
|
|
1621
1637
|
|
|
1622
1638
|
|
|
1639
|
+
const {
|
|
1640
|
+
downloadBlob
|
|
1641
|
+
} = src/* utils */.Wp;
|
|
1623
1642
|
const {
|
|
1624
1643
|
MeasurementReport: commandsModule_MeasurementReport
|
|
1625
1644
|
} = esm/* adaptersSR */.QX.Cornerstone3D;
|
|
@@ -1645,7 +1664,6 @@ const _generateReport = (measurementData, additionalFindingTypes, options = {})
|
|
|
1645
1664
|
if (typeof dataset.SpecificCharacterSet === 'undefined') {
|
|
1646
1665
|
dataset.SpecificCharacterSet = 'ISO_IR 192';
|
|
1647
1666
|
}
|
|
1648
|
-
dataset.InstanceNumber = options.InstanceNumber ?? 1;
|
|
1649
1667
|
return dataset;
|
|
1650
1668
|
};
|
|
1651
1669
|
const commandsModule = props => {
|
|
@@ -1696,8 +1714,9 @@ const commandsModule = props => {
|
|
|
1696
1714
|
const reportBlob = dcmjs_es/* default.data */.Ay.data.datasetToBlob(srDataset);
|
|
1697
1715
|
|
|
1698
1716
|
//Create a URL for the binary.
|
|
1699
|
-
|
|
1700
|
-
|
|
1717
|
+
downloadBlob(reportBlob, {
|
|
1718
|
+
filename: 'dicom-sr.dcm'
|
|
1719
|
+
});
|
|
1701
1720
|
},
|
|
1702
1721
|
/**
|
|
1703
1722
|
*
|
|
@@ -2126,11 +2126,27 @@ var getContourHolesDataCanvas = __webpack_require__(15451);
|
|
|
2126
2126
|
|
|
2127
2127
|
|
|
2128
2128
|
|
|
2129
|
-
|
|
2130
2129
|
class ContourBaseTool extends AnnotationTool/* default */.A {
|
|
2131
2130
|
constructor(toolProps, defaultToolProps) {
|
|
2132
2131
|
super(toolProps, defaultToolProps);
|
|
2133
2132
|
}
|
|
2133
|
+
static getContourSequence(toolData, metadataProvider) {
|
|
2134
|
+
const { data } = toolData;
|
|
2135
|
+
const ContourData = [];
|
|
2136
|
+
for (const point of data.contour.polyline) {
|
|
2137
|
+
for (const v of point) {
|
|
2138
|
+
ContourData.push(v.toFixed(2));
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
const { referencedImageId } = toolData.metadata;
|
|
2142
|
+
const ContourImageSequence = metadataProvider.get('ImageSopInstanceReference', referencedImageId);
|
|
2143
|
+
return {
|
|
2144
|
+
NumberOfContourPoints: ContourData.length / 3,
|
|
2145
|
+
ContourImageSequence,
|
|
2146
|
+
ContourGeometricType: 'CLOSED_PLANAR',
|
|
2147
|
+
ContourData,
|
|
2148
|
+
};
|
|
2149
|
+
}
|
|
2134
2150
|
renderAnnotation(enabledElement, svgDrawingHelper) {
|
|
2135
2151
|
let renderStatus = false;
|
|
2136
2152
|
const { viewport } = enabledElement;
|