Commit 61a3de03 authored by Genial-O's avatar Genial-O
Browse files

docs( release 20.0.0

parent e15cca20
# sight 20.0.0
## Bug fixes:
### .gitlab
*Improve sheldon stage.*
Use sheldon and build the project on the merge result instead of the working branche.
*Improve sheldon stage.*
### activities
*Split bundle to separate gui services from core services.*
Separate service using Qt Widget from other services in order to use generic service with a Qml application, because Qt widgets cannot be instantiated in a Qml application.
A new bundle `uiActivitiesQt` was created where `SCreateActivity` and `SActivityLauncher` has been moved. The old `SCreateActivity` and `SActivityLauncher` services has been kept in activities but set as deprecated. A fatal would be raised if you use them in a Qml application.
`ENABLE_QML_APPLICATION` variable has been added in the main CMakeList to define if there is a Qml application that will be launched. It is temporary because we need to keep the old API until sight 21.0 and allow to remove the dependency to Qt Widgets in activities bundle.
### ActivityLauncher
*Fix reader/writer configuration.*
Fix the reader and writer configurations used by `ActivityLauncher` config: use the configuration given in parameters instead of the default one.
### AppConfig
*Fix XML variable regex.*
The regex is used to know if the xml attribute contains a variable (`${...}`). But in a few cases, for example in signal/slot connections, the variable is followed by other chars. For these cases, the regex should not be limited to `${...}`but to `${...}....`.
The unit tests have been updated to check this error.
### AppConfigManager
*Fix useless variable.*
Remove wrong `#ifdef` arround `FwCoreNotUsedMacro(ret);`
### Array
*Implement missing copy constructor in Array iterator.*
Implement copy constructor for const iterator and assignment operator.
### build
*Fix build on linux with gcc7 in release mode.*
- fixed sheldon coding style and define in fwCom
- fixed unused variable (release mode) in fwServices
### CalibrationInfoReader
*Wrong image channel order.*
* Convert to the sight's default color format when reading calibration inputs.
* Sort the calibration input by their filename.
* Update the related tests.
### CI
*Disable slow tests until they all pass.*
*Sheldon-mr job doesn't work.*
According to #402, the sheldon-mr job seems to fail when merge commit are present in-between dev and the current mr branch.
Here the `git merge-base` function has been replaced by a diff of revision list between the MR branch and dev, and then keep the oldest common ancestor.
* `git rev-list --first-parent origin/${CI_COMMIT_REF_NAME}`: revision list of the MR branch
* `git rev-list --first-parent origin/dev`: revision list of dev (/!\\ we need to check is there is a limitation on number)
* `diff -u <(git rev-list --first-parent origin/${CI_COMMIT_REF_NAME}) <(git rev-list --first-parent dev)` : basic diff between the two list
* `| sed -ne 's/^ //p'`: removes the diff line ("+" "-", etc), to keep only the common revisions
* `| head -1`: keep the first form common revisions.
This is, indeed, a bit over-complicated, and can be simplified by a simple merge on the CI side, and then run sheldon, but this avoid any potential merge conflicts checking beforehand.
*Use CI_JOB_TOKEN when cloning sight-data.*
### CMake
*Disable RelWithDebInfo build type.*
*Resolve Qt plugins path in SDK mode.*
Do not install the qt.conf from our Conan package that points to a bad plugin location. This overrides the location set in `WorkerQt.cpp`, preventing Qt application built with the SDK from launching.
Besides this, I also fixed file permissions of installed files (executable were not actually executable) and I corrected a warning at the end of a CMake run because of a wrong usage of `PARENT_SCOPE` in the macro `generic_install()`.
*Resolve missing export when using SDK mode.*
The systematic build of the object library broke the SDK build, because the export was missing for the object library. However, this means users would have to link for instance against `fwCore_SHARED_LIB` instead of `fwCore` which is the object library. This is counter-intuitive and really not desirable.
We chose to invert the logic. `fwCore` is now the shared library and `fwCore_obj` is the object library. This solves the problem for external users but not for sight developers who would need to modify all `CMakeLists.txt` to link fwCore_obj with 3rd party libraries instead of fwCore. We found a middle-ground by building the object library **only** when the variable GENERATE_OBJECT_LIB is set. This variable was set for `fwRuntime` to enable the build of `fwRuntimeDetailTest`. Its `CMakeLists.txt` was last modified to link against `fwRuntime_obj` instead of `fwRuntime`.
On top of that, some corrections were made because of the rework of `fwRuntime` and the usage of `std::filesystem`.
*Conan cmake script not correctly downloaded.*
- Add check hash of `conan.cmake` file for:
* avoid downloading if the file already exists and is valid
* download the file if it's corrupted
*Add cmake 3.17.0 support.*
Add cmake 3.17.0 support
*Fix the plugin config command.*
Include the appropriate headers in generated `registerService` files.
*Strip cmake compilation flags on Windows.*
Avoids cmake adding a space at the end of compilation flags
*Fix executable installer.*
This enables the packaging of executable programs under windows.
By the way, the call of generic_install() is now done automatically for all APP and EXECUTABLE targets, thus enabling packaging automatically. A warning is displayed if the macro is called in the CMakeLists.txt of the application.
### conan-deps
*Update hybrid_marker_tracker version.*
Update hybrid_marker_tracker library version that fixes memory leak.
### ConfigLauncher
*Add existing deferred objects to configuration.*
* Notify xml sub-configurations that optional objects already exist.
* Deprecate `IAppConfigManager`.
* Improve the documentation of modified classes.
### dataReg
*Add missing include to compile with latest VS2019 16.6.0.*
### Dispatcher
*Fix wrong mapping for uint8 type.*
`isMapping` method is used by Dispatcher to find the right type for calling template functor.
### doxygen
*Doxygen uses the correct to generate the main page.*
Update Doxyfile to fix the path of the main Now the doxygen is generated using the main README file as the main page.
### ExIgtl
*Add auto-connections INetworkSender.*
* Add missing auto-connections method in INetworkSender
* Fix ExIgtl example
* Add JetBrains IDEs (CLion) project folder in git ignore file
### ExImageMix
*Fix image voxel information.*
Remove the useless hack that skipped some events in VTK picker interactor, so the information was not up-to-date.
### ExSimpleARCVOgre
*Add missing media bundle.*
This solves the crash of ExSimpleARCVOgre at start. The bundle media was missing.
### fwData/Image
*Deep copy.*
* Fixes an assert raised in debug when the image is locked and deep copied.
* Don't let the data array expire.
* Add a test to ensure this doesn't happen again.
* Fix ExDump.
### fwGdcmIOTest
*Test fails.*
Fixes fwGdcmIOTest by using correct type when setting Tags Values.
* ConsultingPhysicianName is a list
* Patient Size/Weight/MassIndex are double
* Attributes was missing when copying a Study
### fwGuiQt
*Allow notifications to work with ogre scenes.*
Fixes notifications for app that used Ogre scenes.
Moves the dialog according to the parent.
### fwLauncher
*Allow to exit when receiving signals.*
- Use regular exit() to stop program execution when receiving SIGINT, SIGTERM, SIGQUIT signals.
### fwMath
*Use glm vector when computing barycenters and fix mistake.*
* Replace all `fwVec3` structure by `::glm::dvec3`, along with glm maths functions.
* Fix mistake in dot product when computing barycentric coordinates.
* Update unit-test
### fwRenderOgre
*Fix query flags and ray mask.*
* Sets all pickable adaptors query flags to a default value ('::Ogre::SceneManager::ENTITY_TYPE_MASK').
* Sets pickers query mask to a default value ('::Ogre::SceneManager::ENTITY_TYPE_MASK').
* Query flags on adaptors are now sets, (previously, they was added).
* Updates documentations on updated files.
It allows pickers to pick all adaptors by default. This can be adjusted in xml by modifying the query mask of the picker, and the query flags of adaptors
### fwVtkIO
*Fix warnings (as error) when building with Clang.*
### gitlab
*Improve sheldon stage.*
Fix the build on dev, master and tags
### HybridMarkerTracking
*Fix tracking issues with strong distortion.*
Removing re-definition of member variable and undistort displayed image allows to correctly re-project tracking position on videos with strong distortions.
### IActivitySequencer
*Retrieve more data on update.*
The sequencer allows to store all data related to all activities in a member called `requirements`. When the sequencer checks an activity for the first time, it'll create it and add all it's needed data that already exist in the `requirement` list into the activity composite.
If we have two activities `A1` and `A2`, `A1` needs an image called `CT` and `A2` needs the same image, and also a matrix `MA` created by `A1`.
You launch A1 after adding its needed data in the wizard (`CT`), at this time, the sequencer stores `CT` in its `requirements` list.
So A1 is open, the sequencer will check if needed data for A2 have been loaded (Allows to enable a button in the view). To do that, `A2` is created and the sequencer adds the `CT` into the composite of `A2`, but `MA` is missing, nothing is launched.
Now `A1` has created the matrix `MA` and asks the sequencer to open the next activity, `A2`. The sequencer checks needed data, but `A2` is created, and the sequencer only updates data that are contained in the composite of `A2`.
* These modifications allow to update data and also to add potential new data generated by a previous activity (`IActivitySequencer::getActivity`).
* Now, before checking a next activity, the sequencer stores data of the current one (the current one has maybe created a new data).
* `IActivitySequencer`::parseActivities``returns the last valid activity. Before modifications, the next one was launched.
### Image
*Fix the iterator when using a different type than the image.*
The image iterator is now computed based on the format of the iterator instead of using the image type. You can now use Iterator on int16 image. It can be useful to fill the image with zeros. You can also parse int32 image with int64 iterator to gain performance.
`SLM_WARN` have been added when you use an iterator on a different type.
### ioDcmtk
*Fix the series DB reader and the CI last modification time of file.*
### ioIGTL
*Fix the module loading on windows.*
- Moves the module `ioNetwork` to SrcLib, it only contains interface. Furthermore some modules like `ioIGTL` links with it, and link between modules are prohibited.
### ioVTK
*Vtk Mesh readers and writers only support VTK Legacy files format.*
Add more Mesh format in VTK readers/writers.
* VTK Polydata (\*.vtp)
* Wavefront OBJ (\*.obj)
* Stereo lithography format (\*.stl)
* Polygonal File Format (\*.ply)
This was added to improve compatibility with other VTK sofwares (paraview for example), it seems that the \*.vtk format is a legacy format and we should use \*.vtp when dealing with polydata (our ::fwData::Mesh).
**Note:** when using OBJ/PLY/STL format you may loose some informations (point normals/point color/...), often it saves only global geometry of the data (points, edges, ...).
### IParameter
*Add missing makeCurrent in IParameter.*
Add missing `makeCurrent` in `fwRenderOgre/IParameter`
### ModelSeries
*Add const in model series helper.*
Update `::fwMedDataTools::ModelSeries`to add const on shared pointer parameters. It allows to call the helper with const sptr.
### OgreVolumeRendering
*Fix the ambient occlusion.*
* Fix a crash in `SummedAreaTable` due to bad storage (when `m sat Size[0]` is 256, the old `std:uint8_t` stores 0).
* Fix a crash when the software is closed.
### openVSlamIOTest
*Add missing dependencies for link.*
This adds ffmpeg and Qt as explicit dependencies. There is clearly a bug in the OpenCV target but until this is fixed upstream, we can use this solution.
### openvslamTracker
*Do not download the vocabulary file each time.*
Check the file hash to prevent it to be downloaded on each CMake configuring step.
### RayTracingVolumeRenderer
*Correctly blend the volume with the scene behind it.*
* Fix alpha blending between the volume and the scene behind it.
* Fix z-fighting between the negato picking widget and the negato plane when OIT is enabled.
* Fix z-fighting between the volume and the negato planes.
### SActivitySequencer
*Qml import path is not properly defined.*
Check if a `qml` folder exist on the application root folder (for installed application) and use the conan path otherwise.
### SArucoTracker
*Doesn't display marker if image components < 4.*
Test the number of components of the input image before doing OpenCV conversion.
With this modification we can now handle both 3 and 4 components images.
### SCalibrationInfoReader
*Don't convert the image if loading failed.*
Fix a crash when loading a folder containing files not readable as images.
### SeriesDBReader
*Skip structured report and improve the activity data view.*
When you load a DICOM folder that contains a `SR` modality with the reader ``::vtk`Gdcm`::Series`FBReader`, it throws an execption. Now it's skipped with a message.
The activity data view is also improved in this MR.
### SFrameMatrixSynchronizer
*Use new image API.*
* Fix the issue when the number of components are not properly reset (#423)
* Add a missing write lock on matrices.
* Use the new image API
### SFrameWriter
*Add missing else statement.*
### Sight
*Fail to compile with Clang.*
This adds the AES flag for Clang, allowing to build fwZip successfully.
Initially, the MR was opened to fix this issue but actually many targets failed to compile with Clang, thus other minor fixes are included.
### SMatricesReader
*Fix default path.*
Fix the default path in `::ioTimeline::SMatricesReader`. The default path must be a folder, so we use the parent path of the selected file to set the default reader path. It allows to re-open the file dialog in the same folder.
### SMatrixWriter
*Add fixed floating point format and set float precision.*
Set floating precision fixed to 7 digits.
### SMesh
*Fix recursive read lock.*
Update ``::visuOgreAdaptor::SMesh``to remove a read lock in an internal method and only call it in the slots. It fixes a random freeze when starting the adaptor in a large application.
*Fix auto reset in mesh adaptor.*
Fix auto reset camera in `::visuOgreAdaptor::SMesh`:
* call auto reset when the vertices are modified
* call request render when the adaptor is started
### SNegato2DCamera
*Modify camera position in function of the image.*
Modify the AutoReset camera method to reset the camera position in function of the image and not the world position.
If there is other adaptors than SNegato2D, the scene will be autoreset with the position of the image. It avoids some strange scalling due to other adaptors.
### SNegato3D
*Properly use the ITransformable interface.*
Properly use the ITransformable interface in SNegato3D.
### spylog
*Reduce usage of FW_DEPRECATED Macro.*
Small cleanup of usage of `FW_DEPRECATED` macros.
* Macros was removed from widely used functions
* keyword `[[deprecated]]` was added where it was missing
### SText
*Fix text configuration.*
The `text` configuration was wrong when parsing xml file.
### STransferFunction
*Avoid assert when icons path are not initialized.*
- Fix crash when icons path are not initialized in `StransferFunction` service.
- When icons path were not defined, we have this assert: `Assertion 'path.is_relative()' failed. Path should be relative`
### STransform
*Remove or add the node instead of change the visibility.*
Show or hide the transform node directly impact attached entities and services like `::visuOgreAdaptor::SMesh`, that can't manage its visibility since STransform change it any time.
Now, the node is juste remove or add from it's parent to avoid a visibility error.
### STransformEditor
*Add missing lock.*
Add missing mutex lock in `uiVisuQt::STransformEditor`
### SVector
*Fix the visibility update of SVector.*
* Add two slots to show and hide the vector
### SVideoWriter
*Computes video framerate.*
* Removes the default framerate value hardcoded to 30 fps in SVideoWriter
* Computes framerate using the timestamps of the first frames in the timeline
### SVolumeRender
*Fix usage of transfer functions.*
* Create a new service `uiTF`::STransferFunction``instead of `uiTF`::TransferFunctionEditor``(it also fix the swapping method and lock data).
* Improve the TF usage in `visuOgreAdaptor::SVolumeRender`.
* Set the sampling rate at starting of `visuOgreAdaptor::SVolumeRender`.
* Fix the `GridProxyGeometry` by avoid uniforms sharing between programs.
* Fix the `makeCurrent` method.
*Fix a crash with the volume render.*
*Double lock when updating the volume sampling.*
### test
*IoVTKTest randomly crashes.*
Fix ioVTKTest random crash. Sometimes writer doesn't load the reconstructions in the same order than the reader saved it.
We need to force writer to load file in a specific order:
* prefix reconstruction filename by its index in reconstructionDB (like "0_Liver")
* sort filenames by alphabetical order, using the previous prefixed index, to ensure that reconstructions are loaded in the same order than the generated ones.
* add messages in CPPUNIT assert marco to help to find failing tests.
### TutoTrianConverterCtrl
*Console application cannot be launched with parameters.*
Forward arguments of .bat/.sh scripts to fwLauncher.
### videoVLC
*Fix VLC plugins dir.*
* use current working path to find VLC plugins folder in `videoVLC` for installed applications
* fix cmake install target for apps using libvlc:
* on Windows (with MSVC2019) VLC is now manually installed to avoid `fatal error LNK1328: missing string table` in fixup_bundle
* on linux vlc plugins path is now analysed by the fixup_bundle script to find required dependencies
* update VLC conan package to the version 3.0.6-r5
### visuOgreAdaptor
*Properly generate the r2vb in SMesh.*
### visuOgreQt
*Intel mesa regressions.*
* Fix regressions when using intel mesa GPU following the context handling MR (!249)
* Handle buffer swapping manually instead of relying on ogre.
*Remove unused variables.*
* Fixes a warning on the CI preventing sight from building.
* Removes an unused parameter in `visuOgreQt::Window`.
*Always force rendering when the window is exposed.*
* Fix the call to `renderNow` in `visuOgreQt/Window`
* Request render when changing visibility parameters in `ExSimpleARCVOgre`
*Send mouse modifiers as keyboard events.*
* Take mouse modifiers into account for mouse events.
* This is a quick fix and should be refactored later on.
## Documentation:
### fwData
*Improve doxygen of Image, Mesh and Array.*
* add examples, fix some mistakes.
* improve `Image::at(x, y, z, c)` to add the component parameter, it allows to retrieves the value of an element of a image with components
*Remove broken install links.*
Remove broken links pointing to old documentation pages.
### visuOgreQt
*Clean the bundle.*
Cleans the `visuOgreQt` bundle.
## Refactor:
### Boost
*Replace boost use by C++17 new features.*
Replace usage of Boost by **standard library** versions of:
- `boost::filesystem`
- `boost::make_unique`
- `boost::any`
- `boost`::assign``(most of them, some were left because of specific boost containers such as bimaps)
Also, `fwQtTest` failed a lot during testing, so a fix has been proposed. It should no longer fail now.
### CMake
*Rename THOROUGH_DEBUG option.*
### deprecated
*Remove last remaining deprecated classes and methods for sight 20.0.*
* Remove deprecated class Bookmarks
* Remove deprecated class AttachmentSeries and the associated reader and converter class (atom patches have been kept to support the loading of old data).
* it implies the increment of MedicalData version to V14 and V16AR
* Remove the stop of the worker in its destructor
* it implies to properly stop the workers before to clear the worker registry (::fwThread::ActiveWorkers). In fact, the workers should be stopped by the classes that created them, but as the API to remove a worker from the registry does not exist, it will be done in #521.
* it also implies to stop manually the workers used in the unit tests and not managed by the registry
*Remove the use of deprecated Image, Mesh and Array API.*
* Remove the last remaining usage of the deprecated API of Image, Array and Mesh outside of fwData and fwDataTools: add a `2` after get/setSize, get/setOrigin, get/SetSpacing.
* Fix dump lock on Image and Arry iterators: lock bust be called before accessing the buffer.
* Improve the documentation about the dump lock.
*Use new Image, Mesh and Array API.*
Refactor some services and libraries to use new Image, Mesh and Array API:
* refactor `igtlProtocol` library to use new API
* refactor `fwCommand` library to use new API
* remove useless helpers includes
* fix MeshIterator: set 'operator=()' as virtual and remove redundant cast
### filetree
*Rename root folders.*
All root folders were renamed, and first of all, Bundles into modules. We also chose to stick to lower-case only and so we renamed all existing folders to their lower counterpart. Besides this SrcLib was shortened into libs and Utilities in utils.
Here was the old file tree:
| Apps
| Bundles
| CMake
| fwlauncher
| Samples
\ Examples
| PoC
| Tutorials
| SrcLib
| Utilities
And here is the new one:
| apps
| cmake
| fwlauncher
| libs
| modules
| samples
\ examples
| poc
| tutorials
| utils
### fwData
*Clean fwData and fwTest with new API of Image, Mesh and Array.*
* Update `` to add `<PROJECT_NAME>_DEPRECATED_CLASS_API`, it allows to set the `deprecated` attribut on a class (display a compilation warning).
* Update `fwTest` and `fwData` libraries to remove the dependency to `fwDataTools`
* Clean `fwDataTools` to remove the use of deprecated helpers, but the helpers are still here.
* fix SImagesBlend adaptor: fix size, spacing and origin comparison
*Use new Image, Mesh and Array API in uiXXX Bundles.*
* Use new Image, Mesh and Array API in uiXXX bundles
* Improve `ioVTK` and `fwVTKIO` unit tests
* Fix `fwTest` Image generator (number of components was not properly set)
* Fix `::fwData::Image`, add a missing const on `getPixelAsString` method
*Improve the API of `::fwData::Array`.*
Simplifies Array API by moving the methods from the helper to the data itself:
* deprecate `::fwDataTools::helper::Array`
* integrate the useful methods from the helper to `::fwData::Array`
* deprecate the component attribute
* add `Iterator<Type>` and `ConstIterator<Type>` to iterate through the array buffer
### fwDataTools
*Use the new Mesh API.*