Commit d59ee751 authored by Flavien BRIDAULT-LOUCHEZ's avatar Flavien BRIDAULT-LOUCHEZ
Browse files

Merged branch dev into master

parents 8dd82bce 35f93ea8
# use glob syntax.
syntax: glob
# vim swap file
*.swp
# eclipse stuff
*.cproject
*.project
*.pyc
*.pyo
# tmp files
.*~
*.autosave
#qtcreator cmake preferences
*.txt.user
# reject and backup file
*.rej
*.orig
......@@ -120,3 +120,5 @@ ef171b6be026e27ad7d67abe0f696856bd878c18 fw4spl_0.10.1.0
16a8a7298b6ea7bc3f4a28f960df6671ea3fb92e fw4spl_0.10.2.1
51b154b40b05dae489c3a3a0ed6bd09f5cf5afb3 fw4spl_0.10.2.2
dcee64c4097d1a0eaea7df6214b2d725d900b0bb fw4spl_0.10.2.3
1d6ff2abce566ef77e03de930b2dd00642cc0717 fw4spl_0.11.0.1
e60f88d2bfe15ad1d162b906e522130a9dc0e00d fw4spl_0.11.0.2
language: cpp
sudo: false
addons:
apt:
packages:
- build-essential
- ninja-build
- python2.7
- git
- wget
- graphviz
- gnuplot
branches:
only:
- fw4spl_0.11.0
compiler:
- gcc
before_script:
- git clone https://github.com/fw4spl-org/fw4spl-git.git fw4spl-git
- cd fw4spl-git
- git checkout travis
- git config --global codingstyle-hook.uncrustify-path `pwd`/hooks/uncrustify
- cd ..
- wget -q --no-check-certificate https://cmake.org/files/v3.4/cmake-3.4.1-Linux-x86_64.tar.gz
- tar xzf cmake-3.4.1-Linux-x86_64.tar.gz > /dev/null
- wget -q --no-check-certificate http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.11.linux.bin.tar.gz
- tar xzf doxygen-1.8.11.linux.bin.tar.gz > /dev/null
- export CMAKE_BIN=$TRAVIS_BUILD_DIR/cmake-3.4.1-Linux-x86_64/bin/cmake
- export DOXYGEN_BIN=$TRAVIS_BUILD_DIR/doxygen-1.8.11/bin/doxygen
- mkdir -p build/Documentation/Doxygen/html
- cd build/Documentation/Doxygen/html
- git clone https://github.com/fw4spl-org/fw4spl-dox.git .
- git checkout --quiet --orphan $TRAVIS_BRANCH
- git reset --hard
- git clean -f -d
- cd $TRAVIS_BUILD_DIR/build
- $CMAKE_BIN -DCMAKE_INSTALL_PREFIX:PATH=/tmp $TRAVIS_BUILD_DIR/ -DBUILD_DOCUMENTATION:BOOL=ON -DBUILD_TESTS:BOOL=OFF -DDOXYGEN_EXECUTABLE:FILEPATH=$DOXYGEN_BIN
- cd $TRAVIS_BUILD_DIR
script:
- fw4spl-git/hooks/sheldon $TRAVIS_COMMIT_RANGE
- cd $TRAVIS_BUILD_DIR/build
- make doc
after_success:
- git config --global user.name 'travis'
- git config --global user.email 'travis'
- cd $TRAVIS_BUILD_DIR/build/Documentation/Doxygen/html
- git add --all .
- git commit -m "Auto-updating Doxygen developer documentation"
- git push https://$GITHUB_API_KEY@github.com/fw4spl-org/fw4spl-dox.git $TRAVIS_BRANCH --quiet --force > /dev/null 2>&1
<!-- Application name and version (the version is automatically replaced by CMake
using the version defined in the Properties.cmake) -->
<plugin id="Tuto01Basic" version="@DASH_VERSION@">
<requirement id="dataReg" />
<requirement id="servicesReg" />
<requirement id="guiQt" />
<!-- Defines the App-config -->
<extension implements="::fwServices::registry::AppConfig">
<id>tutoBasicConfig</id><!-- identifier of the configuration -->
<config>
<object type="::fwData::Image"><!-- Main object -->
<!-- Frame service -->
<service uid="myFrame" impl="::gui::frame::SDefaultFrame">
<gui>
<frame>
<name>tutoBasicApplicationName</name>
<icon>Bundles/Tuto01Basic_0-1/tuto.ico</icon>
<minSize width="800" height="600" />
</frame>
</gui>
</service>
<start uid="myFrame" /><!-- start the frame service -->
</object>
</config>
</extension>
</plugin>
<plugin id="Tuto02DataServiceBasic" version="@DASH_VERSION@">
<requirement id="dataReg" />
<requirement id="servicesReg" />
<requirement id="visuVTKQt" />
<extension implements="::fwServices::registry::AppConfig">
<id>tutoDataServiceBasicConfig</id>
<config>
<!-- In tutoDataServiceBasic, the central data object is a ::fwData::Image. -->
<object type="::fwData::Image">
<!--
Description service of the GUI:
The ::gui::frame::SDefaultFrame service automatically positions the various
containers in the application main window.
Here, it declares a container for the 3D rendering service.
-->
<service uid="myFrame" impl="::gui::frame::SDefaultFrame">
<gui>
<frame>
<name>tutoDataServiceBasic</name>
<icon>Bundles/Tuto02DataServiceBasic_0-1/tuto.ico</icon>
<minSize width="800" height="600" />
</frame>
</gui>
<registry>
<!-- Associate the container for the rendering service. -->
<view sid="myRendering" />
</registry>
</service>
<!--
Reading service:
The <file> tag defines the path of the image to load. Here, it is a relative
path from the repository in which you launch the application.
-->
<service uid="myReaderPathFile" impl="::ioVTK::SImageReader">
<file>./TutoData/patient1.vtk</file>
</service>
<!--
Visualization service of a 3D medical image:
This service will render the 3D image.
-->
<service uid="myRendering" impl="::vtkSimpleNegato::SRenderer" />
<!--
Definition of the starting order of the different services:
The frame defines the 3D scene container, so it must be started first.
The services will be stopped the reverse order compared to the starting one.
-->
<start uid="myFrame" />
<start uid="myReaderPathFile" />
<start uid="myRendering" />
<!--
Definition of the service to update:
The reading service load the data on the update.
The render update must be called after the reading of the image.
-->
<update uid="myReaderPathFile" />
<update uid="myRendering" />
</object>
</config>
</extension>
</plugin>
<plugin id="Tuto03DataService" version="@DASH_VERSION@">
<requirement id="dataReg" />
<requirement id="servicesReg" />
<requirement id="visuVTKQt" />
<extension implements="::fwServices::registry::AppConfig">
<id>tutoDataServiceConfig</id>
<config>
<!-- The root data object in tutoDataService is a ::fwData::Image. -->
<object type="::fwData::Image">
<!-- Frame service:
The frame creates a container fot the rendering service and a menu bar.
In this tutorial, the gui services will automatically start the services they register using the
'start="yes"' attribute.
-->
<service uid="myFrame" impl="::gui::frame::SDefaultFrame">
<gui>
<frame>
<name>tutoDataService</name>
<icon>Bundles/Tuto03DataService_0-1/tuto.ico</icon>
<minSize width="800" height="600" />
</frame>
<menuBar />
</gui>
<registry>
<menuBar sid="myMenuBar" start="yes" />
<view sid="myRendering" start="yes" />
</registry>
</service>
<!--
Menu bar service:
This service defines the list of the menus displayed in the menu bar.
Here, we have only one menu: File
Each <menu> declared into the <layout> tag, must have its associated <menu> into the <registry> tag.
The <layout> tags defines the displayed information, whereas the <registry> tags defines the
services information.
-->
<service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
<gui>
<layout>
<menu name="File" />
</layout>
</gui>
<registry>
<menu sid="myMenu" start="yes" />
</registry>
</service>
<!--
Menu service:
This service defines the actions displayed in the "File" menu.
Here, it registers two actions: "Open file", and "Quit".
As in the menu bar service, each <menuItem> declared into the <layout> tag, must have its
associated <menuItem> into the <registry> tag.
It's possible to associate specific attributes for <menuItem> to configure their style, shortcut...
In this tutorial, the attribute 'specialAction' has the value "QUIT". On MS Windows, there's no
impact, but on Mac OS, this value installs the menuItem in the system menu bar, and on Linux this
value installs the default 'Quit' system icon in the menuItem.
-->
<service uid="myMenu" impl="::gui::aspect::SDefaultMenu">
<gui>
<layout>
<menuItem name="Open file" shortcut="Ctrl+O" />
<separator />
<menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
</layout>
</gui>
<registry>
<menuItem sid="actionOpenFile" start="yes" />
<menuItem sid="actionQuit" start="yes" />
</registry>
</service>
<!--
Quit action:
The action service (::gui::action::SQuit) is a generic action that will close the application
when the user click on the menuItem "Quit".
-->
<service uid="actionQuit" impl="::gui::action::SQuit" />
<!--
Open file action:
This service (::gui::action::StarterActionService) is a generic action, it starts and update the
services given in the configuration when the user clicks on the action.
Here, the reader selector will be called when the actions is clicked.
-->
<service uid="actionOpenFile" impl="::gui::action::SStarter">
<start uid="myReaderPathFile" />
</service>
<!--
Reader selector dialog:
This is a generic service that show a dialog to display all the reader or writer available for its
associated data. By default it is configured to show reader. (Note: if there is only one reading
service, it is directly selected without dialog box.)
Here, it the only reader available to read a ::fwData::Image is ::ioVTK::ImageReaderService (see
Tuto02DataServiceBasic), so the selector will not be displayed.
When the service was chosen, it is started, updated and stopped, so the data is read.
-->
<service uid="myReaderPathFile" impl="::uiIO::editor::SIOSelector" />
<!--
3D visualization service of medical images:
Here, the service attribute 'autoConnect="yes"' allows the rendering to listen the modification of
the data image. So, when the image is loaded, the visualization will be updated.
-->
<service uid="myRendering" impl="::vtkSimpleNegato::SRenderer" autoConnect="yes" />
<!--
Here, we only start the frame because all the others services are managed by the gui service:
- the frame starts the menu bar and the redering service
- the menu bar starts the menu services
- the menus starts the actions
-->
<start uid="myFrame" />
</object>
</config>
</extension>
</plugin>
<plugin id="Tuto04SignalSlot" version="@DASH_VERSION@">
<requirement id="dataReg" />
<requirement id="servicesReg" />
<requirement id="visuVTKQt" />
<extension implements="::fwServices::registry::AppConfig">
<id>tutoSignalSlotConfig</id>
<config>
<!-- The main data object is ::fwData::Mesh. -->
<object type="::fwData::Mesh">
<service uid="myFrame" impl="::gui::frame::SDefaultFrame">
<gui>
<frame>
<name>tutoSignalSlot</name>
<icon>Bundles/Tuto04SignalSlot_0-1/tuto.ico</icon>
<minSize width="720" height="600" />
</frame>
<menuBar />
</gui>
<registry>
<menuBar sid="myMenuBar" start="yes" />
<view sid="myDefaultView" start="yes" />
</registry>
</service>
<service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
<gui>
<layout>
<menu name="File" />
</layout>
</gui>
<registry>
<menu sid="myMenuFile" start="yes" />
</registry>
</service>
<!--
Default view service:
This service defines the view layout. The type '::fwGui::CardinalLayoutManager' represents a main
central view and other views at the 'right', 'left', 'bottom' or 'top'.
Here the application contains a central view at the right.
Each <view> declared into the <layout> tag, must have its associated <view> into the <registry> tag.
A minimum window height and a width are given to the two non-central views.
-->
<service uid="myDefaultView" impl="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view caption="Rendering 1" align="center" />
<view caption="Rendering 2" align="right" minWidth="400" minHeight="100" />
<view caption="Rendering 3" align="right" minWidth="400" minHeight="100" />
</layout>
</gui>
<registry>
<view sid="myRendering1" start="yes" />
<view sid="myRendering2" start="yes" />
<view sid="myRendering3" start="yes" />
</registry>
</service>
<service uid="myMenuFile" impl="::gui::aspect::SDefaultMenu">
<gui>
<layout>
<menuItem name="Open file" shortcut="Ctrl+O" />
<separator />
<menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
</layout>
</gui>
<registry>
<menuItem sid="actionOpenFile" start="yes" />
<menuItem sid="actionQuit" start="yes" />
</registry>
</service>
<service uid="actionOpenFile" impl="::gui::action::SStarter">
<start uid="myReaderPathFile" />
</service>
<service uid="actionQuit" impl="::gui::action::SQuit" type="::fwGui::IActionSrv" />
<service uid="myReaderPathFile" impl="::uiIO::editor::SIOSelector">
<type mode="reader" /><!-- mode is optional (by default it is "reader") -->
</service>
<!--
Visualization services:
We have three rendering service representing a 3D scene displaying the loaded mesh. The scene are
shown in the windows defines in 'view' service.
-->
<service uid="myRendering1" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
<service uid="myRendering2" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
<service uid="myRendering3" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
<!--
Each 3D scene owns a 3D camera that can be moved by the user on clicking in the scene.
- When the camera moved, a signal 'camUpdated' is emitted with the new camera information (position,
focal, view up).
- To update the camera without clicking, you could called the slot 'updateCamPosition'
Here, we connect each rendering service signal 'camUpdated' to the others service slot
'updateCamPosition', so the cameras are synchronized in each scene.
-->
<connect>
<signal>myRendering1/camUpdated</signal>
<slot>myRendering2/updateCamPosition</slot>
<slot>myRendering3/updateCamPosition</slot>
</connect>
<connect>
<signal>myRendering2/camUpdated</signal>
<slot>myRendering1/updateCamPosition</slot>
<slot>myRendering3/updateCamPosition</slot>
</connect>
<connect>
<signal>myRendering3/camUpdated</signal>
<slot>myRendering2/updateCamPosition</slot>
<slot>myRendering1/updateCamPosition</slot>
</connect>
<start uid="myFrame" />
</object>
</config>
</extension>
</plugin>
<plugin id="Tuto05Mesher" version="@DASH_VERSION@">
<requirement id="dataReg" />
<requirement id="servicesReg" />
<requirement id="visuVTKQt" />
<extension implements="::fwServices::registry::AppConfig">
<id>MesherConfig</id>
<config>
<!--
The main data object is ::fwData::Composite.
A Composite, can contains sub-objects associated to a key.
-->
<object type="::fwData::Composite">
<!-- Frame & View -->
<service uid="myFrame" impl="::gui::frame::SDefaultFrame">
<gui>
<frame>
<name>Mesher</name>
<icon>Bundles/Tuto05Mesher_0-1/tuto.ico</icon>
<minSize width="800" height="600" />
</frame>
<menuBar />
</gui>
<registry>
<menuBar sid="myMenuBar" start="yes" />
<view sid="myDefaultView" start="yes" />
</registry>
</service>
<!--
Default view service:
The type '::fwGui::LineLayoutManager' represents a layout where the view are aligned
horizontally or vertically (set orientation value 'horizontal' or 'vertical').
It is possible to add a 'proportion' attribute for the <view> to defined the proportion
used by the view compared to the others.
-->
<service uid="myDefaultView" impl="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::LineLayoutManager">
<orientation value="horizontal" />
<view caption="Image view" />
<view caption="Mesh view" />
</layout>
</gui>
<registry>
<view sid="RenderingImage" start="yes" />
<view sid="RenderingMesh" start="yes" />
</registry>
</service>
<!-- Menu Bar, Menus & Actions -->
<service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
<gui>
<layout>
<menu name="File" />
<menu name="Mesher" />
</layout>
</gui>
<registry>
<menu sid="menuFile" start="yes" />
<menu sid="menuMesher" start="yes" />
</registry>
</service>
<service uid="menuFile" impl="::gui::aspect::SDefaultMenu">
<gui>
<layout>
<menuItem name="Open image file" shortcut="Ctrl+O" />
<menuItem name="Save image" />
<separator />
<menuItem name="Open mesh file" shortcut="Ctrl+M" />
<menuItem name="Save mesh" />
<separator />
<menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
</layout>
</gui>
<registry>
<menuItem sid="actionOpenImageFile" start="yes" />
<menuItem sid="actionSaveImageFile" start="yes" />
<menuItem sid="actionOpenMeshFile" start="yes" />
<menuItem sid="actionSaveMeshFile" start="yes" />
<menuItem sid="actionQuit" start="yes" />
</registry>
</service>
<service uid="menuMesher" impl="::gui::aspect::SDefaultMenu">
<gui>
<layout>
<menuItem name="Compute Mesh (VTK)" />
</layout>
</gui>
<registry>
<menuItem sid="actionCreateVTKMesh" start="yes" />
</registry>
</service>
<service uid="actionQuit" impl="::gui::action::SQuit" />
<service uid="actionOpenImageFile" impl="::gui::action::SStarter">
<start uid="readerPathImageFile" />
</service>
<service uid="actionSaveImageFile" impl="::gui::action::SStarter">
<start uid="writerImageFile" />
</service>
<service uid="actionOpenMeshFile" impl="::gui::action::SStarter">
<start uid="readerPathMeshFile" />
</service>
<service uid="actionSaveMeshFile" impl="::gui::action::SStarter">
<start uid="writerMeshFile" />
</service>
<service uid="actionCreateVTKMesh" impl="::opVTKMesh::action::SMeshCreation">
<image uid="myImageUID" />
<mesh uid="myMeshUID" />
<percentReduction value="0" />
</service>
<!-- Image object associated to the key 'myImage' -->
<item key="myImage">
<object uid="myImageUID" type="::fwData::Image">
<!--
Services associated to the Image data :
Visualization, reading and writing service creation.
-->
<service uid="RenderingImage" impl="::vtkSimpleNegato::SRenderer" autoConnect="yes" />
<service uid="readerPathImageFile" impl="::uiIO::editor::SIOSelector">
<type mode="reader" />
</service>
<service uid="writerImageFile" impl="::uiIO::editor::SIOSelector">
<type mode="writer" />
</service>
</object>
</item>
<!-- Mesh object associated to the key 'myMesh' -->
<item key="myMesh">
<object uid="myMeshUID" type="::fwData::Mesh">
<!--
Services associated to the Mesh data :
Visualization, reading and writing service creation.
-->
<service uid="RenderingMesh" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
<service uid="readerPathMeshFile" impl="::uiIO::editor::SIOSelector">
<type mode="reader" />
</service>
<service uid="writerMeshFile" impl="::uiIO::editor::SIOSelector">
<type mode="writer" />
</service>
</object>
</item>
<start uid="myFrame" />
</object>
</config>
</extension>