Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5ee092bf2 | ||
|
|
e2f4f95222 | ||
|
|
4546ede9bb | ||
|
|
e0fb439e98 | ||
|
|
ebbc9e0d6d | ||
|
|
47a6130fd5 | ||
|
|
80dfdcc37c | ||
|
|
d74ad370e0 | ||
|
|
ddfde9279e | ||
|
|
aaab6d2622 | ||
|
|
d2921083e7 | ||
|
|
a6338ea266 | ||
|
|
fe9551b9b1 | ||
|
|
ef60156a47 | ||
|
|
850de2903a | ||
|
|
f26ed5539b | ||
|
|
21aeaa63c7 | ||
|
|
2ac0d3f017 |
No files matched your search
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.12.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.13...@ohif/extension-cornerstone@2.12.14) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.12.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.12...@ohif/extension-cornerstone@2.12.13) (2022-06-30)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/extension-cornerstone",
|
||||
"version": "2.12.13",
|
||||
"version": "2.12.14",
|
||||
"description": "OHIF extension for Cornerstone",
|
||||
"author": "OHIF",
|
||||
"license": "MIT",
|
||||
@@ -36,7 +36,7 @@
|
||||
"cornerstone-math": "^0.1.9",
|
||||
"cornerstone-tools": "^6.0.6",
|
||||
"cornerstone-wado-image-loader": "^4.1.0",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"dicom-parser": "^1.8.11",
|
||||
"hammerjs": "^2.0.8",
|
||||
"prop-types": "^15.6.2",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.3.23](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.22...@ohif/extension-dicom-html@1.3.23) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.3.22](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.21...@ohif/extension-dicom-html@1.3.22) (2022-06-30)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/extension-dicom-html",
|
||||
"version": "1.3.22",
|
||||
"version": "1.3.23",
|
||||
"description": "OHIF extension for rendering structured reports to HTML",
|
||||
"author": "OHIF",
|
||||
"license": "MIT",
|
||||
@@ -29,7 +29,7 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@ohif/core": "^0.50.0",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"prop-types": "^15.6.2",
|
||||
"react": "^16.8.6",
|
||||
"react-dom": "^16.8.6"
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.7.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.12...@ohif/extension-dicom-rt@0.7.13) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.7.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.11...@ohif/extension-dicom-rt@0.7.12) (2022-08-31)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.7.11](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.10...@ohif/extension-dicom-rt@0.7.11) (2022-04-05)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/extension-dicom-rt",
|
||||
"version": "0.7.11",
|
||||
"version": "0.7.13",
|
||||
"description": "OHIF extension for rendering DICOM RTSTRUCTs on top of cornerstone images.",
|
||||
"author": "OHIF",
|
||||
"license": "MIT",
|
||||
@@ -31,7 +31,7 @@
|
||||
"@ohif/core": "^0.50.0",
|
||||
"cornerstone-core": "^2.6.1",
|
||||
"cornerstone-tools": "^6.0.6",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"gl-matrix": "^3.3.0",
|
||||
"prop-types": "^15.6.2",
|
||||
"react": "^16.8.6",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import cornerstoneTools from 'cornerstone-tools';
|
||||
import cornerstone from 'cornerstone-core';
|
||||
|
||||
@@ -3,6 +3,38 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.7.15](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.14...@ohif/extension-dicom-segmentation@0.7.15) (2022-09-19)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.7.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.13...@ohif/extension-dicom-segmentation@0.7.14) (2022-09-12)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.7.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.12...@ohif/extension-dicom-segmentation@0.7.13) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.7.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.11...@ohif/extension-dicom-segmentation@0.7.12) (2022-08-31)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.7.11](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.10...@ohif/extension-dicom-segmentation@0.7.11) (2022-04-05)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/extension-dicom-segmentation",
|
||||
"version": "0.7.11",
|
||||
"version": "0.7.15",
|
||||
"description": "OHIF extension for viewing segmentations in the 2D MPR view",
|
||||
"author": "OHIF",
|
||||
"license": "MIT",
|
||||
@@ -31,7 +31,7 @@
|
||||
"@ohif/core": "^0.50.0",
|
||||
"cornerstone-core": "^2.6.1",
|
||||
"cornerstone-tools": "^6.0.6",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"prop-types": "^15.6.2",
|
||||
"react": "^16.8.6",
|
||||
"react-dom": "^16.8.6"
|
||||
|
||||
+30
-6
@@ -1,4 +1,4 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import cornerstoneTools from 'cornerstone-tools';
|
||||
import cornerstone from 'cornerstone-core';
|
||||
@@ -36,6 +36,7 @@ const { studyMetadataManager } = utils;
|
||||
* @param {Function} props.onConfigurationChange - Configuration change handler
|
||||
* @param {Function} props.activeContexts - List of active application contexts
|
||||
* @param {Function} props.contexts - List of available application contexts
|
||||
* @param {Function} props.servicesManager - Services manager
|
||||
* @returns component
|
||||
*/
|
||||
const SegmentationPanel = ({
|
||||
@@ -50,6 +51,7 @@ const SegmentationPanel = ({
|
||||
onSelectedSegmentationChange,
|
||||
activeContexts = [],
|
||||
contexts = {},
|
||||
servicesManager,
|
||||
}) => {
|
||||
const isVTK = () => activeContexts.includes(contexts.VTK);
|
||||
const isCornerstone = () => activeContexts.includes(contexts.CORNERSTONE);
|
||||
@@ -59,6 +61,9 @@ const SegmentationPanel = ({
|
||||
* store with context to make these kind of things less blurry.
|
||||
*/
|
||||
const { configuration } = cornerstoneTools.getModule('segmentation');
|
||||
if (configuration.segsTolerance === undefined) {
|
||||
configuration.segsTolerance = 1e-2;
|
||||
}
|
||||
const DEFAULT_BRUSH_RADIUS = configuration.radius || 10;
|
||||
|
||||
/*
|
||||
@@ -87,6 +92,25 @@ const SegmentationPanel = ({
|
||||
return studyMetadata.getFirstImageId(displaySetInstanceUID);
|
||||
};
|
||||
|
||||
const getAllSegDisplaySets = () => {
|
||||
const { StudyInstanceUID } = getActiveViewport();
|
||||
const studyMetadata = studyMetadataManager.get(StudyInstanceUID);
|
||||
return studyMetadata.getDerivedDatasets({
|
||||
Modality: 'SEG',
|
||||
});
|
||||
};
|
||||
|
||||
const updateSegDisplaySetsTolerance = tolerance => {
|
||||
const segDisplaySets = getAllSegDisplaySets();
|
||||
segDisplaySets.forEach(segDisplaySet => {
|
||||
// update tol value
|
||||
segDisplaySet.tolerance = tolerance;
|
||||
// reset load flags for allowing retry for seg parsing.
|
||||
segDisplaySet.isLoaded = false;
|
||||
segDisplaySet.loadError = false;
|
||||
});
|
||||
};
|
||||
|
||||
const getActiveLabelMaps3D = () => {
|
||||
const { labelmaps3D, activeLabelmapIndex } = getBrushStackState();
|
||||
return labelmaps3D[activeLabelmapIndex];
|
||||
@@ -224,10 +248,7 @@ const SegmentationPanel = ({
|
||||
)
|
||||
);
|
||||
};
|
||||
}, [
|
||||
activeIndex,
|
||||
viewports,
|
||||
]);
|
||||
}, [activeIndex, viewports]);
|
||||
|
||||
const updateSegmentationComboBox = e => {
|
||||
const index = e.detail.activatedLabelmapIndex;
|
||||
@@ -601,7 +622,9 @@ const SegmentationPanel = ({
|
||||
configuration.outlineWidth = newConfiguration.outlineWidth;
|
||||
configuration.fillAlphaInactive = newConfiguration.fillAlphaInactive;
|
||||
configuration.outlineAlphaInactive = newConfiguration.outlineAlphaInactive;
|
||||
configuration.segsTolerance = newConfiguration.segsTolerance;
|
||||
onConfigurationChange(newConfiguration);
|
||||
updateSegDisplaySetsTolerance(configuration.segsTolerance);
|
||||
refreshViewports();
|
||||
};
|
||||
|
||||
@@ -650,6 +673,7 @@ const SegmentationPanel = ({
|
||||
configuration={configuration}
|
||||
onBack={() => setState(state => ({ ...state, showSettings: false }))}
|
||||
onChange={updateConfiguration}
|
||||
servicesManager={servicesManager}
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
@@ -694,7 +718,7 @@ const SegmentationPanel = ({
|
||||
count={state.segmentList.length}
|
||||
isVisible={
|
||||
state.segmentsHidden.filter(isHidden => isHidden === true).length <
|
||||
state.segmentNumbers.length && state.segmentNumbers.length > 0
|
||||
state.segmentNumbers.length && state.segmentNumbers.length > 0
|
||||
}
|
||||
onVisibilityChange={onVisibilityChangeHandler}
|
||||
>
|
||||
|
||||
+42
-6
@@ -4,7 +4,7 @@ import { Range } from '@ohif/ui';
|
||||
|
||||
import './SegmentationSettings.css';
|
||||
|
||||
const SegmentationSettings = ({ configuration, onBack, onChange, disabledFields = [] }) => {
|
||||
const SegmentationSettings = ({ configuration, onBack, onChange, servicesManager, disabledFields = [] }) => {
|
||||
const [state, setState] = useState({
|
||||
renderFill: configuration.renderFill,
|
||||
renderOutline: configuration.renderOutline,
|
||||
@@ -13,7 +13,8 @@ const SegmentationSettings = ({ configuration, onBack, onChange, disabledFields
|
||||
outlineAlpha: configuration.outlineAlpha,
|
||||
outlineWidth: configuration.outlineWidth,
|
||||
fillAlphaInactive: configuration.fillAlphaInactive,
|
||||
outlineAlphaInactive: configuration.outlineAlphaInactive
|
||||
outlineAlphaInactive: configuration.outlineAlphaInactive,
|
||||
segsTolerance: configuration.segsTolerance,
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
@@ -133,6 +134,40 @@ const SegmentationSettings = ({ configuration, onBack, onChange, disabledFields
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
<div className="settings-group" style={{ marginBottom: 15 }}>
|
||||
<label style={{ margin: '0 15px' }}>
|
||||
Tolerance:
|
||||
<input
|
||||
style={{ margin: '0 15px' }}
|
||||
label="Tolerance"
|
||||
onKeyPress={event => {
|
||||
const validate = string => {
|
||||
let rgx = /[^-.e0-9]+/g;
|
||||
return string.match(rgx);
|
||||
};
|
||||
|
||||
if (validate(event.key)) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}}
|
||||
onChange={event => {
|
||||
save('segsTolerance', event.target.value);
|
||||
|
||||
const { UINotificationService, LoggerService } = servicesManager.services;
|
||||
const error = new Error('Segmentation loader tolerance changed. This operation can potentially generate errors in the Segmentation parsing.');
|
||||
LoggerService.error({ error, message: error.message });
|
||||
UINotificationService.show({
|
||||
title: 'Segmentation panel',
|
||||
message: error.message,
|
||||
type: 'warning',
|
||||
autoClose: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
value={state.segsTolerance}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -169,11 +204,12 @@ SegmentationSettings.propTypes = {
|
||||
renderFill: PropTypes.bool.isRequired,
|
||||
renderOutline: PropTypes.bool.isRequired,
|
||||
shouldRenderInactiveLabelmaps: PropTypes.bool.isRequired,
|
||||
fillAlpha: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, /* TODO: why fillAlpha is string? */
|
||||
outlineAlpha: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, /* TODO: why fillAlpha is string? */
|
||||
fillAlpha: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
outlineAlpha: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
outlineWidth: PropTypes.number.isRequired,
|
||||
fillAlphaInactive: PropTypes.number.isRequired,
|
||||
outlineAlphaInactive: PropTypes.number.isRequired,
|
||||
fillAlphaInactive: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
outlineAlphaInactive: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
segsTolerance: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
}).isRequired,
|
||||
onBack: PropTypes.func.isRequired,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
|
||||
@@ -62,6 +62,7 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
||||
SeriesNumber,
|
||||
SeriesDescription,
|
||||
metadata,
|
||||
tolerance: 1e-2,
|
||||
};
|
||||
|
||||
segDisplaySet.getSourceDisplaySet = function(
|
||||
@@ -93,7 +94,7 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
||||
referencedDisplaySet.SeriesInstanceUID
|
||||
);
|
||||
|
||||
const results = await _parseSeg(segArrayBuffer, imageIds);
|
||||
const results = await _parseSeg(segArrayBuffer, imageIds, segDisplaySet.tolerance);
|
||||
if (results === undefined) {
|
||||
return;
|
||||
}
|
||||
@@ -149,10 +150,13 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
||||
};
|
||||
}
|
||||
|
||||
function _parseSeg(arrayBuffer, imageIds) {
|
||||
const skipOverlapping = false;
|
||||
const tolerance = 1e-2;
|
||||
const cornerstoneToolsVersion = 4;
|
||||
function _parseSeg(
|
||||
arrayBuffer,
|
||||
imageIds,
|
||||
tolerance = 1e-2,
|
||||
skipOverlapping = false,
|
||||
cornerstoneToolsVersion = 4
|
||||
) {
|
||||
return dcmjs.adapters.Cornerstone.Segmentation.generateToolState(
|
||||
imageIds,
|
||||
arrayBuffer,
|
||||
|
||||
@@ -32,7 +32,6 @@ export default {
|
||||
|
||||
const ExtendedSegmentationPanel = props => {
|
||||
const { activeContexts } = api.hooks.useAppContext();
|
||||
|
||||
const onDisplaySetLoadFailureHandler = error => {
|
||||
LoggerService.error({ error, message: error.message });
|
||||
UINotificationService.show({
|
||||
@@ -78,6 +77,7 @@ export default {
|
||||
onConfigurationChange={onConfigurationChangeHandler}
|
||||
onSelectedSegmentationChange={onSelectedSegmentationChangeHandler}
|
||||
onDisplaySetLoadFailure={onDisplaySetLoadFailureHandler}
|
||||
servicesManager={servicesManager}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [0.2.24](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.23...@ohif/extension-dicom-tag-browser@0.2.24) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [0.2.23](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.22...@ohif/extension-dicom-tag-browser@0.2.23) (2022-04-06)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/extension-dicom-tag-browser",
|
||||
"version": "0.2.23",
|
||||
"version": "0.2.24",
|
||||
"description": "OHIF extension for checking DICOM headers.",
|
||||
"author": "OHIF",
|
||||
"license": "MIT",
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@ohif/core": "^2.6.0",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"react": "^16.8.6"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -3,6 +3,54 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.12.33](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.32...@ohif/extension-vtk@1.12.33) (2022-09-19)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.12.32](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.31...@ohif/extension-vtk@1.12.32) (2022-09-12)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.12.31](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.30...@ohif/extension-vtk@1.12.31) (2022-09-02)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.12.30](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.29...@ohif/extension-vtk@1.12.30) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.12.29](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.28...@ohif/extension-vtk@1.12.29) (2022-08-31)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.12.28](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.27...@ohif/extension-vtk@1.12.28) (2022-08-24)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.12.27](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.26...@ohif/extension-vtk@1.12.27) (2022-06-30)
|
||||
|
||||
**Note:** Version bump only for package @ohif/extension-vtk
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/extension-vtk",
|
||||
"version": "1.12.27",
|
||||
"version": "1.12.33",
|
||||
"description": "OHIF extension for VTK.js",
|
||||
"author": "OHIF",
|
||||
"license": "MIT",
|
||||
@@ -35,7 +35,7 @@
|
||||
"cornerstone-core": "^2.6.1",
|
||||
"cornerstone-tools": "^6.0.6",
|
||||
"cornerstone-wado-image-loader": "^4.1.0",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"dicom-parser": "^1.8.11",
|
||||
"i18next": "^17.0.3",
|
||||
"i18next-browser-languagedetector": "^3.0.1",
|
||||
@@ -53,8 +53,8 @@
|
||||
"react-vtkjs-viewport": "^0.14.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ohif/core": "^2.16.22",
|
||||
"@ohif/ui": "^1.10.9",
|
||||
"@ohif/core": "^2.16.28",
|
||||
"@ohif/ui": "^1.10.10",
|
||||
"cornerstone-tools": "^6.0.6",
|
||||
"cornerstone-wado-image-loader": "^4.1.0",
|
||||
"dicom-parser": "^1.8.11",
|
||||
|
||||
@@ -3,6 +3,54 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [2.16.28](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.27...@ohif/core@2.16.28) (2022-09-19)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.16.27](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.26...@ohif/core@2.16.27) (2022-09-12)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.16.26](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.25...@ohif/core@2.16.26) (2022-09-02)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.16.25](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.24...@ohif/core@2.16.25) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.16.24](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.23...@ohif/core@2.16.24) (2022-08-31)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.16.23](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.22...@ohif/core@2.16.23) (2022-08-24)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [2.16.22](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.21...@ohif/core@2.16.22) (2022-06-30)
|
||||
|
||||
**Note:** Version bump only for package @ohif/core
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/core",
|
||||
"version": "2.16.22",
|
||||
"version": "2.16.28",
|
||||
"description": "Generic business logic for web-based medical imaging applications",
|
||||
"author": "OHIF Core Team",
|
||||
"license": "MIT",
|
||||
@@ -39,7 +39,7 @@
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.5.5",
|
||||
"ajv": "^6.10.0",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"dicomweb-client": "^0.8.3",
|
||||
"immer": "9.0.12",
|
||||
"isomorphic-base64": "^1.0.2",
|
||||
|
||||
@@ -8,6 +8,16 @@ const parseSCOORD3D = ({ servicesManager, displaySets }) => {
|
||||
const { MeasurementService } = servicesManager.services;
|
||||
|
||||
const srDisplaySets = displaySets.filter(ds => ds.Modality === 'SR');
|
||||
const imageDisplaySets = displaySets.filter(
|
||||
ds =>
|
||||
ds.Modality !== 'SR' &&
|
||||
ds.Modality !== 'SEG' &&
|
||||
ds.Modality !== 'RTSTRUCT'
|
||||
);
|
||||
|
||||
imageDisplaySets.forEach(imageDisplaySet => {
|
||||
imageDisplaySet.SRLabels = [];
|
||||
});
|
||||
|
||||
srDisplaySets.forEach(srDisplaySet => {
|
||||
const firstInstance = srDisplaySet.metadata;
|
||||
@@ -28,13 +38,6 @@ const parseSCOORD3D = ({ servicesManager, displaySets }) => {
|
||||
srDisplaySet.isRehydratable = isRehydratable(srDisplaySet, mappings);
|
||||
srDisplaySet.isLoaded = true;
|
||||
|
||||
const imageDisplaySets = displaySets.filter(
|
||||
ds =>
|
||||
ds.Modality !== 'SR' &&
|
||||
ds.Modality !== 'SEG' &&
|
||||
ds.Modality !== 'RTSTRUCT' &&
|
||||
ds.Modality !== 'RTDOSE'
|
||||
);
|
||||
imageDisplaySets.forEach(imageDisplaySet => {
|
||||
// Check currently added displaySets and add measurements if the sources exist.
|
||||
checkIfCanAddMeasurementsToDisplaySet(srDisplaySet, imageDisplaySet);
|
||||
@@ -127,7 +130,6 @@ const checkIfCanAddMeasurementsToDisplaySet = (
|
||||
|
||||
const imageIds = images.map(i => i.getImageId());
|
||||
const SOPInstanceUIDs = images.map(i => i.SOPInstanceUID);
|
||||
imageDisplaySet.SRLabels = [];
|
||||
const colors = new Map();
|
||||
measurements.forEach(measurement => {
|
||||
const { coords } = measurement;
|
||||
|
||||
@@ -7,10 +7,12 @@ const getReferencedImagesList = ImagingMeasurementReportContentSequence => {
|
||||
const ImageLibrary = ImagingMeasurementReportContentSequence.find(
|
||||
item =>
|
||||
item.ConceptNameCodeSequence.CodeValue ===
|
||||
CodeNameCodeSequenceValues.ImageLibrary
|
||||
CodeNameCodeSequenceValues.ImageLibrary ||
|
||||
item.ConceptNameCodeSequence.CodeValue ===
|
||||
CodeNameCodeSequenceValues.ImagingMeasurements
|
||||
);
|
||||
|
||||
if (!ImageLibrary.ContentSequence) {
|
||||
if (!ImageLibrary || !ImageLibrary.ContentSequence) {
|
||||
return referencedImages;
|
||||
}
|
||||
|
||||
@@ -19,9 +21,15 @@ const getReferencedImagesList = ImagingMeasurementReportContentSequence => {
|
||||
).find(
|
||||
item =>
|
||||
item.ConceptNameCodeSequence.CodeValue ===
|
||||
CodeNameCodeSequenceValues.ImageLibraryGroup
|
||||
CodeNameCodeSequenceValues.ImageLibraryGroup ||
|
||||
item.ConceptNameCodeSequence.CodeValue ===
|
||||
CodeNameCodeSequenceValues.MeasurementGroup
|
||||
);
|
||||
|
||||
if (!ImageLibraryGroup || !ImageLibraryGroup.ContentSequence) {
|
||||
return referencedImages;
|
||||
}
|
||||
|
||||
getSequenceAsArray(ImageLibraryGroup.ContentSequence).forEach(item => {
|
||||
const { ReferencedSOPSequence } = item;
|
||||
if (ReferencedSOPSequence) {
|
||||
|
||||
@@ -21,16 +21,32 @@ const parseDicomStructuredReport = (
|
||||
displaySets,
|
||||
external
|
||||
) => {
|
||||
if (external && external.servicesManager) {
|
||||
parseSCOORD3D({ servicesManager: external.servicesManager, displaySets });
|
||||
}
|
||||
|
||||
// Get the dicom data as an Object
|
||||
const dicomData = dcmjs.data.DicomMessage.readFile(part10SRArrayBuffer);
|
||||
const dataset = dcmjs.data.DicomMetaDictionary.naturalizeDataset(
|
||||
dicomData.dict
|
||||
);
|
||||
|
||||
const {
|
||||
LoggerService,
|
||||
UINotificationService,
|
||||
} = external.servicesManager.services;
|
||||
if (external && external.servicesManager) {
|
||||
try {
|
||||
parseSCOORD3D({ servicesManager: external.servicesManager, displaySets });
|
||||
} catch (error) {
|
||||
const seriesDescription = dataset.SeriesDescription || '';
|
||||
LoggerService.error({ error, message: error.message });
|
||||
UINotificationService.show({
|
||||
title: `Failed to parse ${seriesDescription} SR display set`,
|
||||
message: error.message,
|
||||
type: 'error',
|
||||
autoClose: false,
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const { MeasurementReport } = dcmjs.adapters.Cornerstone;
|
||||
|
||||
let storedMeasurementByToolType;
|
||||
@@ -38,11 +54,12 @@ const parseDicomStructuredReport = (
|
||||
storedMeasurementByToolType = MeasurementReport.generateToolState(dataset);
|
||||
} catch (error) {
|
||||
const seriesDescription = dataset.SeriesDescription || '';
|
||||
LogManager.publish(LogManager.EVENTS.OnLog, {
|
||||
LoggerService.error({ error, message: error.message });
|
||||
UINotificationService.show({
|
||||
title: `Failed to parse ${seriesDescription} measurement report`,
|
||||
type: 'warning',
|
||||
message: error.message || '',
|
||||
notify: true,
|
||||
message: error.message,
|
||||
type: 'error',
|
||||
autoClose: false,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -67,12 +67,13 @@ export class HotkeysManager {
|
||||
UINotificationService,
|
||||
LoggerService,
|
||||
} = this._servicesManager.services;
|
||||
const message = 'Erro while setting hotkeys';
|
||||
const message = 'Error while setting hotkeys';
|
||||
LoggerService.error({ error, message });
|
||||
UINotificationService.show({
|
||||
title: 'Hotkeys Manager',
|
||||
message,
|
||||
type: 'error',
|
||||
autoClose: false,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -469,8 +469,8 @@ class StudyLoadingListener {
|
||||
|
||||
// TODO: Make this work for plugins
|
||||
if (!stack) {
|
||||
console.warn('Skipping adding displaySet to StudyLoadingListener');
|
||||
console.warn(displaySet);
|
||||
//console.warn('Skipping adding displaySet to StudyLoadingListener');
|
||||
//console.warn(displaySet);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -275,6 +275,8 @@ class StudyMetadata extends Metadata {
|
||||
|
||||
const otherDisplaySets = allDisplaySets.filter(
|
||||
ds =>
|
||||
ds &&
|
||||
derivatedDisplaySet &&
|
||||
ds.displaySetInstanceUID !== derivatedDisplaySet.displaySetInstanceUID
|
||||
);
|
||||
|
||||
@@ -350,6 +352,13 @@ class StudyMetadata extends Metadata {
|
||||
referencedSeriesInstanceUID
|
||||
);
|
||||
} else {
|
||||
if (
|
||||
!displaySet.referencedDisplaySets ||
|
||||
displaySet.referencedDisplaySets.length === 0
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const filteredReferencedDisplaySets = displaySet.referencedDisplaySets.filter(
|
||||
referencedDisplaySet =>
|
||||
referencedDisplaySet.SeriesInstanceUID ===
|
||||
|
||||
@@ -420,6 +420,10 @@ class MeasurementService {
|
||||
throw new Error('No source definition provided.');
|
||||
}
|
||||
|
||||
if (definition == 'stack' || definition == 'stackPrefetch') {
|
||||
return;
|
||||
}
|
||||
|
||||
const sourceInfo = this._getSourceInfo(source);
|
||||
|
||||
if (!this._sourceHasMappings(source)) {
|
||||
|
||||
@@ -19,17 +19,4 @@ describe('retrieveStudyMetadata.js', () => {
|
||||
|
||||
expect(callWithNoStudyInstanceUID).toThrow(Error);
|
||||
});
|
||||
|
||||
it('caches and returns the same promise for identical studyInstanceUIDs', () => {
|
||||
const firstPromise = retrieveStudyMetadata(
|
||||
fakeDicomWebServer,
|
||||
'fake-study-instance-uid'
|
||||
);
|
||||
const secondPromise = retrieveStudyMetadata(
|
||||
fakeDicomWebServer,
|
||||
'fake-study-instance-uid'
|
||||
);
|
||||
|
||||
expect(firstPromise).toBe(secondPromise);
|
||||
});
|
||||
});
|
||||
@@ -102,6 +102,35 @@ async function makeSOPInstance(server, study, instance) {
|
||||
SOPInstanceUID,
|
||||
} = naturalizedInstance;
|
||||
|
||||
const validate = string => {
|
||||
let rgx = /[^.0-9]+/g;
|
||||
return string.match(rgx);
|
||||
};
|
||||
|
||||
if (StudyInstanceUID === undefined || validate(StudyInstanceUID)) {
|
||||
const error =
|
||||
'makeSOPInstance: StudyInstanceUID is not conforming with the UID (DICOM UI VR) character repertoire, skipping SOPInstance.';
|
||||
console.error(error);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (SeriesInstanceUID === undefined || validate(SeriesInstanceUID)) {
|
||||
const error =
|
||||
'makeSOPInstance: SeriesInstanceUID is not conforming with the UID (DICOM UI VR) character repertoire, skipping SOPInstance.';
|
||||
console.error(error);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (SOPInstanceUID === undefined || validate(SOPInstanceUID)) {
|
||||
const error =
|
||||
'makeSOPInstance: SOPInstanceUID is not conforming with the UID (DICOM UI VR) character repertoire, skipping SOPInstance.';
|
||||
console.error(error);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let series = study.seriesMap[SeriesInstanceUID];
|
||||
|
||||
if (!series) {
|
||||
|
||||
@@ -25,7 +25,7 @@ function createAndAddStack(stackMap, study, displaySet, stackUpdatedCallbacks) {
|
||||
const imageIds = [];
|
||||
let imageId;
|
||||
|
||||
displaySet.images.forEach((instance, imageIndex) => {
|
||||
images.forEach((instance, imageIndex) => {
|
||||
const image = instance.getData();
|
||||
const metaData = {
|
||||
instance: image, // in this context, instance will be the data of the InstanceMetadata object...
|
||||
@@ -35,7 +35,7 @@ function createAndAddStack(stackMap, study, displaySet, stackUpdatedCallbacks) {
|
||||
imageIndex: imageIndex + 1,
|
||||
};
|
||||
|
||||
const naturalizedInstance = instance.getData().metadata;
|
||||
const naturalizedInstance = image.metadata;
|
||||
const NumberOfFrames = naturalizedInstance.NumberOfFrames;
|
||||
|
||||
if (NumberOfFrames > 1) {
|
||||
|
||||
@@ -124,7 +124,7 @@ async function loadAndCacheDerivedDisplaySets(
|
||||
title: 'DICOM Segmentation Loader',
|
||||
message: error.message,
|
||||
type: 'error',
|
||||
autoClose: true,
|
||||
autoClose: false,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.10.10](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.9...@ohif/ui@1.10.10) (2022-08-24)
|
||||
|
||||
**Note:** Version bump only for package @ohif/ui
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [1.10.9](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.8...@ohif/ui@1.10.9) (2022-06-29)
|
||||
|
||||
**Note:** Version bump only for package @ohif/ui
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/ui",
|
||||
"version": "1.10.9",
|
||||
"version": "1.10.10",
|
||||
"description": "A set of React components for Medical Imaging Viewers",
|
||||
"author": "OHIF Contributors",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -175,7 +175,9 @@ class MeasurementTableItem extends Component {
|
||||
>
|
||||
<div>
|
||||
<div className="icons">
|
||||
<span>{SRLabel.label + ' : ' + SRLabel.value}</span>
|
||||
<span style={{ width: '90px' }}>
|
||||
{SRLabel.label + ' : ' + SRLabel.value}
|
||||
</span>
|
||||
<Icon
|
||||
className={`eye-icon`}
|
||||
name={SRLabel.visible ? 'eye' : 'eye-closed'}
|
||||
|
||||
@@ -18,6 +18,7 @@ $headerRowHeight = 63px
|
||||
|
||||
.tableListHeaderTitle
|
||||
color: var(--text-secondary-color)
|
||||
max-width: 230px
|
||||
font-size: 22px
|
||||
font-weight: 300
|
||||
line-height: $headerRowHeight
|
||||
|
||||
@@ -3,6 +3,81 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [4.12.39](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.38...@ohif/viewer@4.12.39) (2022-09-19)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.38](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.37...@ohif/viewer@4.12.38) (2022-09-12)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.37](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.36...@ohif/viewer@4.12.37) (2022-09-12)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.36](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.35...@ohif/viewer@4.12.36) (2022-09-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* hotkey page up/down did not work ([#2910](https://github.com/OHIF/Viewers/issues/2910)) ([d74ad37](https://github.com/OHIF/Viewers/commit/d74ad370e091c8af2d93ec35f688c4ef902bab2b))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.35](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.34...@ohif/viewer@4.12.35) (2022-09-02)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.34](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.33...@ohif/viewer@4.12.34) (2022-09-01)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.33](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.32...@ohif/viewer@4.12.33) (2022-08-31)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.32](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.31...@ohif/viewer@4.12.32) (2022-08-25)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.31](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.30...@ohif/viewer@4.12.31) (2022-08-24)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## [4.12.30](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.29...@ohif/viewer@4.12.30) (2022-06-30)
|
||||
|
||||
**Note:** Version bump only for package @ohif/viewer
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ohif/viewer",
|
||||
"version": "4.12.30",
|
||||
"version": "4.12.39",
|
||||
"description": "OHIF Viewer",
|
||||
"author": "OHIF Contributors",
|
||||
"license": "MIT",
|
||||
@@ -47,18 +47,18 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.5.5",
|
||||
"@ohif/core": "^2.16.22",
|
||||
"@ohif/extension-cornerstone": "^2.12.13",
|
||||
"@ohif/core": "^2.16.28",
|
||||
"@ohif/extension-cornerstone": "^2.12.14",
|
||||
"@ohif/extension-debugging": "^0.3.3",
|
||||
"@ohif/extension-dicom-html": "^1.3.22",
|
||||
"@ohif/extension-dicom-html": "^1.3.23",
|
||||
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
||||
"@ohif/extension-dicom-pdf": "^1.1.2",
|
||||
"@ohif/extension-dicom-rt": "^0.7.11",
|
||||
"@ohif/extension-dicom-segmentation": "^0.7.11",
|
||||
"@ohif/extension-dicom-rt": "^0.7.13",
|
||||
"@ohif/extension-dicom-segmentation": "^0.7.15",
|
||||
"@ohif/extension-lesion-tracker": "^0.2.2",
|
||||
"@ohif/extension-vtk": "^1.12.27",
|
||||
"@ohif/extension-vtk": "^1.12.33",
|
||||
"@ohif/i18n": "^0.53.0",
|
||||
"@ohif/ui": "^1.10.9",
|
||||
"@ohif/ui": "^1.10.10",
|
||||
"@tanem/react-nprogress": "^1.1.25",
|
||||
"classnames": "^2.2.6",
|
||||
"core-js": "^3.2.1",
|
||||
@@ -66,7 +66,7 @@
|
||||
"cornerstone-math": "^0.1.9",
|
||||
"cornerstone-tools": "^6.0.6",
|
||||
"cornerstone-wado-image-loader": "^4.1.0",
|
||||
"dcmjs": "0.19.9",
|
||||
"dcmjs": "0.24.10",
|
||||
"dicom-parser": "^1.8.11",
|
||||
"dicomweb-client": "^0.8.3",
|
||||
"hammerjs": "^2.0.8",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { redux } from '@ohif/core';
|
||||
import { redux, utils } from '@ohif/core';
|
||||
import store from './../../store';
|
||||
|
||||
const commandsModule = ({ commandsManager }) => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { measurements, utils } from '@ohif/core';
|
||||
|
||||
import { servicesManager } from './../../App.js';
|
||||
const { MeasurementApi } = measurements;
|
||||
const { studyMetadataManager } = utils;
|
||||
|
||||
@@ -19,6 +19,25 @@ export default function jumpToRowItem(
|
||||
timepointManagerState,
|
||||
options = { invertViewportTimepointsOrder: false, childToolKey: null }
|
||||
) {
|
||||
const viewports = viewportsState.layout.viewports;
|
||||
const activeViewportIndex = viewportsState.activeViewportIndex;
|
||||
const activeViewport = viewports[activeViewportIndex];
|
||||
if (activeViewport.vtk) {
|
||||
const error = new Error('Measurements are not supported by the MPR mode.');
|
||||
const { UINotificationService, LoggerService } = servicesManager.services;
|
||||
LoggerService.error({ error, message: error.message });
|
||||
UINotificationService.show({
|
||||
title: 'Measurements panel',
|
||||
message: error.message,
|
||||
type: 'warning',
|
||||
autoClose: true,
|
||||
});
|
||||
return {
|
||||
viewportSpecificData: [],
|
||||
layout: [], // TODO: if we need to change layout, we should return this here
|
||||
};
|
||||
}
|
||||
|
||||
const numViewports = viewportsState.layout.viewports.length;
|
||||
const numTimepoints = timepointManagerState.timepoints.length;
|
||||
const { measurements, timepoints } = timepointManagerState;
|
||||
|
||||
@@ -25,7 +25,7 @@ const mapDispatchToProps = (dispatch, ownProps) => {
|
||||
title: 'DICOM Segmentation Loader',
|
||||
message: error.message,
|
||||
type: 'error',
|
||||
autoClose: true,
|
||||
autoClose: false,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -473,7 +473,7 @@ const _checkForDerivedDisplaySets = async function(displaySet, study) {
|
||||
let derivedDisplaySetsNumber = 0;
|
||||
if (
|
||||
displaySet.Modality &&
|
||||
!['SEG', 'SR', 'RTSTRUCT', 'RTDOSE'].includes(displaySet.Modality)
|
||||
!['SEG', 'SR', 'RTSTRUCT'].includes(displaySet.Modality)
|
||||
) {
|
||||
const studyMetadata = studyMetadataManager.get(study.StudyInstanceUID);
|
||||
|
||||
@@ -612,7 +612,6 @@ const _isDisplaySetActive = function(
|
||||
if (
|
||||
displaySet.Modality !== 'SEG' &&
|
||||
displaySet.Modality !== 'RTSTRUCT' &&
|
||||
displaySet.Modality !== 'RTDOSE' &&
|
||||
displaySet.Modality !== 'SR'
|
||||
) {
|
||||
active = activeDisplaySetInstanceUID === displaySetInstanceUID;
|
||||
|
||||
@@ -150,7 +150,7 @@ class ViewerMain extends Component {
|
||||
title: 'DICOM Segmentation Loader',
|
||||
message: error.message,
|
||||
type: 'error',
|
||||
autoClose: true,
|
||||
autoClose: false,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -721,14 +721,6 @@
|
||||
"@babel/helper-regex" "^7.4.4"
|
||||
regexpu-core "^4.6.0"
|
||||
|
||||
"@babel/polyfill@^7.8.3":
|
||||
version "7.8.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.7.tgz#151ec24c7135481336168c3bd8b8bf0cf91c032f"
|
||||
integrity sha512-LeSfP9bNZH2UOZgcGcZ0PIHUt1ZuHub1L3CVmEyqLxCeDLm4C5Gi8jRH8ZX2PNpDhQCo0z6y/+DIs2JlliXW8w==
|
||||
dependencies:
|
||||
core-js "^2.6.5"
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/preset-env@^7.5.0", "@babel/preset-env@^7.5.5":
|
||||
version "7.6.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271"
|
||||
@@ -796,7 +788,15 @@
|
||||
"@babel/plugin-transform-react-jsx-self" "^7.0.0"
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.0.0"
|
||||
|
||||
"@babel/runtime@7.1.2", "@babel/runtime@7.5.5", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.16.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.6":
|
||||
"@babel/runtime-corejs2@^7.17.8":
|
||||
version "7.18.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.18.9.tgz#d88c327736ecc4b9db13ddef5a33a004b9aeac74"
|
||||
integrity sha512-l057ZarpDX2QnXM89ViR2BgRFgTy2l5UFGDt0SbInhim1N/ljBgPeTJV0kRG1/Bo7CkHfYfrNNwTeQ2CPph9xQ==
|
||||
dependencies:
|
||||
core-js "^2.6.12"
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@7.1.2", "@babel/runtime@7.5.5", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.16.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.6":
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
|
||||
integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
|
||||
@@ -5079,11 +5079,16 @@ core-js-compat@^3.1.1:
|
||||
browserslist "^4.7.2"
|
||||
semver "^6.3.0"
|
||||
|
||||
core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7, core-js@^2.6.5:
|
||||
core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7:
|
||||
version "2.6.10"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f"
|
||||
integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==
|
||||
|
||||
core-js@^2.6.12:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
|
||||
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
|
||||
|
||||
core-js@^3.2.1:
|
||||
version "3.3.4"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.4.tgz#6b0a23392958317bfb46e40b090529a923add669"
|
||||
@@ -5632,13 +5637,12 @@ dateformat@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
||||
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
|
||||
|
||||
dcmjs@0.19.9:
|
||||
version "0.19.9"
|
||||
resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.19.9.tgz#be500101b1f75a28ea9eb7ef845a8ed197355e76"
|
||||
integrity sha512-V+0tND+SPX5e7WFeLzeoooaTsZbiKmEP2i3AyERsojaXXfaDV5E+pta5IqId4Ok1yfRT5qfTFwLGstGT6nLplA==
|
||||
dcmjs@0.24.10:
|
||||
version "0.24.10"
|
||||
resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.24.10.tgz#048a12a1905175763274545c17bb38b506cdfd00"
|
||||
integrity sha512-kugEdBqwwTx7lqUxm4jdklkMJiQ8pZ0aqMw9WkszkDU5lDWHyq2kbRccACtcwqygC7j1d36w8uG/vNLMejeMBg==
|
||||
dependencies:
|
||||
"@babel/polyfill" "^7.8.3"
|
||||
"@babel/runtime" "^7.8.4"
|
||||
"@babel/runtime-corejs2" "^7.17.8"
|
||||
gl-matrix "^3.1.0"
|
||||
lodash.clonedeep "^4.5.0"
|
||||
loglevelnext "^3.0.1"
|
||||
|
||||
Reference in new issue
Block a user