Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add PACS integration with move and query operations #644

Open
wants to merge 60 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
8e37ee0
feat: adds dicom server dialog
hvini Jun 4, 2023
19980dd
feat: adds dicom server dialog
hvini Jun 4, 2023
ee5596d
refactor(dicom-server): updates gui methods name to follow pep8 conve…
hvini Jun 11, 2023
7b298d2
feat(dicom-nodes): save nodes settings into config file
hvini Jun 11, 2023
a3399a4
feat(dicom-nodes): adds remove nodes button
hvini Jun 11, 2023
c5940e9
chore: merge master changes into feat/pacs
hvini Jun 11, 2023
7a76564
fix: updates invalid orientation for networking panel check button
hvini Jun 12, 2023
076ea75
feat: populates network nodes list with state data
hvini Jun 12, 2023
f71628a
feat: adds echo operation on import panel
hvini Jun 17, 2023
fa64059
chore: merges master change into feat/pacs
hvini Jun 17, 2023
58efbcb
fix(import-panel): adds active node selection
hvini Jun 18, 2023
44dd6c0
feat(nodes-panel): saves selected node on state
hvini Jun 21, 2023
b79f70f
feat(nodes-panel): merges dicom nodes dialog into nodes panel
hvini Jun 24, 2023
c04f79d
chore: merge last changes from master into feat/pacs
hvini Jul 3, 2023
ba077d3
feat: adds c-query operation and tree population
hvini Jul 7, 2023
4063718
fix: updates tree item instead adds new when its already exists
hvini Jul 8, 2023
418e7ed
refactor: moves host find panel to a separated file
hvini Jul 8, 2023
e2cc1f8
refactor(net-import-panel): moves text panel to a separated file
hvini Jul 8, 2023
1726d02
refactor(net-import-panel): moves find panel to nodes panel
hvini Jul 8, 2023
a86e21c
chore: merges master changes into feat/pacs
hvini Jul 8, 2023
6b32103
feat: moves dicom server dialog to network tab into prefs dialog
hvini Jul 9, 2023
27eee04
fix: closes import network panel when importing from dir
hvini Jul 11, 2023
07372cb
chore: merges main changes into feat/pacs
hvini Jul 12, 2023
7795dc9
feat(import-panel): adds c-move operation
hvini Jul 26, 2023
70bb3f0
chore: merges master changes into feat/pacs
hvini Jul 26, 2023
a43c695
feat(import-panel): loads server moved files into system
hvini Jul 28, 2023
6e0755f
fix(import-panel): closes current project before importing from netwo…
hvini Aug 6, 2023
d2cfd13
feat(network-prefs): adds default dir for dicom move
hvini Aug 9, 2023
8385e9c
chore: merges 'master' changes into feat/pacs
hvini Aug 9, 2023
dcfa659
fix: loads pacs server information on move operation to avoid empty v…
hvini Aug 13, 2023
eb7f903
chore: solves conflict when merging master changes into feat/pacs
hvini Aug 13, 2023
4a16c5d
chore: adds docker service for orthanc server
hvini Aug 13, 2023
0b0a333
fix(network-panel): handles patient row click event
hvini Aug 15, 2023
e2ea0d0
refactor(nodes-panel): removes unnecessary translate annotation
hvini Aug 15, 2023
f545b62
fix: checks for total of images instead dir existance on c-move
hvini Aug 15, 2023
4e0f142
feat: adds progress indicator for c-move operation
hvini Aug 16, 2023
1129a04
fix(c-move): breaks progress before reaches maximum to avoid get stucked
hvini Aug 17, 2023
85c8afc
style(network-tree): formats date, time and age values
hvini Aug 21, 2023
0549324
chore: solves conflict when merging master changes into feat/pacs
hvini Aug 21, 2023
464c90a
chore: merge 'master' changes into feat/pacs
hvini Aug 22, 2023
1421252
chore: merges master changes into feat/pacs
hvini Sep 4, 2023
685c1e1
feat(net-find): adds wildcard search pattern into query operation
hvini Sep 4, 2023
9da24fb
chore: merges 'master' changes into feat/pacs
hvini Sep 21, 2023
c79fd73
chore: merges 'master' changes into feat/pacs
hvini Sep 29, 2023
3546b4d
chore: merges 'master' changes into feat/pacs
hvini Oct 9, 2023
c7d1ecc
chore: merge 'master' changes into feat/pacs
hvini Nov 20, 2023
d10dbc1
fix: update find operation to work with dcm4chee
hvini Dec 13, 2023
0df7a0f
fix: update move indicator to count through c store handler
hvini Dec 16, 2023
e551690
fix(PACS): create multi datasets on query to avoid conflict
hvini Dec 16, 2023
b7152ad
chore: add dcm4chee docker compose file
hvini Dec 17, 2023
cf3c04e
chore: merge master changes into feat/pacs
hvini Feb 22, 2024
c26edd5
chore: merge 'master' into feat/pacs
hvini Mar 6, 2024
57969ab
chore: solve conflicts when merging master into feat/pacs
hvini Jun 25, 2024
942e706
fix: id unpack range on constants
hvini Jun 26, 2024
ef441e8
feat(pacs): use c-get instead move to retrieve files from server
hvini Jun 26, 2024
a76be77
fix(pacs): decrease move progress by one when using orthanc to avoid …
hvini Jun 26, 2024
e6c350a
chore: merge branch 'master' into feat/pacs
hvini Jun 26, 2024
add5ae1
chore: solve conflicts when merging master into feat/pacs
hvini Jul 15, 2024
6f302ce
chore: solve dev feat/pacs merge conflict
hvini Aug 14, 2024
8daace5
chore: pull upstream changes
hvini Oct 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: '3.1'
services:
orthanc:
image: jodogne/orthanc-plugins:1.12.1
ports:
- 4242:4242
- 8042:8042
volumes:
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
restart: always
6 changes: 5 additions & 1 deletion invesalius/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@
ID_SAVE_SCREENSHOT, ID_DICOM_LOAD_NET, ID_PRINT_SCREENSHOT,
ID_IMPORT_OTHERS_FILES, ID_PREFERENCES, ID_DICOM_NETWORK, ID_TIFF_JPG_PNG,
ID_VIEW_INTERPOLATED, ID_MODE_NAVIGATION, ID_ANALYZE_IMPORT, ID_NIFTI_IMPORT,
ID_PARREC_IMPORT, ID_MODE_DBS] = [wx.NewId() for number in range(22)]
ID_PARREC_IMPORT, ID_MODE_DBS, ID_DICOM_SERVER] = [wx.NewId() for number in range(23)]
ID_EXIT = wx.ID_EXIT
ID_ABOUT = wx.ID_ABOUT

Expand Down Expand Up @@ -615,6 +615,10 @@
SURFACE_INTERPOLATION = 1
LANGUAGE = 2
SLICE_INTERPOLATION = 3
SERVER_AETITLE = 4
SERVER_PORT = 5
STORE_PATH = 6
SERVER_IP = 7

#Correlaction extracted from pyDicom
DICOM_ENCODING_TO_PYTHON = {
Expand Down
1 change: 1 addition & 0 deletions invesalius/control.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ def ShowDialogImportDirectory(self):
if dirpath and not os.listdir(dirpath):
dialog.ImportEmptyDirectory(dirpath)
elif dirpath:
Publisher.sendMessage("Hide import network panel")
self.StartImportPanel(dirpath)

def ShowDialogImportOtherFiles(self, id_type):
Expand Down
39 changes: 29 additions & 10 deletions invesalius/gui/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import invesalius.gui.import_bitmap_panel as imp_bmp
import invesalius.gui.import_panel as imp
import invesalius.gui.preferences as preferences
# import invesalius.gui.import_network_panel as imp_net
import invesalius.gui.import_network_panel as imp_net
import invesalius.project as prj
import invesalius.session as ses
import invesalius.utils as utils
Expand Down Expand Up @@ -147,6 +147,7 @@ def __bind_events(self):
sub(self._HideContentPanel, 'Hide content panel')
sub(self._HideImportPanel, 'Hide import panel')
sub(self._HideTask, 'Hide task panel')
sub(self._HideImportNetwork, 'Hide import network panel')
sub(self._SetProjectName, 'Set project name')
sub(self._ShowContentPanel, 'Show content panel')
sub(self._ShowImportPanel, 'Show import panel in frame')
Expand Down Expand Up @@ -217,11 +218,11 @@ def __init_aui(self):
MaximizeButton(False).Floatable(True).
Caption(caption).CaptionVisible(True))

# ncaption = _("Retrieve DICOM from PACS")
# aui_manager.AddPane(imp_net.Panel(self), wx.aui.AuiPaneInfo().
# Name("Retrieve").Centre().Hide().
# MaximizeButton(True).Floatable(True).
# Caption(ncaption).CaptionVisible(True))
ncaption = _("Retrieve DICOM from PACS")
aui_manager.AddPane(imp_net.Panel(self), wx.aui.AuiPaneInfo().
Name("Retrieve").Centre().Hide().
MaximizeButton(True).Floatable(True).
Caption(ncaption).CaptionVisible(True))

# Add toolbars to manager
# This is pretty tricky -- order on win32 is inverted when
Expand Down Expand Up @@ -311,6 +312,15 @@ def _HideContentPanel(self):
aui_manager.GetPane("Tasks").Show(1)
aui_manager.Update()

def _HideImportNetwork(self):
""" Hide import network panel. """

aui_manager = self.aui_manager
aui_manager.GetPane("Retrieve").Show(0)
aui_manager.GetPane("Data").Show(0)
aui_manager.GetPane("Tasks").Show(1)
aui_manager.Update()

def _HideImportPanel(self):
"""
Hide import panel and show tasks.
Expand Down Expand Up @@ -352,10 +362,11 @@ def _ShowContentPanel(self):
aui_manager.Update()

def _ShowImportNetwork(self):
"""
Show viewers and task, hide import panel.
"""
""" Show viewers and task, hide import panel. """

Publisher.sendMessage("Close Project")
Publisher.sendMessage("Set layout button full")

aui_manager = self.aui_manager
aui_manager.GetPane("Retrieve").Show(1)
aui_manager.GetPane("Data").Show(0)
Expand Down Expand Up @@ -658,11 +669,19 @@ def ShowPreferences(self):
surface_interpolation = values[const.SURFACE_INTERPOLATION]
language = values[const.LANGUAGE]
slice_interpolation = values[const.SLICE_INTERPOLATION]
server_aetitle = values[const.SERVER_AETITLE]
server_port = values[const.SERVER_PORT]
store_path = values[const.STORE_PATH]
server_ip = values[const.SERVER_IP]

session.SetConfig('rendering', rendering)
session.SetConfig('surface_interpolation', surface_interpolation)
session.SetConfig('language', language)
session.SetConfig('slice_interpolation', slice_interpolation)
session.SetConfig('server_aetitle', server_aetitle)
session.SetConfig('server_port', server_port)
session.SetConfig('store_path', store_path)
session.SetConfig('server_ip', server_ip)

Publisher.sendMessage('Remove Volume')
Publisher.sendMessage('Reset Raycasting')
Expand Down Expand Up @@ -1002,7 +1021,7 @@ def __init_items(self):
file_menu = wx.Menu()
app = file_menu.Append
app(const.ID_DICOM_IMPORT, _("Import DICOM...\tCtrl+I"))
#app(const.ID_DICOM_NETWORK, _("Retrieve DICOM from PACS"))
app(const.ID_DICOM_NETWORK, _("Retrieve DICOM from PACS"))
file_menu.Append(const.ID_IMPORT_OTHERS_FILES, _("Import other files..."), others_file_menu)
app(const.ID_PROJECT_OPEN, _("Open project...\tCtrl+O"))
app(const.ID_PROJECT_SAVE, _("Save project\tCtrl+S"))
Expand Down
Loading