Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4546ede9bb | ||
|
|
e0fb439e98 | ||
|
|
ebbc9e0d6d | ||
|
|
47a6130fd5 | ||
|
|
80dfdcc37c | ||
|
|
d74ad370e0 | ||
|
|
ddfde9279e | ||
|
|
aaab6d2622 |
No files matched your search
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [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)
|
## [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
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-segmentation",
|
"name": "@ohif/extension-dicom-segmentation",
|
||||||
"version": "0.7.13",
|
"version": "0.7.14",
|
||||||
"description": "OHIF extension for viewing segmentations in the 2D MPR view",
|
"description": "OHIF extension for viewing segmentations in the 2D MPR view",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ const { studyMetadataManager } = utils;
|
|||||||
* @param {Function} props.onConfigurationChange - Configuration change handler
|
* @param {Function} props.onConfigurationChange - Configuration change handler
|
||||||
* @param {Function} props.activeContexts - List of active application contexts
|
* @param {Function} props.activeContexts - List of active application contexts
|
||||||
* @param {Function} props.contexts - List of available application contexts
|
* @param {Function} props.contexts - List of available application contexts
|
||||||
|
* @param {Function} props.servicesManager - Services manager
|
||||||
* @returns component
|
* @returns component
|
||||||
*/
|
*/
|
||||||
const SegmentationPanel = ({
|
const SegmentationPanel = ({
|
||||||
@@ -50,6 +51,7 @@ const SegmentationPanel = ({
|
|||||||
onSelectedSegmentationChange,
|
onSelectedSegmentationChange,
|
||||||
activeContexts = [],
|
activeContexts = [],
|
||||||
contexts = {},
|
contexts = {},
|
||||||
|
servicesManager,
|
||||||
}) => {
|
}) => {
|
||||||
const isVTK = () => activeContexts.includes(contexts.VTK);
|
const isVTK = () => activeContexts.includes(contexts.VTK);
|
||||||
const isCornerstone = () => activeContexts.includes(contexts.CORNERSTONE);
|
const isCornerstone = () => activeContexts.includes(contexts.CORNERSTONE);
|
||||||
@@ -59,6 +61,9 @@ const SegmentationPanel = ({
|
|||||||
* store with context to make these kind of things less blurry.
|
* store with context to make these kind of things less blurry.
|
||||||
*/
|
*/
|
||||||
const { configuration } = cornerstoneTools.getModule('segmentation');
|
const { configuration } = cornerstoneTools.getModule('segmentation');
|
||||||
|
if (configuration.segsTolerance === undefined) {
|
||||||
|
configuration.segsTolerance = 1e-2;
|
||||||
|
}
|
||||||
const DEFAULT_BRUSH_RADIUS = configuration.radius || 10;
|
const DEFAULT_BRUSH_RADIUS = configuration.radius || 10;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -87,6 +92,25 @@ const SegmentationPanel = ({
|
|||||||
return studyMetadata.getFirstImageId(displaySetInstanceUID);
|
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 getActiveLabelMaps3D = () => {
|
||||||
const { labelmaps3D, activeLabelmapIndex } = getBrushStackState();
|
const { labelmaps3D, activeLabelmapIndex } = getBrushStackState();
|
||||||
return labelmaps3D[activeLabelmapIndex];
|
return labelmaps3D[activeLabelmapIndex];
|
||||||
@@ -598,7 +622,9 @@ const SegmentationPanel = ({
|
|||||||
configuration.outlineWidth = newConfiguration.outlineWidth;
|
configuration.outlineWidth = newConfiguration.outlineWidth;
|
||||||
configuration.fillAlphaInactive = newConfiguration.fillAlphaInactive;
|
configuration.fillAlphaInactive = newConfiguration.fillAlphaInactive;
|
||||||
configuration.outlineAlphaInactive = newConfiguration.outlineAlphaInactive;
|
configuration.outlineAlphaInactive = newConfiguration.outlineAlphaInactive;
|
||||||
|
configuration.segsTolerance = newConfiguration.segsTolerance;
|
||||||
onConfigurationChange(newConfiguration);
|
onConfigurationChange(newConfiguration);
|
||||||
|
updateSegDisplaySetsTolerance(configuration.segsTolerance);
|
||||||
refreshViewports();
|
refreshViewports();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -647,6 +673,7 @@ const SegmentationPanel = ({
|
|||||||
configuration={configuration}
|
configuration={configuration}
|
||||||
onBack={() => setState(state => ({ ...state, showSettings: false }))}
|
onBack={() => setState(state => ({ ...state, showSettings: false }))}
|
||||||
onChange={updateConfiguration}
|
onChange={updateConfiguration}
|
||||||
|
servicesManager={servicesManager}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+42
-6
@@ -4,7 +4,7 @@ import { Range } from '@ohif/ui';
|
|||||||
|
|
||||||
import './SegmentationSettings.css';
|
import './SegmentationSettings.css';
|
||||||
|
|
||||||
const SegmentationSettings = ({ configuration, onBack, onChange, disabledFields = [] }) => {
|
const SegmentationSettings = ({ configuration, onBack, onChange, servicesManager, disabledFields = [] }) => {
|
||||||
const [state, setState] = useState({
|
const [state, setState] = useState({
|
||||||
renderFill: configuration.renderFill,
|
renderFill: configuration.renderFill,
|
||||||
renderOutline: configuration.renderOutline,
|
renderOutline: configuration.renderOutline,
|
||||||
@@ -13,7 +13,8 @@ const SegmentationSettings = ({ configuration, onBack, onChange, disabledFields
|
|||||||
outlineAlpha: configuration.outlineAlpha,
|
outlineAlpha: configuration.outlineAlpha,
|
||||||
outlineWidth: configuration.outlineWidth,
|
outlineWidth: configuration.outlineWidth,
|
||||||
fillAlphaInactive: configuration.fillAlphaInactive,
|
fillAlphaInactive: configuration.fillAlphaInactive,
|
||||||
outlineAlphaInactive: configuration.outlineAlphaInactive
|
outlineAlphaInactive: configuration.outlineAlphaInactive,
|
||||||
|
segsTolerance: configuration.segsTolerance,
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -133,6 +134,40 @@ const SegmentationSettings = ({ configuration, onBack, onChange, disabledFields
|
|||||||
)}
|
)}
|
||||||
</div>
|
</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>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -169,11 +204,12 @@ SegmentationSettings.propTypes = {
|
|||||||
renderFill: PropTypes.bool.isRequired,
|
renderFill: PropTypes.bool.isRequired,
|
||||||
renderOutline: PropTypes.bool.isRequired,
|
renderOutline: PropTypes.bool.isRequired,
|
||||||
shouldRenderInactiveLabelmaps: PropTypes.bool.isRequired,
|
shouldRenderInactiveLabelmaps: PropTypes.bool.isRequired,
|
||||||
fillAlpha: 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, /* TODO: why fillAlpha is string? */
|
outlineAlpha: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||||
outlineWidth: PropTypes.number.isRequired,
|
outlineWidth: PropTypes.number.isRequired,
|
||||||
fillAlphaInactive: PropTypes.number.isRequired,
|
fillAlphaInactive: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||||
outlineAlphaInactive: PropTypes.number.isRequired,
|
outlineAlphaInactive: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||||
|
segsTolerance: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||||
}).isRequired,
|
}).isRequired,
|
||||||
onBack: PropTypes.func.isRequired,
|
onBack: PropTypes.func.isRequired,
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func.isRequired,
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
SeriesNumber,
|
SeriesNumber,
|
||||||
SeriesDescription,
|
SeriesDescription,
|
||||||
metadata,
|
metadata,
|
||||||
|
tolerance: 1e-2,
|
||||||
};
|
};
|
||||||
|
|
||||||
segDisplaySet.getSourceDisplaySet = function(
|
segDisplaySet.getSourceDisplaySet = function(
|
||||||
@@ -93,7 +94,7 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
referencedDisplaySet.SeriesInstanceUID
|
referencedDisplaySet.SeriesInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
const results = await _parseSeg(segArrayBuffer, imageIds);
|
const results = await _parseSeg(segArrayBuffer, imageIds, segDisplaySet.tolerance);
|
||||||
if (results === undefined) {
|
if (results === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -149,10 +150,13 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function _parseSeg(arrayBuffer, imageIds) {
|
function _parseSeg(
|
||||||
const skipOverlapping = false;
|
arrayBuffer,
|
||||||
const tolerance = 1e-2;
|
imageIds,
|
||||||
const cornerstoneToolsVersion = 4;
|
tolerance = 1e-2,
|
||||||
|
skipOverlapping = false,
|
||||||
|
cornerstoneToolsVersion = 4
|
||||||
|
) {
|
||||||
return dcmjs.adapters.Cornerstone.Segmentation.generateToolState(
|
return dcmjs.adapters.Cornerstone.Segmentation.generateToolState(
|
||||||
imageIds,
|
imageIds,
|
||||||
arrayBuffer,
|
arrayBuffer,
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ export default {
|
|||||||
onConfigurationChange={onConfigurationChangeHandler}
|
onConfigurationChange={onConfigurationChangeHandler}
|
||||||
onSelectedSegmentationChange={onSelectedSegmentationChangeHandler}
|
onSelectedSegmentationChange={onSelectedSegmentationChangeHandler}
|
||||||
onDisplaySetLoadFailure={onDisplaySetLoadFailureHandler}
|
onDisplaySetLoadFailure={onDisplaySetLoadFailureHandler}
|
||||||
|
servicesManager={servicesManager}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [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)
|
## [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
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-vtk",
|
"name": "@ohif/extension-vtk",
|
||||||
"version": "1.12.30",
|
"version": "1.12.32",
|
||||||
"description": "OHIF extension for VTK.js",
|
"description": "OHIF extension for VTK.js",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
"react-vtkjs-viewport": "^0.14.4"
|
"react-vtkjs-viewport": "^0.14.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ohif/core": "^2.16.25",
|
"@ohif/core": "^2.16.27",
|
||||||
"@ohif/ui": "^1.10.10",
|
"@ohif/ui": "^1.10.10",
|
||||||
"cornerstone-tools": "^6.0.6",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.1.0",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [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)
|
## [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
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/core",
|
"name": "@ohif/core",
|
||||||
"version": "2.16.25",
|
"version": "2.16.27",
|
||||||
"description": "Generic business logic for web-based medical imaging applications",
|
"description": "Generic business logic for web-based medical imaging applications",
|
||||||
"author": "OHIF Core Team",
|
"author": "OHIF Core Team",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ const parseSCOORD3D = ({ servicesManager, displaySets }) => {
|
|||||||
ds =>
|
ds =>
|
||||||
ds.Modality !== 'SR' &&
|
ds.Modality !== 'SR' &&
|
||||||
ds.Modality !== 'SEG' &&
|
ds.Modality !== 'SEG' &&
|
||||||
ds.Modality !== 'RTSTRUCT' &&
|
ds.Modality !== 'RTSTRUCT'
|
||||||
ds.Modality !== 'RTDOSE'
|
|
||||||
);
|
);
|
||||||
|
|
||||||
imageDisplaySets.forEach(imageDisplaySet => {
|
imageDisplaySets.forEach(imageDisplaySet => {
|
||||||
|
|||||||
@@ -67,12 +67,13 @@ export class HotkeysManager {
|
|||||||
UINotificationService,
|
UINotificationService,
|
||||||
LoggerService,
|
LoggerService,
|
||||||
} = this._servicesManager.services;
|
} = this._servicesManager.services;
|
||||||
const message = 'Erro while setting hotkeys';
|
const message = 'Error while setting hotkeys';
|
||||||
LoggerService.error({ error, message });
|
LoggerService.error({ error, message });
|
||||||
UINotificationService.show({
|
UINotificationService.show({
|
||||||
title: 'Hotkeys Manager',
|
title: 'Hotkeys Manager',
|
||||||
message,
|
message,
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
autoClose: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -275,6 +275,8 @@ class StudyMetadata extends Metadata {
|
|||||||
|
|
||||||
const otherDisplaySets = allDisplaySets.filter(
|
const otherDisplaySets = allDisplaySets.filter(
|
||||||
ds =>
|
ds =>
|
||||||
|
ds &&
|
||||||
|
derivatedDisplaySet &&
|
||||||
ds.displaySetInstanceUID !== derivatedDisplaySet.displaySetInstanceUID
|
ds.displaySetInstanceUID !== derivatedDisplaySet.displaySetInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -19,17 +19,4 @@ describe('retrieveStudyMetadata.js', () => {
|
|||||||
|
|
||||||
expect(callWithNoStudyInstanceUID).toThrow(Error);
|
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,
|
SOPInstanceUID,
|
||||||
} = naturalizedInstance;
|
} = 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];
|
let series = study.seriesMap[SeriesInstanceUID];
|
||||||
|
|
||||||
if (!series) {
|
if (!series) {
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ async function loadAndCacheDerivedDisplaySets(
|
|||||||
title: 'DICOM Segmentation Loader',
|
title: 'DICOM Segmentation Loader',
|
||||||
message: error.message,
|
message: error.message,
|
||||||
type: 'error',
|
type: 'error',
|
||||||
autoClose: true,
|
autoClose: false,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,41 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [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)
|
## [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
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/viewer",
|
"name": "@ohif/viewer",
|
||||||
"version": "4.12.34",
|
"version": "4.12.38",
|
||||||
"description": "OHIF Viewer",
|
"description": "OHIF Viewer",
|
||||||
"author": "OHIF Contributors",
|
"author": "OHIF Contributors",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -47,16 +47,16 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"@ohif/core": "^2.16.25",
|
"@ohif/core": "^2.16.27",
|
||||||
"@ohif/extension-cornerstone": "^2.12.14",
|
"@ohif/extension-cornerstone": "^2.12.14",
|
||||||
"@ohif/extension-debugging": "^0.3.3",
|
"@ohif/extension-debugging": "^0.3.3",
|
||||||
"@ohif/extension-dicom-html": "^1.3.23",
|
"@ohif/extension-dicom-html": "^1.3.23",
|
||||||
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
||||||
"@ohif/extension-dicom-pdf": "^1.1.2",
|
"@ohif/extension-dicom-pdf": "^1.1.2",
|
||||||
"@ohif/extension-dicom-rt": "^0.7.13",
|
"@ohif/extension-dicom-rt": "^0.7.13",
|
||||||
"@ohif/extension-dicom-segmentation": "^0.7.13",
|
"@ohif/extension-dicom-segmentation": "^0.7.14",
|
||||||
"@ohif/extension-lesion-tracker": "^0.2.2",
|
"@ohif/extension-lesion-tracker": "^0.2.2",
|
||||||
"@ohif/extension-vtk": "^1.12.30",
|
"@ohif/extension-vtk": "^1.12.32",
|
||||||
"@ohif/i18n": "^0.53.0",
|
"@ohif/i18n": "^0.53.0",
|
||||||
"@ohif/ui": "^1.10.10",
|
"@ohif/ui": "^1.10.10",
|
||||||
"@tanem/react-nprogress": "^1.1.25",
|
"@tanem/react-nprogress": "^1.1.25",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { redux } from '@ohif/core';
|
import { redux, utils } from '@ohif/core';
|
||||||
import store from './../../store';
|
import store from './../../store';
|
||||||
|
|
||||||
const commandsModule = ({ commandsManager }) => {
|
const commandsModule = ({ commandsManager }) => {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const mapDispatchToProps = (dispatch, ownProps) => {
|
|||||||
title: 'DICOM Segmentation Loader',
|
title: 'DICOM Segmentation Loader',
|
||||||
message: error.message,
|
message: error.message,
|
||||||
type: 'error',
|
type: 'error',
|
||||||
autoClose: true,
|
autoClose: false,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -473,7 +473,7 @@ const _checkForDerivedDisplaySets = async function(displaySet, study) {
|
|||||||
let derivedDisplaySetsNumber = 0;
|
let derivedDisplaySetsNumber = 0;
|
||||||
if (
|
if (
|
||||||
displaySet.Modality &&
|
displaySet.Modality &&
|
||||||
!['SEG', 'SR', 'RTSTRUCT', 'RTDOSE'].includes(displaySet.Modality)
|
!['SEG', 'SR', 'RTSTRUCT'].includes(displaySet.Modality)
|
||||||
) {
|
) {
|
||||||
const studyMetadata = studyMetadataManager.get(study.StudyInstanceUID);
|
const studyMetadata = studyMetadataManager.get(study.StudyInstanceUID);
|
||||||
|
|
||||||
@@ -612,7 +612,6 @@ const _isDisplaySetActive = function(
|
|||||||
if (
|
if (
|
||||||
displaySet.Modality !== 'SEG' &&
|
displaySet.Modality !== 'SEG' &&
|
||||||
displaySet.Modality !== 'RTSTRUCT' &&
|
displaySet.Modality !== 'RTSTRUCT' &&
|
||||||
displaySet.Modality !== 'RTDOSE' &&
|
|
||||||
displaySet.Modality !== 'SR'
|
displaySet.Modality !== 'SR'
|
||||||
) {
|
) {
|
||||||
active = activeDisplaySetInstanceUID === displaySetInstanceUID;
|
active = activeDisplaySetInstanceUID === displaySetInstanceUID;
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ class ViewerMain extends Component {
|
|||||||
title: 'DICOM Segmentation Loader',
|
title: 'DICOM Segmentation Loader',
|
||||||
message: error.message,
|
message: error.message,
|
||||||
type: 'error',
|
type: 'error',
|
||||||
autoClose: true,
|
autoClose: false,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user