Page MenuHomePhabricator

No OneTemporary

This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/Modules/Bundles/CMakeLists.txt b/Modules/Bundles/CMakeLists.txt
index cc5d5706ea..524243e6a3 100644
--- a/Modules/Bundles/CMakeLists.txt
+++ b/Modules/Bundles/CMakeLists.txt
@@ -1,70 +1,71 @@
IF(MITK_USE_BLUEBERRY)
SET(MITK_DEFAULT_SUBPROJECTS MITK-Plugins)
SET(_mitk_bundles_default
)
IF(QT4_FOUND)
LIST(APPEND _mitk_bundles_default "org.mitk.gui.qt.imagenavigator")
# BlueBerry depends on CTK which depends on Qt, so we
# need the Qt include direcotries
INCLUDE(${QT_USE_FILE})
ENDIF()
SET(PLUGIN_EXCLUDE_LIST
org.mitk.core.ext
org.mitk.gui.qt.volumetry
org.mitk.core.jobs
org.mitk.diffusionimaging
org.mitk.gui.qt.diffusionimaging
org.mitk.gui.qt.dtiatlasapp
org.mitk.gui.qt.diffusionimagingapp
org.mitk.gui.qt.ext
org.mitk.gui.qt.extapplication
org.mitk.gui.qt.datamanager
org.mitk.gui.qt.regiongrowing
org.mitk.gui.qt.segmentation
org.mitk.planarfigure
org.mitk.gui.qt.igtnavigationtoolmanager
org.mitk.gui.qt.igttrackingtoolbox
+ org.mitk.gui.qt.igttrackinglab
org.mitk.gui.qt.igttutorial
org.mitk.gui.qt.igttoolpairnavigation
org.mitk.gui.qt.basicimageprocessing
org.mitk.gui.qt.colourimageprocessing
org.mitk.gui.qt.navigationdataplayer
org.mitk.gui.qt.tofutil
org.mitk.gui.qt.toftutorial
org.mitk.gui.qt.imagenavigator
org.mitk.gui.qt.moviemaker
org.mitk.gui.qt.deformableregistration
org.mitk.gui.qt.rigidregistration
org.mitk.gui.qt.imagestatistics
org.mitk.gui.qt.materialeditor
org.mitk.gui.qt.simpleexample
org.mitk.gui.qt.ugvisualization
org.mitk.gui.qt.measurement
org.mitk.gui.qt.simplemeasurement
org.mitk.gui.qt.imagecropper
org.mitk.gui.qt.pointbasedregistration
org.mitk.gui.qt.viewinitialization
org.mitk.gui.qt.volumevisualization
org.mitk.gui.qt.pointsetinteraction
org.mitk.gui.qt.videoplayer
org.mitk.gui.qt.python.console
)
MACRO_COLLECT_PLUGINS(OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ExtBundles
CACHE_PLUGIN_SOURCE_DIRS MITK_MODULES_PLUGIN_SOURCE_DIRS
CACHE_PLUGIN_OUTPUT_DIRS MITK_MODULES_PLUGIN_OUTPUT_DIRS
CACHE_PLUGIN_TARGETS MITK_MODULES_ENABLED_PLUGINS
BUNDLE_LIST_PATH "${MITK_BINARY_DIR}/Bundles/MITKModulesBundleList.cmake"
CMAKE_CACHE_PREFIX "MITK"
PLUGIN_DEFAULT_ON ${_mitk_bundles_default}
PLUGIN_EXCLUDES ${PLUGIN_EXCLUDE_LIST}
${MITK_BUILD_ALL_PLUGINS_OPTION})
ENDIF(MITK_USE_BLUEBERRY)
diff --git a/Modules/Bundles/PluginList.cmake b/Modules/Bundles/PluginList.cmake
index 34207399ce..5cae2f511d 100644
--- a/Modules/Bundles/PluginList.cmake
+++ b/Modules/Bundles/PluginList.cmake
@@ -1,41 +1,42 @@
SET(MITK_EXT_PLUGINS
org.mitk.core.ext:ON
org.mitk.core.jobs:OFF
org.mitk.planarfigure:ON
org.mitk.diffusionimaging:OFF
org.mitk.gui.qt.ext:ON
org.mitk.gui.qt.extapplication:ON
org.mitk.gui.qt.datamanager:ON
org.mitk.gui.qt.segmentation:OFF
org.mitk.gui.qt.diffusionimaging:OFF
org.mitk.gui.qt.dtiatlasapp:OFF
org.mitk.gui.qt.diffusionimagingapp:OFF
org.mitk.gui.qt.igtnavigationtoolmanager:OFF
org.mitk.gui.qt.igttoolpairnavigation:OFF
+ org.mitk.gui.qt.igttrackinglab:OFF
org.mitk.gui.qt.igttrackingtoolbox:OFF
org.mitk.gui.qt.regiongrowing:OFF
org.mitk.gui.qt.navigationdataplayer:OFF
org.mitk.gui.qt.basicimageprocessing:OFF
org.mitk.gui.qt.igttutorial:OFF
org.mitk.gui.qt.colourimageprocessing:OFF
org.mitk.gui.qt.tofutil:OFF
org.mitk.gui.qt.toftutorial:OFF
org.mitk.gui.qt.imagenavigator:ON
org.mitk.gui.qt.moviemaker:OFF
org.mitk.gui.qt.deformableregistration:OFF
org.mitk.gui.qt.rigidregistration:OFF
org.mitk.gui.qt.imagestatistics:OFF
org.mitk.gui.qt.volumetry:OFF
org.mitk.gui.qt.materialeditor:OFF
org.mitk.gui.qt.simpleexample:OFF
org.mitk.gui.qt.ugvisualization:OFF
org.mitk.gui.qt.measurement:OFF
org.mitk.gui.qt.simplemeasurement:OFF
org.mitk.gui.qt.imagecropper:OFF
org.mitk.gui.qt.pointbasedregistration:OFF
org.mitk.gui.qt.viewinitialization:OFF
org.mitk.gui.qt.volumevisualization:OFF
org.mitk.gui.qt.pointsetinteraction:OFF
org.mitk.gui.qt.videoplayer:OFF
org.mitk.gui.qt.python.console:OFF
)
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/CMakeLists.txt b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/CMakeLists.txt
new file mode 100644
index 0000000000..70b668a391
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/CMakeLists.txt
@@ -0,0 +1,7 @@
+project(org_mitk_gui_qt_igttrackinglab)
+
+MACRO_CREATE_MITK_CTK_PLUGIN(
+ EXPORT_DIRECTIVE IGTTRACKINGLAB_EXPORT
+ EXPORTED_INCLUDE_SUFFIXES src
+ MODULE_DEPENDENCIES QmitkExt MitkIGT MitkIGTUI
+)
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/Manual/Manual.dox b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/Manual/Manual.dox
new file mode 100644
index 0000000000..05684cd0c2
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/Manual/Manual.dox
@@ -0,0 +1,19 @@
+/**
+\bundlemainpage{org.mitk.gui.qt.igttrackinglab} Igttrackinglab
+
+\image html icon.png "Icon of Igttrackinglab"
+
+Available sections:
+ - \ref org.mitk.gui.qt.igttrackinglabOverview
+
+\section org.mitk.gui.qt.igttrackinglabOverview
+Describe the features of your awesome plugin here
+<ul>
+<li>Increases productivity
+<li>Creates beautiful images
+<li>Generates PhD thesis
+<li>Brings world peace
+</ul>
+
+*/
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/Manual/icon.png b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/Manual/icon.png
new file mode 100644
index 0000000000..7a51d8cb11
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/Manual/icon.png
@@ -0,0 +1,26 @@
+‰PNG
+
+
+•|€©$¦Š@IQIaSR•TRPyUÀ/­dKÁ6ے‘eëe=VÒJûÞyõtߓÝ=ÓÓ;+Ù Nü©ÚšÙîž{ï9÷œÿ9çîÀ¯_¿~½ª_?ûÙÏ^ÑñåW=`î¾jŸèlºæ}~n‹ 7ˆÊZT‡Œh7*í¨"h‘9QpÐs®Øþvç‘gß=:bÓc<òÈ#ìÙ³çÕ©
+#EuÎ}ºà؇þzû±oýöö”Óó=úè£Üy睯8÷ ïíˆqßÂzU>%»DµSQƒÅ€Ò×fXÓe*ݞЩ€Zh™¯*WŠ–ñù™Rˆ0‚5¨¨v:á¿oé]øÒ÷>rý"¯ 0”°/DÜ¿àd-èçP½GròºeБ[‡\npèkT›'‰>‹D˜ó•ç.×xê‚ϱ‰šVj*µPUzrÁC¯˜¿o÷ÐÜS¿ÿŽ'æE>
+À°Ö222òÊ+@î/¢ñŽËýÅë>Šê'èõ`]·£;V¸²}¹KޅPÁ*¨*o_]p
+H®׀çÀ‚¯<9îóø™ªž› d¦’Â5…êßÝÚWü篼ó±'éýêÈ4
+ÀÁƒÙ½{÷¯Puዮ ßWÕ7·­ÏéÎ.9â]‹?4 ±H-¬ÁÈb|hVŽb¢i¨–GN”õ[O/ˆç ËÛkÿõ‘›ÆÿüÎóß²óîé—6¯­€/”àc¸¿ÔŽðª[;r»7zzû #ª &<R£‘MÖÔS×ëÂk›¬ ~¶I=}Oyþ²¯_98+Õ@Y‘¯=óñ­g?½¦à?1::rñ¥*aiÜWÇF¡؉ʏQÝÙ㉾ïOnpðÃxAdv±•Ég>g­d‘ÅÈÕ¬DG„““>ÿòجN­\W¨>óÉÛÎ~fu§ÿؔßvá7ïÚÍ¡C‡ð}Éa–ð±ðV
+¨|«;{Û ¼±M^ÛïPKÚ¬F›¡=õk!Öltßs Ëƒ¾ `¨
+®2¯E°
+A¨¼yk+{s\*¹«÷÷¼eÁw¶#˓qüñ«(à åÄ÷W¢úρmCŽôy±ð*XR“Ó
+—‹p©“e¨…K[G¢„î6xMoMl‹h£¤7CXћ“mëòz¹d:žœè¸£šMª¬IÆ=tèP£”oü€w:;–åÄ5B`#ݦwÅjŒâqҒ$/6YMJ¨¹*œœ†‹ ʗjÑsm `ÛJXÑÙ#’`M7¼0©¦’¥d-iÌ9ÂÖµž;_áç—:¶ýÖºéC+:üÓcccGFFæwíÚÕÂóùT½åyÑë» ~H“é7™=)ßO]³qî^®ÁÃ'áëÏFïO^€gàJ ¦Ë‘<;ß==»F‰BèÕ,®áŠUX՗“ Ë<­ïà…®×;ÂZ`ÅÒ ø±<<P*
+üD6£8×w;ØHOÆ÷ÓæGc‡Zùi+ì°
+¾…U]°®§u¨L¬æâ|sHm…͘¥H«Úpå…éüÏè Â`†ÀÞ½{›¢ÀZ”•
+С‚'´9ˆÆhºÈücM‡×ÐÌÎ.Š ™1Bj„·lŒB\@fRã§'¢ÈÑï3•Í l¬¸Á#hhŜšm[™3Ú£ªûöíË&B:€Ò×ëI¼pi65myuPÊ,¨é+"+ïÂ;n„›VÑJø‰"ì;í~2V¨-\¡Ed
+-t\Œˆ Êø‚7àºE¤ÓÄ5rʤlwG.šÉ&¦¤©Ê+ÅèÔÍ?6E£ÍæŸv‹º+ÅBåspÏXۓ2ÛLÁ$ >|õp#é²)’5Ô¨@ۘ7Læ«_¾Pð 3>2Su»Œh§ªv¨ªl]F5oi3 $šý8Ê&B¦h­0QBê;Mø'H>>»ë%J_6
+¥MìRj\kã I¯%‹Ñ¼‚µÐî(ÕL»@ȋH³¨ª àˆÔ‰ˆ¹4ÃÓ©¶XP, \å¾kà]7GyýRi/DdÈwŽE™¢#`M›ÚEŠÐFyî:Q8,9 '"^B¸ÉEUµ ÐÒDG3¶0ñ¥îÇ߯†ð–õ°y¨µðɵssðÍ£è¹&Us¤ mme¶Nž¦Ö'l¢`¢àSUטh‹
+@k
+|õHôϓ ¥æëJ¯ÛµÀ"(í®EµÎꈪ¦]@Š A%P×jJ“×P6’8}ßƶ—°8¡Â꘻ôíc0UŽwÞ6*Á¦¹¤a‹Ö•YK̅r5ª¹»<Zƒ‘ªŠHCFìŒ*³Åš„4£kS‹K»¶¦Ò÷“d*´ÐíET×RLÕ(Þ{i³×Œk%}„Ôçì¼MkA¨øà×,F` _óCÈꄷI¹
+Ûü¼M‘"M|‚f®i‹’ܶ(Ém\#¤X©Ë3UJå@E`Ûʅ™š•i`(íÝ»w1+<ñG}.”“3AœnjƒŠ¶
+<!$ìb¢$¹–°H* ÚîD­±v'ª Úݨ0rœÆXš¢¿Cm¦Ä[­ES
+ “Ï—&+,”C¹eYÙvæìe«2)"SªZJºÇn—?XûÆLÍÝzz®&7ôåÄÄH¥éŒ, F™L0 F‚'ð¡­ù‘
+°gϞ†8p
+³ Jƒ`lÂKž<“殏f‘VN¶3”¥àj5ˉ³s„Ê]¯™«xŽž΋ÈxŒWï þñ¦S_l3vz¶jå̜¯ ªÚĈÕÅDH؂H¹V3ޑ¥Q½•5´ŠV£¨uîb‘K“U¹y°Â¦þÊ%#zô,p~dd¤’îšìqT€ßÛ|bü֞…ÏZ gg}™)‡1Òj=üeim›ª¼Òi¢®Ñtd1Ël[)¶`„R½ÁJ%àȱiÍç`çêbiyGí pxQU/%ó%=Â&ìÙ³‡ýû÷#ëï±÷¬ºðÍe^õÀ‚rjºŠ¨*B˜tˆS´vØ"¤i)›Ê—T€ÓºšØfоѓˆ6&´Ê“G®Z+¯*Û«.Xå¸*'EäÔèèhñšíñä áGo¸xñ ˦>ßéÚKç檜­Öµ¬hK0²KðtFççáôÌâ¿ssQhiAr.Jp·Â”ˆù9z|š©™
+C…·n˜™î̅Ï[•€"r> öK7GcW›÷„OúñÁ3Åö/ý|ºûS'&+y× k{ÛŪÔOfd‰p‰b©\ƒ|:s™SI-`R¬oúûM,šj(¼X…3gç8{~^syû¦éò¦ÊñrÍ=&"ÏWðƒÔÁþª
+HŽ–m½ã'³Ÿ®æþõ“G6^ÿËùÂRkaÝ@;֦θ]ƒ(‘¸U5]Y|f0Ý6©Z>!ZÉtMº ×hî³ãsœ|qF«È‡·N¿±jád%# ¿‘_ŠÈ€žžž—qJ ùKní?÷W·{ð†ŽÒ÷ §§Êzâr9&&‘·•©fk„ô¹ô)¥D–¥úiWh
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/doxygen/modules.dox b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/doxygen/modules.dox
new file mode 100644
index 0000000000..d7522c6fbc
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/documentation/doxygen/modules.dox
@@ -0,0 +1,16 @@
+/**
+ \defgroup org_mitk_gui_qt_igttrackinglab org.mitk.gui.qt.igttrackinglab Plugin
+ \ingroup MITKPlugins
+
+ \brief Describe your plugin here.
+
+*/
+
+/**
+ \defgroup org_mitk_gui_qt_igttrackinglab_internal Internal
+ \ingroup org_mitk_gui_qt_igttrackinglab
+
+ \brief This subcategory includes the internal classes of the org.mitk.gui.qt.igttrackinglab plugin. Other
+ plugins must not rely on these classes. They contain implementation details and their interface
+ may change at any time. We mean it.
+*/
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/files.cmake b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/files.cmake
new file mode 100644
index 0000000000..f03425dbf4
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/files.cmake
@@ -0,0 +1,43 @@
+set(SRC_CPP_FILES
+
+)
+
+set(INTERNAL_CPP_FILES
+ mitkPluginActivator.cpp
+ IGTTrackingLabView.cpp
+)
+
+set(UI_FILES
+ src/internal/IGTTrackingLabViewControls.ui
+)
+
+set(MOC_H_FILES
+ src/internal/mitkPluginActivator.h
+ src/internal/IGTTrackingLabView.h
+)
+
+# list of resource files which can be used by the plug-in
+# system without loading the plug-ins shared library,
+# for example the icon used in the menu and tabs for the
+# plug-in views in the workbench
+set(CACHED_RESOURCE_FILES
+ resources/icon.xpm
+ plugin.xml
+)
+
+# list of Qt .qrc files which contain additional resources
+# specific to this plugin
+set(QRC_FILES
+
+)
+
+set(CPP_FILES )
+
+foreach(file ${SRC_CPP_FILES})
+ set(CPP_FILES ${CPP_FILES} src/${file})
+endforeach(file ${SRC_CPP_FILES})
+
+foreach(file ${INTERNAL_CPP_FILES})
+ set(CPP_FILES ${CPP_FILES} src/internal/${file})
+endforeach(file ${INTERNAL_CPP_FILES})
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/manifest_headers.cmake b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/manifest_headers.cmake
new file mode 100644
index 0000000000..4105679f63
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/manifest_headers.cmake
@@ -0,0 +1,5 @@
+set(Plugin-Name "Igttrackinglab")
+set(Plugin-Version "0.1")
+set(Plugin-Vendor "DKFZ, Medical and Biological Informatics")
+set(Plugin-ContactAddress "")
+set(Require-Plugin org.mitk.gui.qt.common)
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/plugin.xml
new file mode 100644
index 0000000000..b3f429d8bf
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+
+ <extension point="org.blueberry.ui.views">
+ <view id="org.mitk.views.igttrackinglab"
+ name="IGT Tracking Lab"
+ class="IGTTrackingLabView"
+ icon="resources/icon.xpm" />
+ </extension>
+
+</plugin>
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/resources/icon.png b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/resources/icon.png
new file mode 100644
index 0000000000..96251cf563
Binary files /dev/null and b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/resources/icon.png differ
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/resources/icon.xpm b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/resources/icon.xpm
new file mode 100644
index 0000000000..9057c20bc6
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/resources/icon.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static const char * icon_xpm[] = {
+"16 16 2 1",
+" c #FF0000",
+". c #000000",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabView.cpp b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabView.cpp
new file mode 100644
index 0000000000..810e924240
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabView.cpp
@@ -0,0 +1,539 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date$
+Version: $Revision$
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+
+// Blueberry
+#include <berryISelectionService.h>
+#include <berryIWorkbenchWindow.h>
+
+// Qmitk
+#include "IGTTrackingLabView.h"
+#include "QmitkStdMultiWidget.h"
+
+#include <QmitkNDIConfigurationWidget.h>
+#include <QmitkFiducialRegistrationWidget.h>
+#include <QmitkUpdateTimerWidget.h>
+#include <QmitkToolTrackingStatusWidget.h>
+
+
+#include <mitkCone.h>
+
+#include <vtkConeSource.h>
+#include <vtkTransform.h>
+#include <vtkTransformPolyDataFilter.h>
+#include <vtkAppendPolyData.h>
+
+// Qt
+#include <QMessageBox>
+
+
+const std::string IGTTrackingLabView::VIEW_ID = "org.mitk.views.igttrackinglab";
+
+IGTTrackingLabView::IGTTrackingLabView()
+: QmitkFunctionality()
+,m_Source(NULL)
+,m_FiducialRegistrationFilter(NULL)
+,m_Visualizer(NULL)
+,m_RegistrationTrackingFiducialsFilter(NULL)
+,m_RegistrationTrackingFiducialsName("Tracking Fiducials")
+,m_RegistrationImageFiducialsName("Image Fiducials")
+{
+}
+
+IGTTrackingLabView::~IGTTrackingLabView()
+{
+}
+
+void IGTTrackingLabView::CreateQtPartControl( QWidget *parent )
+{
+ // create GUI widgets from the Qt Designer's .ui file
+ m_Controls.setupUi( parent );
+
+ m_ToolBox = new QToolBox(parent);
+ m_Controls.m_VBoxLayout->addWidget(m_ToolBox);
+
+
+ this->CreateBundleWidgets( parent );
+
+
+}
+
+
+void IGTTrackingLabView::CreateBundleWidgets( QWidget* parent )
+{
+ // configuration widget
+ m_NDIConfigWidget = new QmitkNDIConfigurationWidget(parent);
+ m_NDIConfigWidget->SetToolTypes(QStringList () << "Instrument" << "Fiducial" << "Skinmarker" << "Unknown" );
+
+ m_ToolBox->addItem(m_NDIConfigWidget, "Configuration");
+
+ // registration widget
+ m_RegistrationWidget = new QmitkFiducialRegistrationWidget(parent);
+ m_RegistrationWidget->HideStaticRegistrationRadioButton(true);
+ m_RegistrationWidget->HideContinousRegistrationRadioButton(true);
+ //m_RegistrationWidget->HideUseICPRegistrationCheckbox(true);
+ m_RegistrationWidget->SetQualityDisplayText("FRE");
+
+ m_ToolBox->addItem(m_RegistrationWidget, "Registration");
+
+
+
+ // tracking status
+ m_ToolStatusWidget = new QmitkToolTrackingStatusWidget( parent );
+
+ m_Controls.m_VBoxLayout->addWidget(m_ToolStatusWidget);
+
+ // update timer
+ m_RenderingTimerWidget = new QmitkUpdateTimerWidget( parent );
+ m_RenderingTimerWidget->SetPurposeLabelText(QString("Navigation"));
+ m_RenderingTimerWidget->SetTimerInterval( 50 ); // set rendering timer at 20Hz (updating every 50msec)
+
+ m_Controls.m_VBoxLayout->addWidget(m_RenderingTimerWidget);
+
+}
+
+
+void IGTTrackingLabView::CreateConnections()
+{
+ connect( m_NDIConfigWidget, SIGNAL(Connected()), m_RenderingTimerWidget, SLOT(EnableWidget()) );
+ connect( m_NDIConfigWidget, SIGNAL(Disconnected()), this, SLOT(OnTrackerDisconnected()) );
+ connect( m_NDIConfigWidget, SIGNAL(Connected()), this, SLOT(OnSetupNavigation()) );
+ connect( m_NDIConfigWidget, SIGNAL(SignalToolNameChanged(int, QString)), this, SLOT(OnChangeToolName(int, QString)) );
+ connect( m_NDIConfigWidget, SIGNAL(SignalLoadTool(int, mitk::DataNode::Pointer)), this, SLOT(OnToolLoaded(int, mitk::DataNode::Pointer)) );
+
+ connect( m_RegistrationWidget, SIGNAL(AddedTrackingFiducial()), this, SLOT(OnAddRegistrationTrackingFiducial()) );
+ connect( m_RegistrationWidget, SIGNAL(PerformFiducialRegistration()), this, SLOT(OnRegisterFiducials()) );
+
+ connect( m_RenderingTimerWidget, SIGNAL(Started()), this, SLOT(OnStartNavigation()) );
+ connect( m_RenderingTimerWidget, SIGNAL(Stopped()), this, SLOT(OnStopNavigation()) );
+
+
+}
+
+
+void IGTTrackingLabView::OnAddRegistrationTrackingFiducial()
+{
+ if (m_RegistrationTrackingFiducialsFilter.IsNull())
+ {
+ std::string message( "IGT Pipeline is not ready. Please 'Start Navigation' before adding points");
+ QMessageBox::warning(NULL, "Adding Fiducials not possible", message.c_str());
+ return;
+ }
+ if (m_RegistrationTrackingFiducialsFilter->GetInput()->IsDataValid() == false)
+ {
+ std::string message("instrument can currently not be tracked. Please make sure that the instrument is visible to the tracker");
+ QMessageBox::warning(NULL, "Adding Fiducials not possible", message.c_str());
+ return;
+ }
+ m_RegistrationTrackingFiducialsFilter->Update();
+}
+
+void IGTTrackingLabView::OnSetupNavigation()
+{
+ if(m_Source.IsNotNull())
+ if(m_Source->IsTracking())
+ return;
+
+ mitk::DataStorage* ds = this->GetDefaultDataStorage();
+ if(ds == NULL)
+ {
+ QMessageBox::warning(NULL, "IGTSurfaceTracker: Error", "can not access DataStorage. Navigation not possible");
+ return;
+ }
+
+ // Building up the filter pipeline
+ try
+ {
+ this->SetupIGTPipeline();
+
+ }
+ catch(std::exception& e)
+ {
+ QMessageBox::warning(NULL, QString("IGTSurfaceTracker: Error"), QString("Error while building the IGT-Pipeline: %1").arg(e.what()));
+ this->DestroyIGTPipeline(); // destroy the pipeline if building is incomplete
+ return;
+ }
+ catch(...)
+ {
+ QMessageBox::warning(NULL, QString("IGTSurfaceTracker: Error"), QString("Error while building the IGT-Pipeline"));
+ this->DestroyIGTPipeline();
+ return;
+ }
+}
+
+void IGTTrackingLabView::SetupIGTPipeline()
+{
+ mitk::DataStorage* ds = this->GetDefaultDataStorage(); // check if DataStorage is available
+ if(ds == NULL)
+ throw std::invalid_argument("DataStorage is not available");
+
+ mitk::TrackingDevice::Pointer tracker = m_NDIConfigWidget->GetTracker(); // get current tracker from configuration widget
+ if(tracker.IsNull()) // check if tracker is valid
+ throw std::invalid_argument("tracking device is NULL!");
+
+ m_Source = mitk::TrackingDeviceSource::New(); // create new source for the IGT-Pipeline
+ m_Source->SetTrackingDevice(tracker); // set the found tracker from the configuration widget to the source
+
+ this->InitializeFilters(); // initialize all needed filters
+
+ for (unsigned int i=0; i < m_Source->GetNumberOfOutputs(); ++i)
+ {
+ m_FiducialRegistrationFilter->SetInput(i, m_Source->GetOutput(i)); // set input for registration filter
+ m_Visualizer->SetInput(i, m_FiducialRegistrationFilter->GetOutput(i)); // set input for visualization filter
+ }
+
+ for(unsigned int i= 0; i < m_Visualizer->GetNumberOfOutputs(); ++i)
+ {
+ const char* toolName = tracker->GetTool(i)->GetToolName();
+
+ mitk::DataNode::Pointer representation = this->CreateInstrumentVisualization(this->GetDefaultDataStorage(), toolName);
+ m_Visualizer->SetRepresentationObject(i, representation->GetData());
+ }
+
+ // this->CreateInstrumentVisualization(ds, tracker);//create for each single connected ND a corresponding 3D representation
+}
+
+void IGTTrackingLabView::InitializeFilters()
+{
+ //1. Fiducial Registration Filters
+ m_FiducialRegistrationFilter = mitk::NavigationDataLandmarkTransformFilter::New(); // filter used for initial fiducial registration
+
+ //2. Visualization Filter
+ m_Visualizer = mitk::NavigationDataObjectVisualizationFilter::New(); // filter to display NavigationData
+}
+
+void IGTTrackingLabView::OnRegisterFiducials( )
+{
+ /* filter pipeline can only be build, if source and visualization filters exist */
+ if (m_Source.IsNull() || m_Visualizer.IsNull() || m_FiducialRegistrationFilter.IsNull())
+ {
+ QMessageBox::warning(NULL, "Registration not possible", "Navigation pipeline is not ready. Please (re)start the navigation");
+ return;
+ }
+ if (m_Source->IsTracking() == false)
+ {
+ QMessageBox::warning(NULL, "Registration not possible", "Registration only possible if navigation is running");
+ return;
+ }
+
+ /* retrieve fiducials from data storage */
+ mitk::DataStorage* ds = this->GetDefaultDataStorage();
+ mitk::PointSet::Pointer imageFiducials = ds->GetNamedObject<mitk::PointSet>(m_RegistrationImageFiducialsName.c_str());
+ mitk::PointSet::Pointer trackerFiducials = ds->GetNamedObject<mitk::PointSet>(m_RegistrationTrackingFiducialsName.c_str());
+ if (imageFiducials.IsNull() || trackerFiducials.IsNull())
+ {
+ QMessageBox::warning(NULL, "Registration not possible", "Fiducial data objects not found. \n"
+ "Please set 3 or more fiducials in the image and with the tracking system.\n\n"
+ "Registration is not possible");
+ return;
+ }
+
+ unsigned int minFiducialCount = 3; // \Todo: move to view option
+ if ((imageFiducials->GetSize() < minFiducialCount) || (trackerFiducials->GetSize() < minFiducialCount)
+ || (imageFiducials->GetSize() != trackerFiducials->GetSize()))
+ {
+ QMessageBox::warning(NULL, "Registration not possible", QString("Not enough fiducial pairs found. At least %1 fiducial must "
+ "exist for the image and the tracking system respectively.\n"
+ "Currently, %2 fiducials exist for the image, %3 fiducials exist for the tracking system").arg(minFiducialCount).arg(imageFiducials->GetSize()).arg(trackerFiducials->GetSize()));
+ return;
+ }
+
+ /* now we have two PointSets with enough points to perform a landmark based transform */
+ if ( m_RegistrationWidget->UseICPIsChecked() )
+ m_FiducialRegistrationFilter->UseICPInitializationOn();
+ else
+ m_FiducialRegistrationFilter->UseICPInitializationOff();
+
+ m_FiducialRegistrationFilter->SetSourceLandmarks(trackerFiducials);
+ m_FiducialRegistrationFilter->SetTargetLandmarks(imageFiducials);
+
+}
+
+
+void IGTTrackingLabView::OnTrackerDisconnected()
+{
+ m_RenderingTimerWidget->DisableWidget();
+ //this->DestroyInstrumentVisualization(this->GetDefaultDataStorage(), m_NDIConfigWidget->GetTracker());
+}
+
+
+mitk::DataNode::Pointer IGTTrackingLabView::CreateInstrumentVisualization(mitk::DataStorage* ds, const char* toolName)
+{
+ //const char* toolName = tracker->GetTool(i)->GetToolName();
+ mitk::DataNode::Pointer toolRepresentationNode;
+ toolRepresentationNode = ds->GetNamedNode(toolName); // check if node with same name already exists
+
+ if(toolRepresentationNode.IsNotNull())
+ ds->Remove(toolRepresentationNode); // remove old node with same name
+
+ toolRepresentationNode = this->CreateConeRepresentation( toolName );
+ // m_Visualizer->SetRepresentationObject(i, toolRepresentationNode->GetData());
+
+ ds->Add(toolRepresentationNode); // adds node to data storage
+
+ return toolRepresentationNode;
+}
+
+
+mitk::DataNode::Pointer IGTTrackingLabView::CreateConeRepresentation( const char* label )
+{
+
+ //new data
+ mitk::Cone::Pointer activeToolData = mitk::Cone::New();
+ vtkConeSource* vtkData = vtkConeSource::New();
+
+ vtkData->SetRadius(7.5);
+ vtkData->SetHeight(15.0);
+ vtkData->SetDirection(0.0, 0.0, 1.0);
+ vtkData->SetCenter(0.0, 0.0, 0.0);
+ vtkData->SetResolution(20);
+ vtkData->CappingOn();
+ vtkData->Update();
+ activeToolData->SetVtkPolyData(vtkData->GetOutput());
+ vtkData->Delete();
+
+ //new node
+ mitk::DataNode::Pointer coneNode = mitk::DataNode::New();
+ coneNode->SetData(activeToolData);
+ coneNode->GetPropertyList()->SetProperty("name", mitk::StringProperty::New( label ));
+ coneNode->GetPropertyList()->SetProperty("layer", mitk::IntProperty::New(0));
+ coneNode->GetPropertyList()->SetProperty("visible", mitk::BoolProperty::New(true));
+ coneNode->SetColor(1.0,0.0,0.0);
+ coneNode->SetOpacity(0.85);
+ coneNode->Modified();
+
+ return coneNode;
+}
+
+void IGTTrackingLabView::DestroyIGTPipeline()
+{
+ if(m_Source.IsNotNull())
+ {
+ m_Source->StopTracking();
+ m_Source->Disconnect();
+ m_Source = NULL;
+ }
+}
+
+void IGTTrackingLabView::OnChangeToolName(int index, QString name)
+{
+ if(m_Source.IsNull())
+ return;
+
+ mitk::DataStorage* ds = this->GetDefaultDataStorage();
+ if(ds == NULL)
+ {
+ QMessageBox::warning(NULL,"DataStorage Access Error", "Could not access DataStorage. Tool Name can not be changed!");
+ return;
+ }
+
+ mitk::NavigationData::Pointer tempND = m_Source->GetOutput(index);
+ if(tempND.IsNull())
+ return;
+
+ const char* oldName = tempND->GetName();
+
+ mitk::DataNode::Pointer tempNode = ds->GetNamedNode(oldName);
+
+ if(tempNode.IsNotNull())
+ {
+ tempNode->SetName(name.toStdString().c_str());
+ tempND->SetName(name.toStdString().c_str());
+ }
+ else
+ QMessageBox::warning(NULL, "Rename Tool Error", "Couldn't find the corresponding tool for changing it's name!");
+}
+
+void IGTTrackingLabView::OnToolLoaded(int index, mitk::DataNode::Pointer toolNode)
+{
+ if(m_Source.IsNull() || m_Visualizer.IsNull())
+ return;
+
+ mitk::DataStorage* ds = this->GetDefaultDataStorage();
+ if(ds == NULL)
+ {
+ QMessageBox::warning(NULL,"DataStorage Access Error", "Could not access DataStorage. Loaded tool representation can not be shown!");
+ return;
+ }
+
+ mitk::NavigationData::Pointer tempND = m_Source->GetOutput(index);
+ if(tempND.IsNull())
+ return;
+
+ // try to find DataNode for tool in DataStorage
+ const char* toolName = tempND->GetName();
+ mitk::DataNode::Pointer tempNode = ds->GetNamedNode(toolName);
+
+ if(tempNode.IsNull())
+ {
+ tempNode = mitk::DataNode::New(); // create new node, if none was found
+ ds->Add(tempNode);
+ }
+
+ tempNode->SetData(toolNode->GetData());
+ tempNode->SetName(toolNode->GetName());
+
+ m_Visualizer->SetRepresentationObject(index, tempNode->GetData());
+ m_Visualizer->Update();
+ //this->GlobalReinit();
+}
+
+void IGTTrackingLabView::OnStartNavigation()
+{
+ if(m_Source.IsNull())
+ {
+ QMessageBox::warning(NULL, "IGTTrackingLab: Error", "can not access tracking source. Navigation not possible");
+ return;
+ }
+
+ if(!m_Source->IsTracking())
+ {
+ m_Source->StartTracking();
+
+ try
+ {
+ m_RenderingTimerWidget->GetTimerInterval();
+ this->StartContinuousUpdate(); // start tracker with set interval
+
+ for(unsigned int i = 0; i < m_Source->GetNumberOfOutputs(); i++) // add navigation data to bundle widgets
+ {
+ m_ToolStatusWidget->AddNavigationData(dynamic_cast<mitk::NavigationData*>(m_Source->GetOutputs().at(i).GetPointer()));
+ }
+
+ m_ToolStatusWidget->ShowStatusLabels(); // show status for every tool if ND is valid or not
+ //m_IGTPlayerWidget->setEnabled(true);
+ }
+ catch(...)
+ {
+ //m_IGTPlayerWidget->setDisabled(true);
+ this->StopContinuousUpdate();
+ this->DestroyIGTPipeline();
+ return;
+ }
+
+
+ }
+}
+
+
+void IGTTrackingLabView::StopContinuousUpdate()
+{
+ if (this->m_RenderingTimerWidget->GetUpdateTimer() != NULL)
+ {
+ m_RenderingTimerWidget->StopTimer();
+ disconnect( (QTimer*) m_RenderingTimerWidget->GetUpdateTimer(), SIGNAL(timeout()), this, SLOT(RenderScene()) ); // disconnect timer from RenderScene() method
+ }
+}
+
+void IGTTrackingLabView::RenderScene( )
+{
+ try
+ {
+ if (m_Visualizer.IsNull() || this->GetActiveStdMultiWidget() == NULL)
+ return;
+ try
+ {
+ if(m_Source.IsNotNull() && m_Source->IsTracking())
+ m_ToolStatusWidget->Refresh();
+
+ m_Visualizer->Update();
+ }
+ catch(std::exception& e)
+ {
+ MITK_WARN << "Exception during QmitkIGTTrackingLab::RenderScene():" << e.what() << "\n";
+ }
+
+ //update all Widgets
+ mitk::RenderingManager::GetInstance()->RequestUpdateAll(mitk::RenderingManager::REQUEST_UPDATE_3DWINDOWS);
+ }
+ catch (std::exception& e)
+ {
+ MITK_WARN << "RenderAll exception: " << e.what() << "\n";
+ }
+ catch (...)
+ {
+ MITK_WARN << "RenderAll unknown exception\n";
+ }
+}
+
+void IGTTrackingLabView::StartContinuousUpdate( )
+{
+ if (m_Source.IsNull() || m_Visualizer.IsNull() )
+ throw std::invalid_argument("Pipeline is not set up correctly");
+
+ if (m_RenderingTimerWidget->GetUpdateTimer() == NULL)
+ return;
+
+ else
+ {
+ connect( (QTimer*) m_RenderingTimerWidget->GetUpdateTimer(), SIGNAL(timeout()), this, SLOT(RenderScene()) ); // connect update timer to RenderScene() method
+ }
+}
+
+
+
+void IGTTrackingLabView::OnStopNavigation()
+{
+ if(m_Source.IsNull())
+ {
+ QMessageBox::warning(NULL, "IGTSurfaceTracker: Error", "can not access tracking source. Navigation not possible");
+ return;
+ }
+ if(m_Source->IsTracking())
+ {
+ m_Source->StopTracking();
+ this->StopContinuousUpdate();
+ m_ToolStatusWidget->RemoveStatusLabels();
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//void IGTTrackingLabView::OnSelectionChanged( std::vector<mitk::DataNode*> nodes )
+//{
+// // iterate all selected objects, adjust warning visibility
+// for( std::vector<mitk::DataNode*>::iterator it = nodes.begin();
+// it != nodes.end();
+// ++it )
+// {
+// mitk::DataNode::Pointer node = *it;
+//
+// if( node.IsNotNull() && dynamic_cast<mitk::Image*>(node->GetData()) )
+// {
+// m_Controls.labelWarning->setVisible( false );
+// m_Controls.buttonPerformImageProcessing->setEnabled( true );
+// return;
+// }
+// }
+//
+// m_Controls.labelWarning->setVisible( true );
+// m_Controls.buttonPerformImageProcessing->setEnabled( false );
+//}
+
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabView.h b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabView.h
new file mode 100644
index 0000000000..5961b23738
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabView.h
@@ -0,0 +1,134 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date$
+Version: $Revision$
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+
+#ifndef IGTTrackingLabView_h
+#define IGTTrackingLabView_h
+
+#include <berryISelectionListener.h>
+
+#include <QmitkFunctionality.h>
+
+#include "ui_IGTTrackingLabViewControls.h"
+
+#include <mitkNavigationDataToPointSetFilter.h>
+#include <mitkNavigationDataLandmarkTransformFilter.h>
+#include <mitkNavigationDataObjectVisualizationFilter.h>
+#include <mitkNavigationDataToPointSetFilter.h>
+#include <mitkTrackingDeviceSource.h>
+
+#include <QToolBox>
+#include <QCheckBox>
+
+class QmitkNDIConfigurationWidget;
+class QmitkFiducialRegistrationWidget;
+class QmitkUpdateTimerWidget;
+class QmitkToolTrackingStatusWidget;
+
+
+
+/*!
+ \brief IGTTrackingLabView
+
+ \warning This class is not yet documented. Use "git blame" and ask the author to provide basic documentation.
+
+ \sa QmitkFunctionality
+ \ingroup ${plugin_target}_internal
+*/
+class IGTTrackingLabView : public QmitkFunctionality
+{
+ // this is needed for all Qt objects that should have a Qt meta-object
+ // (everything that derives from QObject and wants to have signal/slots)
+ Q_OBJECT
+
+ public:
+
+ static const std::string VIEW_ID;
+
+ IGTTrackingLabView();
+ virtual ~IGTTrackingLabView();
+
+ virtual void CreateQtPartControl(QWidget *parent);
+
+ protected slots:
+
+ void OnAddRegistrationTrackingFiducial();
+ void OnRegisterFiducials();
+ void OnTrackerDisconnected();
+ void OnSetupNavigation();
+ void OnChangeToolName(int index, QString name);
+ void OnToolLoaded(int index, mitk::DataNode::Pointer toolNode);
+ void OnStartNavigation();
+ void OnStopNavigation();
+
+
+
+ /// \brief Called when the user clicks the GUI button
+// void DoImageProcessing();
+
+ protected:
+
+ /// \brief called by QmitkFunctionality when DataManager's selection has changed
+// virtual void OnSelectionChanged( std::vector<mitk::DataNode*> nodes );
+
+ Ui::IGTTrackingLabViewControls m_Controls;
+ void CreateBundleWidgets( QWidget* parent );
+ void CreateConnections();
+
+ void SetupIGTPipeline();
+ void InitializeFilters();
+ void DestroyIGTPipeline();
+ void StartContinuousUpdate();
+ void StopContinuousUpdate();
+ void RenderScene();
+
+
+ mitk::DataNode::Pointer CreateInstrumentVisualization(mitk::DataStorage* ds, const char* toolName); // create 3D models for all connected tools
+ mitk::DataNode::Pointer CreateConeRepresentation(const char* label = ""); // create a 3D cone as representation for a tool
+
+
+
+ //void DestroyInstrumentVisualization(mitk::DataStorage* ds, mitk::TrackingDevice::Pointer tracker);
+
+
+
+
+ mitk::TrackingDeviceSource::Pointer m_Source; ///< source that connects to the tracking device
+
+ mitk::NavigationDataLandmarkTransformFilter::Pointer m_FiducialRegistrationFilter; ///< this filter transforms from tracking coordinates into mitk world coordinates
+ mitk::NavigationDataObjectVisualizationFilter::Pointer m_Visualizer; ///< visualization filter
+ mitk::NavigationDataToPointSetFilter::Pointer m_RegistrationTrackingFiducialsFilter; ///< fill the Registration Tracking Fiducials with instrument position in tracking space
+
+
+
+
+private:
+
+ QToolBox* m_ToolBox;
+ QCheckBox* m_TrackingVolumeCheckbox;
+
+ QmitkNDIConfigurationWidget* m_NDIConfigWidget; // tracking device configuration widget
+ QmitkFiducialRegistrationWidget* m_RegistrationWidget; // landmark registration widget
+ QmitkUpdateTimerWidget* m_RenderingTimerWidget; // update timer widget for rendering and updating
+ QmitkToolTrackingStatusWidget* m_ToolStatusWidget; // tracking status visualizer widget
+
+ std::string m_RegistrationTrackingFiducialsName;
+ std::string m_RegistrationImageFiducialsName;
+};
+
+#endif // IGTTrackingLabView_h
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabViewControls.ui b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabViewControls.ui
new file mode 100644
index 0000000000..d39cbbc12d
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/IGTTrackingLabViewControls.ui
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IGTTrackingLabViewControls</class>
+ <widget class="QWidget" name="IGTTrackingLabViewControls">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>222</width>
+ <height>161</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>QmitkTemplate</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QVBoxLayout" name="m_VBoxLayout"/>
+ </item>
+ <item>
+ <spacer name="spacer1">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>220</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/mitkPluginActivator.cpp b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/mitkPluginActivator.cpp
new file mode 100644
index 0000000000..e45c3f652f
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/mitkPluginActivator.cpp
@@ -0,0 +1,39 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date$
+Version: $Revision$
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+
+#include "mitkPluginActivator.h"
+
+#include <QtPlugin>
+
+#include "IGTTrackingLabView.h"
+
+namespace mitk {
+
+void PluginActivator::start(ctkPluginContext* context)
+{
+ BERRY_REGISTER_EXTENSION_CLASS(IGTTrackingLabView, context)
+}
+
+void PluginActivator::stop(ctkPluginContext* context)
+{
+ Q_UNUSED(context)
+}
+
+}
+
+Q_EXPORT_PLUGIN2(org_mitk_gui_qt_igttrackinglab, mitk::PluginActivator)
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/mitkPluginActivator.h b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/mitkPluginActivator.h
new file mode 100644
index 0000000000..7592169885
--- /dev/null
+++ b/Modules/Bundles/org.mitk.gui.qt.igttrackinglab/src/internal/mitkPluginActivator.h
@@ -0,0 +1,41 @@
+/*=========================================================================
+
+Program: Medical Imaging & Interaction Toolkit
+Language: C++
+Date: $Date$
+Version: $Revision$
+
+Copyright (c) German Cancer Research Center, Division of Medical and
+Biological Informatics. All rights reserved.
+See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
+
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
+
+#ifndef MITKPLUGINACTIVATOR_H
+#define MITKPLUGINACTIVATOR_H
+
+#include <ctkPluginActivator.h>
+
+namespace mitk {
+
+class PluginActivator :
+ public QObject, public ctkPluginActivator
+{
+ Q_OBJECT
+ Q_INTERFACES(ctkPluginActivator)
+
+public:
+
+ void start(ctkPluginContext* context);
+ void stop(ctkPluginContext* context);
+
+}; // PluginActivator
+
+}
+
+#endif // MITKPLUGINACTIVATOR_H
diff --git a/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp b/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp
index f30a7e5d2d..f4abd5225e 100644
--- a/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp
+++ b/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp
@@ -1,210 +1,213 @@
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "mitkTrackingDeviceSource.h"
#include "mitkTrackingDevice.h"
#include "mitkTrackingTool.h"
#include "mitkTimeStamp.h"
mitk::TrackingDeviceSource::TrackingDeviceSource()
: mitk::NavigationDataSource(), m_TrackingDevice(NULL)
{
}
mitk::TrackingDeviceSource::~TrackingDeviceSource()
{
if (m_TrackingDevice.IsNotNull())
{
if (m_TrackingDevice->GetState() == mitk::TrackingDevice::Tracking)
{
this->StopTracking();
}
if (m_TrackingDevice->GetState() == mitk::TrackingDevice::Ready)
{
this->Disconnect();
}
m_TrackingDevice = NULL;
}
}
void mitk::TrackingDeviceSource::GenerateData()
{
if (m_TrackingDevice.IsNull())
return;
if (m_TrackingDevice->GetToolCount() < 1)
return;
if (this->GetNumberOfOutputs() != m_TrackingDevice->GetToolCount()) // mismatch between tools and outputs. What should we do? Were tools added to the tracking device after SetTrackingDevice() was called?
{
//check this: TODO:
////this might happen if a tool is plugged into an aurora during tracking.
//this->CreateOutputs();
std::stringstream ss;
ss << "mitk::TrackingDeviceSource: not enough outputs available for all tools. "
<< this->GetNumberOfOutputs() << " outputs available, but "
<< m_TrackingDevice->GetToolCount() << " tools available in the tracking device.";
throw std::out_of_range(ss.str());
}
/* update outputs with tracking data from tools */
unsigned int toolCount = m_TrackingDevice->GetToolCount();
for (unsigned int i = 0; i < toolCount; ++i)
{
mitk::NavigationData* nd = this->GetOutput(i);
assert(nd);
mitk::TrackingTool* t = m_TrackingDevice->GetTool(i);
assert(t);
if ((t->IsEnabled() == false) || (t->IsDataValid() == false))
{
nd->SetDataValid(false);
continue;
}
nd->SetDataValid(true);
mitk::NavigationData::PositionType p;
t->GetPosition(p);
nd->SetPosition(p);
mitk::NavigationData::OrientationType o;
t->GetOrientation(o);
nd->SetOrientation(o);
nd->SetOrientationAccuracy(t->GetTrackingError());
nd->SetPositionAccuracy(t->GetTrackingError());
nd->SetTimeStamp( mitk::TimeStamp::GetInstance()->GetElapsed() );
}
}
void mitk::TrackingDeviceSource::SetTrackingDevice( mitk::TrackingDevice* td )
{
itkDebugMacro("setting TrackingDevice to " << td );
if (this->m_TrackingDevice.GetPointer() != td)
{
this->m_TrackingDevice = td;
this->CreateOutputs();
}
}
void mitk::TrackingDeviceSource::CreateOutputs(){
//if outputs are set then delete them
if (this->GetNumberOfOutputs() > 0)
{
for (unsigned int numOP = this->GetNumberOfOutputs(); numOP>0; numOP--)
this->RemoveOutput(this->GetOutput(numOP));
this->Modified();
}
//fill the outputs if a valid tracking device is set
if (m_TrackingDevice.IsNull())
return;
this->SetNumberOfOutputs(m_TrackingDevice->GetToolCount()); // create outputs for all tools
unsigned int numberOfOutputs = this->GetNumberOfOutputs();
for (unsigned int idx = 0; idx < numberOfOutputs; ++idx)
{
if (this->GetOutput(idx) == NULL)
{
DataObjectPointer newOutput = this->MakeOutput(idx);
static_cast<mitk::NavigationData*>(newOutput.GetPointer())->SetName(m_TrackingDevice->GetTool(idx)->GetToolName()); // set NavigationData name to ToolName
this->SetNthOutput(idx, newOutput);
this->Modified();
}
}
}
void mitk::TrackingDeviceSource::Connect()
{
if (m_TrackingDevice.IsNull())
throw std::invalid_argument("mitk::TrackingDeviceSource: No tracking device set");
if (this->IsConnected())
return;
if (m_TrackingDevice->OpenConnection() == false)
throw std::runtime_error(std::string("mitk::TrackingDeviceSource: Could not open connection to tracking device. Error: ") + m_TrackingDevice->GetErrorMessage());
/* NDI Aurora needs a connection to discover tools that are connected to it.
Therefore we need to create outputs for these tools now */
//if (m_TrackingDevice->GetType() == mitk::NDIAurora)
//this->CreateOutputs();
}
void mitk::TrackingDeviceSource::StartTracking()
{
if (m_TrackingDevice.IsNull())
throw std::invalid_argument("mitk::TrackingDeviceSource: No tracking device set");
if (m_TrackingDevice->GetState() == mitk::TrackingDevice::Tracking)
return;
if (m_TrackingDevice->StartTracking() == false)
throw std::runtime_error("mitk::TrackingDeviceSource: Could not start tracking");
}
void mitk::TrackingDeviceSource::Disconnect()
{
if (m_TrackingDevice.IsNull())
throw std::invalid_argument("mitk::TrackingDeviceSource: No tracking device set");
if (m_TrackingDevice->CloseConnection() == false)
throw std::runtime_error("mitk::TrackingDeviceSource: Could not close connection to tracking device");
}
void mitk::TrackingDeviceSource::StopTracking()
{
if (m_TrackingDevice.IsNull())
throw std::invalid_argument("mitk::TrackingDeviceSource: No tracking device set");
if (m_TrackingDevice->StopTracking() == false)
throw std::runtime_error("mitk::TrackingDeviceSource: Could not stop tracking");
}
void mitk::TrackingDeviceSource::UpdateOutputInformation()
{
+ if(this->GetTrackingDevice()->GetToolCount() != this->GetNumberOfOutputs())
+ this->CreateOutputs();
+
this->Modified(); // make sure that we need to be updated
Superclass::UpdateOutputInformation();
}
//unsigned int mitk::TrackingDeviceSource::GetToolCount()
//{
// if (m_TrackingDevice)
// return m_TrackingDevice->GetToolCount();
// return 0;
//}
bool mitk::TrackingDeviceSource::IsConnected()
{
if (m_TrackingDevice.IsNull())
return false;
return (m_TrackingDevice->GetState() == mitk::TrackingDevice::Ready) || (m_TrackingDevice->GetState() == mitk::TrackingDevice::Tracking);
}
bool mitk::TrackingDeviceSource::IsTracking()
{
if (m_TrackingDevice.IsNull())
return false;
return m_TrackingDevice->GetState() == mitk::TrackingDevice::Tracking;
}

File Metadata

Mime Type
application/octet-stream
Expires
Mon, Sep 30, 7:23 AM (1 d, 21 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2291455
Default Alt Text
(46 KB)

Event Timeline