1. 07 Sep, 2021 5 commits
  2. 06 Sep, 2021 13 commits
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(core): make data library load more robust · cd3a8613
      Flavien BRIDAULT-LOUCHEZ authored
      The deduction of the library path failed when share was already present in the main module path. The problem already occurred with module paths themselves, so the regex is now shared between these two places.
    • Didier WECKMANN's avatar
      feat(io): Drop in replacement for SReader and SWriter to serialize an application session · 60a298a9
      Didier WECKMANN authored
      ### Main feature
      Two services `sight::module::io::session::SReader` and `sight::module::io::session::SWriter` were implemented. They read/write a root data object from/to a session file on a filesystem.
      The session file is indeed a standard "ZIP" archive, while the compression algorithm for files inside the session archive is ZSTD. A standard archive reader could open a session file, if it is able to handle ZIP archive with ZSTD compression.
      The archive can be password protected using AES256 algorithm and the compression level is set individually, depending of the type of data to serialize.
      The service configuration includes specifying the file extension and the password policy for encryption.
      Configuration example:
      <service type="sight::module::io::session::SReader">
          <inout key="data" uid="..." />
          <dialog extension=".sample" description="Sample Sight session file" policy=always/>
          <password policy="once" encryption="salted"/>
      The dialog policy specifies when the open dialog is shown:
      * **never**: never show the open dialog
      * **once**: show only once, store the location as long as the service is started
      * **always**: always show the location dialog
      * **default**: default behavior, which is "always"
      The password policy defines if we should protect the session file using a password and when to ask for it:
      * **never**: a password will never be asked and the session file will never be encrypted.
      * **once**: a password will be asked only once and stored in the memory for subsequent uses. The session file will be encrypted.
      * **always**: a password will always be asked. The session file will be encrypted.
      * **default**: uses the builtin default behavior which is "never".
      The encryption policy defines if we uses the password as is or with salt. It can also be used to encrypt without password:
      * **password**: Use the given password for encryption.
      * **salted**: Use the given password with salt for encryption.
      * **forced**: Force encryption with a pseudo random hidden password (if no password are provided).
      * **default**: uses the builtin default behavior which is "password".
      ### General improvement:
      * `ExActivities` has been modified to use the new session services instead of atoms
      * new `TemporaryFile` class in `core::tools::System` that use ROII to delete the associated file as soon as the `TemporaryFile` class is destroyed.
      * `core::tools::System::RobustRename()` now have an optional parameter to force renaming, even if the target already exists (it will be first deleted)
      * `ui::base::Cursor` improvement: `BusyCursor`, `WaitCursor`, `CrossCursor` classes that use ROII to restore back "default" cursor, even if an exception occurs
      * `ui::xxx::dialog::InputDialog` improvement: add a "bullet" mode for password field.
      * `ui::xxx::dialog::MessageDialog` improvement: add a "retry" button.
      Merge branch '752-io-drop-in-replacement-for-sreader-and-swriter-to-serialize-an-application-session' into 'dev'
      Closes #752
      See merge request sight/sight!606
    • Didier WECKMANN's avatar
      misc: apply review suggestions · bef282a8
      Didier WECKMANN authored
    • Didier WECKMANN's avatar
    • Didier WECKMANN's avatar
    • Flavien BRIDAULT-LOUCHEZ's avatar
    • Didier WECKMANN's avatar
      misc: apply review suggestions · 66ad2467
      Didier WECKMANN authored
    • Didier WECKMANN's avatar
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(core): make core::System::robustRename more robust · 96206c8f
      Flavien BRIDAULT-LOUCHEZ authored and Didier WECKMANN's avatar Didier WECKMANN committed
      The function failed when renaming from a EXT4 volume to a NTFS volume. This fixes detect the error and try another copy strategy.
    • Didier WECKMANN's avatar
    • Didier WECKMANN's avatar
    • Didier WECKMANN's avatar
      feat(io): implement a session writer service · 0aae7ba1
      Didier WECKMANN authored
      - add a password mode for input dialog
      - add ROII cursor and temporary file classes
      - fixes regarding encryption
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(io): dicomXplorer crashes when display mesh preview · 8bec599b
      Flavien BRIDAULT-LOUCHEZ authored
      This MR fixes a crash upon selecting mesh in `dicomXplorer`.
      The problem was simply that old configurations used in this software were deleted.
      **It does not display the mesh in an activity.** It simply fixes the crash and re-enables the preview.
      Closes #723
      Merge branch '723-io-dicomxplorer-crahes-when-display-mesh-preview' into 'dev'
      See merge request sight/sight!580
  3. 03 Sep, 2021 4 commits
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(ui): preferences path is broken · 1e0a6b6c
      Flavien BRIDAULT-LOUCHEZ authored
      The application name in the preferences file path is deduced from the profile name attribute. During the generation, this property was not generated properly. This fixes it.
      Closes #760
      Merge branch '760-ui-preferences-path-is-broken' into 'dev'
      See merge request sight/sight!613
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(viz): add main resource path only once · ba444dc0
      Flavien BRIDAULT-LOUCHEZ authored
      The main resource path was added each time we create the OgreRoot.  When closing and opening a single Ogre window, the path was present twice, and Ogre failed to initialize because it loads resources in double.
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(ui): fixed several crashes in DicomXplorer · b3cc888c
      Flavien BRIDAULT-LOUCHEZ authored
      The XML configuration was outdated. All VRRender mentions  were replaced. The model series preview was restored.
    • Didier WECKMANN's avatar
      feat(io): serialize most objects · fffdab4b
      Didier WECKMANN authored
      The serialization is done through two classes: SessionSerializer, SessionsDeserializer, and many .hpp with two functions: `serialize()` and `deserialize`, depending of the type of data object to serialize.
      For exemple, the serializers for meshes and images are coded respectively in `Mesh.hpp` and `Image.hpp`. They are good samples to demonstrate how it is possible to use a well known format to serialize objects. The Sight images / meshes are converted into VTK format using Sight helpers and are then saved with the now "standard" VTK way using `vtkXMLImageDataWriter` for image and `vtkXMLPolyDataWriter` for meshes.
      As a side notes, since the files are stored in a zstd compressed zip file, and since VTK doesn't provide any way to use an output streams, the VTK writers are configured as such (image and mesh are equivalent):
      This allow us to compress only one time and use fast zstd. Since the compression level can be set independently, some test need to be done to find the best efficiency. For now it is the "default" mode that is used, but better compression ratio at the expense of compression speed (not decompression!) is also possible.
      The drawback for using `WriteToOutputStringOn()` is that the complete data need to be written in memory before being able to serialize it. Shame on VTK for not providing an easy way to use c++ streams...
      Most serializers are far more simple as we only write/read values into a Boost property tree, a bit like before, but without the complexity of "atoms" tree. The version management is also quite simple, we write a integer in the tree and read it back. It is up to the user to add the `if(version < 666)...`
      Merge branch '739-io-serialize-most-objects' into 'dev'
      Closes #739
      See merge request sight/sight!594
  4. 02 Sep, 2021 3 commits
  5. 01 Sep, 2021 6 commits
  6. 31 Aug, 2021 2 commits
    • Flavien BRIDAULT-LOUCHEZ's avatar
      fix(core): Tuto01DataServiceBasicCpp launch · 2bd34f00
      Flavien BRIDAULT-LOUCHEZ authored
      The source image loaded at start in Tuto01DataServiceBasicCpp was changed with the one used in Tuto02DataServiceBasic. This fixes the launch of this tutorial.
      Closes #617
      Merge branch '617-core-fix-tuto02dataservicebasic' into 'dev'
      See merge request sight/sight!608
    • Flavien BRIDAULT-LOUCHEZ's avatar
      refactor(core): use data::ptr everywhere · a826993d
      Flavien BRIDAULT-LOUCHEZ authored
      This is the final merge request that generalizes the usage of data::ptr instead of IService::get*/getLocked*/getWeak*.
      The deprecated `DynamicType` class was also removed, which really helps to clear the build log from many warnings.
      Last, Ogre runtime deprecation warnings were also processed, which implied to refactor a bit the material and shader code.
      Closes #505
      Merge branch '505-io-remove-usage-of-deprecated-getinput-getoutput-getinout' into dev
      See merge request sight/sight!611
  7. 30 Aug, 2021 2 commits
  8. 28 Aug, 2021 2 commits
  9. 27 Aug, 2021 1 commit
  10. 26 Aug, 2021 1 commit
  11. 25 Aug, 2021 1 commit