Compare commits
19
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7ba2fac69 | ||
|
|
761d54fbbf | ||
|
|
79548d2380 | ||
|
|
6a401c9e52 | ||
|
|
23376d279d | ||
|
|
4110b0422c | ||
|
|
ed501bb462 | ||
|
|
abf050e162 | ||
|
|
35ed82e161 | ||
|
|
d0ccc22fd9 | ||
|
|
31841c495f | ||
|
|
65505d9bce | ||
|
|
460fdeb534 | ||
|
|
f4b7091ae4 | ||
|
|
1e72684455 | ||
|
|
5b0b6301b9 | ||
|
|
03a34a75a1 | ||
|
|
729272a985 | ||
|
|
9194ec2404 |
No files matched your search
@@ -119,6 +119,7 @@ jobs:
|
|||||||
command: yarn install --frozen-lockfile
|
command: yarn install --frozen-lockfile
|
||||||
|
|
||||||
- setup_remote_docker:
|
- setup_remote_docker:
|
||||||
|
version: 19.03.13
|
||||||
docker_layer_caching: false
|
docker_layer_caching: false
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
@@ -295,6 +296,7 @@ jobs:
|
|||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ~/repo
|
at: ~/repo
|
||||||
- setup_remote_docker:
|
- setup_remote_docker:
|
||||||
|
version: 19.03.13
|
||||||
docker_layer_caching: false
|
docker_layer_caching: false
|
||||||
- run:
|
- run:
|
||||||
name: Build and push Docker image
|
name: Build and push Docker image
|
||||||
|
|||||||
@@ -273,6 +273,17 @@ development of OHIF Viewer:
|
|||||||
Leidos Biomedical Research under Task Order HHSN26100071 from NCI.
|
Leidos Biomedical Research under Task Order HHSN26100071 from NCI.
|
||||||
[IDC Viewer](https://learn.canceridc.dev/portal/visualization) is a customized
|
[IDC Viewer](https://learn.canceridc.dev/portal/visualization) is a customized
|
||||||
version of the OHIF Viewer.
|
version of the OHIF Viewer.
|
||||||
|
|
||||||
|
### Research notice
|
||||||
|
Please note that this repository is participating in a study into sustainability
|
||||||
|
of open source projects. Data will be gathered about this repository for
|
||||||
|
approximately the next 12 months, starting from June 2021.
|
||||||
|
|
||||||
|
Data collected will include number of contributors, number of PRs, time taken to
|
||||||
|
close/merge these PRs, and issues closed.
|
||||||
|
|
||||||
|
For more information, please visit
|
||||||
|
[our informational page](https://sustainable-open-science-and-software.github.io/) or download our [participant information sheet](https://sustainable-open-science-and-software.github.io/assets/PIS_sustainable_software.pdf).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -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.12.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.2...@ohif/extension-cornerstone@2.12.3) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.12.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.1...@ohif/extension-cornerstone@2.12.2) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.12.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.0...@ohif/extension-cornerstone@2.12.1) (2021-09-28)
|
## [2.12.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.0...@ohif/extension-cornerstone@2.12.1) (2021-09-28)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-cornerstone
|
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-cornerstone",
|
"name": "@ohif/extension-cornerstone",
|
||||||
"version": "2.12.1",
|
"version": "2.12.3",
|
||||||
"description": "OHIF extension for Cornerstone",
|
"description": "OHIF extension for Cornerstone",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -32,12 +32,12 @@
|
|||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"@ohif/ui": "^0.50.0",
|
"@ohif/ui": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-math": "^0.1.9",
|
"cornerstone-math": "^0.1.9",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"hammerjs": "^2.0.8",
|
"hammerjs": "^2.0.8",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
|
|||||||
@@ -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.3.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.3.0...@ohif/extension-debugging@0.3.1) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-debugging
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [0.3.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.2.2...@ohif/extension-debugging@0.3.0) (2021-09-23)
|
# [0.3.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.2.2...@ohif/extension-debugging@0.3.0) (2021-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-debugging",
|
"name": "@ohif/extension-debugging",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"description": "OHIF extension for debugging.",
|
"description": "OHIF extension for debugging.",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -28,12 +28,12 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^2.6.0",
|
"@ohif/core": "^2.6.0",
|
||||||
"dicom-parser": "^1.8.9"
|
"dicom-parser": "^1.8.11"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"detect-browser": "5.1.1",
|
"detect-browser": "5.1.1",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"file-saver": "^2.0.2",
|
"file-saver": "^2.0.2",
|
||||||
"jszip": "^3.2.2"
|
"jszip": "^3.2.2"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,30 @@
|
|||||||
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.3.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.13...@ohif/extension-dicom-html@1.3.14) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.3.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.12...@ohif/extension-dicom-html@1.3.13) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.3.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.11...@ohif/extension-dicom-html@1.3.12) (2021-10-25)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.3.11](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.10...@ohif/extension-dicom-html@1.3.11) (2021-09-28)
|
## [1.3.11](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.10...@ohif/extension-dicom-html@1.3.11) (2021-09-28)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-html
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-html",
|
"name": "@ohif/extension-dicom-html",
|
||||||
"version": "1.3.11",
|
"version": "1.3.14",
|
||||||
"description": "OHIF extension for rendering structured reports to HTML",
|
"description": "OHIF extension for rendering structured reports to HTML",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-dom": "^16.8.6"
|
"react-dom": "^16.8.6"
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ const getContentSequence = (data, level = 1) => {
|
|||||||
|
|
||||||
const root = [];
|
const root = [];
|
||||||
if (header) {
|
if (header) {
|
||||||
const HeaderDynamicLevel = `h${level}`;
|
const HeaderDynamicLevel = `h${Math.min(level, 6)}`;
|
||||||
|
|
||||||
root.push(<HeaderDynamicLevel key={header}>{header}</HeaderDynamicLevel>);
|
root.push(<HeaderDynamicLevel key={header}>{header}</HeaderDynamicLevel>);
|
||||||
}
|
}
|
||||||
@@ -170,7 +170,7 @@ const getContentSequence = (data, level = 1) => {
|
|||||||
|
|
||||||
if (key === '_meta') {
|
if (key === '_meta') {
|
||||||
const HeaderDynamicLevel = `h3`;
|
const HeaderDynamicLevel = `h3`;
|
||||||
root.push(<hr />);
|
root.push(<hr key={root.length} />);
|
||||||
root.push(
|
root.push(
|
||||||
<HeaderDynamicLevel key="Metadata">
|
<HeaderDynamicLevel key="Metadata">
|
||||||
DICOM File Meta Information
|
DICOM File Meta Information
|
||||||
@@ -217,7 +217,7 @@ class DicomHtmlViewport extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const dataSet = this.setContentFromByteArray(this.props.byteArray);
|
this.setContentFromByteArray(this.props.byteArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
setContentFromByteArray(byteArray) {
|
setContentFromByteArray(byteArray) {
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
## [1.1.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.1.0...@ohif/extension-dicom-pdf@1.1.1) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-pdf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [1.1.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.0.6...@ohif/extension-dicom-pdf@1.1.0) (2021-09-23)
|
# [1.1.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.0.6...@ohif/extension-dicom-pdf@1.1.0) (2021-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-pdf",
|
"name": "@ohif/extension-dicom-pdf",
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"description": "OHIF extension for Dicom PDF",
|
"description": "OHIF extension for Dicom PDF",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-dom": "^16.8.6"
|
"react-dom": "^16.8.6"
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
## [0.7.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.3...@ohif/extension-dicom-rt@0.7.4) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.7.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.2...@ohif/extension-dicom-rt@0.7.3) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.7.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.1...@ohif/extension-dicom-rt@0.7.2) (2021-10-06)
|
## [0.7.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.1...@ohif/extension-dicom-rt@0.7.2) (2021-10-06)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-rt",
|
"name": "@ohif/extension-dicom-rt",
|
||||||
"version": "0.7.2",
|
"version": "0.7.4",
|
||||||
"description": "OHIF extension for rendering DICOM RTSTRUCTs on top of cornerstone images.",
|
"description": "OHIF extension for rendering DICOM RTSTRUCTs on top of cornerstone images.",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,9 +29,9 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"gl-matrix": "^3.3.0",
|
"gl-matrix": "^3.3.0",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
|
|||||||
@@ -91,17 +91,12 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (activeViewport) {
|
if (activeViewport) {
|
||||||
const study = studies.find(
|
|
||||||
s => s.StudyInstanceUID === activeViewport.StudyInstanceUID
|
|
||||||
);
|
|
||||||
const ds = study.displaySets.find(
|
|
||||||
ds =>
|
|
||||||
ds.displaySetInstanceUID ===
|
|
||||||
activeViewport.displaySetInstanceUID
|
|
||||||
);
|
|
||||||
const studyMetadata = studyMetadataManager.get(
|
const studyMetadata = studyMetadataManager.get(
|
||||||
activeViewport.StudyInstanceUID
|
activeViewport.StudyInstanceUID
|
||||||
);
|
);
|
||||||
|
if (!studyMetadata) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const referencedDisplaySets = studyMetadata.getDerivedDatasets({
|
const referencedDisplaySets = studyMetadata.getDerivedDatasets({
|
||||||
referencedSeriesInstanceUID: activeViewport.SeriesInstanceUID,
|
referencedSeriesInstanceUID: activeViewport.SeriesInstanceUID,
|
||||||
Modality: 'RTSTRUCT',
|
Modality: 'RTSTRUCT',
|
||||||
|
|||||||
@@ -3,6 +3,30 @@
|
|||||||
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.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.4...@ohif/extension-dicom-segmentation@0.7.5) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.7.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.3...@ohif/extension-dicom-segmentation@0.7.4) (2021-10-27)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.7.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.2...@ohif/extension-dicom-segmentation@0.7.3) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.7.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.1...@ohif/extension-dicom-segmentation@0.7.2) (2021-10-06)
|
## [0.7.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.1...@ohif/extension-dicom-segmentation@0.7.2) (2021-10-06)
|
||||||
|
|
||||||
**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.2",
|
"version": "0.7.5",
|
||||||
"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",
|
||||||
@@ -29,9 +29,9 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-dom": "^16.8.6"
|
"react-dom": "^16.8.6"
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ const SegmentItem = ({
|
|||||||
onClick,
|
onClick,
|
||||||
itemClass,
|
itemClass,
|
||||||
color,
|
color,
|
||||||
|
labelmap3D,
|
||||||
visible,
|
visible,
|
||||||
onVisibilityChange,
|
onVisibilityChange,
|
||||||
}) => {
|
}) => {
|
||||||
@@ -39,7 +40,7 @@ const SegmentItem = ({
|
|||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const newVisibility = !isVisible;
|
const newVisibility = !isVisible;
|
||||||
setIsVisible(newVisibility);
|
setIsVisible(newVisibility);
|
||||||
onVisibilityChange(newVisibility, index);
|
onVisibilityChange(newVisibility, index, labelmap3D);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
+36
-15
@@ -431,23 +431,43 @@ const SegmentationPanel = ({
|
|||||||
return enabledElements[activeIndex].element;
|
return enabledElements[activeIndex].element;
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSegmentVisibilityChangeHandler = (isVisible, segmentNumber) => {
|
const onSegmentVisibilityChangeHandler = (
|
||||||
/** Get all labelmaps with this segmentNumber (overlapping segments) */
|
isVisible,
|
||||||
const { labelmaps3D } = getBrushStackState();
|
segmentNumber,
|
||||||
const possibleLabelMaps3D = labelmaps3D.filter(({ labelmaps2D }) => {
|
labelmap3D
|
||||||
return labelmaps2D.some(({ segmentsOnLabelmap }) =>
|
) => {
|
||||||
segmentsOnLabelmap.includes(segmentNumber)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
let segmentsHidden = [];
|
let segmentsHidden = [];
|
||||||
possibleLabelMaps3D.forEach(labelmap3D => {
|
if (labelmap3D.metadata.hasOverlapping) {
|
||||||
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
|
/** Get all labelmaps with this segmentNumber and that
|
||||||
|
* are from the same series (overlapping segments) */
|
||||||
|
const { labelmaps3D } = getBrushStackState();
|
||||||
|
|
||||||
segmentsHidden = [
|
const sameSeriesLabelMaps3D = labelmaps3D.filter(({ metadata }) => {
|
||||||
...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]),
|
return (
|
||||||
];
|
labelmap3D.metadata.segmentationSeriesInstanceUID ===
|
||||||
});
|
metadata.segmentationSeriesInstanceUID
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
const possibleLabelMaps3D = sameSeriesLabelMaps3D.filter(
|
||||||
|
({ labelmaps2D }) => {
|
||||||
|
return labelmaps2D.some(({ segmentsOnLabelmap }) =>
|
||||||
|
segmentsOnLabelmap.includes(segmentNumber)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
possibleLabelMaps3D.forEach(labelmap3D => {
|
||||||
|
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
|
||||||
|
|
||||||
|
segmentsHidden = [
|
||||||
|
...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]),
|
||||||
|
];
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
|
||||||
|
segmentsHidden = [...labelmap3D.segmentsHidden];
|
||||||
|
}
|
||||||
|
|
||||||
setState(state => ({ ...state, segmentsHidden }));
|
setState(state => ({ ...state, segmentsHidden }));
|
||||||
|
|
||||||
@@ -514,6 +534,7 @@ const SegmentationPanel = ({
|
|||||||
label={segmentLabel}
|
label={segmentLabel}
|
||||||
index={segmentNumber}
|
index={segmentNumber}
|
||||||
color={color}
|
color={color}
|
||||||
|
labelmap3D={labelmap3D}
|
||||||
visible={!labelmap3D.segmentsHidden[segmentIndex]}
|
visible={!labelmap3D.segmentsHidden[segmentIndex]}
|
||||||
onVisibilityChange={onSegmentVisibilityChangeHandler}
|
onVisibilityChange={onSegmentVisibilityChangeHandler}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -64,8 +64,17 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
metadata,
|
metadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
segDisplaySet.getSourceDisplaySet = function(studies, activateLabelMap = true, onDisplaySetLoadFailureHandler) {
|
segDisplaySet.getSourceDisplaySet = function(
|
||||||
return getSourceDisplaySet(studies, segDisplaySet, activateLabelMap, onDisplaySetLoadFailureHandler);
|
studies,
|
||||||
|
activateLabelMap = true,
|
||||||
|
onDisplaySetLoadFailureHandler
|
||||||
|
) {
|
||||||
|
return getSourceDisplaySet(
|
||||||
|
studies,
|
||||||
|
segDisplaySet,
|
||||||
|
activateLabelMap,
|
||||||
|
onDisplaySetLoadFailureHandler
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
segDisplaySet.load = async function(referencedDisplaySet, studies) {
|
segDisplaySet.load = async function(referencedDisplaySet, studies) {
|
||||||
@@ -98,6 +107,9 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
if (labelmapBufferArray.length > 1) {
|
if (labelmapBufferArray.length > 1) {
|
||||||
let labelmapIndexes = [];
|
let labelmapIndexes = [];
|
||||||
for (let i = 0; i < labelmapBufferArray.length; ++i) {
|
for (let i = 0; i < labelmapBufferArray.length; ++i) {
|
||||||
|
segMetadata.segmentationSeriesInstanceUID =
|
||||||
|
segDisplaySet.SeriesInstanceUID;
|
||||||
|
segMetadata.hasOverlapping = true;
|
||||||
labelmapIndexes.push(
|
labelmapIndexes.push(
|
||||||
await loadSegmentation(
|
await loadSegmentation(
|
||||||
imageIds,
|
imageIds,
|
||||||
@@ -118,6 +130,9 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
labelmapIndex = labelmapIndexes[0];
|
labelmapIndex = labelmapIndexes[0];
|
||||||
console.warn('Overlapping segments!');
|
console.warn('Overlapping segments!');
|
||||||
} else {
|
} else {
|
||||||
|
segMetadata.segmentationSeriesInstanceUID =
|
||||||
|
segDisplaySet.SeriesInstanceUID;
|
||||||
|
segMetadata.hasOverlapping = false;
|
||||||
labelmapIndex = await loadSegmentation(
|
labelmapIndex = await loadSegmentation(
|
||||||
imageIds,
|
imageIds,
|
||||||
segDisplaySet,
|
segDisplaySet,
|
||||||
|
|||||||
@@ -143,6 +143,9 @@ export default {
|
|||||||
const studyMetadata = studyMetadataManager.get(
|
const studyMetadata = studyMetadataManager.get(
|
||||||
activeViewport.StudyInstanceUID
|
activeViewport.StudyInstanceUID
|
||||||
);
|
);
|
||||||
|
if (!studyMetadata) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const referencedDS = studyMetadata.getDerivedDatasets({
|
const referencedDS = studyMetadata.getDerivedDatasets({
|
||||||
referencedSeriesInstanceUID:
|
referencedSeriesInstanceUID:
|
||||||
activeViewport.SeriesInstanceUID,
|
activeViewport.SeriesInstanceUID,
|
||||||
|
|||||||
@@ -3,6 +3,38 @@
|
|||||||
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.2.16](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.15...@ohif/extension-dicom-tag-browser@0.2.16) (2021-12-10)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.15](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.14...@ohif/extension-dicom-tag-browser@0.2.15) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.13...@ohif/extension-dicom-tag-browser@0.2.14) (2021-11-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.12...@ohif/extension-dicom-tag-browser@0.2.13) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.2.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.11...@ohif/extension-dicom-tag-browser@0.2.12) (2021-09-28)
|
## [0.2.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.11...@ohif/extension-dicom-tag-browser@0.2.12) (2021-09-28)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-tag-browser",
|
"name": "@ohif/extension-dicom-tag-browser",
|
||||||
"version": "0.2.12",
|
"version": "0.2.16",
|
||||||
"description": "OHIF extension for checking DICOM headers.",
|
"description": "OHIF extension for checking DICOM headers.",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -28,12 +28,12 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^2.6.0",
|
"@ohif/core": "^2.6.0",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"react": "^16.8.6"
|
"react": "^16.8.6"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"moment": "2.24.0",
|
"moment": "2.24.0",
|
||||||
"react-select": "^3.0.8"
|
"react-select": "^3.0.8"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
activeDisplaySetInstanceUID,
|
activeDisplaySetInstanceUID,
|
||||||
setActiveDisplaySetInstanceUID,
|
setActiveDisplaySetInstanceUID,
|
||||||
] = useState(displaySetInstanceUID);
|
] = useState(displaySetInstanceUID);
|
||||||
const [activeInstance, setActiveInstance] = useState(0);
|
const [activeInstance, setActiveInstance] = useState(1);
|
||||||
const [tags, setTags] = useState([]);
|
const [tags, setTags] = useState([]);
|
||||||
const [meta, setMeta] = useState('');
|
const [meta, setMeta] = useState('');
|
||||||
const [instanceList, setInstanceList] = useState([]);
|
const [instanceList, setInstanceList] = useState([]);
|
||||||
@@ -51,20 +51,21 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
description: displayDate,
|
description: displayDate,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
setActiveDisplaySetInstanceUID(displaySetInstanceUID);
|
setActiveDisplaySetInstanceUID(displaySetInstanceUID);
|
||||||
setActiveInstance(0);
|
setActiveInstance(1);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
let metadata;
|
let metadata;
|
||||||
const isImageStack = activeDisplaySet instanceof ImageSet;
|
const isImageStack =
|
||||||
|
activeDisplaySet instanceof ImageSet &&
|
||||||
|
activeDisplaySet.isModalitySupported === true;
|
||||||
|
|
||||||
let selectedInstanceValue;
|
|
||||||
let instanceList;
|
let instanceList;
|
||||||
|
|
||||||
if (isImageStack) {
|
if (isImageStack) {
|
||||||
const { images } = activeDisplaySet;
|
const { images } = activeDisplaySet;
|
||||||
const image = images[activeInstance];
|
const image = images[activeInstance - 1];
|
||||||
|
|
||||||
instanceList = images.map((image, index) => {
|
instanceList = images.map((image, index) => {
|
||||||
const metadata = image.getData().metadata;
|
const metadata = image.getData().metadata;
|
||||||
@@ -91,7 +92,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
setInstanceList(instanceList);
|
setInstanceList(instanceList);
|
||||||
setDisplaySetList(newDisplaySetList);
|
setDisplaySetList(newDisplaySetList);
|
||||||
setIsImageStack(isImageStack);
|
setIsImageStack(isImageStack);
|
||||||
}, [activeDisplaySetInstanceUID, activeInstance]);
|
}, [activeDisplaySetInstanceUID, activeInstance, displaySets]);
|
||||||
|
|
||||||
const selectedDisplaySetValue = displaySetList.find(
|
const selectedDisplaySetValue = displaySetList.find(
|
||||||
ds => ds.value === activeDisplaySetInstanceUID
|
ds => ds.value === activeDisplaySetInstanceUID
|
||||||
@@ -106,7 +107,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
showValue
|
showValue
|
||||||
step={1}
|
step={1}
|
||||||
min={1}
|
min={1}
|
||||||
max={instanceList.length - 1}
|
max={instanceList.length}
|
||||||
value={activeInstance}
|
value={activeInstance}
|
||||||
valueRenderer={value => <p>Instance Number: {value}</p>}
|
valueRenderer={value => <p>Instance Number: {value}</p>}
|
||||||
onChange={({ target }) => {
|
onChange={({ target }) => {
|
||||||
|
|||||||
@@ -3,6 +3,46 @@
|
|||||||
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.9](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.8...@ohif/extension-vtk@1.12.9) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.8](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.7...@ohif/extension-vtk@1.12.8) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.6...@ohif/extension-vtk@1.12.7) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.5...@ohif/extension-vtk@1.12.6) (2021-11-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.4...@ohif/extension-vtk@1.12.5) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.12.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.3...@ohif/extension-vtk@1.12.4) (2021-10-15)
|
## [1.12.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.3...@ohif/extension-vtk@1.12.4) (2021-10-15)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-vtk
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|||||||
+11
-11
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-vtk",
|
"name": "@ohif/extension-vtk",
|
||||||
"version": "1.12.4",
|
"version": "1.12.9",
|
||||||
"description": "OHIF extension for VTK.js",
|
"description": "OHIF extension for VTK.js",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -32,11 +32,11 @@
|
|||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"@ohif/i18n": "^0.50.0",
|
"@ohif/i18n": "^0.50.0",
|
||||||
"@ohif/ui": "^0.50.0",
|
"@ohif/ui": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"i18next": "^17.0.3",
|
"i18next": "^17.0.3",
|
||||||
"i18next-browser-languagedetector": "^3.0.1",
|
"i18next-browser-languagedetector": "^3.0.1",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
@@ -53,11 +53,11 @@
|
|||||||
"react-vtkjs-viewport": "^0.14.4"
|
"react-vtkjs-viewport": "^0.14.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ohif/core": "^2.16.0",
|
"@ohif/core": "^2.16.5",
|
||||||
"@ohif/ui": "^1.10.3",
|
"@ohif/ui": "^1.10.5",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"gh-pages": "^2.0.1",
|
"gh-pages": "^2.0.1",
|
||||||
"i18next": "^17.0.3",
|
"i18next": "^17.0.3",
|
||||||
"i18next-browser-languagedetector": "^3.0.1",
|
"i18next-browser-languagedetector": "^3.0.1",
|
||||||
|
|||||||
@@ -3,6 +3,52 @@
|
|||||||
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.5](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.4...@ohif/core@2.16.5) (2021-12-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* DICOMFileLoadingListener typo in method name ([#2647](https://github.com/OHIF/Viewers/issues/2647)) ([761d54f](https://github.com/OHIF/Viewers/commit/761d54fbbfb376c20ee15794ef7bb7111f64a06f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.4](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.3...@ohif/core@2.16.4) (2021-12-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* SeriesTime and SeriesDate are only set for the first series and undefined for the remaining ones ([#2476](https://github.com/OHIF/Viewers/issues/2476)) ([6a401c9](https://github.com/OHIF/Viewers/commit/6a401c9e5204cb4f7af6aa33190ad5a8d0879de6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.3](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.2...@ohif/core@2.16.3) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.1...@ohif/core@2.16.2) (2021-11-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.0...@ohif/core@2.16.1) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [2.16.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.15.1...@ohif/core@2.16.0) (2021-10-04)
|
# [2.16.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.15.1...@ohif/core@2.16.0) (2021-10-04)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/core",
|
"name": "@ohif/core",
|
||||||
"version": "2.16.0",
|
"version": "2.16.5",
|
||||||
"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",
|
||||||
@@ -31,16 +31,16 @@
|
|||||||
"test:unit:ci": "jest --ci --runInBand --collectCoverage"
|
"test:unit:ci": "jest --ci --runInBand --collectCoverage"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dicom-parser": "^1.8.9"
|
"dicom-parser": "^1.8.11"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"ajv": "^6.10.0",
|
"ajv": "^6.10.0",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"immer": "6.0.2",
|
"immer": "6.0.2",
|
||||||
"isomorphic-base64": "^1.0.2",
|
"isomorphic-base64": "^1.0.2",
|
||||||
"lodash.clonedeep": "^4.5.0",
|
"lodash.clonedeep": "^4.5.0",
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ class DICOMFileLoadingListener extends BaseLoadingListener {
|
|||||||
constructor(stack, options) {
|
constructor(stack, options) {
|
||||||
super(stack, options);
|
super(stack, options);
|
||||||
|
|
||||||
this.imageLoadProgressEventHandler = this._imageLoadProgressEventHandle.bind(
|
this.imageLoadProgressEventHandler = this._imageLoadProgressEventHandler.bind(
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import cornerstone from 'cornerstone-core';
|
import cornerstone from 'cornerstone-core';
|
||||||
import cornerstoneTools from 'cornerstone-tools';
|
|
||||||
|
|
||||||
import getImageId from '../utils/getImageId.js';
|
import getImageId from '../utils/getImageId.js';
|
||||||
|
|
||||||
const noop = () => {};
|
const noop = () => {};
|
||||||
@@ -94,7 +92,11 @@ export class StudyPrefetcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.enabledElement = cornerstone.getEnabledElement(element);
|
try {
|
||||||
|
this.enabledElement = cornerstone.getEnabledElement(element);
|
||||||
|
} catch {
|
||||||
|
throw new Error('Failed to find the enabled element');
|
||||||
|
}
|
||||||
|
|
||||||
this.stopPrefetching();
|
this.stopPrefetching();
|
||||||
this.prefetchDisplaySets(displaySetInstanceUID);
|
this.prefetchDisplaySets(displaySetInstanceUID);
|
||||||
@@ -114,7 +116,11 @@ export class StudyPrefetcher {
|
|||||||
* @param {number} timeout
|
* @param {number} timeout
|
||||||
*/
|
*/
|
||||||
prefetchDisplaySetsAsync(element, timeout) {
|
prefetchDisplaySetsAsync(element, timeout) {
|
||||||
this.enabledElement = cornerstone.getEnabledElement(element);
|
try {
|
||||||
|
this.enabledElement = cornerstone.getEnabledElement(element);
|
||||||
|
} catch {
|
||||||
|
throw new Error('Failed to find the enabled element');
|
||||||
|
}
|
||||||
timeout = timeout || this.options.prefetchDisplaySetsTimeout;
|
timeout = timeout || this.options.prefetchDisplaySetsTimeout;
|
||||||
clearTimeout(this.prefetchDisplaySetsHandler);
|
clearTimeout(this.prefetchDisplaySetsHandler);
|
||||||
this.prefetchDisplaySetsHandler = setTimeout(() => {
|
this.prefetchDisplaySetsHandler = setTimeout(() => {
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ import { SeriesMetadata } from './SeriesMetadata';
|
|||||||
import { api } from 'dicomweb-client';
|
import { api } from 'dicomweb-client';
|
||||||
// - createStacks
|
// - createStacks
|
||||||
import { isImage } from '../../utils/isImage';
|
import { isImage } from '../../utils/isImage';
|
||||||
import { isDisplaySetReconstructable, isSpacingUniform } from '../../utils/isDisplaySetReconstructable';
|
import {
|
||||||
|
isDisplaySetReconstructable,
|
||||||
|
isSpacingUniform,
|
||||||
|
} from '../../utils/isDisplaySetReconstructable';
|
||||||
import errorHandler from '../../errorHandler';
|
import errorHandler from '../../errorHandler';
|
||||||
import isLowPriorityModality from '../../utils/isLowPriorityModality';
|
import isLowPriorityModality from '../../utils/isLowPriorityModality';
|
||||||
import getXHRRetryRequestHook from '../../utils/xhrRetryRequestHook';
|
import getXHRRetryRequestHook from '../../utils/xhrRetryRequestHook';
|
||||||
@@ -159,41 +162,64 @@ class StudyMetadata extends Metadata {
|
|||||||
// series into another display set.
|
// series into another display set.
|
||||||
const stackableInstances = [];
|
const stackableInstances = [];
|
||||||
series.forEachInstance(instance => {
|
series.forEachInstance(instance => {
|
||||||
|
let displaySet;
|
||||||
|
|
||||||
// All imaging modalities must have a valid value for SOPClassUID (x00080016) or Rows (x00280010)
|
// All imaging modalities must have a valid value for SOPClassUID (x00080016) or Rows (x00280010)
|
||||||
if (
|
if (
|
||||||
!isImage(instance.getTagValue('SOPClassUID')) &&
|
!isImage(instance.getTagValue('SOPClassUID')) &&
|
||||||
!instance.getTagValue('Rows')
|
!instance.getTagValue('Rows')
|
||||||
) {
|
) {
|
||||||
return;
|
// we set an empty display and we add a isModalitySupported variable to
|
||||||
}
|
// print a warning that the modality is not supported in the thumbnail.
|
||||||
|
const displaySet = new ImageSet([]);
|
||||||
let displaySet;
|
const seriesData = series.getData();
|
||||||
|
|
||||||
if (isMultiFrame(instance)) {
|
|
||||||
displaySet = makeDisplaySet(series, [instance]);
|
|
||||||
|
|
||||||
displaySet.setAttributes({
|
displaySet.setAttributes({
|
||||||
sopClassUIDs,
|
displaySetInstanceUID: displaySet.uid,
|
||||||
isClip: true,
|
SeriesDate: seriesData.SeriesDate,
|
||||||
|
SeriesTime: seriesData.SeriesTime,
|
||||||
SeriesInstanceUID: series.getSeriesInstanceUID(),
|
SeriesInstanceUID: series.getSeriesInstanceUID(),
|
||||||
StudyInstanceUID: study.getStudyInstanceUID(), // Include the study instance UID for drag/drop purposes
|
SeriesNumber: instance.getTagValue('SeriesNumber'),
|
||||||
numImageFrames: instance.getTagValue('NumberOfFrames'), // Override the default value of instances.length
|
SeriesDescription: instance.getTagValue('SeriesDescription'),
|
||||||
InstanceNumber: instance.getTagValue('InstanceNumber'), // Include the instance number
|
numImageFrames: instance.getTagValue('NumberOfFrames'),
|
||||||
AcquisitionDatetime: instance.getTagValue('AcquisitionDateTime'), // Include the acquisition datetime
|
frameRate: instance.getTagValue('FrameTime'),
|
||||||
});
|
Modality: instance.getTagValue('Modality'),
|
||||||
displaySets.push(displaySet);
|
isMultiFrame: false,
|
||||||
} else if (isSingleImageModality(instance.Modality)) {
|
|
||||||
displaySet = makeDisplaySet(series, [instance]);
|
|
||||||
displaySet.setAttributes({
|
|
||||||
sopClassUIDs,
|
|
||||||
StudyInstanceUID: study.getStudyInstanceUID(), // Include the study instance UID
|
StudyInstanceUID: study.getStudyInstanceUID(), // Include the study instance UID
|
||||||
SeriesInstanceUID: series.getSeriesInstanceUID(),
|
|
||||||
InstanceNumber: instance.getTagValue('InstanceNumber'), // Include the instance number
|
InstanceNumber: instance.getTagValue('InstanceNumber'), // Include the instance number
|
||||||
AcquisitionDatetime: instance.getTagValue('AcquisitionDateTime'), // Include the acquisition datetime
|
AcquisitionDatetime: instance.getTagValue('AcquisitionDateTime'), // Include the acquisition datetime
|
||||||
|
isReconstructable: false,
|
||||||
|
isModalitySupported: false,
|
||||||
|
metadata: instance.getData().metadata,
|
||||||
});
|
});
|
||||||
|
|
||||||
displaySets.push(displaySet);
|
displaySets.push(displaySet);
|
||||||
} else {
|
} else {
|
||||||
stackableInstances.push(instance);
|
if (isMultiFrame(instance)) {
|
||||||
|
displaySet = makeDisplaySet(series, [instance]);
|
||||||
|
|
||||||
|
displaySet.setAttributes({
|
||||||
|
sopClassUIDs,
|
||||||
|
isClip: true,
|
||||||
|
SeriesInstanceUID: series.getSeriesInstanceUID(),
|
||||||
|
StudyInstanceUID: study.getStudyInstanceUID(), // Include the study instance UID for drag/drop purposes
|
||||||
|
numImageFrames: instance.getTagValue('NumberOfFrames'), // Override the default value of instances.length
|
||||||
|
InstanceNumber: instance.getTagValue('InstanceNumber'), // Include the instance number
|
||||||
|
AcquisitionDatetime: instance.getTagValue('AcquisitionDateTime'), // Include the acquisition datetime
|
||||||
|
});
|
||||||
|
displaySets.push(displaySet);
|
||||||
|
} else if (isSingleImageModality(instance.Modality)) {
|
||||||
|
displaySet = makeDisplaySet(series, [instance]);
|
||||||
|
displaySet.setAttributes({
|
||||||
|
sopClassUIDs,
|
||||||
|
StudyInstanceUID: study.getStudyInstanceUID(), // Include the study instance UID
|
||||||
|
SeriesInstanceUID: series.getSeriesInstanceUID(),
|
||||||
|
InstanceNumber: instance.getTagValue('InstanceNumber'), // Include the instance number
|
||||||
|
AcquisitionDatetime: instance.getTagValue('AcquisitionDateTime'), // Include the acquisition datetime
|
||||||
|
});
|
||||||
|
displaySets.push(displaySet);
|
||||||
|
} else {
|
||||||
|
stackableInstances.push(instance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -227,7 +253,6 @@ class StudyMetadata extends Metadata {
|
|||||||
displaySets.map(displaySet => this._derivedDisplaySets.push(displaySet));
|
displaySets.map(displaySet => this._derivedDisplaySets.push(displaySet));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the source display set of the derivated display set.
|
* Returns the source display set of the derivated display set.
|
||||||
* @param {object} derivatedDisplaySet
|
* @param {object} derivatedDisplaySet
|
||||||
@@ -242,40 +267,45 @@ class StudyMetadata extends Metadata {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const otherDisplaySets = allDisplaySets.filter(
|
const otherDisplaySets = allDisplaySets.filter(
|
||||||
ds => ds.displaySetInstanceUID !== derivatedDisplaySet.displaySetInstanceUID
|
ds =>
|
||||||
|
ds.displaySetInstanceUID !== derivatedDisplaySet.displaySetInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
const { metadata } = derivatedDisplaySet;
|
const { metadata } = derivatedDisplaySet;
|
||||||
|
|
||||||
let referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSourceImageSequence
|
let referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSourceImageSequence(
|
||||||
(metadata, otherDisplaySets);
|
metadata,
|
||||||
|
otherDisplaySets
|
||||||
|
);
|
||||||
|
|
||||||
let noReferencedSeriesAvailable = !referencedSeriesInstanceUIDs ||
|
let noReferencedSeriesAvailable =
|
||||||
|
!referencedSeriesInstanceUIDs ||
|
||||||
referencedSeriesInstanceUIDs.length === 0;
|
referencedSeriesInstanceUIDs.length === 0;
|
||||||
if (noReferencedSeriesAvailable) {
|
if (noReferencedSeriesAvailable) {
|
||||||
referencedSeriesInstanceUIDs =
|
referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromReferencedSeriesSequence(
|
||||||
_findReferencedSeriesInstanceUIDsFromReferencedSeriesSequence
|
metadata
|
||||||
(metadata);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
noReferencedSeriesAvailable = !referencedSeriesInstanceUIDs ||
|
noReferencedSeriesAvailable =
|
||||||
|
!referencedSeriesInstanceUIDs ||
|
||||||
referencedSeriesInstanceUIDs.length === 0;
|
referencedSeriesInstanceUIDs.length === 0;
|
||||||
if (noReferencedSeriesAvailable) {
|
if (noReferencedSeriesAvailable) {
|
||||||
referencedSeriesInstanceUIDs =
|
referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromReferencedImageSequence(
|
||||||
_findReferencedSeriesInstanceUIDsFromReferencedImageSequence
|
metadata,
|
||||||
(metadata, otherDisplaySets);
|
otherDisplaySets
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const referencedSeriesAvailable = referencedSeriesInstanceUIDs &&
|
const referencedSeriesAvailable =
|
||||||
referencedSeriesInstanceUIDs.length !== 0;
|
referencedSeriesInstanceUIDs && referencedSeriesInstanceUIDs.length !== 0;
|
||||||
if (referencedSeriesAvailable) {
|
if (referencedSeriesAvailable) {
|
||||||
const referencedDisplaySet = otherDisplaySets.find(ds =>
|
const referencedDisplaySet = otherDisplaySets.find(ds =>
|
||||||
referencedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID)
|
referencedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID)
|
||||||
);
|
);
|
||||||
;
|
|
||||||
return referencedDisplaySet;
|
return referencedDisplaySet;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of derived datasets in the study, filtered by the given filter.
|
* Returns a list of derived datasets in the study, filtered by the given filter.
|
||||||
@@ -303,7 +333,10 @@ class StudyMetadata extends Metadata {
|
|||||||
if (referencedSeriesInstanceUID) {
|
if (referencedSeriesInstanceUID) {
|
||||||
filteredDerivedDisplaySets = filteredDerivedDisplaySets.filter(
|
filteredDerivedDisplaySets = filteredDerivedDisplaySets.filter(
|
||||||
displaySet => {
|
displaySet => {
|
||||||
return StudyMetadata.getReferencedDisplaySet(displaySet, [this]).SeriesInstanceUID === referencedSeriesInstanceUID;
|
return (
|
||||||
|
StudyMetadata.getReferencedDisplaySet(displaySet, [this])
|
||||||
|
.SeriesInstanceUID === referencedSeriesInstanceUID
|
||||||
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -311,8 +344,7 @@ class StudyMetadata extends Metadata {
|
|||||||
if (referencedFrameOfReferenceUID) {
|
if (referencedFrameOfReferenceUID) {
|
||||||
filteredDerivedDisplaySets = filteredDerivedDisplaySets.filter(
|
filteredDerivedDisplaySets = filteredDerivedDisplaySets.filter(
|
||||||
displaySet =>
|
displaySet =>
|
||||||
displaySet.FrameOfReferenceUID ===
|
displaySet.FrameOfReferenceUID === referencedFrameOfReferenceUID
|
||||||
referencedFrameOfReferenceUID
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -497,8 +529,10 @@ class StudyMetadata extends Metadata {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._displaySets.some(ds =>
|
if (
|
||||||
ds.displaySetInstanceUID === displaySet.displaySetInstanceUID)
|
this._displaySets.some(
|
||||||
|
ds => ds.displaySetInstanceUID === displaySet.displaySetInstanceUID
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -867,8 +901,9 @@ const makeDisplaySet = (series, instances) => {
|
|||||||
imageSet.sortByImagePositionPatient();
|
imageSet.sortByImagePositionPatient();
|
||||||
|
|
||||||
// check if the spacing is uniform and update isReconstructable
|
// check if the spacing is uniform and update isReconstructable
|
||||||
const datasetIs4D = displayReconstructableInfo.reconstructionIssues.find
|
const datasetIs4D = displayReconstructableInfo.reconstructionIssues.find(
|
||||||
(issue => issue === ReconstructionIssues.DATASET_4D);
|
issue => issue === ReconstructionIssues.DATASET_4D
|
||||||
|
);
|
||||||
displaySpacingInfo = isSpacingUniform(imageSet.images, datasetIs4D);
|
displaySpacingInfo = isSpacingUniform(imageSet.images, datasetIs4D);
|
||||||
imageSet.isReconstructable = displaySpacingInfo.isUniform;
|
imageSet.isReconstructable = displaySpacingInfo.isUniform;
|
||||||
|
|
||||||
@@ -881,11 +916,15 @@ const makeDisplaySet = (series, instances) => {
|
|||||||
|
|
||||||
if (!imageSet.displayReconstructableInfo) {
|
if (!imageSet.displayReconstructableInfo) {
|
||||||
// It is not reconstrabale Save type of warning
|
// It is not reconstrabale Save type of warning
|
||||||
imageSet.reconstructionIssues = displaySpacingInfo ?
|
imageSet.reconstructionIssues = displaySpacingInfo
|
||||||
displayReconstructableInfo.reconstructionIssues.concat(displaySpacingInfo.reconstructionIssues) :
|
? displayReconstructableInfo.reconstructionIssues.concat(
|
||||||
displayReconstructableInfo.reconstructionIssues;
|
displaySpacingInfo.reconstructionIssues
|
||||||
|
)
|
||||||
|
: displayReconstructableInfo.reconstructionIssues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
imageSet.isModalitySupported = true;
|
||||||
|
|
||||||
return imageSet;
|
return imageSet;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -963,38 +1002,36 @@ function _getDisplaySetFromSopClassModule(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the referenced series instance UIDs by searching the information in the
|
* Returns the referenced series instance UIDs by searching the information in the
|
||||||
* ReferencedSeriesSequence.
|
* ReferencedSeriesSequence.
|
||||||
* @param {object} derivatedDisplaySet.metadata
|
* @param {object} derivatedDisplaySet.metadata
|
||||||
* @return {array[string]} referenced series instance UIDs.
|
* @return {array[string]} referenced series instance UIDs.
|
||||||
*/
|
*/
|
||||||
function _findReferencedSeriesInstanceUIDsFromReferencedSeriesSequence (
|
function _findReferencedSeriesInstanceUIDsFromReferencedSeriesSequence(
|
||||||
metadata,
|
metadata
|
||||||
) {
|
) {
|
||||||
if (!metadata.ReferencedSeriesSequence) {
|
if (!metadata.ReferencedSeriesSequence) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let referencedSeriesInstanceUIDs;
|
let referencedSeriesInstanceUIDs;
|
||||||
const ReferencedSeriesSequence = _toArray(
|
const ReferencedSeriesSequence = _toArray(metadata.ReferencedSeriesSequence);
|
||||||
metadata.ReferencedSeriesSequence
|
|
||||||
);
|
|
||||||
|
|
||||||
referencedSeriesInstanceUIDs = ReferencedSeriesSequence.map(
|
referencedSeriesInstanceUIDs = ReferencedSeriesSequence.map(
|
||||||
ReferencedSeries => ReferencedSeries.SeriesInstanceUID
|
ReferencedSeries => ReferencedSeries.SeriesInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
return referencedSeriesInstanceUIDs;
|
return referencedSeriesInstanceUIDs;
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the referenced series instance UIDs by searching the information in the
|
* Returns the referenced series instance UIDs by searching the information in the
|
||||||
* ReferencedImageSequence.
|
* ReferencedImageSequence.
|
||||||
* @param {object} derivatedDisplaySet.metadata
|
* @param {object} derivatedDisplaySet.metadata
|
||||||
* @param {array[object]} displaysets
|
* @param {array[object]} displaysets
|
||||||
* @return {array[string]} referenced series instance UIDs.
|
* @return {array[string]} referenced series instance UIDs.
|
||||||
*/
|
*/
|
||||||
function _findReferencedSeriesInstanceUIDsFromReferencedImageSequence (
|
function _findReferencedSeriesInstanceUIDsFromReferencedImageSequence(
|
||||||
metadata,
|
metadata,
|
||||||
displaySets
|
displaySets
|
||||||
) {
|
) {
|
||||||
@@ -1015,22 +1052,25 @@ function _findReferencedSeriesInstanceUIDsFromReferencedImageSequence (
|
|||||||
ReferencedSOPInstanceUID
|
ReferencedSOPInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
if (referencedSeriesInstanceUIDs && referencedSeriesInstanceUIDs.length !== 0) {
|
if (
|
||||||
|
referencedSeriesInstanceUIDs &&
|
||||||
|
referencedSeriesInstanceUIDs.length !== 0
|
||||||
|
) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return referencedSeriesInstanceUIDs;
|
return referencedSeriesInstanceUIDs;
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the referenced series instance UIDs by searching the information in the
|
* Returns the referenced series instance UIDs by searching the information in the
|
||||||
* SourceImageSequence.
|
* SourceImageSequence.
|
||||||
* @param {object} derivatedDisplaySet.metadata
|
* @param {object} derivatedDisplaySet.metadata
|
||||||
* @param {array[object]} displaysets
|
* @param {array[object]} displaysets
|
||||||
* @return {array[string]} referenced series instance UIDs.
|
* @return {array[string]} referenced series instance UIDs.
|
||||||
*/
|
*/
|
||||||
function _findReferencedSeriesInstanceUIDsFromSourceImageSequence (
|
function _findReferencedSeriesInstanceUIDsFromSourceImageSequence(
|
||||||
metadata,
|
metadata,
|
||||||
displaySets
|
displaySets
|
||||||
) {
|
) {
|
||||||
@@ -1040,9 +1080,7 @@ function _findReferencedSeriesInstanceUIDsFromSourceImageSequence (
|
|||||||
SourceImageSequence = metadata.SourceImageSequence;
|
SourceImageSequence = metadata.SourceImageSequence;
|
||||||
} else {
|
} else {
|
||||||
const { PerFrameFunctionalGroupsSequence } = metadata;
|
const { PerFrameFunctionalGroupsSequence } = metadata;
|
||||||
const firstFunctionalGroups = _toArray(
|
const firstFunctionalGroups = _toArray(PerFrameFunctionalGroupsSequence)[0];
|
||||||
PerFrameFunctionalGroupsSequence
|
|
||||||
)[0];
|
|
||||||
if (firstFunctionalGroups) {
|
if (firstFunctionalGroups) {
|
||||||
const { DerivationImageSequence } = firstFunctionalGroups;
|
const { DerivationImageSequence } = firstFunctionalGroups;
|
||||||
SourceImageSequence = DerivationImageSequence;
|
SourceImageSequence = DerivationImageSequence;
|
||||||
@@ -1062,22 +1100,25 @@ function _findReferencedSeriesInstanceUIDsFromSourceImageSequence (
|
|||||||
displaySets,
|
displaySets,
|
||||||
ReferencedSOPInstanceUID
|
ReferencedSOPInstanceUID
|
||||||
);
|
);
|
||||||
if (referencedSeriesInstanceUIDs && referencedSeriesInstanceUIDs.length !== 0) {
|
if (
|
||||||
|
referencedSeriesInstanceUIDs &&
|
||||||
|
referencedSeriesInstanceUIDs.length !== 0
|
||||||
|
) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return referencedSeriesInstanceUIDs;
|
return referencedSeriesInstanceUIDs;
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the referenced series instance UIDs by searching the information in the
|
* Returns the referenced series instance UIDs by searching the information in the
|
||||||
* SOPInstanceUID of the displaySets.
|
* SOPInstanceUID of the displaySets.
|
||||||
* @param {array[object]} displaysets
|
* @param {array[object]} displaysets
|
||||||
* @param {string} SOPInstanceUID
|
* @param {string} SOPInstanceUID
|
||||||
* @return {array[string]} referenced series instance UIDs.
|
* @return {array[string]} referenced series instance UIDs.
|
||||||
*/
|
*/
|
||||||
function _findReferencedSeriesInstanceUIDsFromSOPInstanceUID (
|
function _findReferencedSeriesInstanceUIDsFromSOPInstanceUID(
|
||||||
displaySets,
|
displaySets,
|
||||||
SOPInstanceUID
|
SOPInstanceUID
|
||||||
) {
|
) {
|
||||||
@@ -1098,10 +1139,10 @@ function _findReferencedSeriesInstanceUIDsFromSOPInstanceUID (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
function _toArray(arrayOrObject) {
|
function _toArray(arrayOrObject) {
|
||||||
return Array.isArray(arrayOrObject) ? arrayOrObject : [arrayOrObject];
|
return Array.isArray(arrayOrObject) ? arrayOrObject : [arrayOrObject];
|
||||||
}
|
}
|
||||||
|
|
||||||
export {StudyMetadata};
|
export { StudyMetadata };
|
||||||
@@ -116,6 +116,11 @@ async function makeSOPInstance(server, study, instance) {
|
|||||||
};
|
};
|
||||||
study.seriesMap[SeriesInstanceUID] = series;
|
study.seriesMap[SeriesInstanceUID] = series;
|
||||||
study.series.push(series);
|
study.series.push(series);
|
||||||
|
} else {
|
||||||
|
if (series.SeriesDate === undefined)
|
||||||
|
series.SeriesDate = naturalizedInstance.SeriesDate;
|
||||||
|
if (series.SeriesTime === undefined)
|
||||||
|
series.SeriesTime = naturalizedInstance.SeriesTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wadouri = buildInstanceWadoUrl(
|
const wadouri = buildInstanceWadoUrl(
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { ReconstructionIssues } from './../enums.js';
|
import { ReconstructionIssues } from './../enums.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a series is reconstructable to a 3D volume.
|
* Checks if a series is reconstructable to a 3D volume.
|
||||||
*
|
*
|
||||||
@@ -78,7 +77,9 @@ function processSingleframe(instances) {
|
|||||||
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESDIMENSIONS);
|
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESDIMENSIONS);
|
||||||
} else if (SamplesPerPixel !== firstImageSamplesPerPixel) {
|
} else if (SamplesPerPixel !== firstImageSamplesPerPixel) {
|
||||||
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESCOMPONENTS);
|
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESCOMPONENTS);
|
||||||
} else if (!_isSameArray(ImageOrientationPatient, firstImageOrientationPatient)) {
|
} else if (
|
||||||
|
!_isSameArray(ImageOrientationPatient, firstImageOrientationPatient)
|
||||||
|
) {
|
||||||
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESORIENTATION);
|
reconstructionIssues.push(ReconstructionIssues.VARYING_IMAGESORIENTATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +93,10 @@ function processSingleframe(instances) {
|
|||||||
reconstructionIssues.push(ReconstructionIssues.DATASET_4D);
|
reconstructionIssues.push(ReconstructionIssues.DATASET_4D);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { value: reconstructionIssues.length === 0 ? true : false, reconstructionIssues };
|
return {
|
||||||
|
value: reconstructionIssues.length === 0 ? true : false,
|
||||||
|
reconstructionIssues,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,14 +120,12 @@ function isSpacingUniform(instances, datasetIs4D) {
|
|||||||
// If spacing is on a uniform grid but we are missing frames,
|
// If spacing is on a uniform grid but we are missing frames,
|
||||||
// Allow reconstruction, but pass back the number of missing frames.
|
// Allow reconstruction, but pass back the number of missing frames.
|
||||||
if (n > 2) {
|
if (n > 2) {
|
||||||
const lastIpp = instances[n - 1].getData().metadata
|
const lastIpp = instances[n - 1].getData().metadata.ImagePositionPatient;
|
||||||
.ImagePositionPatient;
|
|
||||||
|
|
||||||
// We can't reconstruct if we are missing ImagePositionPatient values
|
// We can't reconstruct if we are missing ImagePositionPatient values
|
||||||
if (firstImagePositionPatient && lastIpp) {
|
if (firstImagePositionPatient && lastIpp) {
|
||||||
const averageSpacingBetweenFrames =
|
const averageSpacingBetweenFrames =
|
||||||
_getPerpendicularDistance(firstImagePositionPatient, lastIpp) /
|
_getPerpendicularDistance(firstImagePositionPatient, lastIpp) / (n - 1);
|
||||||
(n - 1);
|
|
||||||
|
|
||||||
let previousImagePositionPatient = firstImagePositionPatient;
|
let previousImagePositionPatient = firstImagePositionPatient;
|
||||||
|
|
||||||
@@ -136,7 +138,7 @@ function isSpacingUniform(instances, datasetIs4D) {
|
|||||||
previousImagePositionPatient
|
previousImagePositionPatient
|
||||||
);
|
);
|
||||||
|
|
||||||
if (datasetIs4D && spacingBetweenFrames < 1.e-3) {
|
if (datasetIs4D && spacingBetweenFrames < 1e-3) {
|
||||||
// the dataset is 4D, if the distance is zero, means that we are
|
// the dataset is 4D, if the distance is zero, means that we are
|
||||||
// checking the 4th dimension. Do not return, since we want still to
|
// checking the 4th dimension. Do not return, since we want still to
|
||||||
// check the 3rd dimension spacing.
|
// check the 3rd dimension spacing.
|
||||||
@@ -164,10 +166,13 @@ function isSpacingUniform(instances, datasetIs4D) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return { isUniform: reconstructionIssues.length === 0 ? true : false, missingFrames, reconstructionIssues };
|
return {
|
||||||
|
isUniform: reconstructionIssues.length === 0 ? true : false,
|
||||||
|
missingFrames,
|
||||||
|
reconstructionIssues,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if 4D dataset.
|
* Check if 4D dataset.
|
||||||
*
|
*
|
||||||
@@ -181,7 +186,7 @@ function isSpacingUniform(instances, datasetIs4D) {
|
|||||||
*
|
*
|
||||||
* @returns {boolean} dataset4D value.
|
* @returns {boolean} dataset4D value.
|
||||||
*/
|
*/
|
||||||
function _isDataset4D(instances) {
|
function _isDataset4D(instances) {
|
||||||
const n = instances.length;
|
const n = instances.length;
|
||||||
for (let ii = 0; ii < n; ++ii) {
|
for (let ii = 0; ii < n; ++ii) {
|
||||||
const instanceMetadataControl = instances[ii].getData().metadata;
|
const instanceMetadataControl = instances[ii].getData().metadata;
|
||||||
@@ -204,7 +209,12 @@ function isSpacingUniform(instances, datasetIs4D) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_isSameArray(instanceMetadataControl.ImagePositionPatient, instanceMetadata.ImagePositionPatient)) {
|
if (
|
||||||
|
_isSameArray(
|
||||||
|
instanceMetadataControl.ImagePositionPatient,
|
||||||
|
instanceMetadata.ImagePositionPatient
|
||||||
|
)
|
||||||
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -265,11 +275,11 @@ function _getSpacingIssue(spacing, averageSpacing) {
|
|||||||
function _getPerpendicularDistance(a, b) {
|
function _getPerpendicularDistance(a, b) {
|
||||||
return Math.sqrt(
|
return Math.sqrt(
|
||||||
Math.pow(a[0] - b[0], 2) +
|
Math.pow(a[0] - b[0], 2) +
|
||||||
Math.pow(a[1] - b[1], 2) +
|
Math.pow(a[1] - b[1], 2) +
|
||||||
Math.pow(a[2] - b[2], 2)
|
Math.pow(a[2] - b[2], 2)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const constructableModalities = ['MR', 'CT', 'PT', 'NM'];
|
const constructableModalities = ['MR', 'CT', 'PT', 'NM'];
|
||||||
|
|
||||||
export {isDisplaySetReconstructable, isSpacingUniform};
|
export { isDisplaySetReconstructable, isSpacingUniform };
|
||||||
@@ -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.10.5](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.4...@ohif/ui@1.10.5) (2021-11-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/ui
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.10.4](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.3...@ohif/ui@1.10.4) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/ui
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.10.3](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.2...@ohif/ui@1.10.3) (2021-10-15)
|
## [1.10.3](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.10.2...@ohif/ui@1.10.3) (2021-10-15)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/ui
|
**Note:** Version bump only for package @ohif/ui
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/ui",
|
"name": "@ohif/ui",
|
||||||
"version": "1.10.3",
|
"version": "1.10.5",
|
||||||
"description": "A set of React components for Medical Imaging Viewers",
|
"description": "A set of React components for Medical Imaging Viewers",
|
||||||
"author": "OHIF Contributors",
|
"author": "OHIF Contributors",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -163,11 +163,6 @@ function Thumbnail(props) {
|
|||||||
displaySetInstanceUID,
|
displaySetInstanceUID,
|
||||||
imageId,
|
imageId,
|
||||||
imageSrc,
|
imageSrc,
|
||||||
numImageFrames,
|
|
||||||
SeriesDescription,
|
|
||||||
SeriesNumber,
|
|
||||||
hasWarnings,
|
|
||||||
hasDerivedDisplaySets,
|
|
||||||
StudyInstanceUID,
|
StudyInstanceUID,
|
||||||
onClick,
|
onClick,
|
||||||
onDoubleClick,
|
onDoubleClick,
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ const SnackbarProvider = ({ children, service }) => {
|
|||||||
LogManager.subscribe(LogManager.EVENTS.OnLog, onLogHandler);
|
LogManager.subscribe(LogManager.EVENTS.OnLog, onLogHandler);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
LogManager.subscribe(LogManager.EVENTS.OnLog, onLogHandler);
|
LogManager.unsubscribe(LogManager.EVENTS.OnLog, onLogHandler);
|
||||||
};
|
};
|
||||||
}, [show]);
|
}, [show]);
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,62 @@
|
|||||||
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.9](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.8...@ohif/viewer@4.12.9) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.8](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.7...@ohif/viewer@4.12.8) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.7](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.6...@ohif/viewer@4.12.7) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.6](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.5...@ohif/viewer@4.12.6) (2021-11-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.5](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.4...@ohif/viewer@4.12.5) (2021-10-27)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.4](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.3...@ohif/viewer@4.12.4) (2021-10-26)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.3](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.2...@ohif/viewer@4.12.3) (2021-10-25)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [4.12.2](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.1...@ohif/viewer@4.12.2) (2021-10-15)
|
## [4.12.2](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.1...@ohif/viewer@4.12.2) (2021-10-15)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/viewer
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ describe('OHIF Save Measurements', function() {
|
|||||||
// cy.get('.sb-closeIcon').click();
|
// cy.get('.sb-closeIcon').click();
|
||||||
// });
|
// });
|
||||||
|
|
||||||
it('checks if warning message is displayed on measurements of unsupported tools', function() {
|
/*it('checks if warning message is displayed on measurements of unsupported tools', function() {
|
||||||
// Add measurement for unsupported tool in the viewport
|
// Add measurement for unsupported tool in the viewport
|
||||||
cy.addAngleMeasurement();
|
cy.addAngleMeasurement();
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ describe('OHIF Save Measurements', function() {
|
|||||||
|
|
||||||
// Close Measurements panel
|
// Close Measurements panel
|
||||||
cy.get('@measurementsBtn').click();
|
cy.get('@measurementsBtn').click();
|
||||||
});
|
});*/
|
||||||
|
|
||||||
/*it('checks if measurements of unsupported tools were not saved', function() {
|
/*it('checks if measurements of unsupported tools were not saved', function() {
|
||||||
// Add measurement for supported tool in the viewport
|
// Add measurement for supported tool in the viewport
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/viewer",
|
"name": "@ohif/viewer",
|
||||||
"version": "4.12.2",
|
"version": "4.12.9",
|
||||||
"description": "OHIF Viewer",
|
"description": "OHIF Viewer",
|
||||||
"author": "OHIF Contributors",
|
"author": "OHIF Contributors",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -47,28 +47,28 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"@ohif/core": "^2.16.0",
|
"@ohif/core": "^2.16.5",
|
||||||
"@ohif/extension-cornerstone": "^2.12.1",
|
"@ohif/extension-cornerstone": "^2.12.3",
|
||||||
"@ohif/extension-debugging": "^0.3.0",
|
"@ohif/extension-debugging": "^0.3.1",
|
||||||
"@ohif/extension-dicom-html": "^1.3.11",
|
"@ohif/extension-dicom-html": "^1.3.14",
|
||||||
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
||||||
"@ohif/extension-dicom-pdf": "^1.1.0",
|
"@ohif/extension-dicom-pdf": "^1.1.1",
|
||||||
"@ohif/extension-dicom-rt": "^0.7.2",
|
"@ohif/extension-dicom-rt": "^0.7.4",
|
||||||
"@ohif/extension-dicom-segmentation": "^0.7.2",
|
"@ohif/extension-dicom-segmentation": "^0.7.5",
|
||||||
"@ohif/extension-lesion-tracker": "^0.2.1",
|
"@ohif/extension-lesion-tracker": "^0.2.1",
|
||||||
"@ohif/extension-vtk": "^1.12.4",
|
"@ohif/extension-vtk": "^1.12.9",
|
||||||
"@ohif/i18n": "^0.53.0",
|
"@ohif/i18n": "^0.53.0",
|
||||||
"@ohif/ui": "^1.10.3",
|
"@ohif/ui": "^1.10.5",
|
||||||
"@tanem/react-nprogress": "^1.1.25",
|
"@tanem/react-nprogress": "^1.1.25",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"core-js": "^3.2.1",
|
"core-js": "^3.2.1",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-math": "^0.1.9",
|
"cornerstone-math": "^0.1.9",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dcmjs": "0.18.9",
|
"dcmjs": "0.19.1",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"hammerjs": "^2.0.8",
|
"hammerjs": "^2.0.8",
|
||||||
"i18next": "^17.0.3",
|
"i18next": "^17.0.3",
|
||||||
"i18next-browser-languagedetector": "^3.0.1",
|
"i18next-browser-languagedetector": "^3.0.1",
|
||||||
|
|||||||
@@ -14,13 +14,11 @@ const mapDispatchToProps = (dispatch, ownProps) => {
|
|||||||
displaySetInstanceUID
|
displaySetInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { LoggerService, UINotificationService } = servicesManager.services;
|
||||||
|
|
||||||
if (displaySet.isDerived) {
|
if (displaySet.isDerived) {
|
||||||
const { Modality } = displaySet;
|
const { Modality } = displaySet;
|
||||||
if (Modality === 'SEG' && servicesManager) {
|
if (Modality === 'SEG' && servicesManager) {
|
||||||
const {
|
|
||||||
LoggerService,
|
|
||||||
UINotificationService,
|
|
||||||
} = servicesManager.services;
|
|
||||||
const onDisplaySetLoadFailureHandler = error => {
|
const onDisplaySetLoadFailureHandler = error => {
|
||||||
LoggerService.error({ error, message: error.message });
|
LoggerService.error({ error, message: error.message });
|
||||||
UINotificationService.show({
|
UINotificationService.show({
|
||||||
@@ -55,14 +53,42 @@ const mapDispatchToProps = (dispatch, ownProps) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!displaySet) {
|
if (!displaySet) {
|
||||||
throw new Error(
|
const error = new Error(
|
||||||
`Referenced series for ${Modality} dataset not present.`
|
`Referenced series for ${Modality} dataset not present.`
|
||||||
);
|
);
|
||||||
|
const message = `Referenced series for ${Modality} dataset not present.`;
|
||||||
|
LoggerService.error({ error, message });
|
||||||
|
UINotificationService.show({
|
||||||
|
autoClose: false,
|
||||||
|
title: 'Fail to load series',
|
||||||
|
message,
|
||||||
|
type: 'error',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!displaySet) {
|
if (!displaySet) {
|
||||||
throw new Error('Source data not present');
|
const error = new Error('Source data not present');
|
||||||
}
|
const message = 'Source data not present';
|
||||||
|
LoggerService.error({ error, message });
|
||||||
|
UINotificationService.show({
|
||||||
|
autoClose: false,
|
||||||
|
title: 'Fail to load series',
|
||||||
|
message,
|
||||||
|
type: 'error',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (displaySet.isModalitySupported === false) {
|
||||||
|
const error = new Error('Modality not supported');
|
||||||
|
const message = 'Modality not supported';
|
||||||
|
LoggerService.error({ error, message });
|
||||||
|
UINotificationService.show({
|
||||||
|
autoClose: false,
|
||||||
|
title: 'Fail to load series',
|
||||||
|
message,
|
||||||
|
type: 'error',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch(setActiveViewportSpecificData(displaySet));
|
dispatch(setActiveViewportSpecificData(displaySet));
|
||||||
|
|||||||
@@ -540,6 +540,10 @@ const _checkForSeriesInconsistencesWarnings = async function(
|
|||||||
'The datasets is missing frames: ' + displaySet.missingFrames + '.'
|
'The datasets is missing frames: ' + displaySet.missingFrames + '.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (displaySet.isModalitySupported === false) {
|
||||||
|
inconsistencyWarnings.push('The datasets modality is not supported.');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const segMetadata = displaySet.metadata;
|
const segMetadata = displaySet.metadata;
|
||||||
if (!segMetadata) {
|
if (!segMetadata) {
|
||||||
|
|||||||
@@ -139,10 +139,11 @@ class ViewerMain extends Component {
|
|||||||
displaySetInstanceUID
|
displaySetInstanceUID
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { LoggerService, UINotificationService } = servicesManager.services;
|
||||||
|
|
||||||
if (displaySet.isDerived) {
|
if (displaySet.isDerived) {
|
||||||
const { Modality } = displaySet;
|
const { Modality } = displaySet;
|
||||||
if (Modality === 'SEG' && servicesManager) {
|
if (Modality === 'SEG' && servicesManager) {
|
||||||
const {LoggerService, UINotificationService} = servicesManager.services;
|
|
||||||
const onDisplaySetLoadFailureHandler = error => {
|
const onDisplaySetLoadFailureHandler = error => {
|
||||||
LoggerService.error({ error, message: error.message });
|
LoggerService.error({ error, message: error.message });
|
||||||
UINotificationService.show({
|
UINotificationService.show({
|
||||||
@@ -153,24 +154,41 @@ class ViewerMain extends Component {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const {referencedDisplaySet} = displaySet.getSourceDisplaySet(
|
const { referencedDisplaySet } = displaySet.getSourceDisplaySet(
|
||||||
this.props.studies,
|
this.props.studies,
|
||||||
true,
|
true,
|
||||||
onDisplaySetLoadFailureHandler
|
onDisplaySetLoadFailureHandler
|
||||||
);
|
);
|
||||||
displaySet = referencedDisplaySet;
|
displaySet = referencedDisplaySet;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
displaySet = displaySet.getSourceDisplaySet(this.props.studies);
|
displaySet = displaySet.getSourceDisplaySet(this.props.studies);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!displaySet) {
|
if (!displaySet) {
|
||||||
throw new Error(
|
const error = new Error('Source data not present');
|
||||||
`Referenced series for ${Modality} dataset not present.`
|
const message = 'Source data not present';
|
||||||
);
|
LoggerService.error({ error, message });
|
||||||
|
UINotificationService.show({
|
||||||
|
autoClose: false,
|
||||||
|
title: 'Fail to load series',
|
||||||
|
message,
|
||||||
|
type: 'error',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (displaySet.isModalitySupported === false) {
|
||||||
|
const error = new Error('Modality not supported');
|
||||||
|
const message = 'Modality not supported';
|
||||||
|
LoggerService.error({ error, message });
|
||||||
|
UINotificationService.show({
|
||||||
|
autoClose: false,
|
||||||
|
title: 'Fail to load series',
|
||||||
|
message,
|
||||||
|
type: 'error',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.props.setViewportSpecificData(viewportIndex, displaySet);
|
this.props.setViewportSpecificData(viewportIndex, displaySet);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -6034,28 +6034,28 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
|
|
||||||
cornerstone-core@^2.5.0:
|
cornerstone-core@^2.6.1:
|
||||||
version "2.5.0"
|
version "2.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/cornerstone-core/-/cornerstone-core-2.5.0.tgz#1051ffc34420ad7484e61d2f3bdbc41a5ebc1956"
|
resolved "https://registry.yarnpkg.com/cornerstone-core/-/cornerstone-core-2.6.1.tgz#f9a29a49057f286e8c969c7020e979d567449d42"
|
||||||
integrity sha512-mJzvRJh8J7d5FJutjaL9cT8ZNnmj6l5PHROsyktZq1ojh4vkXfHECQ2izIQu8nmtJ9A6SyQRj4v5Uxn7hijzKw==
|
integrity sha512-LAXjXwNnK2W65ZxpE7phVLjbijkYUrAQIGv5xqKjK8+dmIGlBxqvPHnyGwEqVDyKOWVrpXP6ymUPwrGGRwzgMg==
|
||||||
|
|
||||||
cornerstone-math@0.1.9, cornerstone-math@^0.1.9:
|
cornerstone-math@0.1.9, cornerstone-math@^0.1.9:
|
||||||
version "0.1.9"
|
version "0.1.9"
|
||||||
resolved "https://registry.yarnpkg.com/cornerstone-math/-/cornerstone-math-0.1.9.tgz#7ce5509e8b9f465b01f7c548470725e7569859fc"
|
resolved "https://registry.yarnpkg.com/cornerstone-math/-/cornerstone-math-0.1.9.tgz#7ce5509e8b9f465b01f7c548470725e7569859fc"
|
||||||
integrity sha512-NxdooV73asEQgav1S+0e+a4K+W3CXJdLXyFkVN24qqCtmIpzZzwtw3F9KWPCekzSAJmbhtQ3HicOQj3d4vRtuw==
|
integrity sha512-NxdooV73asEQgav1S+0e+a4K+W3CXJdLXyFkVN24qqCtmIpzZzwtw3F9KWPCekzSAJmbhtQ3HicOQj3d4vRtuw==
|
||||||
|
|
||||||
cornerstone-tools@^6.0.0:
|
cornerstone-tools@^6.0.6:
|
||||||
version "6.0.0"
|
version "6.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/cornerstone-tools/-/cornerstone-tools-6.0.0.tgz#6840658f4508e60cd206b17d6e56160367f616f1"
|
resolved "https://registry.yarnpkg.com/cornerstone-tools/-/cornerstone-tools-6.0.6.tgz#61db62a9eb3d197acea297f60fc610c918a38be0"
|
||||||
integrity sha512-VU4MrsO2NcQK6CUxuYFdiNvdWjF/NV/fs8jCePazYCoFDDKIYcUM9UmoYXAapFE2mon65p4u9wUAvuIuLeBQwA==
|
integrity sha512-t+yksdByljoP/X7CBHfSzmZmLk1o9QCg4CmzspIG6mkRRmZeMf5hxgaM3u0pBdjK1JyxZwzMbavbyl5DG7KxpA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "7.1.2"
|
"@babel/runtime" "7.1.2"
|
||||||
cornerstone-math "0.1.9"
|
cornerstone-math "0.1.9"
|
||||||
|
|
||||||
cornerstone-wado-image-loader@^4.0.3:
|
cornerstone-wado-image-loader@^4.1.0:
|
||||||
version "4.0.3"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cornerstone-wado-image-loader/-/cornerstone-wado-image-loader-4.0.3.tgz#4848a238af9b10742af6d08e204527acf5260c25"
|
resolved "https://registry.yarnpkg.com/cornerstone-wado-image-loader/-/cornerstone-wado-image-loader-4.1.0.tgz#a85c206eb23e188181ed3f1dcf3ec715e65efcb4"
|
||||||
integrity sha512-0KuMC6+hEFsCwVOBH4idKwPpbLdccPzP7i5Ja4q7E/kfwCE71uL8AzHhx96XcLeFN8oR8T+nzv8X6j0lyY32SA==
|
integrity sha512-QRoMqBE5xEc1Jttg3eH6RB4jFY2aIEjd9rcbvJszefl0isow+JwcLv2kh1xkSvqGfHGozcz+F4mrORyTNNLuFQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@cornerstonejs/codec-charls" "^0.1.1"
|
"@cornerstonejs/codec-charls" "^0.1.1"
|
||||||
"@cornerstonejs/codec-libjpeg-turbo-8bit" "^0.0.7"
|
"@cornerstonejs/codec-libjpeg-turbo-8bit" "^0.0.7"
|
||||||
@@ -6647,10 +6647,10 @@ dateformat@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
||||||
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
|
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
|
||||||
|
|
||||||
dcmjs@0.18.9:
|
dcmjs@0.19.1:
|
||||||
version "0.18.9"
|
version "0.19.1"
|
||||||
resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.18.9.tgz#0e18fcff975aaae8ca01a96e781fa75c29ec97f3"
|
resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.19.1.tgz#3a418f908e34cb80eb4efc1feaccc6268c7c5910"
|
||||||
integrity sha512-aTu4fUo3TSgohJC+U509qdXL1per09XvlYdQva0BGtIZMr/iR5n8h/ojpcDTRJoVtSuaj331KJj1yCj8FMMK4Q==
|
integrity sha512-yCqccv0OwnteryNEcloXwKsY6RpQJNvSdsQPHhmggKxBb9w1uFwkBM9j3MboW4+xLL9JTm/q0+rhLS1WOjJSiA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/polyfill" "^7.8.3"
|
"@babel/polyfill" "^7.8.3"
|
||||||
"@babel/runtime" "^7.8.4"
|
"@babel/runtime" "^7.8.4"
|
||||||
@@ -6963,6 +6963,11 @@ dicom-microscopy-viewer@^0.6.1:
|
|||||||
dicomweb-client "^0.5.2"
|
dicomweb-client "^0.5.2"
|
||||||
ol "^5.3.0"
|
ol "^5.3.0"
|
||||||
|
|
||||||
|
dicom-parser@^1.8.11:
|
||||||
|
version "1.8.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/dicom-parser/-/dicom-parser-1.8.11.tgz#ffd86289a6b85bb0047379084b57fcc1b28fe7f8"
|
||||||
|
integrity sha512-KbxEDqv4Stynv5AxDh90+jY7MtPvI2uyOG62yD8zKu/pcZqoQYfPX44rB0ULjpxt6YIfXfajrs7B1L97RbjNsg==
|
||||||
|
|
||||||
dicom-parser@^1.8.9:
|
dicom-parser@^1.8.9:
|
||||||
version "1.8.9"
|
version "1.8.9"
|
||||||
resolved "https://registry.yarnpkg.com/dicom-parser/-/dicom-parser-1.8.9.tgz#c69b036b8234df1cfad9978d0d6f0caad1582e74"
|
resolved "https://registry.yarnpkg.com/dicom-parser/-/dicom-parser-1.8.9.tgz#c69b036b8234df1cfad9978d0d6f0caad1582e74"
|
||||||
@@ -6973,10 +6978,10 @@ dicomweb-client@^0.5.2:
|
|||||||
resolved "https://registry.yarnpkg.com/dicomweb-client/-/dicomweb-client-0.5.2.tgz#aa5a4a6a5044b0702bb0a8a2662c86cd16901951"
|
resolved "https://registry.yarnpkg.com/dicomweb-client/-/dicomweb-client-0.5.2.tgz#aa5a4a6a5044b0702bb0a8a2662c86cd16901951"
|
||||||
integrity sha512-e11n2+g7HfBuMyopWq76W11eSZJ707g4U1XiO8URA+23aoe0g1kGAtlPB29NKXl7zX7RznTJ7wfRBxFkW6EJDA==
|
integrity sha512-e11n2+g7HfBuMyopWq76W11eSZJ707g4U1XiO8URA+23aoe0g1kGAtlPB29NKXl7zX7RznTJ7wfRBxFkW6EJDA==
|
||||||
|
|
||||||
dicomweb-client@^0.8.1:
|
dicomweb-client@^0.8.3:
|
||||||
version "0.8.1"
|
version "0.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/dicomweb-client/-/dicomweb-client-0.8.1.tgz#12bdf0e9698bcf82730f38829ac30158164bb3fd"
|
resolved "https://registry.yarnpkg.com/dicomweb-client/-/dicomweb-client-0.8.3.tgz#4a5ad49c76415ccc894bec57f9267197432e534b"
|
||||||
integrity sha512-5EbK8epfSuonSnCW3nr2tkA1CcO1aFT3grEVvKXqv0tVyHsBvbEcEmBcPEbu1m/cF6t7+3uQRLOQ4dw4CodxFg==
|
integrity sha512-24l6ZnU3y6QIb6LUOmT2wJaptvM+oxQQa1btcViwmIok0pi7jjZf8tGSSclOvTKuwX408/qlpg3uWcKU0Y/uDw==
|
||||||
|
|
||||||
diff-sequences@^24.9.0:
|
diff-sequences@^24.9.0:
|
||||||
version "24.9.0"
|
version "24.9.0"
|
||||||
|
|||||||
Reference in new issue
Block a user