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 0000000..0eebc02 Binary files /dev/null and b/crystalfly/assets/raspberrypi.png differ 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 b626cef..0725d02 100644 Binary files a/crystalfly/ui/__pycache__/import_file.cpython-311.pyc and b/crystalfly/ui/__pycache__/import_file.cpython-311.pyc differ diff --git a/crystalfly/ui/__pycache__/main_window.cpython-311.pyc b/crystalfly/ui/__pycache__/main_window.cpython-311.pyc index 172eaa0..1c97cf3 100644 Binary files a/crystalfly/ui/__pycache__/main_window.cpython-311.pyc and b/crystalfly/ui/__pycache__/main_window.cpython-311.pyc differ diff --git a/crystalfly/ui/__pycache__/volume_viewer.cpython-311.pyc b/crystalfly/ui/__pycache__/volume_viewer.cpython-311.pyc index 32f042b..44fd933 100644 Binary files a/crystalfly/ui/__pycache__/volume_viewer.cpython-311.pyc and b/crystalfly/ui/__pycache__/volume_viewer.cpython-311.pyc differ diff --git a/crystalfly/ui/__pycache__/vtk_viewer.cpython-311.pyc b/crystalfly/ui/__pycache__/vtk_viewer.cpython-311.pyc index b124128..790369d 100644 Binary files a/crystalfly/ui/__pycache__/vtk_viewer.cpython-311.pyc and b/crystalfly/ui/__pycache__/vtk_viewer.cpython-311.pyc differ 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]