@ohif/app 3.7.0-beta.98 → 3.7.0
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/{202.bundle.96bbb4547a346fe3921f.js → 202.bundle.d3490836f71e001dd30f.js} +746 -19
- package/dist/{221.bundle.772f38088c3079c8035b.js → 221.bundle.a331e2a9a29f9599fd40.js} +70 -14
- package/dist/{236.bundle.197bab4e86815ec4ca4a.js → 236.bundle.b09ef6a3c16be7ad1d05.js} +2 -2
- package/dist/{342.bundle.1d55f37e9c918e0825ec.js → 342.bundle.3f9ebc45fdc6d6879adc.js} +40 -22
- package/dist/{359.bundle.fed8617ddfa6afa1328a.js → 359.bundle.aa2adce78c3935aa19c1.js} +1 -3
- package/dist/{370.bundle.1a6cbcbde7c8207d2864.js → 370.bundle.31f3d861d96bdd540dc7.js} +4 -4
- package/dist/{743.bundle.4bfe6e562ffb2c22708f.js → 743.bundle.489f7df3a089d4d374e1.js} +13 -0
- package/dist/{831.bundle.83658f62fcc769043605.js → 757.bundle.ec8301d8e70d2b990f65.js} +368 -1
- package/dist/{782.bundle.441460bad5d3665e8357.js → 788.bundle.b9dabaea41cb029360b1.js} +5 -305
- package/dist/{1.bundle.b1dc2af5a703ba3cb14b.js → 82.bundle.ec05d3de5ac5b0c577fe.js} +142 -111
- package/dist/{957.bundle.8c09a01840ab8aa32734.js → 957.bundle.9ea4506963ef8b2d84ba.js} +61 -51
- package/dist/app.bundle.css +1 -1
- package/dist/{app.bundle.56a25a631c0c24cd0ca7.js → app.bundle.dacb6768b481e9135f71.js} +149 -105
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/package.json +19 -18
- /package/dist/{12.bundle.13308b06fcc1666c266b.js → 12.bundle.b965cc54108a0b38a022.js} +0 -0
- /package/dist/{181.bundle.169383e9b1a0358b44e8.js → 181.bundle.ceb057236403bcb630ac.js} +0 -0
- /package/dist/{19.bundle.3a597d9f26991241e7fc.js → 19.bundle.d961845411cf4e95d27c.js} +0 -0
- /package/dist/{281.bundle.2ac8032b2e4370ee907b.js → 281.bundle.4f7c49673b5861436311.js} +0 -0
- /package/dist/{410.bundle.f697feb951e10d10802b.js → 410.bundle.12c1bc7cb765ef74d275.js} +0 -0
- /package/dist/{506.bundle.52619b4a87b149b12232.js → 506.bundle.311783d53e8d64b84280.js} +0 -0
- /package/dist/{613.bundle.20a09bdee6888011429d.js → 613.bundle.4359bc30c68b8f567140.js} +0 -0
- /package/dist/{663.bundle.2baa791ccd0f499c3bcb.js → 663.bundle.87300c41b902228496ec.js} +0 -0
- /package/dist/{687.bundle.853e30cdf7d7a189d19b.js → 687.bundle.a3caefcf2e55897bad75.js} +0 -0
- /package/dist/{774.bundle.7528cba56a1407357144.js → 774.bundle.4b2dc46a35012b898e1a.js} +0 -0
- /package/dist/{814.bundle.a766b5f4317cea6bef89.js → 814.bundle.a3d1fbc03a4a3ea3f23d.js} +0 -0
- /package/dist/{1.css → 82.css} +0 -0
- /package/dist/{822.bundle.0545d6dbb49515aa04ee.js → 822.bundle.891f2e57b1b7bc2f4cb4.js} +0 -0
- /package/dist/{99.bundle.48d8d120921b5135f9e7.js → 99.bundle.d77c8c0a957274c827da.js} +0 -0
|
@@ -642,8 +642,13 @@ function PanelSegmentation(_ref) {
|
|
|
642
642
|
});
|
|
643
643
|
}
|
|
644
644
|
};
|
|
645
|
+
const onSegmentationDownloadRTSS = segmentationId => {
|
|
646
|
+
commandsManager.runCommand('downloadRTSS', {
|
|
647
|
+
segmentationId
|
|
648
|
+
});
|
|
649
|
+
};
|
|
645
650
|
return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
|
|
646
|
-
className: "flex min-h-0 flex-auto select-none flex-col justify-between"
|
|
651
|
+
className: "ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"
|
|
647
652
|
}, /*#__PURE__*/react.createElement(ui_src/* SegmentationGroupTable */.cX, {
|
|
648
653
|
title: t('Segmentations'),
|
|
649
654
|
segmentations: segmentations,
|
|
@@ -653,6 +658,7 @@ function PanelSegmentation(_ref) {
|
|
|
653
658
|
onSegmentationClick: onSegmentationClick,
|
|
654
659
|
onSegmentationDelete: onSegmentationDelete,
|
|
655
660
|
onSegmentationDownload: onSegmentationDownload,
|
|
661
|
+
onSegmentationDownloadRTSS: onSegmentationDownloadRTSS,
|
|
656
662
|
storeSegmentation: storeSegmentation,
|
|
657
663
|
onSegmentationEdit: onSegmentationEdit,
|
|
658
664
|
onSegmentClick: onSegmentClick,
|
|
@@ -706,9 +712,9 @@ const TOOL_TYPES = {
|
|
|
706
712
|
SPHERE_BRUSH: 'SphereBrush',
|
|
707
713
|
CIRCULAR_ERASER: 'CircularEraser',
|
|
708
714
|
SPHERE_ERASER: 'SphereEraser',
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
715
|
+
CIRCLE_SHAPE: 'CircleScissor',
|
|
716
|
+
RECTANGLE_SHAPE: 'RectangleScissor',
|
|
717
|
+
SPHERE_SHAPE: 'SphereScissor',
|
|
712
718
|
THRESHOLD_CIRCULAR_BRUSH: 'ThresholdCircularBrush',
|
|
713
719
|
THRESHOLD_SPHERE_BRUSH: 'ThresholdSphereBrush'
|
|
714
720
|
};
|
|
@@ -727,7 +733,7 @@ const initialState = {
|
|
|
727
733
|
mode: 'CircularEraser' // Can be 'CircularEraser' or 'SphereEraser'
|
|
728
734
|
},
|
|
729
735
|
|
|
730
|
-
|
|
736
|
+
Shapes: {
|
|
731
737
|
brushSize: 15,
|
|
732
738
|
mode: 'CircleScissor' // E.g., 'CircleScissor', 'RectangleScissor', or 'SphereScissor'
|
|
733
739
|
},
|
|
@@ -966,24 +972,24 @@ function SegmentationToolbox(_ref) {
|
|
|
966
972
|
onChange: value => setToolActive(value)
|
|
967
973
|
}]
|
|
968
974
|
}, {
|
|
969
|
-
name: '
|
|
970
|
-
icon: 'icon-tool-
|
|
975
|
+
name: 'Shapes',
|
|
976
|
+
icon: 'icon-tool-shape',
|
|
971
977
|
disabled: !toolsEnabled,
|
|
972
|
-
active: state.activeTool === TOOL_TYPES.
|
|
973
|
-
onClick: () => setToolActive(TOOL_TYPES.
|
|
978
|
+
active: state.activeTool === TOOL_TYPES.CIRCLE_SHAPE || state.activeTool === TOOL_TYPES.RECTANGLE_SHAPE || state.activeTool === TOOL_TYPES.SPHERE_SHAPE,
|
|
979
|
+
onClick: () => setToolActive(TOOL_TYPES.CIRCLE_SHAPE),
|
|
974
980
|
options: [{
|
|
975
981
|
name: 'Mode',
|
|
976
982
|
type: 'radio',
|
|
977
|
-
value: state.
|
|
978
|
-
id: '
|
|
983
|
+
value: state.Shapes.mode,
|
|
984
|
+
id: 'shape-mode',
|
|
979
985
|
values: [{
|
|
980
|
-
value: TOOL_TYPES.
|
|
986
|
+
value: TOOL_TYPES.CIRCLE_SHAPE,
|
|
981
987
|
label: 'Circle'
|
|
982
988
|
}, {
|
|
983
|
-
value: TOOL_TYPES.
|
|
989
|
+
value: TOOL_TYPES.RECTANGLE_SHAPE,
|
|
984
990
|
label: 'Rectangle'
|
|
985
991
|
}, {
|
|
986
|
-
value: TOOL_TYPES.
|
|
992
|
+
value: TOOL_TYPES.SPHERE_SHAPE,
|
|
987
993
|
label: 'Sphere'
|
|
988
994
|
}],
|
|
989
995
|
onChange: value => setToolActive(value)
|
|
@@ -1118,6 +1124,12 @@ const getPanelModule = _ref => {
|
|
|
1118
1124
|
}];
|
|
1119
1125
|
};
|
|
1120
1126
|
/* harmony default export */ const src_getPanelModule = (getPanelModule);
|
|
1127
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Filters/General/ImageMarchingSquares.js + 2 modules
|
|
1128
|
+
var ImageMarchingSquares = __webpack_require__(49399);
|
|
1129
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/DataArray.js
|
|
1130
|
+
var DataArray = __webpack_require__(54131);
|
|
1131
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/DataModel/ImageData.js + 2 modules
|
|
1132
|
+
var ImageData = __webpack_require__(96372);
|
|
1121
1133
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/hydrationUtils.ts
|
|
1122
1134
|
|
|
1123
1135
|
|
|
@@ -1287,6 +1299,12 @@ function getUpdatedViewportsForSegmentation(_ref3) {
|
|
|
1287
1299
|
|
|
1288
1300
|
|
|
1289
1301
|
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
const {
|
|
1306
|
+
datasetToBlob
|
|
1307
|
+
} = dcmjs_es["default"].data;
|
|
1290
1308
|
const {
|
|
1291
1309
|
Cornerstone3D: {
|
|
1292
1310
|
Segmentation: {
|
|
@@ -1295,6 +1313,13 @@ const {
|
|
|
1295
1313
|
}
|
|
1296
1314
|
}
|
|
1297
1315
|
} = adapters_es.adaptersSEG;
|
|
1316
|
+
const {
|
|
1317
|
+
Cornerstone3D: {
|
|
1318
|
+
RTSS: {
|
|
1319
|
+
generateRTSSFromSegmentations
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
} = adapters_es.adaptersRT;
|
|
1298
1323
|
const {
|
|
1299
1324
|
downloadDICOMData
|
|
1300
1325
|
} = adapters_es.helpers;
|
|
@@ -1608,6 +1633,34 @@ const commandsModule = _ref => {
|
|
|
1608
1633
|
naturalizedReport.wadoRoot = dataSource.getConfig().wadoRoot;
|
|
1609
1634
|
src.DicomMetadataStore.addInstances([naturalizedReport], true);
|
|
1610
1635
|
return naturalizedReport;
|
|
1636
|
+
},
|
|
1637
|
+
/**
|
|
1638
|
+
* Converts segmentations into RTSS for download.
|
|
1639
|
+
* This sample function retrieves all segentations and passes to
|
|
1640
|
+
* cornerstone tool adapter to convert to DICOM RTSS format. It then
|
|
1641
|
+
* converts dataset to downloadable blob.
|
|
1642
|
+
*
|
|
1643
|
+
*/
|
|
1644
|
+
downloadRTSS: _ref8 => {
|
|
1645
|
+
let {
|
|
1646
|
+
segmentationId
|
|
1647
|
+
} = _ref8;
|
|
1648
|
+
const segmentations = segmentationService.getSegmentation(segmentationId);
|
|
1649
|
+
const vtkUtils = {
|
|
1650
|
+
vtkImageMarchingSquares: ImageMarchingSquares/* default */.ZP,
|
|
1651
|
+
vtkDataArray: DataArray/* default */.ZP,
|
|
1652
|
+
vtkImageData: ImageData/* default */.ZP
|
|
1653
|
+
};
|
|
1654
|
+
const RTSS = generateRTSSFromSegmentations(segmentations, src.classes.MetadataProvider, src.DicomMetadataStore, esm.cache, dist_esm.Enums, vtkUtils);
|
|
1655
|
+
try {
|
|
1656
|
+
const reportBlob = datasetToBlob(RTSS);
|
|
1657
|
+
|
|
1658
|
+
//Create a URL for the binary.
|
|
1659
|
+
const objectUrl = URL.createObjectURL(reportBlob);
|
|
1660
|
+
window.location.assign(objectUrl);
|
|
1661
|
+
} catch (e) {
|
|
1662
|
+
console.warn(e);
|
|
1663
|
+
}
|
|
1611
1664
|
}
|
|
1612
1665
|
};
|
|
1613
1666
|
const definitions = {
|
|
@@ -1631,6 +1684,9 @@ const commandsModule = _ref => {
|
|
|
1631
1684
|
},
|
|
1632
1685
|
storeSegmentation: {
|
|
1633
1686
|
commandFn: actions.storeSegmentation
|
|
1687
|
+
},
|
|
1688
|
+
downloadRTSS: {
|
|
1689
|
+
commandFn: actions.downloadRTSS
|
|
1634
1690
|
}
|
|
1635
1691
|
};
|
|
1636
1692
|
return {
|
|
@@ -1738,8 +1738,8 @@ function MicroscopyPanel(props) {
|
|
|
1738
1738
|
displaySetService
|
|
1739
1739
|
} = servicesManager.services;
|
|
1740
1740
|
(0,react.useEffect)(() => {
|
|
1741
|
-
const viewport = props.viewports
|
|
1742
|
-
if (viewport
|
|
1741
|
+
const viewport = props.viewports.get(props.activeViewportId);
|
|
1742
|
+
if (viewport?.displaySetInstanceUIDs[0]) {
|
|
1743
1743
|
const displaySet = displaySetService.getDisplaySetByUID(viewport.displaySetInstanceUIDs[0]);
|
|
1744
1744
|
if (displaySet) {
|
|
1745
1745
|
setStudyInstanceUID(displaySet.StudyInstanceUID);
|
|
@@ -12,7 +12,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
12
12
|
ContextMenuController: () => (/* reexport */ ContextMenuController),
|
|
13
13
|
CustomizableContextMenuTypes: () => (/* reexport */ types_namespaceObject),
|
|
14
14
|
createReportAsync: () => (/* reexport */ Actions_createReportAsync),
|
|
15
|
-
createReportDialogPrompt: () => (/* reexport */
|
|
15
|
+
createReportDialogPrompt: () => (/* reexport */ CreateReportDialogPrompt),
|
|
16
16
|
"default": () => (/* binding */ default_src),
|
|
17
17
|
dicomWebUtils: () => (/* reexport */ utils_namespaceObject),
|
|
18
18
|
getStudiesForPatientByMRN: () => (/* reexport */ Panels_getStudiesForPatientByMRN)
|
|
@@ -831,7 +831,7 @@ class StaticWadoClient extends dicomweb_client_es.api.DICOMwebClient {
|
|
|
831
831
|
if (!valueElem) {
|
|
832
832
|
return false;
|
|
833
833
|
}
|
|
834
|
-
if (valueElem.vr
|
|
834
|
+
if (valueElem.vr === 'DA' && valueElem.Value?.[0]) {
|
|
835
835
|
return this.compareDateRange(testValue, valueElem.Value[0]);
|
|
836
836
|
}
|
|
837
837
|
const value = valueElem.Value;
|
|
@@ -2166,8 +2166,8 @@ function ViewerHeader(_ref) {
|
|
|
2166
2166
|
hotkeyDefinitions,
|
|
2167
2167
|
hotkeyDefaults
|
|
2168
2168
|
} = hotkeysManager;
|
|
2169
|
-
const versionNumber = "3.7.0
|
|
2170
|
-
const commitHash = "
|
|
2169
|
+
const versionNumber = "3.7.0";
|
|
2170
|
+
const commitHash = "5ddf8a16027255d28dc01c1740099cf85bbcf458";
|
|
2171
2171
|
const menuOptions = [{
|
|
2172
2172
|
title: t('Header:About'),
|
|
2173
2173
|
icon: 'info',
|
|
@@ -2508,7 +2508,6 @@ function PanelStudyBrowser(_ref) {
|
|
|
2508
2508
|
const [studyDisplayList, setStudyDisplayList] = (0,react.useState)([]);
|
|
2509
2509
|
const [displaySets, setDisplaySets] = (0,react.useState)([]);
|
|
2510
2510
|
const [thumbnailImageSrcMap, setThumbnailImageSrcMap] = (0,react.useState)({});
|
|
2511
|
-
const isMounted = (0,react.useRef)(true);
|
|
2512
2511
|
const onDoubleClickThumbnailHandler = displaySetInstanceUID => {
|
|
2513
2512
|
let updatedViewports = [];
|
|
2514
2513
|
const viewportId = activeViewportId;
|
|
@@ -2585,9 +2584,6 @@ function PanelStudyBrowser(_ref) {
|
|
|
2585
2584
|
}
|
|
2586
2585
|
// When the image arrives, render it and store the result in the thumbnailImgSrcMap
|
|
2587
2586
|
newImageSrcEntry[dSet.displaySetInstanceUID] = await getImageSrc(imageId);
|
|
2588
|
-
if (!isMounted.current) {
|
|
2589
|
-
return;
|
|
2590
|
-
}
|
|
2591
2587
|
setThumbnailImageSrcMap(prevState => {
|
|
2592
2588
|
return {
|
|
2593
2589
|
...prevState,
|
|
@@ -2595,9 +2591,6 @@ function PanelStudyBrowser(_ref) {
|
|
|
2595
2591
|
};
|
|
2596
2592
|
});
|
|
2597
2593
|
});
|
|
2598
|
-
return () => {
|
|
2599
|
-
isMounted.current = false;
|
|
2600
|
-
};
|
|
2601
2594
|
}, [StudyInstanceUIDs, dataSource, displaySetService, getImageSrc]);
|
|
2602
2595
|
|
|
2603
2596
|
// ~~ displaySets
|
|
@@ -2944,14 +2937,13 @@ ActionButtons.defaultProps = {
|
|
|
2944
2937
|
var lodash_debounce = __webpack_require__(8324);
|
|
2945
2938
|
var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
|
|
2946
2939
|
;// CONCATENATED MODULE: ../../../extensions/default/src/Panels/createReportDialogPrompt.tsx
|
|
2947
|
-
/* eslint-disable react/display-name */
|
|
2948
2940
|
|
|
2949
2941
|
|
|
2950
2942
|
const CREATE_REPORT_DIALOG_RESPONSE = {
|
|
2951
2943
|
CANCEL: 0,
|
|
2952
2944
|
CREATE_REPORT: 1
|
|
2953
2945
|
};
|
|
2954
|
-
function
|
|
2946
|
+
function CreateReportDialogPrompt(uiDialogService, _ref) {
|
|
2955
2947
|
let {
|
|
2956
2948
|
extensionManager
|
|
2957
2949
|
} = _ref;
|
|
@@ -3059,9 +3051,11 @@ function createReportDialogPrompt(uiDialogService, _ref) {
|
|
|
3059
3051
|
});
|
|
3060
3052
|
}
|
|
3061
3053
|
};
|
|
3062
|
-
return /*#__PURE__*/react.createElement(react.Fragment, null, dataSourcesOpts.length > 1 && /*#__PURE__*/react.createElement(
|
|
3054
|
+
return /*#__PURE__*/react.createElement(react.Fragment, null, dataSourcesOpts.length > 1 && window.config?.allowMultiSelectExport && /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("label", {
|
|
3055
|
+
className: "text-[14px] leading-[1.2] text-white"
|
|
3056
|
+
}, "Data Source"), /*#__PURE__*/react.createElement(ui_src/* Select */.Ph, {
|
|
3063
3057
|
closeMenuOnSelect: true,
|
|
3064
|
-
className: "border-primary-main
|
|
3058
|
+
className: "border-primary-main mt-2 bg-black",
|
|
3065
3059
|
options: dataSourcesOpts,
|
|
3066
3060
|
placeholder: dataSourcesOpts.find(option => option.value === value.dataSourceName).placeHolder,
|
|
3067
3061
|
value: value.dataSourceName,
|
|
@@ -3072,7 +3066,9 @@ function createReportDialogPrompt(uiDialogService, _ref) {
|
|
|
3072
3066
|
}));
|
|
3073
3067
|
},
|
|
3074
3068
|
isClearable: false
|
|
3075
|
-
}), /*#__PURE__*/react.createElement(
|
|
3069
|
+
})), /*#__PURE__*/react.createElement("div", {
|
|
3070
|
+
className: "mt-3"
|
|
3071
|
+
}, /*#__PURE__*/react.createElement(ui_src/* Input */.II, {
|
|
3076
3072
|
autoFocus: true,
|
|
3077
3073
|
label: "Enter the report name",
|
|
3078
3074
|
labelClassName: "text-white text-[14px] leading-[1.2]",
|
|
@@ -3082,7 +3078,7 @@ function createReportDialogPrompt(uiDialogService, _ref) {
|
|
|
3082
3078
|
onChange: onChangeHandler,
|
|
3083
3079
|
onKeyPress: onKeyPressHandler,
|
|
3084
3080
|
required: true
|
|
3085
|
-
}));
|
|
3081
|
+
})));
|
|
3086
3082
|
}
|
|
3087
3083
|
}
|
|
3088
3084
|
});
|
|
@@ -3279,7 +3275,7 @@ function PanelMeasurementTable(_ref) {
|
|
|
3279
3275
|
});
|
|
3280
3276
|
return;
|
|
3281
3277
|
}
|
|
3282
|
-
const promptResult = await
|
|
3278
|
+
const promptResult = await CreateReportDialogPrompt(uiDialogService, {
|
|
3283
3279
|
extensionManager
|
|
3284
3280
|
});
|
|
3285
3281
|
if (promptResult.action === CREATE_REPORT_DIALOG_RESPONSE.CREATE_REPORT) {
|
|
@@ -3801,11 +3797,11 @@ function checkSingleFrames(instances, messages) {
|
|
|
3801
3797
|
*/
|
|
3802
3798
|
function getDisplaySetMessages(instances, isReconstructable) {
|
|
3803
3799
|
const messages = new src/* DisplaySetMessageList */.iK();
|
|
3804
|
-
|
|
3805
|
-
if (!instances.length || firstInstance) {
|
|
3800
|
+
if (!instances.length) {
|
|
3806
3801
|
messages.addMessage(src/* DisplaySetMessage */.Lt.CODES.NO_VALID_INSTANCES);
|
|
3807
3802
|
return;
|
|
3808
3803
|
}
|
|
3804
|
+
const firstInstance = instances[0];
|
|
3809
3805
|
const {
|
|
3810
3806
|
Modality,
|
|
3811
3807
|
ImageType,
|
|
@@ -5570,6 +5566,7 @@ const commandsModule = _ref => {
|
|
|
5570
5566
|
stageIndex,
|
|
5571
5567
|
reset = false
|
|
5572
5568
|
} = _ref3;
|
|
5569
|
+
const primaryToolBeforeHPChange = toolbarService.getActivePrimaryTool();
|
|
5573
5570
|
try {
|
|
5574
5571
|
// Stores in the state the display set selector id to displaySetUID mapping
|
|
5575
5572
|
// Pass in viewportId for the active viewport. This item will get set as
|
|
@@ -5632,7 +5629,27 @@ const commandsModule = _ref => {
|
|
|
5632
5629
|
const {
|
|
5633
5630
|
protocol
|
|
5634
5631
|
} = hangingProtocolService.getActiveProtocol();
|
|
5635
|
-
actions.toggleHpTools(
|
|
5632
|
+
actions.toggleHpTools();
|
|
5633
|
+
|
|
5634
|
+
// try to use the same tool in the new hanging protocol stage
|
|
5635
|
+
const primaryButton = toolbarService.getButton(primaryToolBeforeHPChange);
|
|
5636
|
+
if (primaryButton) {
|
|
5637
|
+
// is there any type of interaction on this button, if not it might be in the
|
|
5638
|
+
// items. This is a bit of a hack, but it works for now.
|
|
5639
|
+
|
|
5640
|
+
let interactionType = primaryButton.props?.interactionType;
|
|
5641
|
+
if (!interactionType && primaryButton.props?.items) {
|
|
5642
|
+
const firstItem = primaryButton.props.items[0];
|
|
5643
|
+
interactionType = firstItem.props?.interactionType || firstItem.props?.type;
|
|
5644
|
+
}
|
|
5645
|
+
if (interactionType) {
|
|
5646
|
+
toolbarService.recordInteraction({
|
|
5647
|
+
interactionType,
|
|
5648
|
+
...primaryButton.props
|
|
5649
|
+
});
|
|
5650
|
+
}
|
|
5651
|
+
}
|
|
5652
|
+
|
|
5636
5653
|
// Send the notification about updating the state
|
|
5637
5654
|
if (protocolId !== hpInfo.protocolId) {
|
|
5638
5655
|
// The old protocol callbacks are used for turning off things
|
|
@@ -5645,7 +5662,8 @@ const commandsModule = _ref => {
|
|
|
5645
5662
|
commandsManager.run(protocol.callbacks?.onProtocolEnter);
|
|
5646
5663
|
return true;
|
|
5647
5664
|
} catch (e) {
|
|
5648
|
-
|
|
5665
|
+
console.error(e);
|
|
5666
|
+
actions.toggleHpTools();
|
|
5649
5667
|
uiNotificationService.show({
|
|
5650
5668
|
title: 'Apply Hanging Protocol',
|
|
5651
5669
|
message: 'The hanging protocol could not be applied.',
|
|
@@ -236,9 +236,7 @@ const toolbarButtons = [
|
|
|
236
236
|
// toolGroupIds.MPR,
|
|
237
237
|
])], 'Arrow Annotate'), _createToolButton('EllipticalROI', 'tool-elipse', 'Ellipse', [..._createCommands('setToolActive', 'EllipticalROI', [toolGroupIds.CT, toolGroupIds.PT, toolGroupIds.Fusion
|
|
238
238
|
// toolGroupIds.MPR,
|
|
239
|
-
])], 'Ellipse Tool')
|
|
240
|
-
// toolGroupIds.MPR,
|
|
241
|
-
])], 'Circle Tool')]
|
|
239
|
+
])], 'Ellipse Tool')]
|
|
242
240
|
}
|
|
243
241
|
},
|
|
244
242
|
// Zoom..
|
|
@@ -709,7 +709,7 @@ const dicomSeg = {
|
|
|
709
709
|
viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg',
|
|
710
710
|
panel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation'
|
|
711
711
|
};
|
|
712
|
-
const
|
|
712
|
+
const dicomRT = {
|
|
713
713
|
viewport: '@ohif/extension-cornerstone-dicom-rt.viewportModule.dicom-rt',
|
|
714
714
|
sopClassHandler: '@ohif/extension-cornerstone-dicom-rt.sopClassHandlerModule.dicom-rt'
|
|
715
715
|
};
|
|
@@ -869,8 +869,8 @@ function modeFactory(_ref) {
|
|
|
869
869
|
namespace: dicomSeg.viewport,
|
|
870
870
|
displaySetsToDisplay: [dicomSeg.sopClassHandler]
|
|
871
871
|
}, {
|
|
872
|
-
namespace:
|
|
873
|
-
displaySetsToDisplay: [
|
|
872
|
+
namespace: dicomRT.viewport,
|
|
873
|
+
displaySetsToDisplay: [dicomRT.sopClassHandler]
|
|
874
874
|
}]
|
|
875
875
|
}
|
|
876
876
|
};
|
|
@@ -883,7 +883,7 @@ function modeFactory(_ref) {
|
|
|
883
883
|
// the same sop class under different situations. In that case, the more
|
|
884
884
|
// general handler needs to come last. For this case, the dicomvideo must
|
|
885
885
|
// come first to remove video transfer syntax before ohif uses images
|
|
886
|
-
sopClassHandlers: [dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler,
|
|
886
|
+
sopClassHandlers: [dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, dicomRT.sopClassHandler],
|
|
887
887
|
hotkeys: [...src/* hotkeys */.dD.defaults.hotkeyBindings],
|
|
888
888
|
...modeConfiguration
|
|
889
889
|
};
|
|
@@ -45257,6 +45257,19 @@ class VolumeViewport extends RenderingEngine_BaseVolumeViewport {
|
|
|
45257
45257
|
throw new Error(`imageVolume with id: ${volumeActor.uid} does not exist in cache`);
|
|
45258
45258
|
}
|
|
45259
45259
|
helpers_setDefaultVolumeVOI(volumeActor.actor, imageVolume, false);
|
|
45260
|
+
const range = volumeActor.actor
|
|
45261
|
+
.getProperty()
|
|
45262
|
+
.getRGBTransferFunction(0)
|
|
45263
|
+
.getMappingRange();
|
|
45264
|
+
const eventDetails = {
|
|
45265
|
+
viewportId: volumeActor.uid,
|
|
45266
|
+
range: {
|
|
45267
|
+
lower: range[0],
|
|
45268
|
+
upper: range[1],
|
|
45269
|
+
},
|
|
45270
|
+
volumeId: volumeActor.uid,
|
|
45271
|
+
};
|
|
45272
|
+
triggerEvent(this.element, enums_Events.VOI_MODIFIED, eventDetails);
|
|
45260
45273
|
}
|
|
45261
45274
|
}
|
|
45262
45275
|
/* harmony default export */ const RenderingEngine_VolumeViewport = (VolumeViewport);
|