CamiTK Community Edition issueshttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues2020-07-09T21:29:06+02:00https://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/105Invisible VTK 3D widgets2020-07-09T21:29:06+02:00Emmanuel PromayonInvisible VTK 3D widgets## About you
CamiTK dev
## Overview
VTKWidgets not visible in 3D
## Steps to Reproduce
1. Open a mesh component file
2. Launch the Mesh Clipping action
3. Nothing vtk widget appears in 3D
## Actual VS Expected Result
There should...## About you
CamiTK dev
## Overview
VTKWidgets not visible in 3D
## Steps to Reproduce
1. Open a mesh component file
2. Launch the Mesh Clipping action
3. Nothing vtk widget appears in 3D
## Actual VS Expected Result
There should be a vtk widget to change the cutting plane
## Interpretation & Possible fixes
Check the action code, is the widget properly initialized
## CamiTK Version
CamiTK 4.2.dev.develop.04a1c024
---
**please do not remove anything below this line**CamiTK 4.2 Sprint # 2Emmanuel PromayonEmmanuel Promayonhttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/83Remove console on windows version of all GUI CamiTK application (camitk-imp, ...2020-07-30T16:03:34+02:00Emmanuel PromayonRemove console on windows version of all GUI CamiTK application (camitk-imp, camitk-actionstatemachine, camitk-wizard)| | |
|--|--|
| **As a** | camitk-imp user and CamiTK developer |
| **I would like to** | optimize the application performance and not have a visible (1990's) dark console when I launch imp |
| **So that** | I am not disturbed by another...| | |
|--|--|
| **As a** | camitk-imp user and CamiTK developer |
| **I would like to** | optimize the application performance and not have a visible (1990's) dark console when I launch imp |
| **So that** | I am not disturbed by another window on the screen, and therefore I focus on the task I need to do in the main window of camitk-imp |
| **Epic/Topics** | ] |
## Description / Overview
By default, MSVC compile camitk-imp and all other GUI-based CamiTK programs as a console program.
As stated [here](https://blog.rubenwardy.com/2019/02/15/porting-cpp-to-windows-vcpkg/), this mode results in Windows allocating and showing a console for you when starting the program up (e.g. CamiTK-imp). This console will require a redraw on every std::cerr or std::cout print, resulting in massive performance issues.
The best would be have a specific option in the `camitk_application` macro to declare the application as a console application (by default, and considering the CAMI domain, I suppose it is better to say that an application has a GUI by default, only specific CamiTK application are console only).
E.g.:
```cmake
camitk_application(...
NO_GUI
...
)
```
## Hints
As stated [here](https://blog.rubenwardy.com/2019/02/15/porting-cpp-to-windows-vcpkg/):
> If you program shows a graphical window, then you should change it to a Windows program. There are three methods to do this.
> The first option is to set the executable type to WIN32 in CMake:
```cmake
if(WIN32)
add_executable(${EXECUTABLE_NAME} WIN32 ${SRC})
else()
add_executable(${EXECUTABLE_NAME} ${SRC})
endif()
```
This is confirmed to work in [this answer on stackoverflow](https://stackoverflow.com/a/36528717/9890401).
The [second proposed option](https://blog.rubenwardy.com/2019/02/15/porting-cpp-to-windows-vcpkg/) seems a bit to windowesque and rely on the MSVC compiler. The third proposed option should not be considered here as it won't be a nice way considering the CamiTK objectives (it make use of a `#pragma`)
See also the [CMake documentation for add_executable](https://cmake.org/cmake/help/latest/command/add_executable.html) and [WIN32_EXECUTABLE property/flag](https://cmake.org/cmake/help/latest/prop_tgt/WIN32_EXECUTABLE.html#prop_tgt:WIN32_EXECUTABLE)
## Acceptance tests
- [x] When run camitk-imp, camitk-actionstatemachine, and camitk-wizard do not show any console
- [x] All other CamiTK CE application seem to work as before (e.g. the config and cepgenerator test pass)
- [x] The `camitk_application` macro has a new option for console application
- [x] The `camitk_application` macro documents this new option (so that generated doxygen talks about it)
## Track
~"Track Prototyping Experience" CamiTK 4.2 Sprint # 3Jean-Loup HaberbuschJean-Loup Haberbuschhttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/118Replace Copyright text by a more discrete watermark.2021-01-19T06:51:09+01:00Emmanuel PromayonReplace Copyright text by a more discrete watermark.## About you
CamiTK developer/maintainer
## Product
CamiTK interactive viewers
## Overview
Since the update to support VTK 7, the copyright text disappeared from the right corner of the Interactive Viewer instances.
Although the copy...## About you
CamiTK developer/maintainer
## Product
CamiTK interactive viewers
## Overview
Since the update to support VTK 7, the copyright text disappeared from the right corner of the Interactive Viewer instances.
Although the copyright text was a bit 1980's it was nice to have something that was a bit like a watermark.
It was quite intrusive though (but it was possible to remove it by Right-Clicking on an interactive viewer).
The best would be to replace it by a more discrete watermark.
I suggest using a smallish CamiTK logo with some transparency in the very bottom very right corner of the viewer.
The advantage will be to encourage people to leave the logo (it is too small to be annoying in most of the case), and therefore be able to promote nice projects that use CamiTK.
→ May be have a little dialog to promote citing the article as well/instead of the logo, when the user decide to disable the logo?
---CamiTK 4.2 Sprint # 3Emmanuel PromayonEmmanuel Promayonhttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/116More coherent MISR tutorial actions GUI2021-01-05T07:31:05+01:00Emmanuel PromayonMore coherent MISR tutorial actions GUI## About you
CamiTK developer
## Product
Mainly camitk-imp
## Overview
During the http://misr.free.fr tutorial, there are three different things that could be improved in order to make discovering medical image analysis easier and fac...## About you
CamiTK developer
## Product
Mainly camitk-imp
## Overview
During the http://misr.free.fr tutorial, there are three different things that could be improved in order to make discovering medical image analysis easier and facilitate knowledge acquisitions:
- (easy) the action menu are not coherent (the "Display" family has "Volume Rendering" but not "Lookup Table" action, Save, Close, Save As are in a menu called "Application", which is not the same as the menu name in the menu bar
- (time consuming) the Volume Rendering action is not really easy to use (complex to setup) and appears in a separate window (and is not managed like any other actions)
- (hard) the Lookup Table action has a lot of bugs and does not allow a proper visualization/interaction with the values in the images
## What can be done
- [x] Rename the "Application" menu to "File"
- [X] Rewrite "Volume Rendering" so that it can be used like any other actions
- [X] Debug Lookup Table and improve the GUI so that it has a true pedagogical usage
- [x] Rename "Display" to "View" and move "Lookup Table", "Arbitrary Slice" to this family.
- [x] Move "Visibility" to "View"
- [X] Computed output in Otsu and Connected component should be updated automatically, visible once the action is performed, and reset at each select and should also appear in the log
- [X] Visibility toggle should be visible for the View actions
- [X] Manual filter should take the voxel range value, not the type min/max (and therefore be updated at each select
- [X] Try to fix opening file with space/special character in path on windows
- [X] better handling of mha/mhd when type is not unsigned char
- [X] Frame editor manages precision (when value <1e-6, just display 0.0)
- [x] Separate frame editor in three actions: show/hide frame, set parent frame, show/edit frame
---
**please do not remove anything below this line**CamiTK 4.2 Sprint # 3Emmanuel PromayonEmmanuel Promayonhttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/157Reference frames and transformations management2024-03-28T14:25:48+01:00Manik BhattacharjeeReference frames and transformations management| | |
|--|--|
| **As a** | CamiTK developer |
| **I would like to** | support and document reference frames, geometrical transformations and orientation conventions |
| **So that** | CamiTK can load, register and display volumes and mesh...| | |
|--|--|
| **As a** | CamiTK developer |
| **I would like to** | support and document reference frames, geometrical transformations and orientation conventions |
| **So that** | CamiTK can load, register and display volumes and meshes with explicit reference frames, transformations and anatomical orientations |
| **Epic/Topics** | Referential Management Epic |
## Current state overview
**Geometrical transformations in CamiTK are currently managed by**:
- Frames which are attached to all components
- A transformation from each frame to its parent Frame
- A World Frame
- A default orientation for volumes (RAI convention)
- Depending on the file format used (DICOM, MHD/MHA, Nifti...) the transformation to the parent frame may or may not be loaded/saved
- Depending on the file format, the anatomical orientation may be loaded/saved or not, and conversion to RAI may or may not work.
- There is no standard way to store a registration between two images so that CamiTK reloads it when the software loads images again
## Solutions
### 1. Documentation
- Document every detail of geometrical conventions using illustrations when needed to avoid confusion
- For DICOM, there is the position of the patient in the machine, the position of the image relative to the machine, and the convention of the order to save the pixels. [Illustrations are useful](https://dicom.nema.org/medical/Dicom/2016e/output/chtml/part03/sect_C.7.3.html#sect_C.7.3.1.1.2).
- Matrices may be stored in row-major (Nifti) or column-major order (MHA file format)
- For each image and mesh file format, detail how we read and write it (e.g. ITK and VTK do not read and write the same information in the header and do not assume the same conventions for MHA format). This should explain how CamiTK may differ with other software and why we took those decisions.
### 2. Main (core) changes
- Define a CamiTK unique ID : **CamiUID** so that each object has a unique ID, maybe associated with a name, a description and a type ?
- Define a **ReferenceFrame** class (mostly a CamiUID) so that every displayable component has an instance of it
- We have to keep the **anatomical orientation** information. It might be stored in the Referential object and specify which axes (if known) are Right/Left, Superior/Inferior, Anterior/Posterior. This information is transitive (e.g. if there is no large rotation (> 45°) or axes flipping, the anatomical orientation is the same between two reference frames linked by a transformation). It can be set to UNKNOWN (in which case a viewer should not display the anatomical directions).
- Define a **Transformation** class that has an origin and a destination (from/to) ReferenceFrame, a vtkTransform (by default a linear transform represented by a 4x4 matrix), and a CamiUID. Make it generic enough so that it could manage a 4th dimension (e.g. for a time offset between videos) and non-linear transformations
- The Frame interface should be updated
- A Referential and Transformation Manager should be included in CamiTK Application to manage the list of known reference frames and transformations
- In this manager, keep the source of referentials and transformations. E.g. if a Nifti file contains two transforms, the loaded nifti component, when saved, should save again both transforms. and not other transforms to other referentials. Or maybe this information should be stored in the Image Component itself (which transformations to save).
- A CamiTK world referential will exist by default, and components that are loaded without specific transformations to CamiTK will have an identity transform from their referential to CamiTKWorldReferential
- There is no reason to force an orientation convention in CamiTK (e.g. RAI for all volumes).
### 3. UI changes
- An explorer for referential and transformations should be provided, (like the Component explorer, the property explorer and so on). It should be able to display/edit transformations, to link referentials with new transformations (identity, loaded from file...).
- A color code for each referential will be displayed next to each component name, and next to each viewer name, and can be changed by clicking on it to choose another one
### 4. I/O ###
- Define a way to store metadata associated to files (e.g., keep the UID of the referential of a MHD file).
This is linked to a metadata format (see specific issue #158) that should be defined for all CamiTK-related data (such as the LUT settings associated to an image, a list of actions to run for a state machine, a scene description and so on). If possible, choose a human-readable format and try to be compatible with other software or norms, e.g. the JSON format used by [BIDS](https://bids.neuroimaging.io/) or in the metadata files of [Brainvisa](https://brainvisa.info). Maybe a .camitk file.
- test
### 5. Viewers
- Each viewer is attached to a reference frame (e.g. all coordinates of a selected point in the viewer are expressed in this referential), and a camera position and orientation.
- Slice viewers may use their reference frame orientation information to display R/L, A/P, I/S directions
- In viewer preferences, the user can set its own convention (Right displayed on the left, or right displayed on the right)
- When adding a volume to a SliceViewer, it should get its reference frame from it, use anatomical orientation information of the frame, and user preference to orient its camera transform (no need to have RAI/LAS or other convention forced on the volume).
- Viewers should be in charge of the way they want to display a volume (e.g. no Axial View Component, just a SliceViewer with a camera orientation that matches Axial, and a volume image).
- Medical Image Viewer should manage the slices displayed in the 3D view in relation to the slices displayed in the SliceViewers by itself (not using subcomponents)
- A common cursor between viewers can be achieved by following the transformation graph from one view's reference frame to another viewer's reference frame. We can display a 3D cross with its own reference frame, and moving the cursor means changing the transformation between this frame and the selected object's frame. This allows a 3D cursor in a SliceViewer to be displayed in a 3D viewer, rotated with the angle of the slice currently being clicked on.
## Acceptance tests
- [ ] [Documentation is clear and complete]
- [ ] [Reading an image, registering it with another, saving both, then closing the software and reading both again should load all referentials and transforms so that the images are still aligned]
- [ ] [Same test with an image and a mesh segmented from it]
- [ ] [Same test with two meshes registered then saved and loaded again]
- [ ] [3D cursor synchronized between views with different referentials]
- [ ] [Displaying a volume in a SliceViewer using a referential of another volume (should display "arbitrary" slices of the volume aligned with the slices of the other volume)]
- [ ] [Loading two volumes from the same MRI acquisition should show volumes aligned because of the common scanner-based reference]
- [ ] use QUuid as a map key in TransformationManager, not QString
- [ ] Cleanup the TransformationManager API (maybe too complete/complex)
- [ ] Better API Documentation
- [ ] Remove C++23 specific code (too early)
## Track
## Misc
- Automatic subscription of issue creator:
**If appropriate, do not forget to mark this issue as "confidential"** by checking the corresponding tick box belowManik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/158CamiTK File Format - metadata, scenes, processing scenarios...2024-02-13T23:09:12+01:00Manik BhattacharjeeCamiTK File Format - metadata, scenes, processing scenarios...| | |
|--|--|
| **As a** | CamiTK developer |
| **I would like to** | define a file format for CamiTK I/O |
| **So that** | CamiTK can load and save scenes, metadata associated with files, user preferences, scenarios for the state machin...| | |
|--|--|
| **As a** | CamiTK developer |
| **I would like to** | define a file format for CamiTK I/O |
| **So that** | CamiTK can load and save scenes, metadata associated with files, user preferences, scenarios for the state machine... |
| **Epic/Topics** | |
## Description / Overview
CamiTK needs to store multiple types of data. An extensible file format should be designed for the following use cases:
- Metadata files: storing LUT settings/color settings and geometrical transformations associated with a file, as well as CamiTK properties.
- Storing scenes (objects loaded, geometrical transformations, actions settings)
- Storing processing scenario such as used by the state machine to allow batch processing of data
- Storing user preferences
## Hints
- A human-readable format would be better (e.g. JSON)
- For scenes, CardioModel CEP and Meniscare CEP have scene formats to load multiple registered images together. but they should be made more generic
- The CamiTK state machine already has a XML-based format to define processing steps
## Acceptance tests
- [ ] Load a volume, register it to another image, set its LUT. Close CamiTK. When opening the image again, it should still be registered and keep its LUT settings.
- [ ] Any action should have its settings saved in the metadata of the file it was used on, and the settings should be loaded when opening the file again
- [ ] Loading a scene file reopens the scene as it was before closing it (all images, actions, viewers...)
- [ ] Opening a file, using multiple actions to get an output and saving it could be saved as a processing scenario, and applied to another input.
## Track
## Misc
- Automatic subscription of issue creator:
**If appropriate, do not forget to mark this issue as "confidential"** by checking the corresponding tick box belowManik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/179Persistence: select parts to save, support Action properties, automatic actio...2024-03-26T19:15:48+01:00Manik BhattacharjeePersistence: select parts to save, support Action properties, automatic action replay and processing scenarios in camitk files## About you
CamiTK developer
## Product
PersistenceManager and Actions
## Overview
- PersistenceManager should allow to select which parts to save in saveWorkspace, maybe with flags (components/actions/history/mainwindow/viewers...)...## About you
CamiTK developer
## Product
PersistenceManager and Actions
## Overview
- PersistenceManager should allow to select which parts to save in saveWorkspace, maybe with flags (components/actions/history/mainwindow/viewers...)
- Action properties should be loaded without causing a crash: add a flag to Action to say whether they support parameter reloading
- Actions should specify (with a flag) whether they should be replayed (e.g. Mesh Projection: when the workspace is loaded, we want to show again the mesh projections, SmoothingFilter should be re-applied to show smooth meshes)
- Processing scenarios and History support should be added in CamiTK files and saveWorkspace, with a corresponding load function.
- Add an "Export Workspace" that saves the workspace in a directory and "save as" all components in this directory. This avoids the problem of unsaved components when saving a workspace (e.g. with CEP Focus, ultrasound acquisitions can produce many volume images, and the user wants to save everything without entering a filename for each component, so exporting the whole workspace, components included would be useful)
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/178Pick a point in 3D Viewer, view a 3D cursor2024-01-31T18:55:06+01:00Manik BhattacharjeePick a point in 3D Viewer, view a 3D cursor## About you
CamiTK developer, from multiple users' wishlist.
## Product
Medical Image Viewer, 3D Viewer
## Overview
Currently, the user cannot ctrl+click on a point in the 3D Viewer (except to select a part of a Mesh), and the curre...## About you
CamiTK developer, from multiple users' wishlist.
## Product
Medical Image Viewer, 3D Viewer
## Overview
Currently, the user cannot ctrl+click on a point in the 3D Viewer (except to select a part of a Mesh), and the currently selected point is not visible in the 3D View.
- The users would like to be able to click on an ImageComponent to set the coordinates of a point, like when using Ctrl+Click on 2D Views.
- This should also work on a MeshComponent.
- Showing the position of this point as a 3D cursor (such as a 3D cross) would be a plus.
- Clicking on an Actor could also be used to select components (e.g. clicking on a mesh should select the associated mesh component)
---
**please do not remove anything below this line**https://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/177Save All fails if a Component does not have a filename (e.g. newly reconstruc...2024-02-07T12:35:39+01:00Manik BhattacharjeeSave All fails if a Component does not have a filename (e.g. newly reconstructed mesh)## About you
CamiTK developer
## Overview
SaveAll implementation is wrong and fails in multiple ways when components to save do not have a filename. This can lead to data loss (thinking a file was saved even it was not) and segfault (w...## About you
CamiTK developer
## Overview
SaveAll implementation is wrong and fails in multiple ways when components to save do not have a filename. This can lead to data loss (thinking a file was saved even it was not) and segfault (when no component is selected).
## Steps to Reproduce
Open two masks (e.g. skull-binary.stl and head-binary from testdata).
Using action Reconstruction to create a mesh from each mask.
- Scenario 1
- Select both meshes
- Click on "Save All" from the File menu
- In the first Save As window, save as Mesh1.obj
- In the second window, save as Mesh2.obj
- Scenario 2
- Deselect all components
- Click on "Save All" from the File menu
## Actual VS Expected Result
- Scenario 1
- Expected: both meshes are saved in their own file, each now has a filename set to the one that was used to save them
- Actual: only one of the meshes was saved in both files. This mesh now has a filename set to the latest file saved. The other mesh is ignored and not saved
- Scenario 2
- Expected: both meshes are saved in their own file
- Actual result: CamiTK crashes, all work is lost
## Interpretation & Possible fixes
- `SaveAllAction::apply` calls `Application::save` on all top-level components.
- `Application::save` checks if the filename is empty. If it is, it calls
- `getAction("Save As")->apply()`.
The problem here is that the `SaveAsAction::apply` function does not know which component it must save, as this is not a parameter of `apply`.
It will try to save the last selected component, which is probably not the one we are trying to save.
`Component* comp = Application::getSelectedComponents().last();`
If there is no selected component (Scenario 2), this tries to get a Component from an empty list and crashes (qt_assert in debug mode).
If there is at least a selected component, SaveAll will save the last selected component over and over again.
**To fix this**
Modify action "Save As" so we can set a componentToSave parameter, apply it, then reset ComponentToSave to null_ptr. Apply would then check for this parameter, revert to the current behaviour if it is empty, and check if there are selectedComponents before getting the last element.
## CamiTK Version
CamiTK 5.2.0.158-camitk-file-format-metadata-scenes-processing-scenarios.c46342cd
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/176Triggering the Arbitrary Slice action crashes with 2D images2023-12-22T23:07:35+01:00Emmanuel PromayonTriggering the Arbitrary Slice action crashes with 2D images## About you
CamiTK developer
## Overview
When triggering the "Arbitrary Slice" on an image component that contains a 2D image, the application crashes.
## Steps to Reproduce
Save [this image](/uploads/43c877105d9b1b7d3fd67d85088016...## About you
CamiTK developer
## Overview
When triggering the "Arbitrary Slice" on an image component that contains a 2D image, the application crashes.
## Steps to Reproduce
Save [this image](/uploads/43c877105d9b1b7d3fd67d85088016b0/debian-logo.png) and open it with `camitk-imp`
Select the component, and select the `View` → `Arbitrary Slice`
→ `camitk-imp` crashes
## Actual VS Expected Result
No crash !
The arbitrary slice action should abort cleanly and a warning message should be displayed to explain why the action aborted.
## Interpretation & Possible fixes
The arbitrary slice's `SingleImageComponent` is only created if the image component has 3 dimensions (see ImageComponent.cpp:562 and line 571. When the arbitrary slice action is triggered it does not take into account the fact that an `ImageComponent` can have no arbitrary slice subcomponent.
Check the pointer value before accessing it (see AnglesAndTranslationAction::getWidget(), line 106).
## CamiTK Version
CamiTK 5.2.0.develop. 54c95fce
---
**please do not remove anything below this line**https://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/174Generic user interface improvements2023-12-08T23:29:36+01:00Emmanuel PromayonGeneric user interface improvements## About you
CamiTK developer that listen to my users
## Overview
This issue covers all small UI improvements.## About you
CamiTK developer that listen to my users
## Overview
This issue covers all small UI improvements.https://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/173In Action viewer's search panel, the Family combo box does not filter actions2023-11-29T14:58:33+01:00Manik BhattacharjeeIn Action viewer's search panel, the Family combo box does not filter actions## About you
CamiTK developer
## Overview
In the action viewer, the "Family" combo box does nothing.
## Steps to Reproduce
- from a newly built CamiTK, run camitk-imp
- open testdata/sinus-displaced.mha
- In the menu click on View/To...## About you
CamiTK developer
## Overview
In the action viewer, the "Family" combo box does nothing.
## Steps to Reproduce
- from a newly built CamiTK, run camitk-imp
- open testdata/sinus-displaced.mha
- In the menu click on View/Toggle Docked Viewers/Action Viewer to show the Action viewer panel
- Select the component
- Click on the Action combobox in the actions panel and see the list of available actions
- Select a Family e.g. Frame
- Click on the Action combobox, all actions are still there
## Actual VS Expected Result
All actions are visible, nor only the actions from the selected family.
## Interpretation & Possible fixes
This bug was introduced by commit 1bdd9a84 with a change to ImpMainWindow.cpp around line 111.
The line
`actionViewer->setSearchPanelVisible(true);`
was removed.
We could either restore this line (and the necessary dynamic_cast to ActionViewer) or call it from the ActionViewer constructor.
I am not certain why setSearchPanelVisible should disconnect the link from the combobox'signals to the relevant methods.
## CamiTK Version
CamiTK 5.2.0.157-reference-frames-and-transformations-management.a9f78af5
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/172On Windows, CamiTK applications may block or wait indefinitely2023-11-27T15:47:09+01:00Manik BhattacharjeeOn Windows, CamiTK applications may block or wait indefinitely## About you
CamiTK developer, reported by two windows users
## Overview
After a crash, and even after reinstalling CamiTK, camitk-imp does not open or takes a very long time (several minutes) before opening. camitk-config can display ...## About you
CamiTK developer, reported by two windows users
## Overview
After a crash, and even after reinstalling CamiTK, camitk-imp does not open or takes a very long time (several minutes) before opening. camitk-config can display paths, but will not return for a very long time, or display a locking timeout in a command window.
## Steps to Reproduce
Not obvious. It seems to involve .lock or .rmlock files in %username%/AppData/Roaming/CamiTK directory.
Removing the entire directory seems to fix it.
## Actual VS Expected Result
Expected: camitk-imp starts in a few seconds (not minutes), and camitk-config returns less than a second after displaying the info (not minutes).
## Relevant logs and/or screenshots
A Qt message is sometimes displayed in a loop in a terminal while camitk-config is waiting to exit (data already displayed, but the software is not exiting): "Got unexpected locking error 123"
## Interpretation & Possible fixes
Not obvious. It seems that in some circumstances, in the %username%/AppData/Roaming/CamiTK directory, some lock files are present and Qt tries to lock settings files but fails to do so. It might also come from a conflict between camitk-config and camitk-imp trying to access the file at the same time.
This stems from the Application class creating a QSettings object in Application.cpp (global static object):
`QSettings Application::settings(QSettings::IniFormat, QSettings::UserScope, "CamiTK", QString(Core::version).remove(QChar(' ')));`
From [Qt documentation](https://doc.qt.io/qt-6/qsettings.html#accessing-settings-from-multiple-threads-or-processes-simultaneously) IniFormat should work and manage locking correctly, but it seems that sometimes it fails to do so.
Turning the locking safety off might solve this problem as stated [in the documentation](https://doc.qt.io/qt-6/qsettings.html#setAtomicSyncRequired) but it might create other issues (if multiple camitk applications are running and overwrite each other's settings).
## CamiTK Version
Stable 5.0 windows version
---
**please do not remove anything below this line**https://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/171Crash when printing debug information (F2 key)2023-11-24T16:35:20+01:00Manik BhattacharjeeCrash when printing debug information (F2 key)## About you
CamiTK developer
## Overview
When a component is displayed in InteractiveViewer, pressing the F2 key should display debug information in the log.
Instead, CamiTK crashes (segfault).
## Steps to Reproduce
- Run camitk-imp...## About you
CamiTK developer
## Overview
When a component is displayed in InteractiveViewer, pressing the F2 key should display debug information in the log.
Instead, CamiTK crashes (segfault).
## Steps to Reproduce
- Run camitk-imp
- Open a mesh (.obj) or an image (.nii)
- Push F2 key
## Actual VS Expected Result
IMP crashes and does not display debug information
## Interpretation & Possible fixes
Crash happens in InteractiveViewer.cpp when creating a list of all props from a component:
`std::list<vtkSmartPointer <vtkProp> > allActors(actorMap.values(c).begin(), actorMap.values(c).end());`
## CamiTK Version
Current develop branch of camitk-5.2
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/170Elastix registration using the elastix command2023-11-26T18:34:59+01:00Emmanuel PromayonElastix registration using the elastix command| | |
|--|--|
| **As a** | camitk-imp user... |
| **I would like to** | register image using the elastix software from CamiTK |
| **So that** | I can change the main parameter, call elastix and see the registration result in CamiTK witho...| | |
|--|--|
| **As a** | camitk-imp user... |
| **I would like to** | register image using the elastix software from CamiTK |
| **So that** | I can change the main parameter, call elastix and see the registration result in CamiTK without using the command line |
| **Epic/Topics** | medical image registration |
## Description / Overview
Select main registration parameters in an Action interface. Apply registration using "Apply" button
Basically this issue is to perform [MISR tutorial 3](https://promayoe.gricad-pages.univ-grenoble-alpes.fr/walnut/tutorials/misr/03/index.html) using camitk-imp instead of the command line.
## Hints
Call elastix/elastix.exe from the action
## TrackEmmanuel PromayonEmmanuel Promayonhttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/168Fancy segfault2023-10-29T15:05:39+01:00Emmanuel PromayonFancy segfault## About you
CamiTK dev
## Overview
Application camitk-fancy crashed with segfault as soon as it starts.
## Steps to Reproduce
- build CamiTK with -DCEP_TUTORIAL=TRUE
- cd build
- bin/camitk-fancy
## Actual VS Expected Result
Crash...## About you
CamiTK dev
## Overview
Application camitk-fancy crashed with segfault as soon as it starts.
## Steps to Reproduce
- build CamiTK with -DCEP_TUTORIAL=TRUE
- cd build
- bin/camitk-fancy
## Actual VS Expected Result
Crash versus fancy main window opening
## Interpretation & Possible fixes
`comp` attribute is not set to nullptr
## CamiTK Version
CamiTK 5.2.0.develop.3480339c
Compiled using git Hash: 3480339c7626584d1ad62f045dbc5cf5b472345f, Date: Fri Jul 28 14:49:32 2023 +0200.Emmanuel PromayonEmmanuel Promayonhttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/153DicomComponent ignores DICOM orientation2023-07-26T16:19:28+02:00Manik BhattacharjeeDicomComponent ignores DICOM orientation## About you
CamiTK developer
## Overview
When using DicomComponent to load a volume, the image transform from DICOM header is ignored.
## Steps to Reproduce
Load a Dicom volume (e.g. MRI) that was not acquired directly in the orient...## About you
CamiTK developer
## Overview
When using DicomComponent to load a volume, the image transform from DICOM header is ignored.
## Steps to Reproduce
Load a Dicom volume (e.g. MRI) that was not acquired directly in the orientation of the scanner.
Observe that the Frame transform to world coordinates is identity
## Actual VS Expected Result
The frame transform between the loaded DicomComponent and world coordinates should be the transform stored in the DICOM (Image Position and Orientation of Patient).
## Interpretation & Possible fixes
CardioModel CEP Dicom Component (from @lecesnee and @fouardc) implements reading the transform and setting it in the frame of the component. Importing the code into the current DicomComponent should solve this.
## CamiTK Version
CamiTK 5.1.dev.develop.c3d59664
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/142Toolbar for each viewer2023-06-14T08:19:10+02:00Manik BhattacharjeeToolbar for each viewer## About you
CamiTK developer
## Product
IMP UI and Viewers
## Overview
The main toolbar does not apply to all viewers, which is confusing, and does not allow buttons specific to a viewer (e.g. display mode).
Code structure is alread...## About you
CamiTK developer
## Product
IMP UI and Viewers
## Overview
The main toolbar does not apply to all viewers, which is confusing, and does not allow buttons specific to a viewer (e.g. display mode).
Code structure is already developed with viewer-specific toolbars in mind.
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/141Add icon next to components to show/hide components in viewers2023-11-24T19:10:15+01:00Manik BhattacharjeeAdd icon next to components to show/hide components in viewers## About you
CamiTK developer
## Product
Main IMP interface - Component explorer
## Overview
In the list of components in camitk-imp, it would be useful to have an eye icon next to the component's name to click on to show or hide co...## About you
CamiTK developer
## Product
Main IMP interface - Component explorer
## Overview
In the list of components in camitk-imp, it would be useful to have an eye icon next to the component's name to click on to show or hide components in views.
As visibility depends on the view:
- should we add a ViewerExplorer in IMP that would allow to select views (adding or removing components from views before setting visibility,
- just show/hide on all views ?
- Allow drag and drop of a component into a viewer to make it visible in that viewer.
## Relevant logs and/or screenshots
Eye icons that are already present in CamiTK: sdk/libraries/core/resources/oxygen_icons/actions/layer-visible-on.png
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjeehttps://gricad-gitlab.univ-grenoble-alpes.fr/CamiTK/CamiTK/-/issues/140Better LUT editor, standard LUT should be provided as well2024-03-25T17:37:38+01:00Manik BhattacharjeeBetter LUT editor, standard LUT should be provided as well## About you
CamiTK developer
## Product
sdk/actions/image/imagelut
## Overview
The LUT editor only allows to choose one color (changing the first color does nothing) and go from black to that color.
There is no way to create a LUT t...## About you
CamiTK developer
## Product
sdk/actions/image/imagelut
## Overview
The LUT editor only allows to choose one color (changing the first color does nothing) and go from black to that color.
There is no way to create a LUT that goes from blue to yellow to red for example, and that should be possible.
We should also provide a list of "standard" LUTs, maybe taken from another opensource project (Brainvisa/Anatomist ?).
The same editor could be used for the 3D rendering widget as well if we can also set transparency (RGBA) of the reference values
Saving a user's custom LUTs would be useful too.
To avoid the UI being too complex,
- use one tab to select a palette and set window level and width (adapted to the range of the image type - e.g. 0-65535 for uint16 or -2B/+2B for int32, not 0-255 in all cases)
- use another tab to create a new palette
## Relevant logs and/or screenshots
BrainVisa/Anatomist palette system: https://brainvisa.info/anatomist-5.0/user_doc/anatomist_tutorial.html#modification-of-color-palette
---
**please do not remove anything below this line**Manik BhattacharjeeManik Bhattacharjee