Skip to content
Commits on Source (9)
......@@ -5,16 +5,21 @@ syntax: glob
# eclipse stuff
*.cproject
*.project
# python
*.pyc
*.pyo
# tmp files
.*~
*.autosave
# qtcreator cmake preferences
*.txt.user
*.txt.user*
# reject and backup file
*.rej
*.orig
# macos
.DS_Store
# vs 2017 cmake project files
\.vs*
CMakeSettings\.json
stages:
- lint
- build
- doc
- deploy
.linux_template: &linux_job
image: ${DOCKER_ENVDEV_MINT19}
before_script:
- export CCACHE_BASEDIR=${PWD}
- export CCACHE_COMPILERCHECK=content
- export CCACHE_MAXSIZE=32G
- export CCACHE_COMPRESS=1
- export CCACHE_SLOPPINESS=include_file_ctime,pch_defines,time_macros,file_macro,system_headers
- export CCACHE_NOHASHDIR=1
- export CCACHE_DIR=/cache/ccache
- conan config set storage.path=/cache/conan-cache/data
- export CC=/usr/local/lib/ccache/clang
- export CXX=/usr/local/lib/ccache/clang++
- mkdir -p $CI_PROJECT_DIR/install $CI_PROJECT_DIR/build
- sudo chown -R sight:sight .
- /usr/lib/git-core/git-restore-mtime --force --skip-missing --commit-time
.macos_template: &macos_job
variables:
CONAN_USER_HOME: $CI_PROJECT_DIR/conan
before_script:
- export CCACHE_BASEDIR=${PWD}
- export CCACHE_COMPILERCHECK=content
- export CCACHE_MAXSIZE=32G
- export CCACHE_COMPRESS=1
- export CCACHE_SLOPPINESS=include_file_ctime,include_file_mtime,pch_defines,time_macros,file_macro,system_headers
- export CCACHE_NOHASHDIR=1
- conan config set storage.path=/Users/$USER/.conan/data
- export CC=/usr/local/opt/ccache/libexec/clang
- export CXX=/usr/local/opt/ccache/libexec/clang++
- mkdir -p $CI_PROJECT_DIR/install $CI_PROJECT_DIR/build
tags:
- mojave
.windows_template: &windows_job
variables:
CONAN_USER_HOME: $CI_PROJECT_DIR/conan
before_script:
- conan config set storage.path="C:\cache\conan"
- if not exist "%CI_PROJECT_DIR%/install" md "%CI_PROJECT_DIR%/install"
- if not exist "%CI_PROJECT_DIR%/build" md "%CI_PROJECT_DIR%/build"
tags:
- shell
- windows
sheldon-mr:
<<: *linux_job
stage: lint
dependencies: []
script:
- export ORIG_BRANCH_COMMIT_SHA=$(git merge-base dev origin/${CI_COMMIT_REF_NAME})
- git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-git.git -b dev
# Execute sheldon, on all commits from the merge request
- sight-git/hooks/sheldon ${ORIG_BRANCH_COMMIT_SHA}..${CI_COMMIT_SHA}
sheldon:
<<: *linux_job
stage: lint
dependencies: []
script:
- git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-git.git -b dev
- sight-git/hooks/sheldon HEAD^ HEAD
except:
- dev
- master
build:debug-linux:
<<: *linux_job
stage: build
dependencies: []
script:
- cd $CI_PROJECT_DIR/build/
- ccache -s
- >
cmake $CI_PROJECT_DIR
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/install
-DCMAKE_BUILD_TYPE=Debug
-DBUILD_TESTS=ON
-DBUILD_DOCUMENTATION=OFF
-DENABLE_PCH=OFF
- find . -type f -iname '*.?pp' -exec touch -f -a -m -t 197001010000 {} \;
- ninja
- ccache -s
- >
curl --retry 3 --location --insecure --location-trusted
-s https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-data/-/archive/dev/sight-data-dev.tar.gz |
tar xfz - > /dev/null
- export FWTEST_DATA_DIR=$CI_PROJECT_DIR/build/sight-data-dev
- export FW_IGNORE_SLOW_TESTS=1
- ctest --timeout 240 --output-on-failure -O ctest.log
artifacts:
when: always
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/build/ctest.log
build:release-linux:
<<: *linux_job
stage: build
dependencies: []
script:
- cd $CI_PROJECT_DIR/build/
- ccache -s
- >
cmake $CI_PROJECT_DIR
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/install
-DCMAKE_BUILD_TYPE=Release
-DBUILD_TESTS=ON
-DBUILD_DOCUMENTATION=OFF
-DENABLE_PCH=OFF
- find . -type f -iname '*.?pp' -exec touch -f -a -m -t 197001010000 {} \;
- ninja
- ccache -s
- >
curl --retry 3 --location --insecure --location-trusted
-s https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-data/-/archive/dev/sight-data-dev.tar.gz |
tar xfz - > /dev/null
- export FWTEST_DATA_DIR=$CI_PROJECT_DIR/build/sight-data-dev
- export FW_IGNORE_SLOW_TESTS=0
- ctest --timeout 120 --output-on-failure -O ctest.log
artifacts:
when: always
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/build/ctest.log
build:debug-windows:
<<: *windows_job
stage: build
dependencies: []
script:
- cd "%CI_PROJECT_DIR%/build"
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
- chcp 1252
- >
cmake %CI_PROJECT_DIR%
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=%CI_PROJECT_DIR%/install
-DCMAKE_BUILD_TYPE=Debug
-DBUILD_TESTS=ON
-DBUILD_DOCUMENTATION=OFF
- ninja
- >
curl --retry 3 --location --insecure --location-trusted
-s https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-data/-/archive/dev/sight-data-dev.zip
--output sight-data-dev.zip && unzip -qq sight-data-dev.zip
- set FWTEST_DATA_DIR=%CI_PROJECT_DIR%\build\sight-data-dev
- set FW_IGNORE_SLOW_TESTS=1
- ctest --timeout 240 --output-on-failure -O ctest.log -E fwRenderOgreTest
artifacts:
when: always
name: "%CI_JOB_NAME%-%CI_COMMIT_REF_SLUG%"
paths:
- build/ctest.log
- build/fwTest.log
build:release-windows:
<<: *windows_job
stage: build
dependencies: []
script:
- cd "%CI_PROJECT_DIR%/build"
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
- chcp 1252
- >
cmake %CI_PROJECT_DIR%
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=%CI_PROJECT_DIR%/install
-DCMAKE_BUILD_TYPE=Release
-DBUILD_TESTS=ON
-DBUILD_DOCUMENTATION=OFF
- ninja
- >
curl --retry 3 --location --insecure --location-trusted
-s https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-data/-/archive/dev/sight-data-dev.zip
--output sight-data-dev.zip && unzip -qq sight-data-dev.zip
- set FWTEST_DATA_DIR=%CI_PROJECT_DIR%\build\sight-data-dev
- set FW_IGNORE_SLOW_TESTS=0
- ctest --timeout 120 --output-on-failure -O ctest.log -E fwRenderOgreTest
artifacts:
when: always
name: "%CI_JOB_NAME%-%CI_COMMIT_REF_SLUG%"
paths:
- build/ctest.log
- build/fwTest.log
build:debug-macos:
<<: *macos_job
stage: build
dependencies: []
script:
- cd $CI_PROJECT_DIR/build
- ccache -s
- >
cmake $CI_PROJECT_DIR
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/install
-DCMAKE_BUILD_TYPE=Debug
-DBUILD_TESTS=ON
-DBUILD_DOCUMENTATION=OFF
-DENABLE_PCH=OFF
- ninja
- ccache -s
- >
curl --retry 3 --location --insecure --location-trusted
-s https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-data/-/archive/dev/sight-data-dev.tar.gz |
tar xfz - > /dev/null
- export FWTEST_DATA_DIR=$CI_PROJECT_DIR/build/sight-data-dev
- export FW_IGNORE_SLOW_TESTS=1
- ctest --timeout 240 --output-on-failure -O ctest.log
artifacts:
when: always
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/build/ctest.log
build:release-macos:
<<: *macos_job
stage: build
dependencies: []
script:
- cd $CI_PROJECT_DIR/build
- ccache -s
- >
cmake $CI_PROJECT_DIR
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/install
-DCMAKE_BUILD_TYPE=Release
-DBUILD_TESTS=ON
-DBUILD_DOCUMENTATION=OFF
-DENABLE_PCH=OFF
- ninja
- ccache -s
- >
curl --retry 3 --location --insecure --location-trusted
-s https://gitlab-ci-token:${CI_JOB_TOKEN}@git.ircad.fr/Sight/sight-data/-/archive/dev/sight-data-dev.tar.gz |
tar xfz - > /dev/null
- export FWTEST_DATA_DIR=$CI_PROJECT_DIR/build/sight-data-dev
- export FW_IGNORE_SLOW_TESTS=0
- ctest --timeout 120 --output-on-failure -O ctest.log
artifacts:
when: always
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/build/ctest.log
doxygen:
<<: *linux_job
stage: doc
dependencies: []
script:
- cd $CI_PROJECT_DIR/build/
- >
cmake $CI_PROJECT_DIR
-G Ninja
-DUSE_CONAN=ON
-DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/install
-DCMAKE_BUILD_TYPE=Release
-DBUILD_TESTS=OFF
-DBUILD_DOCUMENTATION=ON
- ninja doc
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/build/Documentation/Doxygen/
pages:
image: ${DOCKER_ENVDEV_MINT19}
stage: deploy
dependencies:
- doxygen
script:
- mv build/Documentation/Doxygen/html/ public/
artifacts:
paths:
- public
only:
- dev
Please read this!
Before opening a new issue, verify the issue you're about to submit isn't a duplicate.
Please remove this notice if you're confident your issue isn't a duplicate.
------
### Summary
(Summarize the bug encountered concisely)
......@@ -41,4 +33,4 @@ logs, and code as it's very hard to read otherwise.)
(If you can, link to the line of code that might be responsible for the problem)
/label ~bug
/label ~"Type:bugfix"
Please read this!
Before opening a new issue, verify the issue you're about to submit isn't a duplicate.
Please remove this notice if you're confident your issue isn't a duplicate.
------
### Description
(Include problem, use cases, benefits, and/or goals)
......@@ -24,4 +16,4 @@ Please remove this notice if you're confident your issue isn't a duplicate.
During implementation, this can then be copied and used as a starter for the documentation.)
/label ~feature
/label ~"Type:feature"
# Goal and general information
_Brief description of the goal of this algorithm research task._
# Specification
_Specifications include functional, performance, language and data. The algorithms should focus on solving a specific problem with well-defined interfaces._
# Background
_Background check to see what algorithms exist for solving the problem. Do they meet our needs? Have better new algorithms been published?_
# Data
_Collection of data required for testing (or training in the case of learning-based algorithms). Formatting of data so that it can be inputted to the algorithm._
# Evaluation
_Evaluation framework is used to test the algorithm for correctness and meeting performance specification._
# Baseline
_Existing algorithm selection, implementation and evaluation._
# Prototyping
_The main algorithm research cycle: evaluate performance, make improvements, repeat._
# Integration
_Integration of algorithm code into production system._
# Communication
_Communicate how the algorithm works (internal and/or article publication)._
/label ~"Type:research"
......@@ -20,3 +20,11 @@
- [ ] Build on Windows
- [ ] ...
## Associated Issues/Merge Requests
- Issues
- Fixes repo#number
- Merge requests
- repo!number
language: cpp
sudo: false
addons:
apt:
packages:
- build-essential
- ninja-build
- python2.7
- git
- wget
- graphviz
- gnuplot
branches:
only:
- dev
- master
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/ -DCMAKE_BUILD_TYPE:STRING=Debug -DBUILD_DOCUMENTATION:BOOL=ON -DBUILD_TESTS:BOOL=OFF -DDOXYGEN_EXECUTABLE:FILEPATH=$DOXYGEN_BIN -DENABLE_PCH:BOOL=OFF
- cd $TRAVIS_BUILD_DIR
script:
- echo $TRAVIS_COMMIT_RANGE
- 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
fwLoadProperties()
generic_install()
\ No newline at end of file
set( NAME ARCalibration )
set( VERSION 0.7 )
set( TYPE APP )
set( DEPENDENCIES )
set( REQUIREMENTS
dataReg
arDataReg
servicesReg
patchMedicalData
arPatchMedicalData
gui
guiQt
ioAtoms
ioCalibration
ioActivity
uiIO
uiGenericQt
uiMedDataQt
media
arMedia
activities
calibrationActivity
trackedCameraRegistrationActivity
toolCalibrationActivity
appXml
fwlauncher
memory
preferences
uiPreferences
)
bundleParam(appXml PARAM_LIST config parameters PARAM_VALUES ARCalibrationBase ARCalibrationAppBase)
<extension implements="::fwServices::registry::AppConfig">
<id>ARCalibrationBase</id>
<parameters>
<param name="appName" />
<param name="appIconPath" />
</parameters>
<config>
<object uid="seriesDB" type="::fwMedData::SeriesDB" />
<object uid="loadingSeriesDB" type="::fwMedData::SeriesDB" />
<object uid="currentActivity" type="::fwMedData::ActivitySeries" src="deferred" />
<object uid="selections" type="::fwData::Vector" />
<service uid="mainFrame" type="::gui::frame::SDefaultFrame" >
<gui>
<frame>
<name>${appName}</name>
<icon>${appIconPath}</icon>
<minSize width="1280" height="800" />
</frame>
<menuBar />
</gui>
<registry>
<menuBar sid="menuBar" start="yes" />
<view sid="mainview" start="yes" />
</registry>
</service>
<service uid="menuBar" type="::gui::aspect::SDefaultMenuBar" >
<gui>
<layout>
<menu name="File" />
<menu name="Tools" />
<menu name="Preferences" />
</layout>
</gui>
<registry>
<menu sid="menuFile" start="yes" />
<menu sid="menuTools" start="yes" />
<menu sid="menuPreferences" start="yes" />
</registry>
</service>
<service uid="menuFile" type="::gui::aspect::SDefaultMenu" >
<gui>
<layout>
<menuItem name="New Activity..." shortcut="Ctrl+N" />
<menuItem name="Open Series..." shortcut="Ctrl+O" />
<menuItem name="Open Activity..." shortcut="Ctrl+Shift+O" />
<menuItem name="Save..." shortcut="Ctrl+S" />
<menuItem name="Save Activity..." shortcut="Ctrl+Shift+S" />
<menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
</layout>
</gui>
<registry>
<menuItem sid="actionNewActivity" start="yes" />
<menuItem sid="actionOpen" start="yes" />
<menuItem sid="actionOpenActivity" start="yes" />
<menuItem sid="actionSave" start="yes" />
<menuItem sid="actionSaveActivity" start="no" />
<menuItem sid="actionQuit" start="yes" />
</registry>
</service>
<service uid="menuTools" type="::gui::aspect::SDefaultMenu" >
<gui>
<layout>
<menuItem name="Show selector" style="check"/>
</layout>
</gui>
<registry>
<menuItem sid="actionSelector" start="yes" />
</registry>
</service>
<service uid="menuPreferences" type="::gui::aspect::SDefaultMenu" >
<gui>
<layout>
<menuItem name="Video directory" />
</layout>
</gui>
<registry>
<menuItem sid="actionVideoDir" start="yes" />
</registry>
</service>
<service uid="mainview" type="::gui::view::SDefaultView" >
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view align="center" />
<view align="bottom" />
</layout>
</gui>
<registry>
<view sid="dynamicView" start="yes" />
<view wid="selector" />
</registry>
</service>
<service uid="actionVideoDir" type="::uiPreferences::action::SPreferencesConfiguration" >
<preference>
<type>path</type>
<name>Video directory</name>
<key>VIDEO_DIR_PREF</key>
<default_value>...</default_value>
</preference>
</service>
<!-- Action to create/update an activity. -->
<service uid="actionNewActivity" type="::activities::action::SCreateActivity">
<in key="series" uid="selections" />
<filter>
<mode>include</mode>
<id>Calibration</id>
<id>CalibrationCharuco</id>
<id>RGBDCalibration</id>
<id>calibrationEdition</id>
<id>TrackedCameraRegistration</id>
<id>toolCalibrationActivity</id>
</filter>
</service>
<service uid="actionOpen" type="::uiIO::action::SSeriesDBMerger" >
<inout key="seriesDB" uid="seriesDB" />
<IOSelectorSrvConfig name="SDBAtomsReaderIOSelectorConfig" />
</service>
<service uid="actionOpenActivity" type="::uiIO::action::SSeriesDBMerger">
<inout key="seriesDB" uid="loadingSeriesDB" />
<IOSelectorSrvConfig name="ActivityReaderConfig" />
</service>
<!-- Actions to save all type of series (jsonz, json, ...). -->
<service uid="actionSave" type="::gui::action::SStarter">
<start uid="SDBWriter" />
</service>
<service uid="SDBWriter" type="::uiIO::editor::SIOSelector" config="SDBAtomsWriterIOSelectorConfig" >
<inout key="data" uid="seriesDB" />
</service>
<!-- Service to select the current activity into the composite. -->
<service uid="activitySeriesUpdater" type="::ctrlSelection::updater::SObjFromSlot">
<out key="object" uid="currentActivity" />
</service>
<!-- Save current activity. -->
<service uid="actionSaveActivity" type="::uiIO::action::SExportWithSeriesDB" >
<inout key="series" uid="currentActivity" />
<IOSelectorSrvConfig name="ActivityWriterConfig" />
</service>
<service uid="actionQuit" type="::gui::action::SQuit" />
<service uid="actionSelector" type="::gui::action::SConfigLauncher" >
<appConfig id="SDBARCalibration" />
<inout key="SERIESDB" uid="seriesDB" />
<parameter replace="WID_PARENT" uid="selector" />
<parameter replace="ICON_PATH" by="${appIconPath}" />
<parameter replace="DYNAMICVIEW_CHANNEL" uid="dynamicView" />
</service>
<service uid="dynamicView" type="::guiQt::editor::SDynamicView" >
<mainActivity id="activitySelector" closable="false" />
<parameters>
<parameter replace="SERIESDB" uid="seriesDB" />
<parameter replace="LOADING_SERIESDB" uid="loadingSeriesDB" />
<parameter replace="ICON_PATH" by="${appIconPath}" />
<parameter replace="DYNAMICVIEW_CHANNEL" uid="dynamicView" />
<parameter replace="CREATE_ACTIVITY_CHANNEL" uid="create_activity_channel" />
<parameter replace="LAUNCH_ACTIVITY_CHANNEL" uid="launch_activity_channel" />
<parameter replace="LAUNCH_ACTIVITY_SERIES_CHANNEL" uid="launch_activity_series_channel" />
<parameter replace="LOAD_ACTIVITY_CHANNEL" uid="load_activity_series_channel" />
</parameters>
</service>
<!-- Add the current tab activity in the root composite. -->
<connect>
<signal>dynamicView/activitySelected</signal>
<slot>activitySeriesUpdater/add</slot>
</connect>
<!-- When an activity is opened: it calls the creator's update activity slot. -->
<connect channel="launch_activity_series_channel">
<slot>dynamicView/launchActivitySeries</slot>
</connect>
<!-- Remove the activity from the root composite when no tab is selected. -->
<connect>
<signal>dynamicView/nothingSelected</signal>
<slot>activitySeriesUpdater/remove</slot>
</connect>
<!-- connect to show the creator editor when the activity should be created. -->
<connect channel="create_activity_channel">
<signal>actionNewActivity/activityIDSelected</signal>
</connect>
<!-- connect to launch the activity when it is created/updated. -->
<connect channel="launch_activity_channel">
<slot>dynamicView/launchActivity</slot>
</connect>
<!-- connect to load the activity . -->
<connect channel="load_activity_series_channel">
<slot>actionOpenActivity/update</slot>
</connect>
<connect channel="dynamicView">
<slot>dynamicView/createTab</slot>
</connect>
<start uid="mainFrame" />
<start uid="activitySeriesUpdater" />
<!-- Deferred start -->
<start uid="actionSaveActivity" />
</config>
</extension>
<extension implements="::fwServices::registry::AppConfig">
<id>activitySelector</id>
<parameters>
<param name="SERIESDB" />
<param name="LOADING_SERIESDB" />
<param name="WID_PARENT" />
<param name="CREATE_ACTIVITY_CHANNEL" />
<param name="LAUNCH_ACTIVITY_CHANNEL" />
<param name="LAUNCH_ACTIVITY_SERIES_CHANNEL" />
<param name="LOAD_ACTIVITY_CHANNEL" />
<param name="ICON_PATH" />
</parameters>
<config>
<object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref"/>
<object uid="${LOADING_SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
<service uid="mainview" type="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view align="center" minWidth="200" visible="false" />
<view align="bottom" />
</layout>
</gui>
<registry>
<parent wid="${WID_PARENT}" />
<view sid="activityCreator" start="yes" />
<view sid="selector" start="yes" />
</registry>
</service>
<!-- Editor to create/update an activity. -->
<service uid="activityCreator" type="::uiMedDataQt::editor::SActivityWizard" >
<inout key="seriesDB" uid="${SERIESDB}" />
<ioSelectorConfig>SDBReaderIOSelectorConfig</ioSelectorConfig>
<sdbIoSelectorConfig>FullSDBReaderIOSelectorConfig</sdbIoSelectorConfig>
<confirm>false</confirm>
<icons>
<icon type="::fwMedData::ImageSeries" icon="media-0.1/icons/ImageSeries.svg" />
<icon type="::fwMedData::ModelSeries" icon="media-0.1/icons/ModelSeries.svg" />
<icon type="::arData::CameraSeries" icon="arMedia-0.1/icons/CameraSeries.svg" />
</icons>
</service>
<!-- Editor to select an activity. -->
<service uid="selector" type="::activities::editor::SCreateActivity">
<filter>
<mode>include</mode>
<id>Calibration</id>
<id>CalibrationCharuco</id>
<id>RGBDCalibration</id>
<id>calibrationEdition</id>
<id>TrackedCameraRegistration</id>
<id>toolCalibrationActivity</id>
</filter>
</service>
<service uid="seriesSignal" type="::activities::SSeriesSignal" autoConnect="yes">
<in key="seriesDB" uid="${LOADING_SERIESDB}" />
<filter>
<mode>include</mode>
<type>::fwMedData::ActivitySeries</type>
</filter>
</service>
<!-- When an activity is opened: it calls the creator's update activity slot. -->
<connect channel="${LAUNCH_ACTIVITY_SERIES_CHANNEL}">
<signal>seriesSignal/seriesAdded</signal>
</connect>
<!-- Hide the creator editor when the activity creation is canceled. -->
<connect>
<signal>activityCreator/canceled</signal>
<slot>activityCreator/hide</slot>
<slot>selector/show</slot>
</connect>
<!-- connect to hide the creator editor when the activity is created/updated. -->
<connect channel="hide_activity_creator_channel">
<signal>selector/activityIDSelected</signal>
<signal>activityCreator/activityCreated</signal>
<signal>activityCreator/activityUpdated</signal>
<slot>activityCreator/hide</slot>
</connect>
<!-- connect to show the creator editor when the activity should be created. -->
<connect channel="${CREATE_ACTIVITY_CHANNEL}">
<signal>selector/activityIDSelected</signal>
<slot>activityCreator/createActivity</slot>
<slot>selector/hide</slot>
</connect>
<!-- connect to launch the activity when it is created/updated. -->
<connect channel="${LAUNCH_ACTIVITY_CHANNEL}">
<signal>activityCreator/activityCreated</signal>
<signal>activityCreator/activityUpdated</signal>
<slot>selector/show</slot>
</connect>
<!-- connect to load the activity . -->
<connect channel="${LOAD_ACTIVITY_CHANNEL}">
<signal>selector/loadRequested</signal>
</connect>
<start uid="mainview" />
<start uid="seriesSignal" />
</config>
</extension>
<extension implements="::fwServices::registry::AppConfig">
<id>SDBARCalibration</id>
<parameters>
<param name="SERIESDB" />
<param name="WID_PARENT" />
<param name="DYNAMICVIEW_CHANNEL" default="channel" />
<param name="ICON_PATH" />
</parameters>
<config>
<object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref"/>
<object uid="selections" type="::fwData::Vector" />
<service uid="mainview" type="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::CardinalLayoutManager">
<view caption="Information" align="center" minWidth="200" />
</layout>
</gui>
<registry>
<parent wid="${WID_PARENT}" />
<view sid="selector" start="yes" />
</registry>
</service>
<service uid="selector" type="::uiMedDataQt::editor::SSelector" autoConnect="yes">
<inout key="seriesDB" uid="${SERIESDB}" />
<inout key="selection" uid="selections" />
<icons>
<icon series="::arData::CameraSeries" icon="arMedia-0.1/icons/calibrationActivity.svg" />
</icons>
</service>
<start uid="mainview" />
</config>
</extension>
<plugin id="ARCalibration" version="@PROJECT_VERSION@">
<requirement id="dataReg" />
<requirement id="servicesReg" />
<requirement id="arDataReg" />
<requirement id="patchMedicalData" />
<requirement id="arPatchMedicalData" />
<requirement id="memory" />
<requirement id="preferences" />
<requirement id="activities" />
<requirement id="filterUnknownSeries" />
<xi:include href="configurations/activitySelector.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
<xi:include href="configurations/ARCalibrationBase.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
<xi:include href="configurations/sdb.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
<extension implements="::fwServices::registry::AppConfigParameters">
<id>ARCalibrationAppBase</id>
<parameters>
<param name="appName" value="ARCalibration @PROJECT_VERSION@" />
<param name="appIconPath" value="ARCalibration-@PROJECT_VERSION@/arcalibration.ico" />
</parameters>
</extension>
<extension implements="::fwServices::registry::AppConfig">
<id>CameraExportSelection</id>
<parameters>
<param name="selection" />
</parameters>
<config>
<object uid="${selection}" src="ref" />
<service uid="export_selection" type="::uiIO::editor::SIOSelector">
<inout key="data" uid="${selection}" />
<type mode="writer" />
<selection mode="include" />
<addSelection service="::ioAtoms::SWriter" />
<config id="MDAtomsConfig" service="::ioAtoms::SWriter" />
</service>
<start uid="export_selection" />
<update uid="export_selection" />
</config>
</extension>
<extension implements="::fwActivities::registry::Activities">
<id>CameraSeriesExport</id>
<title>CameraSeries Export</title>
<desc>CameraSeries Export</desc>
<icon>media-0.1/icons/Export.svg</icon>
<requirements>
<requirement name="series" type="::arData::CameraSeries" minOccurs="1" maxOccurs="1" />
</requirements>
<builder>::fwActivities::builder::ActivitySeries</builder>
<appConfig id="CameraExportSelection">
<parameters>
<parameter replace="selection" by="@values.series" />
</parameters>
</appConfig>
</extension>
<extension implements="::fwActivities::registry::Activities">
<id>activitySelector</id>
<title>Choose your activity</title>
<desc>Activity selector for ARSurg</desc>
<icon>media-0.1/icons/selector.svg</icon>
<requirements />
<appConfig id="activitySelector">
<parameters />
</appConfig>
</extension>
</plugin>
fwLoadProperties()
generic_install()
set( NAME OgreViewer )
set( VERSION 0.3 )
set( TYPE APP )
set( DEPENDENCIES )
set( REQUIREMENTS
fwlauncher # Just to build the launcher
appXml # XML configurations
preferences # Start the bundle, load file location or window preferences
visuOgre # Start the bundle, redirect Ogre's log to Sight log
material # Start the bundle, load Ogre's materials
visuVTKQt # Start the bundle, allow vtk to be displayed in QT.
visuOgreQt # Allow Ogre to be displayed in QT.
# Objects declaration
fwData
fwMedData
# UI declaration/Actions
gui
media
arMedia
guiQt
# Configuration launchers
fwServices
ogreConfig
# Services
ctrlSelection
uiVisuOgre
uiIO
ioAtoms
videoTools
uiImageQt
videoQt
ctrlCamp
# Generic Scene
fwRenderOgre
fwRenderVTK
visuOgreAdaptor
visuVTKAdaptor
visuVTKVRAdaptor
arDataReg
dataReg
servicesReg
)
bundleParam(appXml PARAM_LIST config PARAM_VALUES OgreViewer_Extension)
<extension implements="::fwServices::registry::AppConfig">
<id>OgreGenericScene</id>
<parameters>
<param name="WID_PARENT" />
<param name="COMPOSITOR_CHANEL" />
<param name="modelSeries" />
<param name="image" />
<param name="volumeTF" />
<param name="landmarks" />
</parameters>
<config>
<!-- ******************************* Objects declaration ****************************** -->
<object uid="${modelSeries}" type="::fwMedData::ModelSeries" src="ref" />
<object uid="${image}" type="::fwData::Image" src="ref" />
<object uid="${volumeTF}" type="::fwData::TransferFunction" src="deferred" />
<object uid="${landmarks}" type="::fwData::Landmarks" src="ref" />
<object uid="frameTL" type="::arData::FrameTL" />
<object uid="videoImage" type="::fwData::Image" />
<object uid="camera" type="::arData::Camera" />
<object uid="pointList" type="::fwData::PointList" />
<object uid="volumeClippingMatrix" type="::fwData::TransformationMatrix3D" />
<object uid="identityMatrix" type="::fwData::TransformationMatrix3D" />
<!-- ******************************* UI declaration *********************************** -->
<service uid="mainView" type="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::LineLayoutManager">
<orientation value="vertical" />
<view proportion="1" />
<view proportion="0" />
<view proportion="0" />
</layout>
<toolBar/>
</gui>
<registry>
<parent wid="${WID_PARENT}" />
<toolBar sid="toolBarView" start="yes" />
<view sid="genericSceneSrv" start="yes" />
<view sid="3DNegatoEditorView" start="yes" />
<view sid="volumeRenderingMainEditorView" start="yes" />
</registry>
</service>
<service uid="toolBarView" type="::gui::aspect::SDefaultToolBar">
<gui>
<layout>
<menuItem name="Show/Hide vr editor" icon="OgreViewer-@PROJECT_VERSION@/icons/hide-view_horizontal.png" style="check" />
<separator/>
<menuItem name="Show volume" icon="media-0.1/icons/icon-VR.png" style="check" />
<menuItem name="Show negato" icon="media-0.1/icons/icon-2D.png" style="check" />
<separator/>
<menuItem name="Show/hide box cropping" icon="media-0.1/icons/icon-box.png" style="check" />
<menuItem name="Reset box cropping" icon="media-0.1/icons/icon-box-reset.png" />
<separator/>
<editor/>
<menuItem name="Play" icon="arMedia-0.1/icons/start-cam.svg" />
<menuItem name="Pause" icon="arMedia-0.1/icons/pause-cam.svg" />
<menuItem name="Stop" icon="arMedia-0.1/icons/stop-cam.svg" />
</layout>
</gui>
<registry>
<menuItem sid="volumeRenderingEditorAct" start="yes" />
<menuItem sid="volumeVisibilityAct" start="yes" />
<menuItem sid="negatoVisibilityAct" start="yes" />
<menuItem sid="boxWidgetVisibilityAct" start="yes" />
<menuItem sid="boxWidgetResetAct" start="yes" />
<editor sid="videoSelectorSrv" start="yes" />
<menuItem sid="actionStartVideo" start="yes" />
<menuItem sid="pauseVideoAct" start="yes" />
<menuItem sid="stopVideoAct" start="yes" />
</registry>
</service>
<service uid="3DNegatoEditorView" type="::gui::view::SDefaultView">
<gui>
<layout type="::fwGui::LineLayoutManager">
<orientation value="vertical" />
<view proportion="1" />
</layout>
</gui>
<registry>
<view sid="3DNegatoSlicerSrv" start="yes" />
</registry>
</service>
<service uid="volumeRenderingMainEditorView" type="::gui::view::SDefaultView" >
<gui>
<layout type="::fwGui::LineLayoutManager">
<orientation value="horizontal" />
<view proportion="0" />
<view proportion="0" />
</layout>
</gui>
<registry>
<view sid="volumeRenderingBasicEditorView" start="yes" />
<view sid="volumeRenderingAdvancedEditorView" start="yes" />
</registry>
</service>
<service uid="volumeRenderingBasicEditorView" type="::guiQt::editor::SParameters" >
<parameters>
<param type="int" name="Samples" key="sampling" defaultValue="512" min="128" max="8192" />
<param type="int" name="Opacity correction" key="opacityCorrection" defaultValue="200" min="1" max="200" />
<param type="bool" name="Pre-integration" key="preIntegration" defaultValue="false" />
<param type="bool" name="Ambient occlusion" key="ambientOcclusion" defaultValue="false" />
<param type="bool" name="Color bleeding" key="colorBleeding" defaultValue="false" />
</parameters>
</service>
<service uid="volumeRenderingAdvancedEditorView" type="::guiQt::editor::SParameters" >
<parameters>
<param type="double" name="AO factor" key="aoFactor" defaultValue="1.0" min="0.1" max="10.0" />
<param type="double" name="Color bleeding factor" key="colorBleedingFactor" defaultValue="1.0" min="0.1" max="10.0" />
<param type="int" name="SAT size ratio" key="satSizeRatio" defaultValue="1" min="1" max="4" />
<param type="int" name="AO shells number" key="satShellsNumber" defaultValue="4" min="1" max="10" />
<param type="int" name="AO shell radius" key="satShellRadius" defaultValue="4" min="1" max="10" />
<param type="bool" name="Soft shadows" key="shadows" defaultValue="false" />
<param type="int" name="Shadow cone angle" key="satConeAngle" defaultValue="10" min="10" max="100" />
<param type="int" name="Shadow cone samples" key="satConeSamples" defaultValue="50" min="10" max="100" />
</parameters>
</service>
<!-- ************************************* Actions ************************************ -->
<service uid="volumeRenderingEditorAct" type="::gui::action::SModifyLayout">
<config>
<show_or_hide sid="volumeRenderingMainEditorView" />
</config>
</service>
<service uid="volumeVisibilityAct" type="::gui::action::SBooleanSlotCaller">
<slots>
<slot>volumeAdp/updateVisibility</slot>
</slots>
<state active="true" />
</service>
<service uid="negatoVisibilityAct" type="::gui::action::SBooleanSlotCaller">
<slots>
<slot>3DNegatoAdp/setVisibility</slot>
</slots>
<state active="true" />
</service>
<service uid="boxWidgetVisibilityAct" type="::gui::action::SBooleanSlotCaller">
<slots>
<slot>volumeAdp/toggleWidgets</slot>
</slots>
</service>
<service uid="boxWidgetResetAct" type="::gui::action::SSlotCaller">
<slots>
<slot>clippingBoxResetSrv/update</slot>
<slot>volumeAdp/updateClippingBox</slot>
</slots>
</service>
<service uid="actionStartVideo" type="::gui::action::SSlotCaller">
<slots>
<slot>frameGrabberSrv/startCamera</slot>
</slots>
</service>
<service uid="pauseVideoAct" type="::gui::action::SSlotCaller">
<slots>
<slot>frameGrabberSrv/pauseCamera</slot>
</slots>
</service>
<service uid="stopVideoAct" type="::gui::action::SSlotCaller">
<slots>
<slot>frameGrabberSrv/stopCamera</slot>
</slots>
</service>
<!-- ******************************* Begin Generic Scene ******************************* -->
<service uid="genericSceneSrv" type="::fwRenderOgre::SRender">
<scene overlays="LogoOverlay">
<background topColor="#DDDDDD" bottomColor="#43958D" topScale="0.7" bottomScale="1.0" />
<layer id="video" depth="1" />
<layer id="default" depth="2" transparency="HybridTransparency" numPeels="3"/>
<adaptor uid="videoAdp" />
<adaptor uid="videoInteractorAdp" />
<adaptor uid="defaultInteractorAdp" />
<adaptor uid="defaultPickerAdp" />
<adaptor uid="modeSeriesAdp" />
<adaptor uid="3DNegatoAdp" />
<adaptor uid="volumeAdp" />
<adaptor uid="pointListAdp" />
<adaptor uid="landmarksAdp" />
<adaptor uid="renderStatsAdp" />
</scene>
</service>
<service uid="videoAdp" type="::visuOgreAdaptor::SVideo">
<in key="image" uid="videoImage" autoConnect="yes" />
<in key="camera" uid="camera" />
<config layer="video" />
</service>
<service uid="videoInteractorAdp" type="::visuOgreAdaptor::SInteractorStyle">
<in key="object" uid="camera" />
<config layer="video" movement="Fixed" />
</service>
<service uid="defaultInteractorAdp" type="::visuOgreAdaptor::SInteractorStyle">
<config layer="default" movement="VR" />
</service>
<service uid="defaultPickerAdp" type="::visuOgreAdaptor::SInteractorStyle">
<config layer="default" picker="Mesh" queryFlags="1"/>
</service>
<service uid="modeSeriesAdp" type="::visuOgreAdaptor::SModelSeries" autoConnect="yes">
<in key="model" uid="${modelSeries}" />
<config layer="default" />
</service>
<service uid="volumeAdp" type="::visuOgreAdaptor::SVolumeRender">
<inout key="image" uid="${image}" autoConnect="yes" />
<inout key="tf" uid="${volumeTF}" optional="yes" />
<inout key="clippingMatrix" uid="volumeClippingMatrix" autoConnect="yes" />
<config layer="default" widgets="no" preintegration="no" autoresetcamera="yes" samples="1024"/>
</service>
<service uid="3DNegatoAdp" type="::visuOgreAdaptor::SNegato3D">
<inout key="image" uid="${image}" autoConnect="yes" />
<inout key="tf" uid="${volumeTF}" optional="yes" />
<config layer="default" />
</service>
<service uid="pointListAdp" type="::visuOgreAdaptor::SPointList" autoConnect="yes">
<in key="pointList" uid="pointList" />
<config layer="default" autoresetcamera="no" color="#ff0000" radius="1" fixedSize="true" queryFlags="1"/>
</service>
<service uid="landmarksAdp" type="::visuOgreAdaptor::SLandmarks" autoConnect="yes">
<in key="landmarks" uid="${landmarks}" />
<config layer="default" />
</service>
<service uid="renderStatsAdp" type="::visuOgreAdaptor::SRenderStats">
<config layer="default" color="#ff0000" height="0.02"/>
</service>
<!-- ************************************* Services ************************************ -->
<service uid="synchronizerSrv" type="::videoTools::SFrameMatrixSynchronizer" worker="videoWorker">
<in group="frameTL">
<key uid="frameTL" />
</in>
<inout group="image">
<key uid="videoImage" />
</inout>
<framerate>30</framerate>
</service>
<service uid="3DNegatoSlicerSrv" type="::uiImageQt::SliceIndexPositionEditor" autoConnect="yes">
<inout key="image" uid="${image}" />
<sliceIndex>Sagittal</sliceIndex>
</service>
<service uid="frameGrabberSrv" type="::videoQt::SFrameGrabber">
<in key="camera" uid="camera" />
<inout key="frameTL" uid="frameTL" />
</service>
<service uid="videoSelectorSrv" type="::videoQt::editor::SCamera">
<inout key="camera" uid="camera" />
<videoSupport>yes</videoSupport>
</service>
<service uid="pointListModifierSrv" type="::uiVisuOgre::SAddPoint">
<inout key="pointList" uid="pointList" />
</service>
<service uid="clippingBoxResetSrv" type="::ctrlCamp::SCopy" >
<in key="source" uid="identityMatrix" />
<inout key="target" uid="volumeClippingMatrix" />
</service>
<!-- ******************************* Connections ***************************************** -->
<connect>
<signal>defaultPickerAdp/pointAdded</signal>
<slot>pointListModifierSrv/addPoint</slot>
</connect>
<connect>
<signal>defaultPickerAdp/pointRemoved</signal>
<slot>pointListModifierSrv/removePoint</slot>
</connect>
<connect channel="${COMPOSITOR_CHANEL}">
<signal>genericSceneSrv/compositorUpdated</signal>
</connect>
<connect>
<signal>volumeRenderingBasicEditorView/boolChanged</signal>
<slot>volumeAdp/setBoolParameter</slot>
</connect>
<connect>
<signal>volumeRenderingBasicEditorView/intChanged</signal>
<slot>volumeAdp/setIntParameter</slot>
</connect>
<connect>
<signal>volumeRenderingAdvancedEditorView/boolChanged</signal>
<slot>volumeAdp/setBoolParameter</slot>
</connect>
<connect>
<signal>volumeRenderingAdvancedEditorView/intChanged</signal>
<slot>volumeAdp/setIntParameter</slot>
</connect>
<connect>
<signal>volumeRenderingAdvancedEditorView/doubleChanged</signal>
<slot>volumeAdp/setDoubleParameter</slot>
</connect>
<connect>
<signal>${image}/visibilityModified</signal>
<slot>negatoVisibilityAct/setIsActive</slot>
</connect>
<!-- ******************************* Start/Stop services ***************************************** -->
<start uid="mainView" />
<start uid="synchronizerSrv" />
<start uid="frameGrabberSrv" />
<start uid="pointListModifierSrv" />
<start uid="clippingBoxResetSrv" />
<start uid="videoAdp" />
<start uid="videoInteractorAdp" />
<start uid="defaultInteractorAdp" />
<start uid="defaultPickerAdp" />
<start uid="modeSeriesAdp" />
<start uid="volumeAdp" />
<start uid="3DNegatoAdp" />
<start uid="pointListAdp" />
<start uid="landmarksAdp" />
<start uid="renderStatsAdp" />
<update uid="volumeRenderingEditorAct" />
</config>
</extension>