From 04718305b60c729b4d5a22a1cc55be904204029f Mon Sep 17 00:00:00 2001 From: quantulr <35954003+quantulr@users.noreply.github.com> Date: Fri, 26 Apr 2024 17:25:17 +0800 Subject: [PATCH] sliceimageviewer --- .gitignore | 4 +- crystalfly/VTK Error Out.txt | 668 ++++++++++++++---- crystalfly/assets/raspberrypi.png | Bin 0 -> 4837 bytes crystalfly/main.py | 13 +- .../__pycache__/import_file.cpython-311.pyc | Bin 4565 -> 4512 bytes .../__pycache__/main_window.cpython-311.pyc | Bin 10292 -> 11901 bytes .../__pycache__/volume_viewer.cpython-311.pyc | Bin 6231 -> 7283 bytes .../ui/__pycache__/vtk_viewer.cpython-311.pyc | Bin 5153 -> 5842 bytes crystalfly/ui/import_file.py | 38 +- crystalfly/ui/import_file.ui | 6 +- crystalfly/ui/import_file_ui.py | 161 +++++ crystalfly/ui/main_window.py | 122 ++-- crystalfly/ui/main_window.ui | 68 +- crystalfly/ui/main_window_ui.py | 95 +++ crystalfly/ui/volume_viewer.py | 15 +- crystalfly/ui/vtk_viewer.py | 13 +- poetry.lock | 135 +++- pyproject.toml | 1 + 18 files changed, 1092 insertions(+), 247 deletions(-) create mode 100644 crystalfly/assets/raspberrypi.png create mode 100644 crystalfly/ui/import_file_ui.py create mode 100644 crystalfly/ui/main_window_ui.py diff --git a/.gitignore b/.gitignore index 6769e21..abaf465 100644 --- a/.gitignore +++ b/.gitignore @@ -157,4 +157,6 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file +#.idea/ +build +dist \ No newline at end of file diff --git a/crystalfly/VTK Error Out.txt b/crystalfly/VTK Error Out.txt index 68bf22d..6451fb6 100644 --- a/crystalfly/VTK Error Out.txt +++ b/crystalfly/VTK Error Out.txt @@ -1,244 +1,676 @@ ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +vtkCompositeDataPipeline (0000023A2CC93260): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (0000023A26C4E360) has 0 connections but is not optional. ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +vtkCompositeDataPipeline (0000023A2CC93260): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (0000023A26C4E360) has 0 connections but is not optional. ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +vtkCompositeDataPipeline (0000023A2CC93260): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (0000023A26C4E360) has 0 connections but is not optional. ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +vtkCompositeDataPipeline (0000023A2CC93260): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (0000023A26C4E360) has 0 connections but is not optional. -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 諠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 蠐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 螰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 褰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 趀䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 謐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 諠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 蒀䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 衰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 諠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 蛰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 謐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 藐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 讠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 賰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 莐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 袠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 褀䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 蛀䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 袠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 訠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 蚐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 衰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48A90): wglMakeCurrent failed in MakeCurrent(), error: 莐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蘰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 謐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 薠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 賰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蔐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蒀䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蔐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 薠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 褰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 薠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 褰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 讠䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蛰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 菰䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蕀䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 莐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 詐䜅Ⱥ -ERROR: In vtkDemandDrivenPipeline.cxx, line 677 -vtkCompositeDataPipeline (000002067CD9E5B0): Input port 0 of algorithm vtkOpenGLGPUVolumeRayCastMapper (000002067B2660B0) has 0 connections but is not optional. +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 覐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 豠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 趀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蘀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 衰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 蛀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 謐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 螀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 91 +vtkWin32OpenGLRenderWindow (0000023A26E4BA60): wglMakeCurrent failed in Clean(), error: 2004 + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 衰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 賰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 讠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 螀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 袠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蝐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 衰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 賰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 讠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 螀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 褰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 薠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蒰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 衰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 薠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蚐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蕀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蒀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 諠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 藐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 謐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 莐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 莐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蓠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 豠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蝐䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 芠䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 螰䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in MakeCurrent(), error: 蒀䜅Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 91 +vtkWin32OpenGLRenderWindow (0000023A26E48760): wglMakeCurrent failed in Clean(), error: 2004 + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 釰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 踀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 遀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 軀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 闠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 趠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 遀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 鑠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 軀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 鑠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 韰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 鑠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 闠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 踀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 醐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 軰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 舀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 芐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 褠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 豐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 萐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 覀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蔀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 莀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蓐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蝰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 莰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 膠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蔀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蛠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蠰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蘠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蓐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 诀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 螠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 詀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 膠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 螠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 螠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 葰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 覀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蟐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 芐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 裀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 訐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蔀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蜐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蒠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 薐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 腰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 腰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蔰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 苰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 藰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蒠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 藰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 觠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 膠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 蠰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 芐䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 譠䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 腀䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 256 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in MakeCurrent(), error: 腰䜼Ⱥ + + +ERROR: In vtkWin32OpenGLRenderWindow.cxx, line 91 +vtkWin32OpenGLRenderWindow (0000023A26E4A410): wglMakeCurrent failed in Clean(), error: 2004 diff --git a/crystalfly/assets/raspberrypi.png b/crystalfly/assets/raspberrypi.png new file mode 100644 index 0000000000000000000000000000000000000000..0eebc0228b4694d94c9ad9209d0d17492e1f8c0b GIT binary patch literal 4837 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 LNkvXXu0mjfHqSCD literal 0 HcmV?d00001 diff --git a/crystalfly/main.py b/crystalfly/main.py index 593d5e2..32f5285 100644 --- a/crystalfly/main.py +++ b/crystalfly/main.py @@ -1,6 +1,8 @@ import ctypes import sys +from pathlib import Path +from PySide6.QtGui import QIcon from PySide6.QtWidgets import QApplication from vtkmodules.vtkCommonCore import vtkFileOutputWindow, vtkOutputWindow @@ -10,16 +12,17 @@ ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("crystalfly") def main(): + # pipe vtk output errors to file + err_out = vtkFileOutputWindow() + err_out.SetFileName("VTK Error Out.txt") + vtk_std_error = vtkOutputWindow() + vtk_std_error.SetInstance(err_out) app = QApplication(sys.argv) + app.setWindowIcon(QIcon(str(Path(__file__).parent / "assets" / "raspberrypi.png"))) window = MainWindow() window.show() sys.exit(app.exec()) if __name__ == '__main__': - # pipe vtk output errors to file - errOut = vtkFileOutputWindow() - errOut.SetFileName("VTK Error Out.txt") - vtkStdErrOut = vtkOutputWindow() - vtkStdErrOut.SetInstance(errOut) main() diff --git a/crystalfly/ui/__pycache__/import_file.cpython-311.pyc b/crystalfly/ui/__pycache__/import_file.cpython-311.pyc index b626cefba91ce2e6b5df43bac221ccf8fa858d0c..0725d0219061a686dcf0e0498dc9ecbadd5c59cf 100644 GIT binary patch delta 1765 zcmbVM-D@LN6u);qGB?T0Bx#$r(+~TRt+k|NyLG$Ug6s!2uCiFS)OB%0Lut}7-Ar3= zCSsx8-G`-!6tv!j^nCJmA6#^W2*xC@dX3DdxaCbR`pfNU_?86#@8?J~c60l4uT$czTGK zSC_~>{2pE)-w0O)M)%JVXatBB7p;JDr7BE62FCEvLkhRbP8oQ$k)=~ zxnEkkccOQq?@8NA8L8XK2Z8qkA4>()>!RK~>fL3Si@IGDDWPZ)Mek3$qtgWxcTqf# z;vdPIu$A19x7toamKf>`J-Q~#kW_>*^#C9q1*D^Z%z*X-Tbkj>DLe@Ko<0x4?eqrH zrrf=`NsU{8JMN;s5*jL^p#mCq(QqCO*WvCG8YrTH0*cU&$fL;rf(J`zyokmhoGPFR z7fs}A;}n{}1Js2D`teO+F0+z(JS`j>l2MXDttXow2EeAUGPePf!gabH0E`^O-Zi0I zoN^*5pbqj7>EuuP{EGB9Sqkey*L2f0p632wgW+dulvC=Q;?uLy!*WBD0`;ovIb`w)Pf$ojlTFv8l2e z+`igE4jfUu`1u_( zBdrzv%KDs@Or43%I?u1-6lQ_ou2n)$m}^#&1|fr4N5>xWQ{bsSo?@O|o>*3gwLJ5* zYotARVucl0rDp-JXPo);VtPH6wPKdNwu+s^A`NCDYwJ{OYHB{zA{$tI2FS zbq>$aDf>?|tbNlcLRbdF`Qt{J>;~J&UhwV9WiXyUJgVv>q_Oz7`mkeB+?{^_ D-C2=1 delta 1783 zcmb7EO>7%Q6rNeH*JFFV-XwPGwL_fPP8*ZID$P%UHd4cHIYceCskEiCLcN6z-Z&aN zh@eD?M3n;wk!TLd(MYJIDoDK|BzoooUTcxVo>Fn*<_ZoRKw@ScQ#p+g%+5T```*mH zH}9{S{3*HdWgy@KbcC{@cQ5B7V8ZabPGJY0R^vyw8&ka zDxj-1)M&w%0croQj7>wEzq(L)H_h36rdX=j!nK#**On?2_Z3SEg`Cc3SC_S&hdc6z zl5Q-Qa3z0RFKS~eI=KnIg97R0a{L;ox|ppb8j#8NT+r`6(gmsl!=GIPi)~+nPWvIC zGSqpTKv!?P05aenoKO2~cX?%5!?>FsvQa*-FX@$ho_yr`2A(39_=pgsg0eww@QLw5 zBz`7-EN*8_6tz&ahN2X)P{cz04K!3oL;E2sec42F7MiP}Ir1&P4nyQQ_g09b0oY}> zv`qn3NKHTMrygyMBi_}?lOH%QcO*LYYVt^kLk|%=yBlSCX%ieUTY4KPQAY_Ar7V=H zp_Btg8mO<1`b^YMEv=#c{|Uw$XuOWbA3zgLSZJcwo_K)jy#)a|gL*>U^d%>}FhN#P z59Gqnl7cg9u)x3Pyd9&8k36DMk^DueL=#i6j}G_=ezJ2J!SiEtzb;EGpl`2!AvD) zmoY1F%>Im-M$Ga7i=@v#NdNGXe>IYzvE2lR$}^U7uAyA4D;G^=)>39k!@u>KrHnR| ziMldjDwCEnd7vZ?!-^FiY=npF;bAj8YK2D+{sTh37H_~R@dngjf4M(rCZL26X(Y^= z17>-K&oDB`2v00&`~oWvr$(4d%J(VxW0StR^))%cJ=p{&5ShFXO!?0@f!p08WHESd zgKFg6(~n(15bwO%v!zn8jD=&kbX_mJqgBe7H4W-CDEGyka66H9f-EwL6LTj8f@D@sJqs5ZG#7wlMD^4GKh00lPvtb^0lTYO6e2!jceYiYDDRn%A z2Ov`GoQL3S?WB1ChH9OY{3vgg4?}(1ukV%j%GJs0y*Kul;lH0CbOQ1>3+1q! diff --git a/crystalfly/ui/__pycache__/main_window.cpython-311.pyc b/crystalfly/ui/__pycache__/main_window.cpython-311.pyc index 172eaa0f40556767dcb617606f51708cf7d0c862..1c97cf3bc2e8dc10799a8652c8abdae56baf61f1 100644 GIT binary patch literal 11901 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 delta 3635 zcmb_fZ){W76@Tx=cCPJf=b1Q896PZc|99*p4j}{7CeZL_S{fiEj6tEsiyy?UvEkW) z!BPbzK18eFJGSd;8@@%27``)_SuyG{2?pD{DF2Ft+md4f!Vu(y?T~O zFbQ>9cTs=(?!`SmLCY~h2mDyU@*c}DKZRedr8*m2p^N;?*TL$@O=Kr`kTHCQW0=#{ z)7>0%m`UhwF$pZ_1?zh%Fo$2Qowg+mGfdEU_oJ|vt?1I(c;ZBI_Sz*O$W`>yQ}JZx zWHOV;UahoF&!m$HK_pr>N+wwcf8BTyw6Uv-dSD^>B*mIp?jx4m;AVpfW|4`tG$v7c z%_)_hx~?OUmVPeZPF$`o1DGiOp{hl4%+*QkEjzfpl`2)BG!T=~Oss8smM3v@CkdOh zWRH0VSJ*+K*vA#x;pG`fumCl0P7S-`jvNYhRMfeJOM)o!psJu)ESX8>V=-b>PxR@j z$aE$DMobhku*dqQDy=yozi{b9Qp6;su4+sG%l(F&)AW&FX!h>iK==;6jaOzR)Ged# zBI^Fw8F~lb$IB`i^?>#*ql}zo6eyv<1G5|)lhC+~#*1j2^tMj1mM7`fcUi80mA#B; zy$yCzdyX}bkF}2O2uvt;P(t@3_EO@Y#7S&Ao5=%gjs}8L^igRaIjrl^xTy3~lG1%} z(ojZ@5^@w&vU5m6Q5i*xC`uQ$MG=+Iu#AR_jYsr@{aiD=phF{*9_1H%5yRYL@+`UR z>wfaK{)~!xo*smmx9i&hp|rZ}4DZo5PoXYbZ`Trmx9RDYwqpOmyF7Wi*?P+lG&qJy zbv5{ul{_<9Bi)Vue{Es=UoATA4U0u4)toQYLnLP}v0@9C>LpRLP2U{2uKKXOldWl* z12l}x4b2OFV!O#Tv-?F)u{K5ef}dDBv34A?J47QaPlN)(h}1bEtpK8d5)1i$N1Anz z&pRf_kY(2_z91$Oug0%s7xJ;4m94!Ik*1nR)3BmHDkg{km2R;t++)W@in5X0iJxe3B28dKTN5^e6$}4O8HE{Q!!lxPMK?$)+N;UL1p!hmQBmdQ;nFnL1@%lKPb^-C zY96l9_c@VPZ^g$sx&>#whL4jech}NuAjusCpTL3W+ho0?%Cu_(8<>CVNEtgy*dbw; zj9o?S0-1~*W$YjzpipsNLvaU}5sAr`I06#XC zd3T9la!b5d=DkJb*$R+(Pni#v_@Ko1%Y1)PdA0+5Wxl_}_e*?4<|9Quvf=h`*7h{DLw$tyf_}ZCZ)xax2slkW;HY73s7L@M=TKeV(xw1R5!1gx)OfJC0j zUrP%!^Ma5UPl8PR4kf23QNm?w6zvD;b<38rJ13;mvG`m*c|{OGmy6e8i+-b&k*9<_ zRfh8gpE2B$HuRj~v?1sN(J)$rjBK^K45I!4fM^FPVvr&R>j-qV zbwqC&g-a+5qJbzy3{%7~MGON1n^!L1etG%j4ZKtf=ST@hKsh)JSi?@h8g@c=8__UE z%c|-2+2ynKya<$V06?J#wHcr`1Jq_K*=7S_U&aF^OaVhXsnN)D#tD>KZ6({RNFW$M zEsW8&d{*?6FN3ey>0Mt@3Evau{_Xm6l6=U?-X(8`e5{}RGBoJvqvz$Kgx0l6OEQxe zCunz^5_)d%ao5)0vE&6-xk>lcKJMsetMctincP=E{&oY(L+!818P(n@^EJfTss_(B z$qt|Tn{1WYLXWYGMt5U&*}a^*`TDKbtDHtXT4gk8_2{z}Mq_SB_&Vz5savP2oLL0&mqkQT;7ni7x@OfJfjrN|^%iyR?c1AT8kHTSN3Yc;o;D~uFI9-w!|?vKgt z-DUUwl6!ygmE)3oMt09gj#=3;E16Ho<`WWQx?x;ltC|Uph4c7&x?)?+JX3Vf{{uo< G7fK6yEXg_}?3^e-g(gj#CE*68<5C6bOM5+9V(nQg9{QRdxf0U2inIX#)yB zm3lxbDvhQG4pn8T6>Y_VO1W39R8^diZMjOc5*0o6gsb*cRj4!Ttcm$icV^$ddGF2l z-n^MNySn|aLH{>CpPM1i{U0{Z^#_;zG4RWB@6-*z2#f$FzZ}Q~4BjOLWj4neyjyCM zL%ER5f1d9L!(CQR0S{#37iP^4MwFItP_%e-&+Hqjfm4A)KFUSO?%X7y$8su0Dj*Y^S3~Rsg;+8 zU6*;-Lny2G#hL4Fx=bwMri;3X z(AB?s+cjd4<3}(_nIw_4g9&5dy&IhL z;xSheKXYyZz4)pt1-j`>{IAOg`b-D-By@u?H{tFG<`XSwlL;-8=6#mkk;f8d(x-c&y9p>|eVnNI2 z5r@~@M}QBv*;FNa^xbP+K z3}Eq3-V;0Qx=j_OIm8*u)6DBicNplZ?#kz9C07*VM@#=cK)gj36tpHJR$twDAb#;Y)XceKQoMk+8(b3txVZxRYOrq=j#MGR8m+<6RXARS z;}2(6C(c(V&X@B-WkRe?^okWYSA%n9IJZ7KQH6=Sd}|Dey(?+|&lbzq0N)Swt^`>> z@X)2Bakia!q7BB|i8kv;TgXTEk}RJn&M#<3d5uSh@O)eNY=SBrr^TWm zB19`24N-D{l3}WYWY3KAfO@EGAC)=I%nRgXWi4oo4($b*zaXmg#CCO|acXu9KWd9R zrU|P)z)#z5#-5N|`Bq`F3X^xWFRoNzwg$6hn8ivcPOgMcLLar$ja`RCXXs255Wm44 z1bHlQeZ=w(w>$YR(UMao6=pAs0-{@tj!{ByZFCO*&V@VPA*@RN8qDEFKq0E4gu}t` zwxJ>WKq*vb$mjKB5kPyQ&NN8`*tdNf$JfK@RGlF_nlLf5NuB;yWkpz!M0J3dBwP!N zo$VWBgdJ66St%OTf*g2HB%N^*06qCCt7dJg2;y^*9*2vXrtpJs)H_lvDjIJTnHyh^ zq=FtAhnEr`C4T%Ml6KJltlmQ>;HMEk2;ygv^kJ6jX%@a?8qw3u`Ueg-B0q=}GNegU zhY77)0RVLe10rQ6+~_zT9Xz+Y%(V11=3u$CuQB_|t$mFdFSqtJW~kiS*YJa1=aoBb)7i780^A*qGtKpoqf=b_gEO-aX5E>P>PXN^1)r4b)!bSa z&4*oRfXgvB07#k#r}rd4TJvdMn#Td=Acc%a9iQm2!$Vz4^!YKW3!~yX6!j=Z`hQH^ zr^(0tv}4B|<PIW9+2QaSK05_u;0j;JqOx;ozHTI!K9RD%4|{z=0;y(L~{fKgHjm zDic}95-mD>GuOce$qUcIxGx9a`TO9vfXw?z3-8Hcn3Ti(RC}lLmx#kl4E*a7^Y$eU z9E#Niqy8KfkjB0^b4bzQn?s!>2JBJ}G%p`c0G{}hm>`yvSaJL?w)v{VH%B^t&XOOy zgi(@(u#IW%H}V5H0YAv`yyiKczQ(AruL-*E=hU0!iM_qO4JW|!Dsmg2eM;lWOk3Q7 z2f?A(xFt2V>bkIe#bUWyHj70Ofggi&Tn05X%7gGYG}RkGbIZF{GiqYxEh}(Y)0Xmc zH)`doDLjx>2Dl&QluKFPvTn{3$WoD8UMm?TalKwzE1Mq*A8adcb1zuRDp%lKc%j#A zbv1NjT|~&azgS!|N{vRb*r5L_JPI$KqQ}KX&C_ z-&u@2cJcL{NbDlFk1pUG{zvpQ;K{hI3F^_|pyk;vgjj1d_pa*oId63g>WT`QUTuuDwQRw`FY8+wCop}$|uutCI4 z;^ubGkt!OxS+tQ0sB3%zde2?>yC=hEA(gn7qVs4w6nO$T?qDY|&6nUs;uS<@lNWMi zj@M$8*WTAPLC0lB6ZF=It58eE)6?XD8e$gHK`FgbHc{d81l-wsG@J!eil^X zU%pF~nzm)=)8Zy>srE(}(w3WZ{*;aEIzM6sP z&*hK|mq6UR^YMIZ+x<<|`IlPEB2-b1V zNE?clqiyi9ZNpA?{i8H*^WT5N_9cvV)zbiQB~;(v1Xo-%=IG>Rwn8)A^$fah*>2hj zEp)P}+g6CwUaj;;&k6cVAnNB1b?3qfu5E+B7_5s}>}Y*oXyab6o&FjS>06GG7SVF* zn;V!|NRpJCVn`D4(R+^XwwKat_!Vs{Hg#GchZi)GO{-Qr7e{M-p4Vi2L7Tj;=##3lp2ITn zP|f*lx5IMiSY0DNM$EDkykWT|DWj%!U6OPM6UOKl&RH0yPn=>?n4R@?NIP9)As6U4 zT@r^(ap;c2MA1ixuDRaZ{@Fih`X>&Apeb}zgyFIA1TC4$@`!9!%_e@^FSHu@L()miQQx z)7)yLDq}fovgg@x?>Ih8TX3~8W;;{g=%e%gb~^6#!87#8TY!lVJb4=S{gyhzv~d@y za(RKr_11IEE4gYWl4N4SlaL7pjlo4a;~((8#FZ%y33}WA5e!i=ASO9sGR2{v!LeVy zM)WL`+=wn;c=f4^Ign8`9Zz3lH*lI7ff1OXp9WTkrI zyuoo>wX@Ykx{V2VFKH^6g0u8?u%89_JUF~P%M?~q=Gb|NJM$?cy&QOlh{%CYBH^_W zCxOvQFHzrMah{|5H|z@3H3dJ)fiBQ8KH^n<{>h zyvdHdR{a~AZeH9@6+y!~052CC*8zB~*ti~mWU+A_x+dVML-21XMot}Z@x%Yn@$w+} E6Z9>c#{d8T delta 982 zcmah`OHUI~6rS7Xv{U-#VJXm3qqI^nh@wzTfe4bwLWmkoOj9}+GE$~^r$FM0g$ol+ zOg%eS7!wUKF(zmvER6mDOf@XbxbX+LKqHB`Q16-2XrqZYcfPsjJNJC&ao;8Hceo$b z)j0*e)aZffW>?AGL>5a2FSVP5Q9%}O2(p8U56yz`n17XZ*&~xlA?_?a8TWb?i?d^M z*%^94p-Yr?gO9Yrd9q_VV_G|F`bioi)hI!@>Z_ht{P5b@NCL2IZh{T#$zV{oY76s} z>0&0Ms7f)DVJ@)SHsP8*8aC?|jpnDBi-+ruOeUAlYFZ|vVL|ZBK1O`-!ydMyy7onY zsMzZhg_h2@;pA30dDF5b?%T0}BHl9X1lMLA8zda$H<=&RJd?CIK~Mwss6^gQrppNx~ax)fVGK&I~0-5MrL02j5&|7=?9lloluR zN{+HPhIASn&r{(#xVg$TktJE3Oc`xNA`xaJ2tmI)Nsfc!Uil-zTFi5Wq>u2JxQ!Xr zcVoO%%`~p4Mjm#Q(+pFv9uBqA&G5>5SW2O@7a<0_-g|vse$<`0d_kk97pYp*#Sul# z=9TLdJI8x{2vH7ua?6!U2Vm3JN`~N*@0bNg0mRn;{r<5Y%n�b#h^0Do=;`Bxb41 z4xtLpHE#MXtC=`~t;4!MO-5kXpCB>VAL!{#bBAuv?FA>e#qfPu8$t-78Nq@ufM7)! zggb%ykWnk)cDhojgf0XZybPo}L)J7|32Y1a{|}ykL~vQc?u_`j7oG<{z>E5}grmx> z@0~!Q2WY4&3-Qom23A$Ayuy3+qQnvwJrP&<@&DA LNPqo@`W8_DU$ diff --git a/crystalfly/ui/import_file.py b/crystalfly/ui/import_file.py index e4d17ed..268005d 100644 --- a/crystalfly/ui/import_file.py +++ b/crystalfly/ui/import_file.py @@ -1,38 +1,38 @@ -from pathlib import Path - from PySide6.QtCore import Slot, QEvent -from PySide6.QtUiTools import loadUiType from PySide6.QtWidgets import QDialog, QFileDialog from vtkmodules.vtkCommonCore import VTK_INT, VTK_SHORT, VTK_LONG, VTK_FLOAT, VTK_UNSIGNED_SHORT, VTK_UNSIGNED_INT, \ VTK_UNSIGNED_LONG from crystalfly.thread.image_reader import ImageReaderThread - -ImportFileType, _ = loadUiType(str(Path(__file__).parent.joinpath("import_file.ui"))) +from crystalfly.ui.import_file_ui import Ui_Dialog -class ImportFile(QDialog, ImportFileType): +# ImportFileType, _ = loadUiType(str(Path(__file__).parent.joinpath("import_file.ui"))) + + +class ImportFile(QDialog): def __init__(self): super(ImportFile, self).__init__() # self.image_read_thread = None - self.setupUi(self) + self.ui = Ui_Dialog() + self.ui.setupUi(self) - self.browse_file.clicked.connect(self.browse_file_handler) + self.ui.browse_file.clicked.connect(self.browse_file_handler) self.accepted.connect(self.load_image_file) def showEvent(self, event: QEvent) -> None: self.clear_form() def clear_form(self): - self.file_path_input.clear() - self.size_x_spin.clear() - self.size_y_spin.clear() - self.size_z_spin.clear() - self.data_type_combobox.setCurrentIndex(0) + self.ui.file_path_input.clear() + self.ui.size_x_spin.clear() + self.ui.size_y_spin.clear() + self.ui.size_z_spin.clear() + self.ui.data_type_combobox.setCurrentIndex(0) @Slot() def load_image_file(self): - data_type_text = self.data_type_combobox.currentText() + data_type_text = self.ui.data_type_combobox.currentText() data_type = None if data_type_text == "int 8": data_type = VTK_INT @@ -49,12 +49,12 @@ class ImportFile(QDialog, ImportFileType): elif data_type_text == "float": data_type = VTK_FLOAT file_data = { - "file_path": self.file_path_input.text(), + "file_path": self.ui.file_path_input.text(), "data_type": data_type, "size": { - "x": self.size_x_spin.value(), - "y": self.size_y_spin.value(), - "z": self.size_z_spin.value(), + "x": self.ui.size_x_spin.value(), + "y": self.ui.size_y_spin.value(), + "z": self.ui.size_z_spin.value(), } } image_read_thread = ImageReaderThread(file_data, self) @@ -66,4 +66,4 @@ class ImportFile(QDialog, ImportFileType): dialog = QFileDialog(self) filepath = dialog.getOpenFileName() if filepath[0]: - self.file_path_input.setText(filepath[0]) + self.ui.file_path_input.setText(filepath[0]) diff --git a/crystalfly/ui/import_file.ui b/crystalfly/ui/import_file.ui index a6c5091..8194af7 100644 --- a/crystalfly/ui/import_file.ui +++ b/crystalfly/ui/import_file.ui @@ -50,7 +50,7 @@ - y + height @@ -64,7 +64,7 @@ - x + width @@ -78,7 +78,7 @@ - z + slices diff --git a/crystalfly/ui/import_file_ui.py b/crystalfly/ui/import_file_ui.py new file mode 100644 index 0000000..dea1daa --- /dev/null +++ b/crystalfly/ui/import_file_ui.py @@ -0,0 +1,161 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'import_file.ui' +## +## Created by: Qt User Interface Compiler version 6.7.0 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QAbstractButton, QApplication, QComboBox, QDialog, + QDialogButtonBox, QGridLayout, QGroupBox, QLabel, + QLineEdit, QPushButton, QSizePolicy, QSpacerItem, + QSpinBox, QVBoxLayout, QWidget) + +class Ui_Dialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(500, 259) + self.verticalLayout = QVBoxLayout(Dialog) + self.verticalLayout.setObjectName(u"verticalLayout") + self.gridLayout = QGridLayout() + self.gridLayout.setObjectName(u"gridLayout") + self.label = QLabel(Dialog) + self.label.setObjectName(u"label") + + self.gridLayout.addWidget(self.label, 0, 0, 1, 1) + + self.file_path_input = QLineEdit(Dialog) + self.file_path_input.setObjectName(u"file_path_input") + + self.gridLayout.addWidget(self.file_path_input, 0, 1, 1, 1) + + self.browse_file = QPushButton(Dialog) + self.browse_file.setObjectName(u"browse_file") + + self.gridLayout.addWidget(self.browse_file, 0, 2, 1, 1) + + self.gridLayout.setColumnStretch(0, 1) + self.gridLayout.setColumnStretch(1, 5) + self.gridLayout.setColumnStretch(2, 1) + + self.verticalLayout.addLayout(self.gridLayout) + + self.groupBox = QGroupBox(Dialog) + self.groupBox.setObjectName(u"groupBox") + self.groupBox.setStyleSheet(u"") + self.gridLayout_2 = QGridLayout(self.groupBox) + self.gridLayout_2.setObjectName(u"gridLayout_2") + self.gridLayout_2.setHorizontalSpacing(32) + self.label_3 = QLabel(self.groupBox) + self.label_3.setObjectName(u"label_3") + + self.gridLayout_2.addWidget(self.label_3, 0, 2, 1, 1) + + self.size_x_spin = QSpinBox(self.groupBox) + self.size_x_spin.setObjectName(u"size_x_spin") + self.size_x_spin.setMaximum(100000) + + self.gridLayout_2.addWidget(self.size_x_spin, 0, 1, 1, 1) + + self.label_2 = QLabel(self.groupBox) + self.label_2.setObjectName(u"label_2") + + self.gridLayout_2.addWidget(self.label_2, 0, 0, 1, 1) + + self.size_y_spin = QSpinBox(self.groupBox) + self.size_y_spin.setObjectName(u"size_y_spin") + self.size_y_spin.setMaximum(100000) + + self.gridLayout_2.addWidget(self.size_y_spin, 0, 3, 1, 1) + + self.label_4 = QLabel(self.groupBox) + self.label_4.setObjectName(u"label_4") + + self.gridLayout_2.addWidget(self.label_4, 1, 0, 1, 1) + + self.size_z_spin = QSpinBox(self.groupBox) + self.size_z_spin.setObjectName(u"size_z_spin") + self.size_z_spin.setMaximum(100000) + + self.gridLayout_2.addWidget(self.size_z_spin, 1, 1, 1, 1) + + self.gridLayout_2.setColumnStretch(0, 1) + self.gridLayout_2.setColumnStretch(1, 3) + self.gridLayout_2.setColumnStretch(2, 1) + self.gridLayout_2.setColumnStretch(3, 3) + + self.verticalLayout.addWidget(self.groupBox) + + self.gridLayout_3 = QGridLayout() + self.gridLayout_3.setObjectName(u"gridLayout_3") + self.label_5 = QLabel(Dialog) + self.label_5.setObjectName(u"label_5") + + self.gridLayout_3.addWidget(self.label_5, 0, 0, 1, 1) + + self.data_type_combobox = QComboBox(Dialog) + self.data_type_combobox.addItem("") + self.data_type_combobox.addItem("") + self.data_type_combobox.addItem("") + self.data_type_combobox.addItem("") + self.data_type_combobox.addItem("") + self.data_type_combobox.addItem("") + self.data_type_combobox.addItem("") + self.data_type_combobox.setObjectName(u"data_type_combobox") + self.data_type_combobox.setEditable(False) + + self.gridLayout_3.addWidget(self.data_type_combobox, 0, 1, 1, 1) + + self.gridLayout_3.setColumnStretch(0, 1) + self.gridLayout_3.setColumnStretch(1, 6) + + self.verticalLayout.addLayout(self.gridLayout_3) + + self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.verticalLayout.addItem(self.verticalSpacer) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Orientation.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok) + + self.verticalLayout.addWidget(self.buttonBox) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"\u6587\u4ef6\u5bfc\u5165", None)) + self.label.setText(QCoreApplication.translate("Dialog", u"\u6587\u4ef6\u8def\u5f84", None)) + self.browse_file.setText(QCoreApplication.translate("Dialog", u"\u6d4f\u89c8", None)) + self.groupBox.setTitle(QCoreApplication.translate("Dialog", u"size", None)) + self.label_3.setText(QCoreApplication.translate("Dialog", u"height", None)) + self.label_2.setText(QCoreApplication.translate("Dialog", u"width", None)) + self.label_4.setText(QCoreApplication.translate("Dialog", u"slices", None)) + self.label_5.setText(QCoreApplication.translate("Dialog", u"\u6570\u636e\u7c7b\u578b", None)) + self.data_type_combobox.setItemText(0, QCoreApplication.translate("Dialog", u"int 8", None)) + self.data_type_combobox.setItemText(1, QCoreApplication.translate("Dialog", u"uint 8", None)) + self.data_type_combobox.setItemText(2, QCoreApplication.translate("Dialog", u"int 16", None)) + self.data_type_combobox.setItemText(3, QCoreApplication.translate("Dialog", u"uint 16", None)) + self.data_type_combobox.setItemText(4, QCoreApplication.translate("Dialog", u"int 32", None)) + self.data_type_combobox.setItemText(5, QCoreApplication.translate("Dialog", u"uint 32", None)) + self.data_type_combobox.setItemText(6, QCoreApplication.translate("Dialog", u"float", None)) + + # retranslateUi + diff --git a/crystalfly/ui/main_window.py b/crystalfly/ui/main_window.py index bfb2b6f..f698829 100644 --- a/crystalfly/ui/main_window.py +++ b/crystalfly/ui/main_window.py @@ -2,20 +2,23 @@ from pathlib import Path from PySide6.QtCore import Slot, Qt from PySide6.QtGui import QIcon, QAction -from PySide6.QtUiTools import loadUiType -from PySide6.QtWidgets import QMainWindow, QSlider +from PySide6.QtWidgets import QSlider, QMainWindow from vtkmodules.vtkRenderingOpenGL2 import vtkGenericOpenGLRenderWindow from crystalfly.ui.import_file import ImportFile +from crystalfly.ui.main_window_ui import Ui_MainWindow from crystalfly.ui.volume_viewer import VolumeViewer from crystalfly.ui.vtk_viewer import VTKImageViewer -MainWindowType, _ = loadUiType(str(Path(__file__).parent.joinpath("main_window.ui"))) - -class MainWindow(QMainWindow, MainWindowType): +class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + self.coronal_slider = None + self.transverse_slider = None + self.sagittal_slider = None self.cross_action = None self.file_action = None self.volume = None @@ -23,9 +26,8 @@ class MainWindow(QMainWindow, MainWindowType): self.sagittal = None self.coronal = None self.vtk_render_window = vtkGenericOpenGLRenderWindow() - self.setupUi(self) self.file_open_dialog = ImportFile() - self.file_open.triggered.connect(self.handle_file_open) + self.ui.file_open.triggered.connect(self.handle_file_open) self.init_four_pane() self.init_tool_bar() self.is_pane_maximum = False @@ -36,8 +38,8 @@ class MainWindow(QMainWindow, MainWindowType): self.cross_action = QAction(icon=QIcon(str(Path(__file__).parent.parent / "assets" / "plus.png")), text="cross", parent=self) self.file_action.triggered.connect(self.handle_file_open) - self.tool_bar.addAction(self.file_action) - self.tool_bar.addAction(self.cross_action) + self.ui.tool_bar.addAction(self.file_action) + self.ui.tool_bar.addAction(self.cross_action) def init_four_pane(self): self.coronal = VTKImageViewer(1) @@ -62,25 +64,35 @@ class MainWindow(QMainWindow, MainWindowType): self.sagittal.range_changed.connect(self.set_slide_range) self.transverse.range_changed.connect(self.set_slide_range) - self.volume_grid_layout.addWidget(self.volume) - self.coronal_grid_layout.addWidget(self.coronal, 0, 0, 8, 8) - self.gridLayout_3.addWidget(self.sagittal, 0, 0, 8, 8) - self.gridLayout_4.addWidget(self.transverse, 0, 0, 8, 8) + self.ui.volume_grid_layout.addWidget(self.volume) + self.ui.coronal_grid_layout.addWidget(self.coronal, 0, 0, 8, 8) + self.ui.sagittal_grid_layout.addWidget(self.sagittal, 0, 0, 8, 8) + self.ui.transverse_grid_layout.addWidget(self.transverse, 0, 0, 8, 8) + + self.ui.widget_coronal.mousePressEvent = self.cell_active + self.ui.widget_sagittal.mousePressEvent = self.cell_active + self.ui.widget_transverse.mousePressEvent = self.cell_active + self.ui.widget_3d.mousePressEvent = self.cell_active self.coronal_slider = QSlider(Qt.Orientation.Vertical) self.sagittal_slider = QSlider(Qt.Orientation.Vertical) self.transverse_slider = QSlider(Qt.Orientation.Vertical) - + self.coronal_slider.hide() + self.sagittal_slider.hide() + self.transverse_slider.hide() self.coronal_slider.valueChanged.connect(self.coronal.image_viewer.SetSlice) self.sagittal_slider.valueChanged.connect(self.sagittal.image_viewer.SetSlice) self.transverse_slider.valueChanged.connect(self.transverse.image_viewer.SetSlice) - self.coronal_grid_layout.addWidget(self.coronal_slider, 0, 8, 8, 1) - self.gridLayout_3.addWidget(self.sagittal_slider, 0, 8, 8, 1) - self.gridLayout_4.addWidget(self.transverse_slider, 0, 8, 8, 1) + self.ui.coronal_grid_layout.addWidget(self.coronal_slider, 0, 8, 8, 1) + self.ui.sagittal_grid_layout.addWidget(self.sagittal_slider, 0, 8, 8, 1) + self.ui.transverse_grid_layout.addWidget(self.transverse_slider, 0, 8, 8, 1) @Slot(int, int) def set_slide_range(self, quadrant, value): + self.coronal_slider.show() + self.sagittal_slider.show() + self.transverse_slider.show() if quadrant == 1: self.coronal_slider.setRange(0, value) elif quadrant == 3: @@ -91,56 +103,62 @@ class MainWindow(QMainWindow, MainWindowType): @Slot(int) def cell_max(self, quadrant: int): if self.is_pane_maximum: - self.widget_3d.show() - self.widget_coronal.show() - self.widget_sagittal.show() - self.widget_transverse.show() + for x in range(2): + self.ui.four_pane_grid.setRowStretch(x, 1) + self.ui.four_pane_grid.setColumnStretch(x, 1) + self.ui.widget_3d.show() + self.ui.widget_coronal.show() + self.ui.widget_sagittal.show() + self.ui.widget_transverse.show() self.is_pane_maximum = False else: - self.widget_3d.hide() - self.widget_coronal.hide() - self.widget_sagittal.hide() - self.widget_transverse.hide() + for x in range(2): + self.ui.four_pane_grid.setRowStretch(x, 0) + self.ui.four_pane_grid.setColumnStretch(x, 0) + self.ui.widget_3d.hide() + self.ui.widget_coronal.hide() + self.ui.widget_sagittal.hide() + self.ui.widget_transverse.hide() if quadrant == 1: - self.widget_coronal.show() + self.ui.widget_coronal.show() elif quadrant == 2: - self.widget_3d.show() + self.ui.widget_3d.show() elif quadrant == 3: - self.widget_sagittal.show() + self.ui.widget_sagittal.show() elif quadrant == 4: - self.widget_transverse.show() + self.ui.widget_transverse.show() self.is_pane_maximum = True @Slot(int) def cell_active(self, quadrant: int): - self.widget_3d.setStyleSheet(".QWidget {" - "border: none;" - "}") - self.widget_coronal.setStyleSheet(".QWidget {" - "border: none;" - "}") - self.widget_sagittal.setStyleSheet(".QWidget {" - "border: none;" - "}") - self.widget_transverse.setStyleSheet(".QWidget {" + self.ui.widget_3d.setStyleSheet(".QWidget {" + "border: none;" + "}") + self.ui.widget_coronal.setStyleSheet(".QWidget {" "border: none;" "}") - if quadrant == 1: - self.widget_coronal.setStyleSheet(".QWidget {" - "border: 1px solid tomato;" + self.ui.widget_sagittal.setStyleSheet(".QWidget {" + "border: none;" "}") - elif quadrant == 2: - self.widget_3d.setStyleSheet(".QWidget {" - "border: 1px solid tomato;" - "}") - elif quadrant == 3: - self.widget_sagittal.setStyleSheet(".QWidget {" - "border: 1px solid tomato;" - "}") - elif quadrant == 4: - self.widget_transverse.setStyleSheet(".QWidget {" + self.ui.widget_transverse.setStyleSheet(".QWidget {" + "border: none;" + "}") + if quadrant == 1: + self.ui.widget_coronal.setStyleSheet(".QWidget {" "border: 1px solid tomato;" "}") + elif quadrant == 2: + self.ui.widget_3d.setStyleSheet(".QWidget {" + "border: 1px solid tomato;" + "}") + elif quadrant == 3: + self.ui.widget_sagittal.setStyleSheet(".QWidget {" + "border: 1px solid tomato;" + "}") + elif quadrant == 4: + self.ui.widget_transverse.setStyleSheet(".QWidget {" + "border: 1px solid tomato;" + "}") @Slot() def handle_file_open(self): diff --git a/crystalfly/ui/main_window.ui b/crystalfly/ui/main_window.ui index 360d969..b0da28f 100644 --- a/crystalfly/ui/main_window.ui +++ b/crystalfly/ui/main_window.ui @@ -6,8 +6,8 @@ 0 0 - 800 - 600 + 850 + 628 @@ -19,37 +19,12 @@ - + 0 - - - border: 1px solid rgb(195, 195, 195); - - - - 1 - - - 1 - - - 1 - - - 1 - - - - - - - border: 1px solid rgb(195, 195, 195); -margin-left: -1px; - 1 @@ -66,14 +41,27 @@ margin-left: -1px; - - - - border: 1px solid rgb(195, 195, 195); -margin-left: -1px; -margin-top: -1px; - - + + + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + + 1 @@ -90,12 +78,8 @@ margin-top: -1px; - - - border: 1px solid rgb(195, 195, 195); -margin-top: -1px; - - + + 1 diff --git a/crystalfly/ui/main_window_ui.py b/crystalfly/ui/main_window_ui.py new file mode 100644 index 0000000..2ebe249 --- /dev/null +++ b/crystalfly/ui/main_window_ui.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'main_window.ui' +## +## Created by: Qt User Interface Compiler version 6.7.0 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, + QCursor, QFont, QFontDatabase, QGradient, + QIcon, QImage, QKeySequence, QLinearGradient, + QPainter, QPalette, QPixmap, QRadialGradient, + QTransform) +from PySide6.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QMainWindow, + QSizePolicy, QStatusBar, QToolBar, QWidget) + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(850, 628) + MainWindow.setStyleSheet(u"# background-color: rgb(50, 50, 50);") + self.file_open = QAction(MainWindow) + self.file_open.setObjectName(u"file_open") + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + self.horizontalLayout = QHBoxLayout(self.centralwidget) + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.four_pane_grid = QGridLayout() + self.four_pane_grid.setSpacing(0) + self.four_pane_grid.setObjectName(u"four_pane_grid") + self.widget_coronal = QWidget(self.centralwidget) + self.widget_coronal.setObjectName(u"widget_coronal") + self.coronal_grid_layout = QGridLayout(self.widget_coronal) + self.coronal_grid_layout.setObjectName(u"coronal_grid_layout") + self.coronal_grid_layout.setContentsMargins(1, 1, 1, 1) + + self.four_pane_grid.addWidget(self.widget_coronal, 0, 1, 1, 1) + + self.widget_3d = QWidget(self.centralwidget) + self.widget_3d.setObjectName(u"widget_3d") + self.volume_grid_layout = QGridLayout(self.widget_3d) + self.volume_grid_layout.setObjectName(u"volume_grid_layout") + self.volume_grid_layout.setContentsMargins(1, 1, 1, 1) + + self.four_pane_grid.addWidget(self.widget_3d, 0, 0, 1, 1) + + self.widget_sagittal = QWidget(self.centralwidget) + self.widget_sagittal.setObjectName(u"widget_sagittal") + self.sagittal_grid_layout = QGridLayout(self.widget_sagittal) + self.sagittal_grid_layout.setObjectName(u"sagittal_grid_layout") + self.sagittal_grid_layout.setContentsMargins(1, 1, 1, 1) + + self.four_pane_grid.addWidget(self.widget_sagittal, 1, 0, 1, 1) + + self.widget_transverse = QWidget(self.centralwidget) + self.widget_transverse.setObjectName(u"widget_transverse") + self.transverse_grid_layout = QGridLayout(self.widget_transverse) + self.transverse_grid_layout.setObjectName(u"transverse_grid_layout") + self.transverse_grid_layout.setContentsMargins(1, 1, 1, 1) + + self.four_pane_grid.addWidget(self.widget_transverse, 1, 1, 1, 1) + + self.four_pane_grid.setRowStretch(0, 1) + self.four_pane_grid.setRowStretch(1, 1) + self.four_pane_grid.setColumnStretch(0, 1) + self.four_pane_grid.setColumnStretch(1, 1) + + self.horizontalLayout.addLayout(self.four_pane_grid) + + self.horizontalLayout.setStretch(0, 16) + MainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QStatusBar(MainWindow) + self.statusbar.setObjectName(u"statusbar") + MainWindow.setStatusBar(self.statusbar) + self.tool_bar = QToolBar(MainWindow) + self.tool_bar.setObjectName(u"tool_bar") + MainWindow.addToolBar(Qt.ToolBarArea.LeftToolBarArea, self.tool_bar) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Crystalfly", None)) + self.file_open.setText(QCoreApplication.translate("MainWindow", u"\u6253\u5f00", None)) + self.tool_bar.setWindowTitle(QCoreApplication.translate("MainWindow", u"toolBar_2", None)) + # retranslateUi + diff --git a/crystalfly/ui/volume_viewer.py b/crystalfly/ui/volume_viewer.py index 18a8a84..17ca742 100644 --- a/crystalfly/ui/volume_viewer.py +++ b/crystalfly/ui/volume_viewer.py @@ -1,10 +1,14 @@ # noinspection PyUnresolvedReferences -import vtkmodules.vtkRenderingContextOpenGL2 +# noinspection PyUnresolvedReferences +import vtkmodules.all from PySide6.QtCore import Signal from PySide6.QtGui import QMouseEvent from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor +from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonDataModel import vtkPiecewiseFunction +from vtkmodules.vtkCommonTransforms import vtkTransform from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera +from vtkmodules.vtkRenderingAnnotation import vtkAxesActor from vtkmodules.vtkRenderingCore import vtkVolume, vtkVolumeProperty, vtkRenderer, vtkColorTransferFunction from vtkmodules.vtkRenderingVolume import vtkGPUVolumeRayCastMapper # noinspection PyUnresolvedReferences @@ -28,6 +32,13 @@ class VolumeViewer(QVTKRenderWindowInteractor): # self.iren = vtkRenderWindowInteractor() # self.iren.SetRenderWindow(self.render_window) + transform = vtkTransform() + transform.Translate(1.0, 0, 0) + colors = vtkNamedColors() + self.axes = vtkAxesActor() + self.axes.SetUserTransform(transform) + self.axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().SetColor(colors.GetColor3d("red")) + self.axes.SetPosition(0, 0, 0) self.volume_mapper = vtkGPUVolumeRayCastMapper() self.volume_mapper.SetBlendModeToComposite() self.volume_mapper.SetUseJittering(1) @@ -76,6 +87,8 @@ class VolumeViewer(QVTKRenderWindowInteractor): self.render_window.Render() self.renderer.ResetCamera() self.renderer.GetActiveCamera().Zoom(1.3) + # self.axes.Zoom(1.3) + self.renderer.AddActor(self.axes) self.volume.Update() # self.volume_mapper.Render() diff --git a/crystalfly/ui/vtk_viewer.py b/crystalfly/ui/vtk_viewer.py index 9732e1e..8bb4bbd 100644 --- a/crystalfly/ui/vtk_viewer.py +++ b/crystalfly/ui/vtk_viewer.py @@ -3,8 +3,9 @@ import vtkmodules.vtkRenderingContextOpenGL2 from PySide6.QtCore import Signal from PySide6.QtGui import QCloseEvent, QMouseEvent from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor -from vtkmodules.vtkInteractionImage import vtkImageViewer2 +from vtkmodules.vtkInteractionImage import vtkResliceImageViewer from vtkmodules.vtkInteractionStyle import vtkInteractorStyleImage +from vtkmodules.vtkInteractionWidgets import vtkResliceCursorLineRepresentation from crystalfly.model.image_reader import image_reader_model @@ -21,8 +22,8 @@ class VTKImageViewer(QVTKRenderWindowInteractor): self.render_window = self.GetRenderWindow() # image viewer - # self.image_viewer = vtkResliceImageViewer() - self.image_viewer = vtkImageViewer2() + self.image_viewer = vtkResliceImageViewer() + # self.image_viewer = vtkImageViewer2() # 交互 self.interactor_style = vtkInteractorStyleImage() @@ -32,8 +33,10 @@ class VTKImageViewer(QVTKRenderWindowInteractor): self.interactor_style.AddObserver("MouseWheelBackwardEvent", self.mouse_wheel_backward_event) self.iren.Initialize() - # rep = vtkResliceCursorLineRepresentation.SafeDownCast( - # self.image_viewer.GetResliceCursorWidget().GetRepresentation()) + rep = vtkResliceCursorLineRepresentation.SafeDownCast( + self.image_viewer.GetResliceCursorWidget().GetRepresentation()) + rep.GetResliceCursorActor().GetCursorAlgorithm().SetReslicePlaneNormal(self.quadrant) + self.image_viewer.SetResliceModeToAxisAligned() # # self.image_viewer. # rep.GetResliceCursorActor().GetCursorAlgorithm().SetReslicePlaneNormal(0) # diff --git a/poetry.lock b/poetry.lock index 94a33ce..da55f14 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,16 @@ # This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +[[package]] +name = "altgraph" +version = "0.17.4" +description = "Python graph (network) package" +optional = false +python-versions = "*" +files = [ + {file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"}, + {file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"}, +] + [[package]] name = "contourpy" version = "1.2.1" @@ -143,6 +154,25 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "importlib-metadata" +version = "7.1.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + [[package]] name = "importlib-resources" version = "6.4.0" @@ -274,6 +304,20 @@ files = [ {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] +[[package]] +name = "macholib" +version = "1.16.3" +description = "Mach-O header analysis and editing" +optional = false +python-versions = "*" +files = [ + {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"}, + {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"}, +] + +[package.dependencies] +altgraph = ">=0.17" + [[package]] name = "matplotlib" version = "3.8.4" @@ -379,6 +423,17 @@ files = [ {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] +[[package]] +name = "pefile" +version = "2023.2.7" +description = "Python PE parsing module" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"}, + {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, +] + [[package]] name = "pillow" version = "10.3.0" @@ -465,6 +520,57 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa typing = ["typing-extensions"] xmp = ["defusedxml"] +[[package]] +name = "pyinstaller" +version = "6.6.0" +description = "PyInstaller bundles a Python application and all its dependencies into a single package." +optional = false +python-versions = "<3.13,>=3.8" +files = [ + {file = "pyinstaller-6.6.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:d2705efe79f8749526f65c4bce70ae88eea8b6adfb051f123122e86542fe3802"}, + {file = "pyinstaller-6.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:2aa771693ee3e0a899be3e9d946a24eab9896a98d0d4035f05a22f1193004cfb"}, + {file = "pyinstaller-6.6.0-py3-none-manylinux2014_i686.whl", hash = "sha256:1fc15e8cebf76361568359a40926aa5746fc0a84ca365fb2ac6caeea014a2cd3"}, + {file = "pyinstaller-6.6.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:7c4a55a5d872c118bc7a5e641c2df46ad18585c002d96adad129b4ee8c104463"}, + {file = "pyinstaller-6.6.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:97197593344f11f3dd2bdadbab14c61fbc4cdf9cc692a89b047cb671764c1824"}, + {file = "pyinstaller-6.6.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:00d81ddeee97710245a7ed03b0f9d5a4daf6c3a07adf978487b10991e1e20470"}, + {file = "pyinstaller-6.6.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:b7cab21db6fcfbdab47ee960239d1b44cd95383a4463177bd592613941d67959"}, + {file = "pyinstaller-6.6.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:00996d2090734d9ae4a1e53ed40351b07d593c37118d3e0d435bbcfa8db9edee"}, + {file = "pyinstaller-6.6.0-py3-none-win32.whl", hash = "sha256:cfe3ed214601de0723cb660994b44934efacb77a1cf0e4cc5133da996bcf36ce"}, + {file = "pyinstaller-6.6.0-py3-none-win_amd64.whl", hash = "sha256:e2f55fbbdf8a99ea84b39bc5669a68624473c303486d7eb2cd9063b339f0aa28"}, + {file = "pyinstaller-6.6.0-py3-none-win_arm64.whl", hash = "sha256:abbd591967593dab264bcc3bcb2466c0a1582f19a112e37e916c4212069c7933"}, + {file = "pyinstaller-6.6.0.tar.gz", hash = "sha256:be6bc2c3073d3e84fb7148d3af33ce9b6a7f01cfb154e06314cd1d4c05798a32"}, +] + +[package.dependencies] +altgraph = "*" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""} +packaging = ">=22.0" +pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""} +pyinstaller-hooks-contrib = ">=2024.3" +pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""} +setuptools = ">=42.0.0" + +[package.extras] +completion = ["argcomplete"] +hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] + +[[package]] +name = "pyinstaller-hooks-contrib" +version = "2024.5" +description = "Community maintained hooks for PyInstaller" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyinstaller_hooks_contrib-2024.5-py2.py3-none-any.whl", hash = "sha256:0852249b7fb1e9394f8f22af2c22fa5294c2c0366157969f98c96df62410c4c6"}, + {file = "pyinstaller_hooks_contrib-2024.5.tar.gz", hash = "sha256:aa5dee25ea7ca317ad46fa16b5afc8dba3b0e43f2847e498930138885efd3cab"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +packaging = ">=22.0" +setuptools = ">=42.0.0" + [[package]] name = "pyparsing" version = "3.1.2" @@ -544,6 +650,33 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "pywin32-ctypes" +version = "0.2.2" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, + {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, +] + +[[package]] +name = "setuptools" +version = "69.5.1" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + [[package]] name = "shiboken6" version = "6.7.0" @@ -627,4 +760,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "<3.13,>=3.9" -content-hash = "6c724ee2023b791644f31d73b59fa6fa3cd74d1fe020626be9d592f4a5d49662" +content-hash = "552e3693360108125425bea4f6a919cf793ff3ddd4bb7850609280139f3057cd" diff --git a/pyproject.toml b/pyproject.toml index 912f4a7..9aed264 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ readme = "README.md" python = "<3.13,>=3.9" pyside6 = "^6.7.0" vtk = "^9.3.0" +pyinstaller = "^6.6.0" [build-system]