diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/CMakeLists.txt b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/CMakeLists.txt new file mode 100644 index 0000000000..617e1dfcab --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/CMakeLists.txt @@ -0,0 +1,2 @@ + +MACRO_CREATE_MITK_PLUGIN(QmitkExt MitkIGT MitkIGTUI) diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/META-INF/MANIFEST.MF b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..e54c9b9dc6 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/META-INF/MANIFEST.MF @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-Name: MITK-IGT Navigation Tool Manager +Bundle-SymbolicName: org.mitk.gui.qt.igtnavigationtoolmanager +Bundle-Version: 0.1 +Bundle-Vendor: DKFZ, Medical and Biological Informatics +Require-Bundle: org.mitk.gui.qt.common +Bundle-Activator: diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/Manual/Manual.dox b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/Manual/Manual.dox new file mode 100644 index 0000000000..fc21427c36 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/Manual/Manual.dox @@ -0,0 +1,13 @@ +/** +\bundlemainpage{org.mitk.gui.qt.igtnavigationtoolmanager} MITK-IGT Navigation Tool Manager + +\image html icon.png "Icon of MITK-IGT Navigation Tool Manager" + +Available sections: + - \ref org.mitk.gui.qt.igtnavigationtoolmanagerOverview + +\section org.mitk.gui.qt.igtnavigationtoolmanagerOverview +This is the description for the MITK-IGT Navigation Tool Manager. + +*/ + diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/Manual/icon.png b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/Manual/icon.png new file mode 100644 index 0000000000..f1ad7558e4 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/Manual/icon.png @@ -0,0 +1 @@ +‰PNG diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/doxygen/modules.dox b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/doxygen/modules.dox new file mode 100644 index 0000000000..d9f0d67102 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/documentation/doxygen/modules.dox @@ -0,0 +1,16 @@ +/** + \defgroup org_mitk_gui_qt_igtnavigationtoolmanager org.mitk.gui.qt.igtnavigationtoolmanager Plugin + \ingroup MITKPlugins + + \brief Describe your plugin here. + +*/ + +/** + \defgroup org_mitk_gui_qt_igtnavigationtoolmanager_internal Internal + \ingroup org_mitk_gui_qt_igtnavigationtoolmanager + + \brief This subcategory includes the internal classes of the org.mitk.gui.qt.igtnavigationtoolmanager 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.igtnavigationtoolmanager/files.cmake b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/files.cmake new file mode 100644 index 0000000000..fa0b7db0ec --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/files.cmake @@ -0,0 +1,35 @@ +SET(SRC_CPP_FILES + +) + +SET(INTERNAL_CPP_FILES + QmitkMITKIGTNavigationToolManagerView.cpp + +) + +SET(UI_FILES + src/internal/QmitkMITKIGTNavigationToolManagerViewControls.ui +) + +SET(MOC_H_FILES + src/internal/QmitkMITKIGTNavigationToolManagerView.h +) + +SET(RESOURCE_FILES + resources/icon.xpm +) + +SET(RES_FILES + resources/QmitkMITKIGTNavigationToolManagerView.qrc +) + +SET(CPP_FILES manifest.cpp) + +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.igtnavigationtoolmanager/manifest.cpp b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/manifest.cpp new file mode 100644 index 0000000000..a3a46eed72 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/manifest.cpp @@ -0,0 +1,26 @@ +/*========================================================================= + +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 + + + +#include "src/internal/QmitkMITKIGTNavigationToolManagerView.h" + +POCO_BEGIN_NAMED_MANIFEST(berryIViewPart, berry::IViewPart) + POCO_EXPORT_CLASS(::QmitkMITKIGTNavigationToolManagerView) +POCO_END_MANIFEST diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/plugin.xml new file mode 100644 index 0000000000..e286a35dd6 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/resources/QmitkMITKIGTNavigationToolManagerView.qrc b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/resources/QmitkMITKIGTNavigationToolManagerView.qrc new file mode 100644 index 0000000000..f728accafe --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/resources/QmitkMITKIGTNavigationToolManagerView.qrc @@ -0,0 +1,5 @@ + + + icon.xpm + + diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/resources/icon.xpm b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/resources/icon.xpm new file mode 100644 index 0000000000..9098156a9c --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/resources/icon.xpm @@ -0,0 +1,840 @@ +/* XPM */ +static char * icon_xpm[] = { +"100 100 737 2", +" c None", +". c #FFFFFF", +"+ c #FEFEFE", +"@ c #FBFBFB", +"# c #FAFAFA", +"$ c #F1F1F1", +"% c #C3C3C3", +"& c #A1A1A1", +"* c #737373", +"= c #6A6A6A", +"- c #898989", +"; c #B5B5B5", +"> c #F3F3F3", +", c #C6C6C6", +"' c #585858", +") c #0E0E0E", +"! c #050505", +"~ c #000000", +"{ c #111111", +"] c #616161", +"^ c #7C7C7C", +"/ c #A4A4A4", +"( c #EBEBEB", +"_ c #B4B4B4", +": c #3D3D3D", +"< c #383838", +"[ c #E7E7E7", +"} c #D4D4D4", +"| c #8C8C8C", +"1 c #7B7B7B", +"2 c #9A9A9A", +"3 c #E3E3E3", +"4 c #B1B1B1", +"5 c #313131", +"6 c #F8F8F8", +"7 c #E0E0E0", +"8 c #969696", +"9 c #7A7A7A", +"0 c #909090", +"a c #D8D8D8", +"b c #434343", +"c c #030303", +"d c #8F8F8F", +"e c #E8E8E8", +"f c #888888", +"g c #CCCCCC", +"h c #FDFDFD", +"i c #A6A6A6", +"j c #404040", +"k c #1E1E1E", +"l c #0F0F0F", +"m c #BDBDBD", +"n c #F0F0F0", +"o c #ACACAC", +"p c #6C6C6C", +"q c #878787", +"r c #F6F6F6", +"s c #F9F9F9", +"t c #727272", +"u c #BBBBBB", +"v c #BABABA", +"w c #565656", +"x c #060606", +"y c #252525", +"z c #DEDEDE", +"A c #2D2D2D", +"B c #6F6F6F", +"C c #686868", +"D c #EFEFEF", +"E c #E9E9E9", +"F c #8E8E8E", +"G c #2A2A2A", +"H c #4B4B4B", +"I c #F4F4F4", +"J c #0C0C0C", +"K c #020202", +"L c #999999", +"M c #777777", +"N c #C7C7C7", +"O c #626262", +"P c #454545", +"Q c #8B8B8B", +"R c #979797", +"S c #7D7D7D", +"T c #040404", +"U c #757575", +"V c #FCFCFC", +"W c #9B9B9B", +"X c #989898", +"Y c #CBCBCB", +"Z c #212121", +"` c #CDCDCD", +" . c #343434", +".. c #E6E6E6", +"+. c #A5A5A5", +"@. c #353535", +"#. c #7E7E7E", +"$. c #171717", +"%. c #CECECE", +"&. c #CACACA", +"*. c #D1D1D1", +"=. c #C5C5C5", +"-. c #242424", +";. c #090909", +">. c #B7B7B7", +",. c #393939", +"'. c #9D9D9D", +"). c #F5F5F5", +"!. c #6D6D6D", +"~. c #B2B2B2", +"{. c #929292", +"]. c #181818", +"^. c #5A5A5A", +"/. c #1F1F1F", +"(. c #0D0D0D", +"_. c #D7D7D7", +":. c #080808", +"<. c #828282", +"[. c #1C1C1C", +"}. c #F8F9FA", +"|. c #E5EAEF", +"1. c #DCE2EA", +"2. c #DEE4EB", +"3. c #ECEFF4", +"4. c #ADADAD", +"5. c #717171", +"6. c #131313", +"7. c #3A3A3A", +"8. c #F2F4F7", +"9. c #B9C5D4", +"0. c #9CABBE", +"a. c #8F9EB1", +"b. c #92A0B0", +"c. c #909EB0", +"d. c #91A0B4", +"e. c #A5B3C5", +"f. c #CCD5E1", +"g. c #EEEEEE", +"h. c #070707", +"i. c #AAAAAA", +"j. c #484848", +"k. c #010101", +"l. c #787878", +"m. c #D9E0E8", +"n. c #A5B2C2", +"o. c #95A1AF", +"p. c #B7B9BB", +"q. c #BEBEBE", +"r. c #BDBDBE", +"s. c #ACB1B7", +"t. c #94A1B2", +"u. c #AFBDCD", +"v. c #FAFAFB", +"w. c #141414", +"x. c #4D4D4D", +"y. c #EAEAEA", +"z. c #414141", +"A. c #D0D0D0", +"B. c #DDE3EA", +"C. c #A2AFBF", +"D. c #A8AEB5", +"E. c #BFBFBF", +"F. c #929EAD", +"G. c #AFBBCB", +"H. c #FDFEFE", +"I. c #D2D2D2", +"J. c #818181", +"K. c #2C2D2F", +"L. c #000001", +"M. c #121212", +"N. c #B0B0B0", +"O. c #EDEDED", +"P. c #9F9F9F", +"Q. c #F7F9FA", +"R. c #A7B4C4", +"S. c #A6ACB5", +"T. c #93A0AF", +"U. c #BAC6D5", +"V. c #8CA3BF", +"W. c #294669", +"X. c #262D35", +"Y. c #656565", +"Z. c #DFDFDF", +"`. c #6E6E6E", +" + c #F2F2F2", +".+ c #C2CDDA", +"++ c #95A1B0", +"@+ c #BBBCBD", +"#+ c #9EABBC", +"$+ c #EEF1F5", +"%+ c #ECF1F7", +"&+ c #7099C9", +"*+ c #5585BF", +"=+ c #BAC7D6", +"-+ c #535353", +";+ c #E1E1E1", +">+ c #ABABAB", +",+ c #797979", +"'+ c #FCFCFD", +")+ c #A4B2C3", +"!+ c #B4B7BA", +"~+ c #99A4B1", +"{+ c #C6D0DC", +"]+ c #BBCEE5", +"^+ c #4D80BC", +"/+ c #81A5CF", +"(+ c #F6F9FB", +"_+ c #AFAFAF", +":+ c #8D8D8D", +"<+ c #C0C0C0", +"[+ c #ECF0F4", +"}+ c #97A5B6", +"|+ c #AEB2B8", +"1+ c #ADBACB", +"2+ c #F8FAFC", +"3+ c #86A8D1", +"4+ c #4C80BC", +"5+ c #B6CBE3", +"6+ c #CFCFCF", +"7+ c #DADADA", +"8+ c #E1E6ED", +"9+ c #98A4B3", +"0+ c #B8BABC", +"a+ c #A1AFC1", +"b+ c #D0DDED", +"c+ c #5787C0", +"d+ c #6C96C7", +"e+ c #E9EFF6", +"f+ c #B9BBBC", +"g+ c #9FAEC0", +"h+ c #FBFCFD", +"i+ c #9BB8D9", +"j+ c #4A7EBB", +"k+ c #A1BBDB", +"l+ c #E6EAF0", +"m+ c #95A3B3", +"n+ c #A7B5C6", +"o+ c #FDFDFE", +"p+ c #E5ECF5", +"q+ c #6793C6", +"r+ c #5A89C1", +"s+ c #D5E1EF", +"t+ c #F6F7F9", +"u+ c #9CABBC", +"v+ c #A3ABB4", +"w+ c #B9C5D3", +"x+ c #ECECEC", +"y+ c #B1C7E1", +"z+ c #4B7FBB", +"A+ c #8AACD3", +"B+ c #FAFBFD", +"C+ c #B2BFCF", +"D+ c #A1A9B3", +"E+ c #DBE1E9", +"F+ c #9C9C9C", +"G+ c #696969", +"H+ c #F3F7FA", +"I+ c #7CA2CD", +"J+ c #4F82BD", +"K+ c #C0D2E7", +"L+ c #DEE4EC", +"M+ c #8C9EB3", +"N+ c #BCBCBD", +"O+ c #ABB8C9", +"P+ c #C8C8C8", +"Q+ c #C3D3E5", +"R+ c #5284BE", +"S+ c #759CCB", +"T+ c #EFF4F9", +"U+ c #F5F8FB", +"V+ c #A0BBDB", +"W+ c #4976AB", +"X+ c #8597AC", +"Y+ c #A2AFBE", +"Z+ c #E3E8EE", +"`+ c #575757", +" @ c #767676", +".@ c #161616", +"+@ c #364250", +"@@ c #335680", +"#@ c #9EB6D2", +"$@ c #EDF2F8", +"%@ c #97B5D8", +"&@ c #89A2C1", +"*@ c #96A3B3", +"=@ c #A1AEBE", +"-@ c #D2DAE4", +";@ c #C9C9C9", +">@ c #C4C4C4", +",@ c #222222", +"'@ c #030609", +")@ c #494B4D", +"!@ c #E4ECF5", +"~@ c #8EAED4", +"{@ c #638FC4", +"]@ c #B9CDE4", +"^@ c #C4CEDB", +"/@ c #9FADBF", +"(@ c #93A0B0", +"_@ c #A4ABB4", +":@ c #ABB0B7", +"<@ c #9CA5B1", +"[@ c #93A1B2", +"}@ c #AAB8C8", +"|@ c #E2E7EE", +"1@ c #666666", +"2@ c #F7F7F7", +"3@ c #636363", +"4@ c #838383", +"5@ c #DBDBDB", +"6@ c #DCE5F1", +"7@ c #85A8D1", +"8@ c #C2D3E7", +"9@ c #F4F6F9", +"0@ c #CFD8E2", +"a@ c #B5C2D1", +"b@ c #ABB9CA", +"c@ c #AEBCCC", +"d@ c #BEC9D7", +"e@ c #707070", +"f@ c #B8B8B8", +"g@ c #808080", +"h@ c #D3DFEE", +"i@ c #7DA2CE", +"j@ c #749CCA", +"k@ c #CAD9EB", +"l@ c #4E4E4E", +"m@ c #545454", +"n@ c #868686", +"o@ c #B3B3B3", +"p@ c #D3E0EE", +"q@ c #5C5C5C", +"r@ c #BCBCBC", +"s@ c #9E9E9E", +"t@ c #E4E4E4", +"u@ c #C1D3E7", +"v@ c #6B95C7", +"w@ c #86A9D1", +"x@ c #DCE6F1", +"y@ c #C2C2C2", +"z@ c #939393", +"A@ c #628FC4", +"B@ c #D5D5D5", +"C@ c #0B0B0B", +"D@ c #4F4F4F", +"E@ c #F0F3F6", +"F@ c #EAEEF2", +"G@ c #FAFBFC", +"H@ c #B0C6E1", +"I@ c #5A89C0", +"J@ c #7F7F7F", +"K@ c #959595", +"L@ c #747474", +"M@ c #BDC8D6", +"N@ c #9EAEC0", +"O@ c #90A0B4", +"P@ c #8F9EB2", +"Q@ c #8F9FB3", +"R@ c #9CACBF", +"S@ c #A7C0DD", +"T@ c #5283BE", +"U@ c #858585", +"V@ c #5B5B5B", +"W@ c #202020", +"X@ c #848484", +"Y@ c #8A8A8A", +"Z@ c #A3B0C1", +"`@ c #B3B6BA", +" # c #BCBDBE", +".# c #97A2B0", +"+# c #A0AEBE", +"@# c #C9D3DF", +"## c #F4F7FA", +"$# c #9EBADA", +"%# c #4C7FBB", +"&# c #5385BE", +"*# c #A9C1DE", +"=# c #B6B6B6", +"-# c #555555", +";# c #CED7E2", +"># c #9EABBB", +",# c #ADB2B7", +"'# c #B2B5B9", +")# c #97A6B7", +"!# c #799AC0", +"~# c #5B8AC1", +"{# c #B2C8E2", +"]# c #AEAEAE", +"^# c #A3B0C0", +"/# c #B0B4B9", +"(# c #B6B8BB", +"_# c #708BAA", +":# c #608ABC", +"<# c #BACEE5", +"[# c #A8A8A8", +"}# c #919191", +"|# c #191919", +"1# c #D3D3D3", +"2# c #B2BFCE", +"3# c #9DA6B1", +"4# c #A3AAB3", +"5# c #95A9C2", +"6# c #F0F2F6", +"7# c #9AA8B9", +"8# c #98A5B6", +"9# c #E8ECF1", +"0# c #E2E2E2", +"a# c #5D5D5D", +"b# c #C1C1C1", +"c# c #D6DDE6", +"d# c #98A4B2", +"e# c #9AA5B2", +"f# c #CDD6E0", +"g# c #232323", +"h# c #494949", +"i# c #C7D1DC", +"j# c #A7AEB6", +"k# c #BFCAD7", +"l# c #EBEBE8", +"m# c #282828", +"n# c #C2CDD9", +"o# c #A5ACB5", +"p# c #BCC7D4", +"q# c #BCBAB0", +"r# c #9D9C89", +"s# c #F8F7F6", +"t# c #B3B3B4", +"u# c #505D6C", +"v# c #676D73", +"w# c #151515", +"x# c #949494", +"y# c #C9D2DE", +"z# c #A0A9B4", +"A# c #A6ADB5", +"B# c #C2CCD9", +"C# c #EAE9E6", +"D# c #A3A888", +"E# c #959E72", +"F# c #C6C5BB", +"G# c #D7E2EF", +"H# c #5A88BE", +"I# c #4F7199", +"J# c #73787D", +"K# c #DBE2E9", +"L# c #96A3B2", +"M# c #98A3B1", +"N# c #B4B4A4", +"O# c #A3AF7D", +"P# c #B8C991", +"Q# c #A7AA90", +"R# c #F6F6F5", +"S# c #DDDDDD", +"T# c #A2BCDB", +"U# c #9AB7D8", +"V# c #D6D6D6", +"W# c #363636", +"X# c #F5F7F9", +"Y# c #B9BABC", +"Z# c #9CAABB", +"`# c #EFF2F6", +" $ c #D6D5CF", +".$ c #9DA47E", +"+$ c #C2D59A", +"@$ c #C3D69B", +"#$ c #9AA477", +"$$ c #6F6E64", +"%$ c #A3A3A3", +"&$ c #6D97C8", +"*$ c #5686BF", +"=$ c #CFDCEC", +"-$ c #4A4A4A", +";$ c #4C4C4C", +">$ c #BBC7D5", +",$ c #939FAE", +"'$ c #97A2AF", +")$ c #B5C1D1", +"!$ c #FBFBFA", +"~$ c #ACAE97", +"{$ c #AFBE88", +"]$ c #B9CA91", +"^$ c #878A6F", +"/$ c #EDEDEC", +"($ c #DCDCDC", +"_$ c #B8CCE4", +":$ c #84A7D0", +"<$ c #F7F9FC", +"[$ c #DDE6F1", +"}$ c #7A95B5", +"|$ c #9FA8B2", +"1$ c #A5ACB4", +"2$ c #F3F5F8", +"3$ c #C5C3BA", +"4$ c #9AA377", +"5$ c #9BA577", +"6$ c #C3C2B8", +"7$ c #F7F9FB", +"8$ c #83A6D0", +"9$ c #D8E3F0", +"0$ c #82A6D0", +"a$ c #4779B4", +"b$ c #728EB0", +"c$ c #99A3B0", +"d$ c #A3B1C1", +"e$ c #F0EFED", +"f$ c #A6AA8D", +"g$ c #BACC93", +"h$ c #B9CB92", +"i$ c #A6AA8E", +"j$ c #F5F5F3", +"k$ c #CDDBEC", +"l$ c #5586BF", +"m$ c #6E98C8", +"n$ c #EAF0F7", +"o$ c #CFDDED", +"p$ c #79A0CC", +"q$ c #789ECC", +"r$ c #C3D2E4", +"s$ c #ADBBCB", +"t$ c #94A2B3", +"u$ c #A0A8B3", +"v$ c #A2AAB3", +"w$ c #E7EBF0", +"x$ c #B7B7A8", +"y$ c #9EAA79", +"z$ c #9BA678", +"A$ c #C2C0B6", +"B$ c #98B6D8", +"C$ c #A3BDDC", +"D$ c #C7D7E9", +"E$ c #7199C9", +"F$ c #80A4CF", +"G$ c #D6E2EF", +"H$ c #A1B0C3", +"I$ c #99A9BD", +"J$ c #9FAFC2", +"K$ c #B3C0D0", +"L$ c #D7DEE7", +"M$ c #C9CED0", +"N$ c #9DA481", +"O$ c #C1D399", +"P$ c #A5A98D", +"Q$ c #F4F4F2", +"R$ c #E2EAF4", +"S$ c #6491C5", +"T$ c #5C8BC1", +"U$ c #BED0E6", +"V$ c #6893C6", +"W$ c #89ABD2", +"X$ c #DFE8F3", +"Y$ c #FCFDFD", +"Z$ c #F0F4F9", +"`$ c #A9C1DD", +" % c #748686", +".% c #A7B480", +"+% c #BED197", +"@% c #BCCE95", +"#% c #B5C58E", +"$% c #B1C18B", +"%% c #AEBD87", +"&% c #AAB884", +"*% c #838961", +"=% c #C7C6BD", +"-% c #AEC5E0", +";% c #4B7EBB", +">% c #8DADD4", +",% c #B5CAE3", +"'% c #5F8DC3", +")% c #92B1D5", +"!% c #E7EEF6", +"~% c #4B75A3", +"{% c #5A655D", +"]% c #919677", +"^% c #95987B", +"/% c #989A7F", +"(% c #9B9D84", +"_% c #9FA089", +":% c #A3A48F", +"<% c #A8A895", +"[% c #AEAD9D", +"}% c #B4B3A5", +"|% c #BBBBAE", +"1% c #E0DFDB", +"2% c #F2F5FA", +"3% c #5082BD", +"4% c #C2D3E8", +"5% c #FCFDFE", +"6% c #ACC4E0", +"7% c #5687BF", +"8% c #9AB7D9", +"9% c #F1F5F9", +"0% c #EFF3F9", +"a% c #A8C1DE", +"b% c #608DC3", +"c% c #6C95C7", +"d% c #B4C4D4", +"e% c #EFEFEE", +"f% c #F5F4F3", +"g% c #F8F8F7", +"h% c #FAFAF9", +"i% c #FEFEFD", +"j% c #C4D5E8", +"k% c #5183BD", +"l% c #779ECC", +"m% c #4F81BD", +"n% c #A3BEDC", +"o% c #CBDAEB", +"p% c #83A7D0", +"q% c #4F81BC", +"r% c #90B0D5", +"s% c #8FAFD4", +"t% c #ACC4DF", +"u% c #9BB7D9", +"v% c #EEF3F8", +"w% c #5F8CC2", +"x% c #DAE4F0", +"y% c #5D8CC2", +"z% c #E0E9F3", +"A% c #E8EEF6", +"B% c #92B1D6", +"C% c #91B1D5", +"D% c #DAE4F1", +"E% c #A5BFDD", +"F% c #96B4D7", +"G% c #A6BFDD", +"H% c #5E8CC2", +"I% c #5485BF", +"J% c #C6D6E9", +"K% c #C9D8EA", +"L% c #DBE5F1", +"M% c #4E80BC", +"N% c #80A5CF", +"O% c #CEDCEC", +"P% c #799FCC", +"Q% c #ECF1F8", +"R% c #A5BEDD", +"S% c #5D8BC2", +"T% c #6F98C8", +"U% c #B7CCE4", +"V% c #F9FBFC", +"W% c #C5D5E9", +"X% c #82A6CF", +"Y% c #C8D8EA", +"Z% c #93B2D6", +"`% c #D1DEED", +" & c #BCCFE5", +".& c #6692C5", +"+& c #8BACD3", +"@& c #EBF1F7", +"#& c #9CB8D9", +"$& c #9FBBDB", +"%& c #B3C9E2", +"&& c #C7D7EA", +"*& c #7FA4CE", +"=& c #95B3D7", +"-& c #DDE6F2", +";& c #ABC3DF", +">& c #A2BDDC", +",& c #719AC9", +"'& c #8AABD2", +")& c #A2BCDC", +"!& c #F9FAFC", +"~& c #7EA3CE", +"{& c #DEE7F2", +"]& c #BFD1E6", +"^& c #99B6D8", +"/& c #5888C0", +"(& c #ADC5E0", +"_& c #A1BCDB", +":& c #729BCA", +"<& c #C8D7EA", +"[& c #5384BE", +"}& c #EFF3F8", +"|& c #E7EDF5", +"1& c #B7CBE3", +"2& c #97B5D7", +"3& c #DDE7F2", +"4& c #88AAD2", +"5& c #6994C6", +"6& c #5989C0", +"7& c #749BCA", +"8& c #608EC3", +"9& c #7FA3CE", +"0& c #729AC9", +"a& c #7CA1CD", +"b& c #98B5D8", +"c& c #CCDAEB", +"d& c #769DCB", +"e& c #7BA0CD", +"f& c #E7EEF5", +"g& c #9FBADA", +"h& c #BDD0E6", +"i& c #739BCA", +"j& c #C3D4E8", +"k& c #D9E4F0", +"l& c #5485BE", +"m& c #E1EAF3", +"n& c #BED1E6", +"o& c #4E81BC", +"p& c #6491C4", +"q& c #8CADD3", +"r& c #E6EDF5", +"s& c #759DCB", +"t& c #B2C8E1", +"u& c #5C8AC1", +"v& c #7AA0CC", +"w& c #E3EBF4", +"x& c #D4E0EE", +"y& c #E5EDF5", +"z& c #9EB9DA", +"A& c #F3F6FA", +"B& c #9DB9DA", +"C& c #779ECB", +"D& c #789FCC", +"E& c #E4EBF4", +"F& c #EEF2F8", +"G& c #5988C0", +"H& c #AFC6E1", +"I& c #E4ECF4", +"J& c #ADC4E0", +"K& c #6A95C7", +"L& c #C1D2E7", +"M& c #F9FBFD", +"N& c #F6F8FB", +"O& c #C2D4E8", +"P& c #CAD9EA", +"Q& c #5787BF", +"R& c #7AA0CD", +"S& c #E1E9F3", +"T& c #7BA1CD", +"U& c #E0E8F3", +"V& c #BBCFE5", +"W& c #DFE8F2", +"X& c #97B4D7", +"Y& c #729ACA", +"Z& c #95B4D7", +"`& c #94B3D6", +" * c #5182BD", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + @ # + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . + . $ % & * = - ; > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . + , ' ) ! ~ ~ { ] ^ / ( + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . + _ : ~ ~ ~ ~ ~ < [ } | 1 2 3 + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . + 4 5 ~ ~ ~ ~ ~ ~ ] 6 + + 7 8 9 0 a + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . 3 b ~ ~ ~ ~ ~ ~ c d + . . . + e & 1 f g h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . + i j k ~ ~ ~ ~ ~ l m + . . . . . + n o p q r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . s t u v w x ~ ~ ~ y z . . . . . . . . + g A B ( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . } C D + E F G ~ ~ H I . . . . . . . + + & J K q + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . + L M h . + h N O J M + . . . . . . . + [ P ~ ~ A g + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . + Q 0 + . . + + I R S r . . . . . . . + d T ~ ~ ~ U V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . + W X + . . . + . Y Z C ` + + . . . + a < ~ ~ ~ ~ ...+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . + +.^ + + . . . + 2 K ~ @.2 s + . . + #.~ ~ ~ ~ ~ $.%.+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . &.B @ . . . . h = ~ ~ ~ J p *.+ + =.-.~ ~ ~ ~ ~ ;.>.+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . n M z + . . . ( ,.~ ~ ~ ~ ~ < '.).!.~ ~ ~ ~ ~ ~ x ~.+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . + R {.+ . . + ` ].~ ~ ~ ~ ~ ~ { ^./.~ ~ ~ ~ ~ ~ (.% + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . 3 1 _.. . + +.:.~ ~ ~ ~ ~ ~ K <.2 ,.~ ~ ~ ~ ~ [._.+ . . . . . . . . . . . . . . . . . . . . . . . . . }.|.1.2.3.h . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . + 4.- [ . @ 5.~ ~ ~ ~ ~ ~ ~ ,.z + } 5.6.~ ~ ~ 7.( . . . . . . . . . . . . . . . . . . . . . . . . 8.9.0.a.b.c.d.e.f.+ . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . + {.1 N g.b ~ ~ ~ ~ ~ ~ h.8 + + . @ i.j.k.~ l.h . . . . . . . . . . . . . . . . . . . . . . . m.n.o.p.q.q.q.r.s.t.u.v.. . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . h =.L S w.~ ~ ~ ~ ~ ~ x.y.. . . . + 7 S z.A.. . . . . . . . . . . . . . . . . . . . . . . B.C.D.E.E.E.E.E.E.E.q.F.G.H.. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . h I.J.K.L.~ ~ ~ M.N.. . . . . + O.<.P.+ . . . . . . . . . . . . . . . . . . . . . . Q.R.S.E.E.E.E.E.E.E.E.E.E.T.U.+ . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + V.W.X.T ~ Y.).. . + + . Z.= `. ++ . . . . . . . . . . . . . . . . . . . . . . .+++E.E.E.E.E.E.E.E.E.E.E.@+#+$+. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %+&+*+=+W -+<.[ s + V ;+>+p ,+E + + . . . . . . . . . . . . . . . . . . . . . '+)+!+E.E.E.E.E.E.E.E.E.E.E.E.~+{+. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]+^+/+(+. D _+| B :+l.^.1 <+# + . . . . . . . . . . . . . . . . . . . . . . . [+}+q.E.E.E.E.E.E.E.E.E.E.E.E.|+1++ . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2+3+4+5+. . . . ).%.6+=.7+@ + + . . . . . . . . . . . . . . . . . . . . . . . . 8+9+E.E.E.E.E.E.E.E.E.E.E.E.E.0+a+'+. . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . b+c+d+e+. . . . . . . + + + . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9+E.E.E.E.E.E.E.E.E.E.E.E.E.f+g+h+. . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . + i+j+k++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . l+m+E.E.E.E.E.E.E.E.E.E.E.E.E.!+n+o+. . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . + . . . . . . . . p+q+r+s+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t+u+@+E.E.E.E.E.E.E.E.E.E.E.E.v+w+. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . + + I e x+..+ . . . . y+z+A+B+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + C+D+E.E.E.E.E.E.E.E.E.E.E.q.m+E+. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . + + [ F+Y.G+S `.2 A.h . H+I+J+K+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L+M+N+E.E.E.E.E.E.E.E.E.E.D+O+o+. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . + V & `.J.q.D r e P+- * <+Q+R+S+T+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . U+V+W+X+q.E.E.E.E.E.E.E.E.s.Y+Z+. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . + h d `+v + + + . + V @k..@+@@@#@+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . $@%@j+r+&@*@!+q.E.E.E.E.q.D+=@-@. . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . + >.5.;@+ . . . . . >@,@~ ~ ~ '@)@P.[ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . !@~@j+{@]@+ ^@/@(@_@s.:@<@[@}@|@. . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . O.1@0 2@. . . . . 2@3@~ ~ ~ ~ ~ ~ { 4@/ 5@+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6@7@j+d+8@+ . . 9@0@a@b@c@d@2.o+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . + R T 6.e@I.+ . + + 4.6.~ ~ ~ ~ ~ ~ < ;+f@g@'.+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h@i@j+j@k@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . > l@~ ~ k.@.X $ + $ m@~ ~ ~ ~ ~ ~ ~ 3@s . 5@n@o@+ . . . . . . . . . . . . . . . . . . . . . . . . . . . k@j@j+i@p@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . + 3 G ~ ~ ~ ~ h.q@r@s@:.~ ~ ~ ~ ~ ~ T 8 + . . I.S t@. . . . . . . . . . . . . . . . . . . . . . . . . + u@v@j+w@x@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . *.$.~ ~ ~ ~ ~ ~ ,@m@c ~ ~ ~ ~ ~ ~ ) y@+ . . + z@R + . . . . . . . . . . . . . . . . . . . . . . . + ]@A@j+~@p+. . . . . . . . . . . . . . . . . . . . . . . . . $ B@+ . . . . . ", +". . . . . . . . . . . . E.C@~ ~ ~ ~ ~ ~ D@5@J./.~ ~ ~ ~ ~ G t@+ . . + Z.M g.. . . . . . . . . . . . h+E@F@$+G@. . . . . + H@I@j+%@$@. . . . . . . . . . . . . . . . . . . . . . . . . D J@3@K@+ . . . . ", +". . . . . . . . . . . . q.J ~ ~ ~ ~ ~ (.i + V >.m@K ~ ~ ~ `+s . . . . h L@y@. . . . . . . . . . 8.M@N@O@P@Q@R@9.$+. . B+S@T@^+V+U+. . . . . . . . . . . . . . . . . . . . V h . . . . y@Q O.U@Q h . . . ", +". . . . . . . . . . . + 6+$.~ ~ ~ ~ ~ V@).+ . + ( U@W@~ ~ X@h . . . + + Y@2 + . . . . . . . . -@Z@o.`@ #q. #!+.#+#@###$#%#&#*#h+. . . . . . . . . . . . . . . . . . . . ;@f q &.. . # J@~.. n e@[ . . . ", +". . . . . . . . . . . + E @.~ ~ ~ ~ ].=#+ . . + + h f@-#M.; . . . . . + +.Q + . . . . . . . ;#>#,#E.E.E.E.E.E.E.'#)#!#j+~#{#+ . . . . . . . . . . . . . . . . . . . . 7+S ]#N.M ~.m g@J@6 . > 9 n . . . ", +". . . . . . . . . . . + V `.~ ~ ~ ~ = 6 + . . . . . . y.g@W # + + . . + / S + . . . . . . F@^#/#E.E.E.E.E.E.E.E.E.(#_#:#<#+ . . . . . . . . . . . . . . . . . . . . . =#'.. + o Y@d [#> . . +9 n . . . ", +". . . . . . . . . . . . + q.Z ~ ~ Z , + . . . . . . . + }#|#e@1#+ + . + :+U@+ . . . . . + 2#3#E.E.E.E.E.E.E.E.E.E.E.4#5#+ . . . . . . . . . . . . . . . . . . . . . . ; 0 . . + + + . . . . V Q W + . . ", +". . . . . . . . . . . . . h 1 ~ ~ ,+@ + . . . . . . . s 1@~ ~ @.X D + s e@E.. . . . . . 6#7# #E.E.E.E.E.E.E.E.E.E.E.q.8#9#. . . . . . . . . . . . . . . . . . . . . . t@J@).. . . . . . . . . e X@- 0#. ", +". . . . . . . . . . . . . . 5@' |#% + . . . . . . . . x+: ~ ~ ~ C@a#b#1#G+n . . . . . . c#d#E.E.E.E.E.E.E.E.E.E.E.E.E.e#f#. . . . . . . . . . . . . . . . . . . . . . I 9 g.. . . . . . . . . . r L 1 R ", +". . . . . . . . . . . . . . + 7 p e@g V . . . . . . + _.W@~ ~ ~ ~ ~ g#h#:++ . . . . . . i#v+E.E.E.E.E.E.E.E.E.E.E.E.E.j#k#. . . . . . . . . . . . h l#. . . . . . . . 2@l.( . . . . . . . . . . . + 7 R ", +". . . . . . . . . . . . . . . . > / ,+g@E.6 . . . . + 4 ;.~ ~ ~ ~ ~ ~ m#` . . . . . . . n#o#E.E.E.E.E.E.E.E.E.E.E.E.E.:@p#. . . . . . . . . . . . q#r#s#. . . . . . . 7 J.r . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . ).t#u#v#]#n + + h X@~ ~ ~ ~ ~ ~ w#x#+ . . . . . . . y#z#E.E.E.E.E.E.E.E.E.E.E.E.E.A#B#. . . . . . . . . . . C#D#E#F#. . @ $ h . . / '.. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . G#H#I#J#M P...6 w ~ ~ ~ ~ ~ k x#@ . . . . . . . . K#L#q.E.E.E.E.E.E.E.E.E.E.E.E.M#-@. . . . . . . . . . + N#O#P#Q#R#_ S !.- S#6 g@B@. . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . + T#j+U#'+V#F @l.-.~ ~ ~ K W#+.h + . . . . . . . . X#+#Y#E.E.E.E.E.E.E.E.E.E.E.N+Z#`#. . . . . . . . . . $.$+$@$#$$$<.% [ %$g@9 n@V . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . e+&$*$=$. . + 3 W 1@-$;$^ / 7++ + . . . . . . . . . + >$,$E.E.E.E.E.E.E.E.E.E.E.'$)$+ . . . . . . . . . !$~${$@$@$]$^$/$. . . } 4.($. . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . _$^+:$<$. . . . . V ).> + + . . . . . . . . . . . . . [$}$|$E.E.E.E.E.E.E.E.E.1$R.2$. . . . . . . . . . 3$4$@$@$@$@$5$6$. . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . 7$8$^+]@. . . . . . . . . + . . . . . . . . . . . . . 9$0$a$b$c$q.E.E.E.E.E.q.3#d$2.. . . . . . . . . . e$f$g$@$@$@$@$h$i$j$. . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . k$l$m$n$. . . . . . . . . . . . . . . . . . . . . . o$p$j+q$r$s$t$u$'#(#`@v$[@O+w$. . . . . . . . . . + x$y$@$@$@$@$@$@$z$A$. . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . H.B$j+C$+ . . . . . . . . . . . . . . . . . . . . . D$E$j+F$G$. + E+a@H$I$J$K$L$o+. . . . . . . . . . + M$N$O$@$@$@$@$@$@$g$P$Q$. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . R$S$T$9$. . . . . . . . . . . . . . . . . . . . + U$V$j+W$X$. . . . . h '+Y$. . . . . . . . . . . . Z$`$ %.%+%@%g$P##%$%%%&%*%=%. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . -%;%>%B+. . . . . . . . . . . . . . . . . . . + ,%'%j+)%!%. . . . . . . . . . . . . . . . . . . + k$:$~%{%]%^%/%(%_%:%<%[%}%|%1%. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . 2%p$3%4%. . . . . . . . . . . . . . . . . . . 5%6%7%z+8%9%. . . . . . . . . . . . . . . . . . . 0%a%b%j+c%d%e%f%g%h%@ h i%+ . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . j%k%l%9%. . . . . . . . . . . . . . . . . . 2+C$J+m%n%2+. . . . . . . . . . . . . . . . . . + o%p%;%q%r%9$+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . h+s%j+t%+ . . . . . . . . . . . . . . . . . Z$u%z+7%t%5%. . . . . . . . . . . . . . . . . . v%S@w%j+&$,%2+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . x%y%{@z%. . . . . . . . . . . . . . . . . A%B%j+w%,%+ . . . . . . . . . . . . . . . . . + k@0$j+q%C%D%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . + E%j+F%o+. . . . . . . . . . . . . . . . X$W$j+q+U$+ . . . . . . . . . . . . . . . . . $@G%H%j+m$5+2+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . %+&+I%o%. . . . . . . . . . . . . . . . G$F$j+&+J%. . . . . . . . . . . . . . . . . + K%/+j+J+B%L%+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . ]+M%N%U+. . . . . . . . . . . . . . . O%q$j+P%o$. . . . . . . . . . . . . . . . . Q%R%S%j+T%U%V%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . 2+3+%#5++ . . . . . . . . . . . . . . W%T%j+X%9$. . . . . . . . . . . . . . . . + Y%F$j+3%Z%x@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . `%c+v@A%. . . . . . . . . . . . . + &.&j++&z%. . . . . . . . . . . . . . . . @&C$T$j+&+_$B+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . + #&j+$&+ . . . . . . . . . . . . + %&y%j+Z%e+. . . . . . . . . . . . . . . + &&*&j+k%=&-&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . p+V$r+s+. . . . . . . . . . . . 5%;&l$z+#&2%. . . . . . . . . . . . . . . n$>&~#j+,&]@B+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . y+z+'&V%. . . . . . . . . . . 7$)&q%3%E%!&. . . . . . . . . . . . . . + J%~&j+k%F%{&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . ##I+q%]&. . . . . . . . . . . 0%^&j+/&(&o+. . . . . . . . . . . . . . e+_&r+j+:&<#h+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . <&[&j@}&. . . . . . . . . . |&r%j+b%1&+ . . . . . . . . . . . . . + W%i@j+R+2&X$+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . 5%Z%j+*#+ . . . . . . . . . 3&4&j+5&]&+ . . . . . . . . . . . . . A%V+6&j+7& &h+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . -&b%8&3&. . . . . . . . . s+9&j+0&<&. . . . . . . . . . . . . H.j%a&j+[&b&z%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . + a%j+Z%5%. . . . . . . . c&d&j+e&`%. . . . . . . . . . . . . f&g&/&j+j@h&'+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . v%i&[&<&. . . . . . . . j&&$j+p%k&. . . . . . . . . . . . o+j&e&j+l&^&m&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . n&o&i@##. . . . . . + ]+p&j+q&R$. . . . . . . . . . . . r&$#c+j+s&U$Y$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . V%W$z+{#+ . . . . . + t&u&j+=&@&. . . . . . . . . . . o+4%v&j+l&u%w&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . x&I@V$y&. . . . . h+*#l&%#z&A&. . . . . . . . . . . p+B&7%j+C&]&5%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . + g&j+#&+ . . . . U+V+^+k%G%B+. . . . . . . . . . o+K+D&j+l$i+E&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . !%v@c+`%. . . . F&%@j+G&H&o+. . . . . . . . . . E&#&*$j+D&K+5%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . + ,%%#w@2+. . . p+s%j+A@_$+ . . . . . . . . . 5%K+l%j+7%B&I&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . B+J&G&]+. . . <$T#j+K&L&+ . . . . . . . . . w&u%l$j+P%u@o+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . M&s+N&. . . . O&0$P&. . . . . . . . . 5%n&d&j+Q&$#r&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . + n$. . . . . . . . . R$U#l&j+R&4%o+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . '+h&S+j+/&g&!%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . S&^&[&j+T&j&H.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . h+ &j@j+G&V+A%. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . U&b&[&j+I+W%H.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . h+V&i&j+r+_&e+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . W&X&R+j+i@J%+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . h+<#Y&j+~#>&n$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . {&Z&k%j+~&D$+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . B+]@E$j+u&n%@&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . -&`& *j+F$<&+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/IgtnavigationtoolmanagerDll.h b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/IgtnavigationtoolmanagerDll.h new file mode 100644 index 0000000000..24a5563f5a --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/IgtnavigationtoolmanagerDll.h @@ -0,0 +1,43 @@ +/*========================================================================= + +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 _IGTNAVIGATIONTOOLMANAGER_EXPORT_DLL_H_ +#define _IGTNAVIGATIONTOOLMANAGER_EXPORT_DLL_H_ + + +// +// The following block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the org_mitk_gui_qt_igtnavigationtoolmanager_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// org_mitk_gui_qt_igtnavigationtoolmanager_EXPORTS functions as being imported from a DLL, wheras this DLL sees symbols +// defined with this macro as being exported. +// +#if defined(_WIN32) && !defined(MITK_STATIC) + #if defined(org_mitk_gui_qt_igtnavigationtoolmanager_EXPORTS) + #define IGTNAVIGATIONTOOLMANAGER_EXPORT __declspec(dllexport) + #else + #define IGTNAVIGATIONTOOLMANAGER_EXPORT __declspec(dllimport) + #endif +#endif + + +#if !defined(IGTNAVIGATIONTOOLMANAGER_EXPORT) + #define IGTNAVIGATIONTOOLMANAGER_EXPORT +#endif + +#endif /*_IGTNAVIGATIONTOOLMANAGER_EXPORT_DLL_H_*/ diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerView.cpp b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerView.cpp new file mode 100644 index 0000000000..82015c1962 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerView.cpp @@ -0,0 +1,72 @@ +/*========================================================================= + +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 +#include + +// Qmitk +#include "QmitkMITKIGTNavigationToolManagerView.h" +#include "QmitkStdMultiWidget.h" + +// Qt +#include + + + +const std::string QmitkMITKIGTNavigationToolManagerView::VIEW_ID = "org.mitk.views.mitkigtnavigationtoolmanager"; + +QmitkMITKIGTNavigationToolManagerView::QmitkMITKIGTNavigationToolManagerView() +: QmitkFunctionality() +, m_Controls( 0 ) +, m_MultiWidget( NULL ) +{ +} + +QmitkMITKIGTNavigationToolManagerView::~QmitkMITKIGTNavigationToolManagerView() +{ +} + + +void QmitkMITKIGTNavigationToolManagerView::CreateQtPartControl( QWidget *parent ) +{ + // build up qt view, unless already done + if ( !m_Controls ) + { + // create GUI widgets from the Qt Designer's .ui file + m_Controls = new Ui::QmitkMITKIGTNavigationToolManagerViewControls; + m_Controls->setupUi( parent ); + } + m_Controls->m_toolManagerWidget->Initialize(this->GetDataStorage()); + m_Controls->m_toolManagerWidget->EnableSingleToolSave(false); + +} + + +void QmitkMITKIGTNavigationToolManagerView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) +{ + m_MultiWidget = &stdMultiWidget; +} + + +void QmitkMITKIGTNavigationToolManagerView::StdMultiWidgetNotAvailable() + { + m_MultiWidget = NULL; + } + + + diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerView.h b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerView.h new file mode 100644 index 0000000000..a335a50931 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerView.h @@ -0,0 +1,67 @@ +/*========================================================================= + +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 QmitkMITKIGTNavigationToolManagerView_h +#define QmitkMITKIGTNavigationToolManagerView_h + +#include + +#include + +#include "ui_QmitkMITKIGTNavigationToolManagerViewControls.h" + + + +/*! + \brief QmitkMITKIGTNavigationToolManagerView + + \warning This application module is not yet documented. Use "svn blame/praise/annotate" and ask the author to provide basic documentation. + + \sa QmitkFunctionality + \ingroup Functionalities +*/ +class QmitkMITKIGTNavigationToolManagerView : public QObject, 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; + + QmitkMITKIGTNavigationToolManagerView(); + virtual ~QmitkMITKIGTNavigationToolManagerView(); + + virtual void CreateQtPartControl(QWidget *parent); + + virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget); + virtual void StdMultiWidgetNotAvailable(); + + protected slots: + + protected: + + Ui::QmitkMITKIGTNavigationToolManagerViewControls* m_Controls; + + QmitkStdMultiWidget* m_MultiWidget; +}; + + + +#endif // _QMITKMITKIGTNAVIGATIONTOOLMANAGERVIEW_H_INCLUDED + diff --git a/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerViewControls.ui b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerViewControls.ui new file mode 100644 index 0000000000..d56ff625ec --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igtnavigationtoolmanager/src/internal/QmitkMITKIGTNavigationToolManagerViewControls.ui @@ -0,0 +1,55 @@ + + + QmitkMITKIGTNavigationToolManagerViewControls + + + + 0 + 0 + 596 + 445 + + + + + 0 + 0 + + + + QmitkTemplate + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 220 + + + + + + + + + + QmitkNavigationToolManagementWidget + QWidget +
QmitkNavigationToolManagementWidget.h
+ 1 +
+
+ + +
diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/CMakeLists.txt b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/CMakeLists.txt new file mode 100644 index 0000000000..617e1dfcab --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/CMakeLists.txt @@ -0,0 +1,2 @@ + +MACRO_CREATE_MITK_PLUGIN(QmitkExt MitkIGT MitkIGTUI) diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/META-INF/MANIFEST.MF b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..fd19c39942 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/META-INF/MANIFEST.MF @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-Name: MITK-IGT Tracking Toolbox +Bundle-SymbolicName: org.mitk.gui.qt.igttrackingtoolbox +Bundle-Version: 0.1 +Bundle-Vendor: DKFZ, Medical and Biological Informatics +Require-Bundle: org.mitk.gui.qt.common +Bundle-Activator: diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/Manual/Manual.dox b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/Manual/Manual.dox new file mode 100644 index 0000000000..3969f459ab --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/Manual/Manual.dox @@ -0,0 +1,13 @@ +/** +\bundlemainpage{org.mitk.gui.qt.igttrackingtoolbox} MITK-IGT Tracking Toolbox + +\image html icon.png "Icon of MITK-IGT Tracking Toolbox" + +Available sections: + - \ref org.mitk.gui.qt.igttrackingtoolboxOverview + +\section org.mitk.gui.qt.igttrackingtoolboxOverview +This is the description for the MITK-IGT Tracking Toolbox. + +*/ + diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/Manual/icon.png b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/Manual/icon.png new file mode 100644 index 0000000000..f1ad7558e4 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/Manual/icon.png @@ -0,0 +1 @@ +‰PNG diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/doxygen/modules.dox b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/doxygen/modules.dox new file mode 100644 index 0000000000..8c8a432421 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/documentation/doxygen/modules.dox @@ -0,0 +1,16 @@ +/** + \defgroup org_mitk_gui_qt_igttrackingtoolbox org.mitk.gui.qt.igttrackingtoolbox Plugin + \ingroup MITKPlugins + + \brief Describe your plugin here. + +*/ + +/** + \defgroup org_mitk_gui_qt_igttrackingtoolbox_internal Internal + \ingroup org_mitk_gui_qt_igttrackingtoolbox + + \brief This subcategory includes the internal classes of the org.mitk.gui.qt.igttrackingtoolbox 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.igttrackingtoolbox/files.cmake b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/files.cmake new file mode 100644 index 0000000000..9a96cf3453 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/files.cmake @@ -0,0 +1,35 @@ +SET(SRC_CPP_FILES + +) + +SET(INTERNAL_CPP_FILES + QmitkMITKIGTTrackingToolboxView.cpp + +) + +SET(UI_FILES + src/internal/QmitkMITKIGTTrackingToolboxViewControls.ui +) + +SET(MOC_H_FILES + src/internal/QmitkMITKIGTTrackingToolboxView.h +) + +SET(RESOURCE_FILES + resources/icon.xpm +) + +SET(RES_FILES + resources/QmitkMITKIGTTrackingToolboxView.qrc +) + +SET(CPP_FILES manifest.cpp) + +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.igttrackingtoolbox/manifest.cpp b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/manifest.cpp new file mode 100644 index 0000000000..b0868ec6d1 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/manifest.cpp @@ -0,0 +1,26 @@ +/*========================================================================= + +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 + + + +#include "src/internal/QmitkMITKIGTTrackingToolboxView.h" + +POCO_BEGIN_NAMED_MANIFEST(berryIViewPart, berry::IViewPart) + POCO_EXPORT_CLASS(::QmitkMITKIGTTrackingToolboxView) +POCO_END_MANIFEST diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/plugin.xml new file mode 100644 index 0000000000..db2771fb3e --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/resources/QmitkMITKIGTTrackingToolboxView.qrc b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/resources/QmitkMITKIGTTrackingToolboxView.qrc new file mode 100644 index 0000000000..d752e284e2 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/resources/QmitkMITKIGTTrackingToolboxView.qrc @@ -0,0 +1,5 @@ + + + icon.xpm + + diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/resources/icon.xpm b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/resources/icon.xpm new file mode 100644 index 0000000000..2d6dd64c79 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/resources/icon.xpm @@ -0,0 +1,536 @@ +/* XPM */ +static char * icon2_xpm[] = { +"100 100 433 2", +" c None", +". c #FFFFFF", +"+ c #FDFDFD", +"@ c #FDFEFE", +"# c #AEBDD0", +"$ c #B2C1D2", +"% c #F8F9FB", +"& c #C7D1DE", +"* c #567DAD", +"= c #4B76AA", +"- c #8AA2C1", +"; c #D4DCE5", +"> c #FEFEFE", +", c #F4F6F8", +"' c #819DBD", +") c #4B7BB5", +"! c #4E80BC", +"~ c #4979B2", +"{ c #6487B2", +"] c #A9BACE", +"^ c #F3F5F8", +"/ c #AFBED1", +"( c #4A76AB", +"_ c #4F81BD", +": c #4E7FBB", +"< c #4975AB", +"[ c #829DBE", +"} c #CBD4E0", +"| c #E1E6ED", +"1 c #6C8DB5", +"2 c #4D7FBA", +"3 c #4B7AB4", +"4 c #5C82AF", +"5 c #A1B3CA", +"6 c #ECF0F4", +"7 c #99AEC7", +"8 c #4877AF", +"9 c #4875AC", +"0 c #7A98BB", +"a c #C2CDDB", +"b c #C9D3DF", +"c c #587FAE", +"d c #4C7CB6", +"e c #547BAA", +"f c #BDCAD8", +"g c #F6F7F9", +"h c #849FBE", +"i c #4B7BB4", +"j c #B1C0D2", +"k c #4B76AB", +"l c #E3E8EE", +"m c #6F8FB6", +"n c #4D7EB9", +"o c #E1E6EC", +"p c #9BAFC8", +"q c #4876AE", +"r c #A7B6C3", +"s c #F4F3EC", +"t c #F5F4ED", +"u c #F6F5EF", +"v c #F7F6F0", +"w c #F7F7F2", +"x c #F8F8F4", +"y c #F9F8F5", +"z c #FAF9F6", +"A c #FAFAF7", +"B c #FBFBF9", +"C c #FCFBFA", +"D c #FCFCFB", +"E c #FDFDFC", +"F c #FEFDFD", +"G c #FEFEFD", +"H c #DAE1E9", +"I c #587CA8", +"J c #7C97B4", +"K c #E6E6DF", +"L c #F0EEE4", +"M c #F0EEE5", +"N c #F0EFE5", +"O c #F1EFE6", +"P c #F1EFE7", +"Q c #F2F0E7", +"R c #F2F0E8", +"S c #F3F1E9", +"T c #F3F2EA", +"U c #F6F4EF", +"V c #F6F5F0", +"W c #F7F6F1", +"X c #F8F7F3", +"Y c #FBFBF8", +"Z c #FCFBF9", +"` c #FCFCFA", +" . c #FDFCFB", +".. c #F2F4F7", +"+. c #99ADC6", +"@. c #557DAD", +"#. c #4B7CB6", +"$. c #557CAB", +"%. c #BBC4CA", +"&. c #F1F0E7", +"*. c #F4F2EB", +"=. c #F5F3ED", +"-. c #F5F4EE", +";. c #F9F8F4", +">. c #F9F9F6", +",. c #FBFAF8", +"'. c #FDFDFE", +"). c #7A97BB", +"!. c #4977AF", +"~. c #90A4B9", +"{. c #EEECE3", +"]. c #F2F1E9", +"^. c #F3F1EA", +"/. c #F4F3ED", +"(. c #F8F7F2", +"_. c #F9F9F5", +":. c #FAF9F7", +"<. c #FFFFFE", +"[. c #A1B4CA", +"}. c #4E78AA", +"|. c #4A7AB4", +"1. c #4E7FBA", +"2. c #6889B1", +"3. c #D1D6D5", +"4. c #F3F2EB", +"5. c #F7F6F2", +"6. c #EFF3F8", +"7. c #678DBB", +"8. c #537CAC", +"9. c #4976AB", +"0. c #ABBBCD", +"a. c #EEF3F8", +"b. c #6994C6", +"c. c #9DB8D7", +"d. c #6488B2", +"e. c #4979B1", +"f. c #7E9ABC", +"g. c #ECF2F8", +"h. c #6793C6", +"i. c #A9C2DE", +"j. c #D5DCE6", +"k. c #8BA3C1", +"l. c #587CA7", +"m. c #C3CEDC", +"n. c #EBF1F7", +"o. c #6591C5", +"p. c #ACC4E0", +"q. c #D7DFE7", +"r. c #EAF0F7", +"s. c #6390C4", +"t. c #B0C7E1", +"u. c #E9EFF6", +"v. c #628FC4", +"w. c #B3C9E2", +"x. c #E7EEF6", +"y. c #618EC3", +"z. c #B5CAE3", +"A. c #E5ECF5", +"B. c #608EC3", +"C. c #B8CCE4", +"D. c #E4EBF4", +"E. c #608DC3", +"F. c #BACEE5", +"G. c #E2EAF4", +"H. c #5F8DC2", +"I. c #BDD0E6", +"J. c #E0E9F3", +"K. c #5E8CC2", +"L. c #C0D2E7", +"M. c #DFE8F3", +"N. c #5D8CC2", +"O. c #C2D3E8", +"P. c #DDE7F2", +"Q. c #5D8BC2", +"R. c #C4D5E8", +"S. c #DCE6F1", +"T. c #5C8AC1", +"U. c #C7D7E9", +"V. c #DAE4F1", +"W. c #5B8AC1", +"X. c #CAD9EA", +"Y. c #D8E3F0", +"Z. c #5A8AC1", +"`. c #CCDAEB", +" + c #D5E1EF", +".+ c #CEDCEC", +"++ c #D3E0EE", +"@+ c #D0DDED", +"#+ c #D1DEED", +"$+ c #D2DFEE", +"%+ c #D4E0EF", +"&+ c #CBDAEB", +"*+ c #D6E2EF", +"=+ c #C9D8EA", +"-+ c #DAE5F1", +";+ c #C1D3E7", +">+ c #5C8BC1", +",+ c #DEE8F2", +"'+ c #BED1E6", +")+ c #BCCFE5", +"!+ c #BACDE4", +"~+ c #F2F1E8", +"{+ c #B7CBE3", +"]+ c #B4C9E2", +"^+ c #E7EDF5", +"/+ c #B1C7E1", +"(+ c #E8EFF6", +"_+ c #AFC6E0", +":+ c #FBFAF7", +"<+ c #ACC4DF", +"[+ c #6692C5", +"}+ c #ECF1F7", +"|+ c #A9C1DE", +"1+ c #6893C6", +"2+ c #EDF2F8", +"3+ c #A6BFDD", +"4+ c #ECEBE1", +"5+ c #EFEDE3", +"6+ c #A4BEDC", +"7+ c #6B95C7", +"8+ c #F1F5F9", +"9+ c #BEC5C6", +"0+ c #98A8B4", +"a+ c #AAB6BC", +"b+ c #E7E7DF", +"c+ c #A1BCDB", +"d+ c #6D96C8", +"e+ c #F2F5FA", +"f+ c #D9DBD6", +"g+ c #7D95AA", +"h+ c #6B8DAE", +"i+ c #6887A5", +"j+ c #B5BEC2", +"k+ c #D0D4D1", +"l+ c #ADB8BF", +"m+ c #B7C0C3", +"n+ c #E9E9E0", +"o+ c #9EBADA", +"p+ c #6F98C8", +"q+ c #F2F6FA", +"r+ c #D2D5D2", +"s+ c #6E8AA5", +"t+ c #6D90B2", +"u+ c #6A8AAA", +"v+ c #ABB7BE", +"w+ c #E1E2DB", +"x+ c #8A9FB0", +"y+ c #6A8BAA", +"z+ c #6988A5", +"A+ c #ADB8BE", +"B+ c #9BB7D9", +"C+ c #7199C9", +"D+ c #F3F6FA", +"E+ c #E9E8E0", +"F+ c #9AA9B5", +"G+ c #6583A0", +"H+ c #869CAE", +"I+ c #CED2D0", +"J+ c #D5D8D4", +"K+ c #708CA6", +"L+ c #6C8FB0", +"M+ c #98A9B6", +"N+ c #ECEBE2", +"O+ c #98B5D8", +"P+ c #739BCA", +"Q+ c #F4F7FB", +"R+ c #BDC8CF", +"S+ c #7D99B3", +"T+ c #D0D5D4", +"U+ c #8EA2B2", +"V+ c #6786A3", +"W+ c #7791A9", +"X+ c #BBC3C5", +"Y+ c #96B4D7", +"Z+ c #749CCB", +"`+ c #F5F8FB", +" @ c #B0C0CB", +".@ c #8AA5BE", +"+@ c #E8E8E1", +"@@ c #96ACC0", +"#@ c #96AABB", +"$@ c #93B2D6", +"%@ c #769DCB", +"&@ c #F6F8FB", +"*@ c #9AAEBF", +"=@ c #96ACBF", +"-@ c #EDECE3", +";@ c #D5DAD9", +">@ c #7E9CB9", +",@ c #C5CFD3", +"'@ c #90B0D5", +")@ c #799FCC", +"!@ c #F7F9FC", +"~@ c #A4B1BA", +"{@ c #6A86A1", +"]@ c #7F96AB", +"^@ c #D4D7D3", +"/@ c #9EAFBC", +"(@ c #859FB7", +"_@ c #E5E6DF", +":@ c #FCFDFE", +"<@ c #8DADD4", +"[@ c #7BA0CD", +"}@ c #D3D7D3", +"|@ c #708CA5", +"1@ c #698AA9", +"2@ c #ABB6BD", +"3@ c #8299AD", +"4@ c #6888A6", +"5@ c #8098AD", +"6@ c #DFE0DA", +"7@ c #8AACD3", +"8@ c #7CA2CE", +"9@ c #F9FAFC", +"0@ c #D8DAD6", +"a@ c #7992A9", +"b@ c #B1BBC0", +"c@ c #BAC3C6", +"d@ c #6A8AA9", +"e@ c #6E91B3", +"f@ c #6C8AA7", +"g@ c #CBD0CF", +"h@ c #FCFCFD", +"i@ c #88AAD2", +"j@ c #7EA3CE", +"k@ c #FAFBFD", +"l@ c #A9B5BD", +"m@ c #6986A1", +"n@ c #9FAEB8", +"o@ c #C8CDCC", +"p@ c #6E8BA6", +"q@ c #7D95AB", +"r@ c #D7D9D5", +"s@ c #FBFCFD", +"t@ c #85A8D1", +"u@ c #81A5CF", +"v@ c #BBC8D0", +"w@ c #829EB9", +"x@ c #E1E3DE", +"y@ c #DBDEDB", +"z@ c #7792AB", +"A@ c #94A6B5", +"B@ c #C0C7C8", +"C@ c #F7F5F0", +"D@ c #82A6D0", +"E@ c #84A7D0", +"F@ c #FAFCFD", +"G@ c #AABCC9", +"H@ c #8EA8BF", +"I@ c #EAEAE1", +"J@ c #B7C5CE", +"K@ c #84A1BB", +"L@ c #DFE1DD", +"M@ c #F9FBFD", +"N@ c #80A4CF", +"O@ c #87A9D1", +"P@ c #99B0C3", +"Q@ c #9EB3C5", +"R@ c #E9E9E1", +"S@ c #92AAC0", +"T@ c #A8BAC8", +"U@ c #F8FAFC", +"V@ c #8AABD2", +"W@ c #8AA4BD", +"X@ c #B0C0CC", +"Y@ c #CDD5D7", +"Z@ c #7C9BB8", +"`@ c #CCD4D6", +" # c #7BA1CD", +".# c #8CADD4", +"+# c #E0E2DE", +"@# c #7F9DBA", +"## c #C1CCD2", +"$# c #A8BAC9", +"%# c #91AAC0", +"&# c #F7F9FB", +"*# c #8FAFD5", +"=# c #7B9AB8", +"-# c #D0D7D8", +";# c #E0E3DE", +"># c #85A1BB", +",# c #B6C4CE", +"'# c #769ECB", +")# c #CFD3D0", +"!# c #CDD1CE", +"~# c #AEBBC2", +"{# c #7995AF", +"]# c #BBC5C7", +"^# c #7894AE", +"/# c #B9C3C7", +"(# c #EAE9E0", +"_# c #749CCA", +":# c #95B3D7", +"<# c #D8DBD6", +"[# c #819486", +"}# c #81946C", +"|# c #80946C", +"1# c #7A906A", +"2# c #7F936C", +"3# c #7C907A", +"4# c #C8CDCA", +"5# c #729ACA", +"6# c #839676", +"7# c #8B9E53", +"8# c #819566", +"9# c #C6CCC9", +"0# c #6F99C9", +"a# c #9BB8D9", +"b# c #6D97C8", +"c# c #6C96C7", +"d# c #EFF4F9", +"e# c #F1EFE5", +"f# c #A6C0DD", +"g# c #EBF0F7", +"h# c #C7CCC9", +"i# c #B2C8E2", +"j# c #F4F2EC", +"k# c #829577", +"l# c #899D54", +"m# c #809467", +"n# c #CCD2D3", +"o# c #E8EEF6", +"p# c #B4CAE3", +"q# c #DBDDD8", +"r# c #93A29F", +"s# c #8A9C8E", +"t# c #8B9D97", +"u# c #D4DBE1", +"v# c #F4F7FA", +"w# c #B0C6E1", +"x# c #D9E4F0", +"y# c #E7E6DE", +"z# c #EFF0ED", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . @ # $ % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . & * = - ; > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . , ' ) ! ~ { ] ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . / ( _ _ _ : < [ } > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . | 1 2 _ _ _ _ _ 3 4 5 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . @ 7 8 _ _ _ _ _ _ _ ! 9 0 a @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . b c ! _ _ _ _ _ _ _ _ _ d e f > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . g h i _ _ _ _ _ _ _ _ _ _ ! c } . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . j k ! _ _ _ _ _ _ _ _ _ _ 8 7 @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . l m n _ _ _ _ _ _ _ _ _ _ 2 1 o > > > > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . > p q _ _ _ _ _ _ _ _ _ _ _ ( r s t u v w x y z A B C D E E F G > > > > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . H I ! _ _ _ _ _ _ _ _ _ _ ) J K L L L L L L L L M N O P Q R S T s t U V W X y z A Y Z ` .E + G > > > > > > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . ..+.@.#._ _ _ _ _ _ _ _ ! $.%.L L L L L L L L L L L L L L L L L L L L L L L L L M M O O &.R S T *.=.-.V W X ;.>.A ,.B ` .E E G > > > > > . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . '.a ).9 ! _ _ _ _ _ _ !.~.{.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L M O O &.R ].^.*./.-.u W (.x _.:.,.B C D E E F G > > > > > <.. . ", +". . . . . . . . . . . . . . 6 [.}.|._ _ _ _ 1.2.3.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L M N O &.R ].^.4.s t u v 5.X y z ", +". . . . . . . . . . . . . . . 6.7.8.< : _ _ 9.0.*.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . a.b.c.] d.e.#.f...x L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . g.h.i.> j.k.l.m.. E ^.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . n.o.p.> . % q.> . . (.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . r.s.t.> . . . . . . D ].L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . u.v.w.. . . . . . . > 5.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . x.y.z.. . . . . . . . ` R L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . A.B.C.. . . . . . . . > W L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . D.E.F.. . . . . . . . . Z Q L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . G.H.I.. . . . . . . . . > V L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . J.K.L.. . . . . . . . . . B P L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . M.N.O.. . . . . . . . . . > u L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . P.Q.R.. . . . . . . . . . . ,.O L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . S.T.U.. . . . . . . . . . . > -.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . V.W.X.. . . . . . . . . . . . A O L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . Y.Z.`.. . . . . . . . . . . . > -.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . +W..+. . . . . . . . . . . . . z N L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . ++W.@+. . . . . . . . . . . . . G =.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . #+W.$+. . . . . . . . . . . . . . _.M L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ", +". . . . . . . . . . . . . . . .+W.%+. . . . . . . . . . . . . . G s L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L /.", +". . . . . . . . . . . . . . . &+W.*+. . . . . . . . . . . . . . . y L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L &.A ", +". . . . . . . . . . . . . . . =+W.Y.. . . . . . . . . . . . . . . + *.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L W > ", +". . . . . . . . . . . . . . . U.W.-+. . . . . . . . . . . . . . . . x L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L *.E . ", +". . . . . . . . . . . . . . . R.T.S.. . . . . . . . . . . . . . . . E T L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L O z . . ", +". . . . . . . . . . . . . . . ;+>+,+. . . . . . . . . . . . . . . . . X L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L V > . . ", +". . . . . . . . . . . . . . . '+>+J.. . . . . . . . . . . . . . . . . .S L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ^.` . . . ", +". . . . . . . . . . . . . . . )+K.G.. . . . . . . . . . . . . . . . . . w L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L M ;.. . . . ", +". . . . . . . . . . . . . . . !+H.D.. . . . . . . . . . . . . . . . . . D ~+L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L -.> . . . . ", +". . . . . . . . . . . . . . . {+B.A.. . . . . . . . . . . . . . . . . . > W L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ~+B . . . . . ", +". . . . . . . . . . . . . . . ]+v.^+. . . . . . . . . . . . . . . . . . . C R L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L X > . . . . . ", +". . . . . . . . . . . . . . . /+s.(+. . . . . . . . . . . . . . . . . . . > v L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L =.F . . . . . . ", +". . . . . . . . . . . . . . . _+o.r.. . . . . . . . . . . . . . . . . . . . B &.L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L &.:+. . . . . . . ", +". . . . . . . . . . . . . . . <+[+}+. . . . . . . . . . . . . . . . . . . . > V L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L 5.> . . . . . . . ", +". . . . . . . . . . . . . . . |+1+2+. . . . . . . . . . . . . . . . . . . . . ,.O L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L s E . . . . . . . . ", +". . . . . . . . . . . . . . . 3+b.6.. . . . . . . . . . . . . . . . . . . . . > u L L L L L L L L L L L L L L L L L L L L L L L 4+5+L L L L L L L L L L L L L L L L L L L L L L L O z . . . . . . . . . ", +". . . . . . . . . . . . . . . 6+7+8+. . . . . . . . . . . . . . . . . . . . . . A O L L L L L L L L L L L L L L L L L L L L L 9+0+a+b+L L L L L L L 5+5+L L L L L L L L L L L L L V > . . . . . . . . . ", +". . . . . . . . . . . . . . > c+d+e+. . . . . . . . . . . . . . . . . . . . . . > -.L L L L L L L L L L L L L L L L L L L L f+g+h+i+j+L L L L L L k+l+m+n+L L L L L L L L L L L T D . . . . . . . . . . ", +". . . . . . . . . . . . . . > o+p+q+. . . . . . . . . . . . . . . . . . . . . . . A N L L L L L L L L L L L L L L L L L L L r+s+t+u+v+5+L L L L w+x+y+z+A+5+L L L L L L L L L M y . . . . . . . . . . . ", +". . . . . . . . . . . . . . > B+C+D+. . . . . . . . . . . . . . . . . . . . . . . > =.L L L L L L L L L L L L L L L L L L L E+F+G+H+I+L L L L L J+K+t+L+M+N+L L L L L L L L L U > . . . . . . . . . . . ", +". . . . . . . . . . . . . . @ O+P+Q+. . . . . . . . . . . . . . . . . . . . . . . . z M L L L L L L L L L L L L L L L L L L L R+S+T+L L L L L L E+U+V+W+X+L L L L L L L L L ].B . . . . . . . . . . . . ", +". . . . . . . . . . . . . . '.Y+Z+`+. . . . . . . . . . . . . . . . . . . . . . . . G s L L L L L L L L L L L L L L L L L L 5+ @.@+@L L L L L L N+@@#@r+5+L L L L L L L L L X . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . '.$@%@&@. . . . . . . . . . . . . . . . . . . . . . . . . _.M L L L L L L L L L L L L L L L L L N+*@=@-@L L L L L L ;@>@,@L L L L L L L L L L t G . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . '.'@)@!@. . . . . . . . . . . . . . . . . . . . . . . . . F *.L L L L L L L L L L L L L L L L N+~@{@]@r+L L L L L ^@/@(@_@L L L L L L L L L Q ,.. . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . :@<@[@!@. . . . . . . . . . . . . . . . . . . . . . . . . . x L L L L L L L L L L L L L L L L }@|@t+1@2@5+L L L r+3@4@5@6@L L L L L L L L L 5.> . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . :@7@8@9@. . . . . . . . . . . . . . . . . . . . . . . . . . E T L L L L L L L L L L L L L L L 0@a@L+4@b@5+L L L c@d@e@f@g@L L L L L L L L s E . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . h@i@j@k@. . . . . . . . . . . . . . . . . . . . . . . . . . . X L L L L L L L L L L L L L L L 5+l@m@n@w+L L L L o@p@h+q@r@L L L L L L L O z . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . s@t@u@k@. . . . . . . . . . . . . . . . . . . . . . . . . . . E ^.L L L L L L L L L L L L L L L v@w@x@L L L L L y@z@A@B@5+L L L L L L L C@> . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . k@D@E@F@. . . . . . . . . . . . . . . . . . . . . . . . . . . . X L L L L L L L L L L L L L L 5+G@H@I@L L L L 5+J@K@L@L L L L L L L L T D . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . M@N@O@s@. . . . . . . . . . . . . . . . . . . . . . . . . . . . D ].L L L L L L L L L L L L L -@P@Q@{.L L L L R@S@T@5+L L L L L L L M y . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . U@j@V@s@. . . . . . . . . . . . . . . . . . . . . . . . . . . . > W L L L L L L L L L L L L L +@W@X@5+L L L L Y@Z@`@L L L L L L L L u > . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . !@ #.#:@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ` R L L L L L L L L L L L L +#@###L L L L 5+$#%#R@L L L L L L L ].Z . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . &#)@*#:@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . > W L L L L L L L L L L L L ;@=#-#L L L L ;#>#,#5+L L L L L L L X <.. . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . &@'#$@'.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Z Q L L L L L L L 5+)#!#!#~#{#]#!#!#!#!#~#^#/#(#L L L L L L t G . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . `+_#:#@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > V L L L L L L L <#[#}#}#|#1#}#}#}#}#}#2#1#3#4#L L L L L Q ,.. . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . Q+5#O+> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y P L L L L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L L L L L w > . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . D+0#a#> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > u L L L L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L L L L s E . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . q+b#o+> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,.O L L L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L L L O :.. . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . 8+c#c+> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > -.L L L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L L L W > . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . d#7+6+> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A e#L L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L L 4. .. . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . a.b.f#> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > t L L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L M y . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . 2+1+i.> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z M L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#L u > . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . }+[+<+> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . G =.L L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#9#S C . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . g#o._+> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . _.M L L 0@6#7#7#7#7#7#7#7#7#7#7#7#8#h#x . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . u.s.i#> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + j#L L 0@k#l#l#l#l#l#l#l#l#l#l#l#m#n#G . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . o#v.p#> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ;.L L q#r#s#s#s#s#s#s#s#s#s#s#s#t#u#. . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . v#w#x#> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E 4.L L y#y#y#y#y#y#y#y#y#y#y#b+z#> . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . > > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x L L L L L L L L L L L L L s E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E T L L L L L L L L L L L O A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <.X L L L L L L L L L L L W > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .S L L L L L L L L L 4. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > 5.L L L L L L L L N _.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ` ~+L L L L L L L u > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > W L L L L L L S C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C R L L L L L ;.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > V L L L L -.> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B &.L L R Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > V L L (.> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Y O s + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > W A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . > > @ '.> > > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/IgttrackingtoolboxDll.h b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/IgttrackingtoolboxDll.h new file mode 100644 index 0000000000..aa65826bdc --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/IgttrackingtoolboxDll.h @@ -0,0 +1,43 @@ +/*========================================================================= + +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 _IGTTRACKINGTOOLBOX_EXPORT_DLL_H_ +#define _IGTTRACKINGTOOLBOX_EXPORT_DLL_H_ + + +// +// The following block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the org_mitk_gui_qt_igttrackingtoolbox_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// org_mitk_gui_qt_igttrackingtoolbox_EXPORTS functions as being imported from a DLL, wheras this DLL sees symbols +// defined with this macro as being exported. +// +#if defined(_WIN32) && !defined(MITK_STATIC) + #if defined(org_mitk_gui_qt_igttrackingtoolbox_EXPORTS) + #define IGTTRACKINGTOOLBOX_EXPORT __declspec(dllexport) + #else + #define IGTTRACKINGTOOLBOX_EXPORT __declspec(dllimport) + #endif +#endif + + +#if !defined(IGTTRACKINGTOOLBOX_EXPORT) + #define IGTTRACKINGTOOLBOX_EXPORT +#endif + +#endif /*_IGTTRACKINGTOOLBOX_EXPORT_DLL_H_*/ diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp new file mode 100644 index 0000000000..311ac9117b --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.cpp @@ -0,0 +1,268 @@ +/*========================================================================= + +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 +#include + +// Qmitk +#include "QmitkMITKIGTTrackingToolboxView.h" +#include "QmitkStdMultiWidget.h" + +// Qt +#include +#include + +// MITK +#include +#include +#include + + + +const std::string QmitkMITKIGTTrackingToolboxView::VIEW_ID = "org.mitk.views.mitkigttrackingtoolbox"; + +QmitkMITKIGTTrackingToolboxView::QmitkMITKIGTTrackingToolboxView() +: QmitkFunctionality() +, m_Controls( 0 ) +, m_MultiWidget( NULL ) +{ + m_TrackingTimer = new QTimer(this); + m_tracking = false; + m_logging = false; +} + +QmitkMITKIGTTrackingToolboxView::~QmitkMITKIGTTrackingToolboxView() +{ + +} + + +void QmitkMITKIGTTrackingToolboxView::CreateQtPartControl( QWidget *parent ) +{ + // build up qt view, unless already done + if ( !m_Controls ) + { + // create GUI widgets from the Qt Designer's .ui file + m_Controls = new Ui::QmitkMITKIGTTrackingToolboxViewControls; + m_Controls->setupUi( parent ); + + //create connections + connect( m_Controls->m_LoadTools, SIGNAL(clicked()), this, SLOT(OnLoadTools()) ); + connect( m_Controls->m_StartTracking, SIGNAL(clicked()), this, SLOT(OnStartTracking()) ); + connect( m_Controls->m_StopTracking, SIGNAL(clicked()), this, SLOT(OnStopTracking()) ); + connect( m_TrackingTimer, SIGNAL(timeout()), this, SLOT(UpdateTrackingTimer())); + connect( m_Controls->m_EnableLogging, SIGNAL(clicked()), this, SLOT(OnEnableLoggingClicked())); + connect( m_Controls->m_ChooseFile, SIGNAL(clicked()), this, SLOT(OnChooseFileClicked())); + + //initialize widgets + m_Controls->m_configurationWidget->EnableAdvancedUserControl(false); + m_Controls->m_TrackingToolsStatusWidget->SetShowPositions(true); + m_Controls->m_TrackingToolsStatusWidget->SetTextAlignment(Qt::AlignLeft); + + //initialize tracking volume node + TrackingVolumeNode = mitk::DataNode::New(); + TrackingVolumeNode->SetName("TrackingVolume"); + this->GetDataStorage()->Add(TrackingVolumeNode); + + //initialize buttons + m_Controls->m_StopTracking->setEnabled(false); + } +} + + +void QmitkMITKIGTTrackingToolboxView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) +{ + m_MultiWidget = &stdMultiWidget; +} + + +void QmitkMITKIGTTrackingToolboxView::StdMultiWidgetNotAvailable() +{ + m_MultiWidget = NULL; +} + +void QmitkMITKIGTTrackingToolboxView::OnLoadTools() +{ + //read in filename + QString filename = QFileDialog::getOpenFileName(NULL,tr("Open Toolfile"), "/", tr("All Files (*.*)")); //later perhaps: tr("Toolfile (*.tfl)" + if (filename.isNull()) return; + + //initialize tool storage + m_toolStorage = mitk::NavigationToolStorage::New(); + + //read tool storage from disk + mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(GetDataStorage()); + m_toolStorage = myDeserializer->Deserialize(filename.toStdString()); + if (m_toolStorage.IsNull()) + { + MessageBox(myDeserializer->GetErrorMessage()); + m_toolStorage = NULL; + return; + } + + //update label + Poco::Path myPath = Poco::Path(filename.toStdString()); //use this to seperate filename from path + QString toolLabel = QString("Loaded Tools: ") + QString::number(m_toolStorage->GetToolCount()) + " Tools from " + myPath.getFileName().c_str(); + m_Controls->m_toolLabel->setText(toolLabel); + + //update tool preview + m_Controls->m_TrackingToolsStatusWidget->RemoveStatusLabels(); + m_Controls->m_TrackingToolsStatusWidget->PreShowTools(m_toolStorage); +} + +void QmitkMITKIGTTrackingToolboxView::OnStartTracking() +{ +//check if everything is ready to start tracking +if (this->m_toolStorage.IsNull()) + { + MessageBox("Error: No Tools Loaded Yet!"); + return; + } +else if (this->m_toolStorage->GetToolCount() == 0) + { + MessageBox("Error: No Way To Track Without Tools!"); + return; + } + +//build the IGT pipeline +mitk::TrackingDeviceSourceConfigurator::Pointer myTrackingDeviceSourceFactory = mitk::TrackingDeviceSourceConfigurator::New(this->m_toolStorage,this->m_Controls->m_configurationWidget->GetTrackingDevice()); +m_TrackingDeviceSource = myTrackingDeviceSourceFactory->CreateTrackingDeviceSource(this->m_ToolVisualizationFilter); +if (m_TrackingDeviceSource.IsNull()) + { + MessageBox(myTrackingDeviceSourceFactory->GetErrorMessage()); + return; + } + +//initialize tracking +try + { + m_TrackingDeviceSource->Connect(); + m_TrackingDeviceSource->StartTracking(); + } +catch (...) + { + MessageBox("Error while starting the tracking device!"); + return; + } +m_TrackingTimer->start(100); +m_Controls->m_TrackingControlLabel->setText("Status: tracking"); + +//start logging if logging is on +if (this->m_Controls->m_EnableLogging->isChecked()) StartLogging(); + +//connect the tool visualization widget +for(int i=0; iGetNumberOfOutputs(); i++) + { + m_Controls->m_TrackingToolsStatusWidget->AddNavigationData(m_TrackingDeviceSource->GetOutput(i)); + } +m_Controls->m_TrackingToolsStatusWidget->ShowStatusLabels(); + +//disable loading new tools +this->m_Controls->m_LoadTools->setEnabled(false); + +//set configuration finished +this->m_Controls->m_configurationWidget->ConfigurationFinished(); + +//show tracking volume +if (m_Controls->m_ShowTrackingVolume->isChecked()) + { + mitk::TrackingVolume::Pointer volumeSurface = mitk::TrackingVolume::New(); + volumeSurface->SetTrackingDeviceType(m_TrackingDeviceSource->GetTrackingDevice()->GetType()); + TrackingVolumeNode->SetData(volumeSurface); + TrackingVolumeNode->SetOpacity(0.25); + mitk::Color red; + red.SetRed(1); + TrackingVolumeNode->SetColor(red); + } + +m_tracking = true; +m_Controls->m_StopTracking->setEnabled(true); +m_Controls->m_StartTracking->setEnabled(false); + +} + +void QmitkMITKIGTTrackingToolboxView::OnStopTracking() +{ +if (!m_tracking) return; +m_TrackingTimer->stop(); +m_TrackingDeviceSource->StopTracking(); +m_TrackingDeviceSource->Disconnect(); +this->m_Controls->m_configurationWidget->Reset(); +m_Controls->m_TrackingControlLabel->setText("Status: stopped"); +if (m_logging) StopLogging(); +this->m_Controls->m_LoadTools->setEnabled(true); +m_Controls->m_TrackingToolsStatusWidget->RemoveStatusLabels(); +m_Controls->m_TrackingToolsStatusWidget->PreShowTools(m_toolStorage); +TrackingVolumeNode->SetData(NULL); +m_tracking = false; +m_Controls->m_StopTracking->setEnabled(false); +m_Controls->m_StartTracking->setEnabled(true); +} + +void QmitkMITKIGTTrackingToolboxView::MessageBox(std::string s) + { + QMessageBox msgBox; + msgBox.setText(s.c_str()); + msgBox.exec(); + } + +void QmitkMITKIGTTrackingToolboxView::UpdateTrackingTimer() + { + m_ToolVisualizationFilter->Update(); + //std::cout << "Position" << m_ToolVisualizationFilter->GetOutput(0)->GetPosition() << std::endl; + mitk::RenderingManager::GetInstance()->RequestUpdateAll(); + if (m_logging) this->m_loggingFilter->Update(); + m_Controls->m_TrackingToolsStatusWidget->Refresh(); + } + +void QmitkMITKIGTTrackingToolboxView::OnEnableLoggingClicked() + { + if (this->m_tracking && this->m_Controls->m_EnableLogging->isChecked() && !this->m_logging) StartLogging(); + else if (!this->m_Controls->m_EnableLogging->isChecked() && this->m_logging) StopLogging(); + } + +void QmitkMITKIGTTrackingToolboxView::OnChooseFileClicked() + { + QString filename = QFileDialog::getSaveFileName(NULL,tr("Choose Logging File"), "/", "*.*"); + this->m_Controls->m_LoggingFileName->setText(filename); + } + +void QmitkMITKIGTTrackingToolboxView::StartLogging() + { + //initialize logging filter + m_loggingFilter = mitk::NavigationDataRecorder::New(); + m_loggingFilter->SetRecordingMode(mitk::NavigationDataRecorder::NormalFile); + if (m_Controls->m_xmlFormat->isChecked()) m_loggingFilter->SetOutputFormat(mitk::NavigationDataRecorder::xml); + else if (m_Controls->m_csvFormat->isChecked()) m_loggingFilter->SetOutputFormat(mitk::NavigationDataRecorder::csv); + m_loggingFilter->SetFileName(m_Controls->m_LoggingFileName->text().toStdString().c_str()); + + //connect filter + for(int i=0; iGetNumberOfOutputs(); i++){m_loggingFilter->AddNavigationData(m_ToolVisualizationFilter->GetOutput(i));} + + m_loggingFilter->StartRecording(); + m_logging = true; + } + +void QmitkMITKIGTTrackingToolboxView::StopLogging() + { + m_loggingFilter->StopRecording(); + m_logging = false; + } + + + diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.h b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.h new file mode 100644 index 0000000000..7deef71c3e --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxView.h @@ -0,0 +1,111 @@ +/*========================================================================= + +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 QmitkMITKIGTTrackingToolboxView_h +#define QmitkMITKIGTTrackingToolboxView_h + +#include + +#include + +#include "ui_QmitkMITKIGTTrackingToolboxViewControls.h" + +//mitk headers +#include +#include +#include +#include + +//QT headers +#include + +/*! + \brief QmitkMITKIGTTrackingToolboxView + + \warning This application module is not yet documented. Use "svn blame/praise/annotate" and ask the author to provide basic documentation. + + \sa QmitkFunctionality + \ingroup Functionalities +*/ +class QmitkMITKIGTTrackingToolboxView : public QObject, 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; + + QmitkMITKIGTTrackingToolboxView(); + virtual ~QmitkMITKIGTTrackingToolboxView(); + + virtual void CreateQtPartControl(QWidget *parent); + + virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget); + virtual void StdMultiWidgetNotAvailable(); + + protected slots: + + void OnLoadTools(); + + void OnStartTracking(); + + void OnStopTracking(); + + void OnEnableLoggingClicked(); + + void OnChooseFileClicked(); + + /** @brief Slot for tracking timer */ + void UpdateTrackingTimer(); + + + protected: + + Ui::QmitkMITKIGTTrackingToolboxViewControls* m_Controls; + + QmitkStdMultiWidget* m_MultiWidget; + + bool m_tracking; + + void MessageBox(std::string s); + + bool m_logging; + + void StartLogging(); + + void StopLogging(); + + mitk::DataNode::Pointer TrackingVolumeNode; + + //stores the loaded tools + mitk::NavigationToolStorage::Pointer m_toolStorage; + + //members for the filter pipeline + mitk::TrackingDeviceSource::Pointer m_TrackingDeviceSource; + mitk::NavigationDataObjectVisualizationFilter::Pointer m_ToolVisualizationFilter; + mitk::NavigationDataRecorder::Pointer m_loggingFilter; + + QTimer* m_TrackingTimer; + +}; + + + +#endif // _QMITKMITKIGTTRACKINGTOOLBOXVIEW_H_INCLUDED + diff --git a/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxViewControls.ui b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxViewControls.ui new file mode 100644 index 0000000000..80a47cc345 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.igttrackingtoolbox/src/internal/QmitkMITKIGTTrackingToolboxViewControls.ui @@ -0,0 +1,335 @@ + + + QmitkMITKIGTTrackingToolboxViewControls + + + + 0 + 0 + 335 + 685 + + + + + 0 + 0 + + + + QmitkTemplate + + + + + + 0 + + + + Tracking + + + + + + + 0 + 280 + + + + + 16777215 + 280 + + + + + + + + + + + + + + + + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Tracking Tools</span></p></body></html> + + + + + + + Loaded Tools: <none> + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Load Tools + + + + + + + + + + + + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Tracking Control</span></p></body></html> + + + + + + + Status: <not configured> + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Start Tracking + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Stop Tracking + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Visualization Options + + + + + + Show Tracking Volume + + + + + + + Qt::Vertical + + + + 20 + 597 + + + + + + + + + Logging Options + + + + + + Enable Logging + + + + + + + + + Filename: + + + + + + + C:/logfile.csv + + + + + + + + + XML format + + + + + + + CSV format + + + true + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Choose File + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + QmitkTrackingDeviceConfigurationWidget + QWidget +
QmitkTrackingDeviceConfigurationWidget.h
+ 1 +
+ + QmitkToolTrackingStatusWidget + QWidget +
QmitkToolTrackingStatusWidget.h
+ 1 +
+
+ + +
diff --git a/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.cpp b/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.cpp index 8d272ae661..6f56f5be7d 100644 --- a/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.cpp +++ b/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.cpp @@ -1,261 +1,291 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2007-12-11 14:46:19 +0100 (Di, 11 Dez 2007) $ Version: $Revision: 13129 $ 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 "mitkNavigationDataRecorder.h" #include #include #include #include mitk::NavigationDataRecorder::NavigationDataRecorder() { m_NumberOfInputs = 0; m_RecordingMode = NormalFile; m_Recording = false; m_NumberOfRecordedFiles = 0; m_Stream = NULL; m_FileName = ""; m_SystemTimeClock = RealTimeClock::New(); + m_OutputFormat = mitk::NavigationDataRecorder::xml; //To get a start time mitk::TimeStamp::GetInstance()->Start(this); } mitk::NavigationDataRecorder::~NavigationDataRecorder() { } void mitk::NavigationDataRecorder::GenerateData() { } void mitk::NavigationDataRecorder::AddNavigationData( const NavigationData* nd ) { // Process object is not const-correct so the const_cast is required here this->SetNthInput(m_NumberOfInputs, const_cast< mitk::NavigationData * >( nd ) ); m_NumberOfInputs++; this->Modified(); } void mitk::NavigationDataRecorder::SetRecordingMode( RecordingMode mode ) { m_RecordingMode = mode; this->Modified(); } void mitk::NavigationDataRecorder::Update() { if (m_Recording) { DataObjectPointerArray inputs = this->GetInputs(); //get all inputs mitk::NavigationData::TimeStampType timestamp=0.0; // timestamp for mitk time timestamp = mitk::TimeStamp::GetInstance()->GetElapsed(); mitk::NavigationData::TimeStampType sysTimestamp = 0.0; // timestamp for system time sysTimestamp = m_SystemTimeClock->GetCurrentStamp(); // cast system time double value to stringstream to avoid low precision rounding std::ostringstream strs; strs.precision(15); // rounding precision for system time double value strs << sysTimestamp; std::string sysTimeStr = strs.str(); + + //write csv header if first line + if ((m_OutputFormat == mitk::NavigationDataRecorder::csv) && m_firstLine) + { + m_firstLine = false; + *m_Stream << "TimeStamp"; + for (unsigned int index = 0; index < inputs.size(); index++){ *m_Stream << ";Valid_Tool" << index << + ";X_Tool" << index << + ";Y_Tool" << index << + ";Z_Tool" << index << + ";QX_Tool" << index << + ";QY_Tool" << index << + ";QZ_Tool" << index << + ";QR_Tool" << index;} + *m_Stream << "\n"; + } - + *m_Stream << timestamp; for (unsigned int index = 0; index < inputs.size(); index++) { mitk::NavigationData* nd = dynamic_cast(inputs[index].GetPointer()); nd->Update(); // call update to propagate update to previous filters mitk::NavigationData::PositionType position; mitk::NavigationData::OrientationType orientation(0.0, 0.0, 0.0, 0.0); mitk::NavigationData::CovarianceMatrixType matrix; bool hasPosition = true; bool hasOrientation = true; bool dataValid = false; position.Fill(0.0); matrix.SetIdentity(); position = nd->GetPosition(); orientation = nd->GetOrientation(); matrix = nd->GetCovErrorMatrix(); hasPosition = nd->GetHasPosition(); hasOrientation = nd->GetHasOrientation(); dataValid = nd->IsDataValid(); //use this one if you want the timestamps of the source //timestamp = nd->GetTimeStamp(); //a timestamp is never < 0! this case happens only if you are using the timestamp of the nd object instead of getting a new one if (timestamp >= 0) { - TiXmlElement* elem = new TiXmlElement("ND"); - - elem->SetDoubleAttribute("Time", timestamp); - elem->SetAttribute("SystemTime", sysTimeStr); // tag for system time - elem->SetDoubleAttribute("Tool", index); - elem->SetDoubleAttribute("X", position[0]); - elem->SetDoubleAttribute("Y", position[1]); - elem->SetDoubleAttribute("Z", position[2]); - - elem->SetDoubleAttribute("QX", orientation[0]); - elem->SetDoubleAttribute("QY", orientation[1]); - elem->SetDoubleAttribute("QZ", orientation[2]); - elem->SetDoubleAttribute("QR", orientation[3]); - - elem->SetDoubleAttribute("C00", matrix[0][0]); - elem->SetDoubleAttribute("C01", matrix[0][1]); - elem->SetDoubleAttribute("C02", matrix[0][2]); - elem->SetDoubleAttribute("C03", matrix[0][3]); - elem->SetDoubleAttribute("C04", matrix[0][4]); - elem->SetDoubleAttribute("C05", matrix[0][5]); - elem->SetDoubleAttribute("C10", matrix[1][0]); - elem->SetDoubleAttribute("C11", matrix[1][1]); - elem->SetDoubleAttribute("C12", matrix[1][2]); - elem->SetDoubleAttribute("C13", matrix[1][3]); - elem->SetDoubleAttribute("C14", matrix[1][4]); - elem->SetDoubleAttribute("C15", matrix[1][5]); - - if (dataValid) - elem->SetAttribute("Valid",1); - else - elem->SetAttribute("Valid",0); - - if (hasOrientation) - elem->SetAttribute("hO",1); - else - elem->SetAttribute("hO",0); - - if (hasPosition) - elem->SetAttribute("hP",1); - else - elem->SetAttribute("hP",0); - - *m_Stream << " " << *elem << std::endl; - - delete elem; + if (this->m_OutputFormat = mitk::NavigationDataRecorder::xml) + { + TiXmlElement* elem = new TiXmlElement("ND"); + + elem->SetDoubleAttribute("Time", timestamp); + elem->SetAttribute("SystemTime", sysTimeStr); // tag for system time + elem->SetDoubleAttribute("Tool", index); + elem->SetDoubleAttribute("X", position[0]); + elem->SetDoubleAttribute("Y", position[1]); + elem->SetDoubleAttribute("Z", position[2]); + + elem->SetDoubleAttribute("QX", orientation[0]); + elem->SetDoubleAttribute("QY", orientation[1]); + elem->SetDoubleAttribute("QZ", orientation[2]); + elem->SetDoubleAttribute("QR", orientation[3]); + + elem->SetDoubleAttribute("C00", matrix[0][0]); + elem->SetDoubleAttribute("C01", matrix[0][1]); + elem->SetDoubleAttribute("C02", matrix[0][2]); + elem->SetDoubleAttribute("C03", matrix[0][3]); + elem->SetDoubleAttribute("C04", matrix[0][4]); + elem->SetDoubleAttribute("C05", matrix[0][5]); + elem->SetDoubleAttribute("C10", matrix[1][0]); + elem->SetDoubleAttribute("C11", matrix[1][1]); + elem->SetDoubleAttribute("C12", matrix[1][2]); + elem->SetDoubleAttribute("C13", matrix[1][3]); + elem->SetDoubleAttribute("C14", matrix[1][4]); + elem->SetDoubleAttribute("C15", matrix[1][5]); + + if (dataValid) + elem->SetAttribute("Valid",1); + else + elem->SetAttribute("Valid",0); + + if (hasOrientation) + elem->SetAttribute("hO",1); + else + elem->SetAttribute("hO",0); + + if (hasPosition) + elem->SetAttribute("hP",1); + else + elem->SetAttribute("hP",0); + + *m_Stream << " " << *elem << std::endl; + + delete elem; + } + else if (this->m_OutputFormat = mitk::NavigationDataRecorder::csv) + { + *m_Stream << ";" << dataValid << ";" << position[0] << ";" << position[1] << ";" << position[2] << ";" << orientation[0] << ";" << orientation[1] << ";" << orientation[2] << ";" << orientation[3]; + } } } + if (this->m_OutputFormat = mitk::NavigationDataRecorder::csv) *m_Stream << "\n"; } } void mitk::NavigationDataRecorder::StartRecording() { if (m_Recording) { std::cout << "Already recording please stop before start new recording session" << std::endl; return; } if (m_Stream == NULL) { std::stringstream ss; std::ostream* stream; //An existing extension will be cut and replaced with .xml std::string tmpPath = itksys::SystemTools::GetFilenamePath(m_FileName); m_FileName = itksys::SystemTools::GetFilenameWithoutExtension(m_FileName); - ss << tmpPath << "/" << m_FileName << "-" << m_NumberOfRecordedFiles << ".xml"; + if (m_OutputFormat == mitk::NavigationDataRecorder::csv) ss << tmpPath << "/" << m_FileName << "-" << m_NumberOfRecordedFiles << ".csv"; + else ss << tmpPath << "/" << m_FileName << "-" << m_NumberOfRecordedFiles << ".xml"; switch(m_RecordingMode) { case Console: stream = &std::cout; break; case NormalFile: //Check if there is a file name and path if (m_FileName == "") { stream = &std::cout; std::cout << "No file name or file path set the output is redirected to the console"; } else { stream = new std::ofstream(ss.str().c_str()); } break; case ZipFile: stream = &std::cout; std::cout << "Sorry no ZipFile support yet"; break; default: stream = &std::cout; break; } + m_firstLine = true; StartRecording(stream); } } void mitk::NavigationDataRecorder::StartRecording(std::ostream* stream) { if (m_Recording) { std::cout << "Already recording please stop before start new recording session" << std::endl; return; } m_Stream = stream; m_Stream->precision(10); //TODO store date and GMT time if (m_Stream) { - *m_Stream << "" << std::endl; - /**m_Stream << "" << std::endl;*/ - // should be a generic version, meaning a member variable, which has the actual version - *m_Stream << " " << "" << std::endl; - + if (m_OutputFormat == mitk::NavigationDataRecorder::xml) + { + *m_Stream << "" << std::endl; + /**m_Stream << "" << std::endl;*/ + // should be a generic version, meaning a member variable, which has the actual version + *m_Stream << " " << "" << std::endl; + } m_Recording = true; } } void mitk::NavigationDataRecorder::StopRecording() { if (!m_Recording) { std::cout << "You have to start a recording first" << std::endl; return; } - if (m_Stream) + + if (m_Stream && m_OutputFormat == mitk::NavigationDataRecorder::xml) { *m_Stream << "" << std::endl; } m_NumberOfRecordedFiles++; m_Stream = NULL; m_Recording = false; } \ No newline at end of file diff --git a/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.h b/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.h index 5aed2f8037..2221fa121a 100644 --- a/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.h +++ b/Modules/IGT/IGTFilters/mitkNavigationDataRecorder.h @@ -1,150 +1,172 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2008-02-08 13:23:19 +0100 (Fr, 08 Feb 2008) $ Version: $Revision: 13561 $ 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 _MITK_NavigationDataRecorder_H #define _MITK_NavigationDataRecorder_H #include #include "mitkNavigationData.h" #include #include namespace mitk { /**Documentation * \brief This class records NavigationData objects. * * The output of this class is formated as a XML document. * * Internal this class uses streams for recording NavigationData objects. Therefore different types of output are possible * and can be set with the SetOutputMode() method. The default output is directed to the console. If you want to save into a * file you have to set a file name and the path. The recording is started with the call of the method StartRecording(). Now * every Update() stores the current state of the added NavigationDatas. With StopRecording() the stream is stopped. With * another call of StartRecording() the output is written to a new file with incremented filename counter. * * \warning At the moment there is no check if the file is already existing and this class will override existing files. * \ingroup IGT */ class MitkIGT_EXPORT NavigationDataRecorder : public itk::ProcessObject { public: mitkClassMacro( NavigationDataRecorder, itk::ProcessObject ); itkNewMacro( Self ); /** * \brief sets the file name for the OutputMode NormalFile and ZipFile * * Any extensions will be cut * \warning existing files will be overridden * \warning do not use "." in file names at the end */ itkSetStringMacro(FileName); /** * \brief Returns the file name of the recording file (in OutputMode NormalFile and ZipFile) */ itkGetStringMacro(FileName); /** * \brief Returns whether the NavigationDataRecorder is recording or not */ itkGetMacro(Recording,bool); /** * \brief Adds the input NavigationDatas */ virtual void AddNavigationData(const NavigationData* nd); /**Documentation * \brief Starts the recording with the presetted OutputMode * this method calls StartRecording(std::ostream*) */ void StartRecording(); /**Documentation * \brief Starts the recording with an own preinitialized stream */ void StartRecording(std::ostream* stream); /**Documentation * \brief Stops the recording and closes the stream */ void StopRecording(); /**Documentation * \brief Every call of update causes one line for each added NavigationData in the output if the recording was started */ virtual void Update(); /**Documentation * \brief Determines where the output is directed to * * Console: std::cout * NormalFile: std::ofstream * ZipFile: Not supported yet -> std::cout */ enum RecordingMode { Console, NormalFile, ZipFile }; + /**Documentation + * \brief Determines the output format + * + * xml: XML format, also default, can be read by NavigationDataPlayer + * csv: use to export in excel, matlab, etc. + */ + enum OutputFormatEnum + { + xml, + csv + }; + /**Documentation * \brief Sets the recording mode which causes different types of output streams * see enum RecordingMode */ void SetRecordingMode(RecordingMode mode); + /**Documentation + * \brief Sets the output format which causes different formats of output streams. The XML format is default. + * Also see enum OutputFormat for more information. + */ + itkSetMacro(OutputFormat,mitk::NavigationDataRecorder::OutputFormatEnum); + protected: /**Documentation * \brief filter execute method here it is not used * */ virtual void GenerateData(); NavigationDataRecorder(); virtual ~NavigationDataRecorder(); std::string m_FileName; ///< stores the file name and path unsigned int m_NumberOfInputs; ///< counts the numbers of added input NavigationDatas std::ostream* m_Stream; ///< the output stream RecordingMode m_RecordingMode; ///< stores the mode see enum RecordingMode + OutputFormatEnum m_OutputFormat; ///< stores the output format; see enum OutputFormat + bool m_Recording; ///< indicates whether the recording is started or not + bool m_firstLine; //for the csv writer to detect wether the header must be written + unsigned int m_NumberOfRecordedFiles; ///< necessary for the naming of the file if there is more than one start-stop cycle mitk::RealTimeClock::Pointer m_SystemTimeClock; ///< system time clock for system time tag in output xml file }; } #endif // #define _MITK_POINT_SET_SOURCE_H diff --git a/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp b/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp index 90f9188079..f30a7e5d2d 100644 --- a/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp +++ b/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.cpp @@ -1,208 +1,210 @@ /*========================================================================= 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(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() { 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; } diff --git a/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.h b/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.h index e542ae4f13..e6b00edd5f 100644 --- a/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.h +++ b/Modules/IGT/IGTFilters/mitkTrackingDeviceSource.h @@ -1,132 +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 MITKTRACKINGDEVICESOURCE_H_HEADER_INCLUDED_ #define MITKTRACKINGDEVICESOURCE_H_HEADER_INCLUDED_ #include #include "mitkTrackingDevice.h" namespace mitk { /**Documentation * \brief Connects a mitk::TrackingDevice to a MITK-IGT NavigationData-Filterpipeline * * This class is the source of most navigation pipelines. It encapsulates a mitk::TrackingDevice * and provides the position and orientation of the connected mitk::TrackingTool objects * as NavigationData objects. Note, that the number of outputs of TrackingDeviceSource * is equal to the number of tools connected to the TrackingDevice at the time * SetTrackingDevice() is called. If tools are added to the TrackingDevice later, * there will not be additional outputs in TrackingDeviceSource. You have to call * SetTrackingDevice() again to add the new tools as additional outputs of the filter. * Otherwise TrackingDeviceSource will raise an std::out_of_range exception when the filter pipeline is executed. * the tool number corresponds with the output number, e.g. trackingDevice-GetTool(0) is * the tool that will produce trackingDeviceSourceFilter->GetOutput(0). * \warning If a tool is removed from the tracking device, there will be a mismatch between * the outputs and the tool number! * * \ingroup IGT */ class MitkIGT_EXPORT TrackingDeviceSource : public NavigationDataSource { public: mitkClassMacro(TrackingDeviceSource, NavigationDataSource); itkNewMacro(Self); /** * \brief sets the tracking device that will be used as a source for tracking data */ virtual void SetTrackingDevice(mitk::TrackingDevice* td); /** * \brief returns the tracking device that is used by this filter */ itkGetConstObjectMacro(TrackingDevice, mitk::TrackingDevice); /** - * \brief Establishes a connection to the tracking device + * \brief Establishes a connection to the tracking device. If there is already a connection + * the method does nothing. * \warning. Will throw a std::invalid_argument exception if no tracking device was * set with SetTrackingDevice(). Will throw a std::runtime_error if the tracking device * returns an error. */ void Connect(); /** * \brief Closes the connection to the tracking device * \warning. Will throw a std::invalid_argument exception if no tracking device was * set with SetTrackingDevice(). Will throw a std::runtime_error if the tracking device * returns an error. */ void Disconnect(); /** * \brief starts tracking. - * This needs to be called before Update() or GetOutput()->Update(). + * This needs to be called before Update() or GetOutput()->Update(). If the device is already tracking + * the method does nothing. * \warning. Will throw a std::invalid_argument exception if no tracking device was * set with SetTrackingDevice(). Will throw a std::runtime_error if the tracking device * returns an error. */ void StartTracking(); /** * \brief stops tracking. * \warning. Will throw a std::invalid_argument exception if no tracking device was * set with SetTrackingDevice(). Will throw a std::runtime_error if the tracking device * returns an error. */ void StopTracking(); /** * \brief returns true if a connection to the tracking device is established * */ virtual bool IsConnected(); /** * \brief returns true if tracking is in progress * */ virtual bool IsTracking(); /** * \brief Used for pipeline update */ virtual void UpdateOutputInformation(); protected: TrackingDeviceSource(); virtual ~TrackingDeviceSource(); /** * \brief filter execute method * * queries the tracking device for new position and orientation data for all tools * and updates its output NavigationData objects with it. * \warning Will raise a std::out_of_range exception, if tools were added to the * tracking device after it was set as input for this filter */ virtual void GenerateData(); /** * \brief Create the necessary outputs for the TrackingTool objects in m_TrackingDevice **/ void CreateOutputs(); mitk::TrackingDevice::Pointer m_TrackingDevice; ///< the tracking device that is used as a source for this filter object }; } // namespace mitk #endif /* MITKTrackingDeviceSource_H_HEADER_INCLUDED_ */ diff --git a/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp b/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp index 0ab55d2ea3..22b78eb0b5 100644 --- a/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp +++ b/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp @@ -1,160 +1,195 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2011-01-18 13:22:38 +0100 (Di, 18 Jan 2011) $ Version: $Revision: 28959 $ 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 "mitkTrackingDeviceSourceConfigurator.h" #include "mitkNDITrackingDevice.h" #include "mitkClaronTrackingDevice.h" mitk::TrackingDeviceSourceConfigurator::TrackingDeviceSourceConfigurator(mitk::NavigationToolStorage::Pointer NavigationTools, mitk::TrackingDevice::Pointer TrackingDevice) { m_NavigationTools = NavigationTools; m_TrackingDevice = TrackingDevice; m_ErrorMessage = ""; } mitk::TrackingDeviceSourceConfigurator::~TrackingDeviceSourceConfigurator() { } bool mitk::TrackingDeviceSourceConfigurator::IsCreateTrackingDeviceSourcePossible() { if (m_NavigationTools.IsNull()) { m_ErrorMessage = "NavigationToolStorage is NULL!"; return false; } else if (m_TrackingDevice.IsNull()) { m_ErrorMessage = "TrackingDevice is NULL!"; return false; } else { for (int i=0; iGetToolCount(); i++) { if (m_NavigationTools->GetTool(i)->GetTrackingDeviceType() != m_TrackingDevice->GetType()) { m_ErrorMessage = "At least one tool is not of the same type like the tracking device."; return false; } } //TODO in case of Aurora: check if the tools are automatically detected by comparing the serial number return true; } } mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateTrackingDeviceSource() { mitk::NavigationDataObjectVisualizationFilter::Pointer dummy; return this->CreateTrackingDeviceSource(dummy); } mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateTrackingDeviceSource(mitk::NavigationDataObjectVisualizationFilter::Pointer &visualizationFilter) { if (!this->IsCreateTrackingDeviceSourcePossible()) return NULL; mitk::TrackingDeviceSource::Pointer returnValue; - if (m_TrackingDevice->GetType()==mitk::NDIAurora) - { - returnValue = CreateNDIAuroraTrackingDeviceSource(m_TrackingDevice,m_NavigationTools); - visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); - } - else if (m_TrackingDevice->GetType()==mitk::NDIPolaris) - { - returnValue = CreateNDIPolarisTrackingDeviceSource(m_TrackingDevice,m_NavigationTools); - visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); - } - else if (m_TrackingDevice->GetType()==mitk::ClaronMicron) - { - returnValue = CreateMicronTrackerTrackingDeviceSource(m_TrackingDevice,m_NavigationTools); - visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); - } - //TODO: insert other tracking systems? + + //create tracking device source + if (m_TrackingDevice->GetType()==mitk::NDIAurora) {returnValue = CreateNDIAuroraTrackingDeviceSource(m_TrackingDevice,m_NavigationTools);} + else if (m_TrackingDevice->GetType()==mitk::NDIPolaris) {returnValue = CreateNDIPolarisTrackingDeviceSource(m_TrackingDevice,m_NavigationTools);} + else if (m_TrackingDevice->GetType()==mitk::ClaronMicron) {returnValue = CreateMicronTrackerTrackingDeviceSource(m_TrackingDevice,m_NavigationTools);} + //TODO: insert other tracking systems? + if (returnValue.IsNull()) return NULL; + + //create visualization filter + visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); + if (visualizationFilter.IsNull()) return NULL; + return returnValue; } std::string mitk::TrackingDeviceSourceConfigurator::GetErrorMessage() { return this->m_ErrorMessage; } //############################ internal help methods ######################################## mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateNDIPolarisTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools) { mitk::TrackingDeviceSource::Pointer returnValue = mitk::TrackingDeviceSource::New(); mitk::NDITrackingDevice::Pointer thisDevice = dynamic_cast(trackingDevice.GetPointer()); //add the tools to the tracking device for (int i=0; iGetToolCount(); i++) { mitk::NavigationTool::Pointer thisNavigationTool = m_NavigationTools->GetTool(i); bool toolAddSuccess = thisDevice->AddTool(thisNavigationTool->GetToolName().c_str(),thisNavigationTool->GetCalibrationFile().c_str()); if (!toolAddSuccess) { this->m_ErrorMessage = "Can't add tool, is the SROM-file valid?"; return NULL; } } returnValue->SetTrackingDevice(thisDevice); return returnValue; } mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateNDIAuroraTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools) { + mitk::TrackingDeviceSource::Pointer returnValue = mitk::TrackingDeviceSource::New(); mitk::NDITrackingDevice::Pointer thisDevice = dynamic_cast(trackingDevice.GetPointer()); - for (int i=0; iGetToolCount(); i++) + + //connect to aurora to dectect tools automatically + thisDevice->OpenConnection(); + thisDevice->StartTracking(); + //thisDevice->StopTracking(); + //thisDevice->CloseConnection(); + + //now search for automatically detected tools in the tool storage and save them + mitk::NavigationToolStorage::Pointer newToolStorageInRightOrder = mitk::NavigationToolStorage::New(); + for (int i=0; iGetToolCount(); i++) { - //TODO here: create a tracking tool for every navigation tool - // check if some tools are already connected to the aurora - // also: new class, which handles the visualization of tool surfaces? => NavigationDataObjectVisual - + bool toolFound = false; + for (int j=0; jGetToolCount(); j++) + { + if ((dynamic_cast(thisDevice->GetTool(i)))->GetSerialNumber() == navigationTools->GetTool(j)->GetSerialNumber()) + { + //add tool in right order + newToolStorageInRightOrder->AddTool(navigationTools->GetTool(j)); + //adapt name of tool + dynamic_cast(thisDevice->GetTool(i))->SetToolName(navigationTools->GetTool(j)->GetToolName()); + toolFound = true; + break; + } + } + if (!toolFound) + { + this->m_ErrorMessage = "Error: did not find every automatically detected tool in the loaded tool storage: aborting initialization."; + return NULL; + } + } + + //delete all tools from the tool storage + navigationTools->DeleteAllTools(); + + //and add only the detected tools in the right order + for (int i=0; iGetToolCount(); i++) + { + navigationTools->AddTool(newToolStorageInRightOrder->GetTool(i)); } - return NULL; + returnValue->SetTrackingDevice(thisDevice); + return returnValue; } mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateMicronTrackerTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools) { mitk::TrackingDeviceSource::Pointer returnValue = mitk::TrackingDeviceSource::New(); mitk::ClaronTrackingDevice::Pointer thisDevice = dynamic_cast(trackingDevice.GetPointer()); //add the tools to the tracking device for (int i=0; iGetToolCount(); i++) { mitk::NavigationTool::Pointer thisNavigationTool = m_NavigationTools->GetTool(i); bool toolAddSuccess = thisDevice->AddTool(thisNavigationTool->GetToolName().c_str(),thisNavigationTool->GetCalibrationFile().c_str()); if (!toolAddSuccess) { this->m_ErrorMessage = "Can't add tool, is the toolfile valid?"; return NULL; } } returnValue->SetTrackingDevice(thisDevice); return returnValue; } mitk::NavigationDataObjectVisualizationFilter::Pointer mitk::TrackingDeviceSourceConfigurator::CreateNavigationDataObjectVisualizationFilter(mitk::TrackingDeviceSource::Pointer trackingDeviceSource, mitk::NavigationToolStorage::Pointer navigationTools) { mitk::NavigationDataObjectVisualizationFilter::Pointer returnValue = mitk::NavigationDataObjectVisualizationFilter::New(); for (int i=0; iGetNumberOfOutputs(); i++) { mitk::NavigationTool::Pointer currentTool = navigationTools->GetToolByName(trackingDeviceSource->GetOutput(i)->GetName()); - returnValue->SetInput(i,trackingDeviceSource->GetOutput(i)); //is this the right way to connect the filters? + if (currentTool.IsNull()) + { + this->m_ErrorMessage = "Error: did not find correspondig tool in tracking device after initialization."; + return NULL; + } + returnValue->SetInput(i,trackingDeviceSource->GetOutput(i)); returnValue->SetRepresentationObject(i,currentTool->GetDataNode()->GetData()); } return returnValue; } diff --git a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp index cb11d5b2c9..6f30e06bfe 100644 --- a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp +++ b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp @@ -1,73 +1,78 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-28 17:19:30 +0200 (Do, 28 Mai 2009) $ 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 "mitkNavigationToolStorage.h" mitk::NavigationToolStorage::NavigationToolStorage() { m_ToolCollection = std::vector(); } mitk::NavigationToolStorage::~NavigationToolStorage() { } bool mitk::NavigationToolStorage::DeleteTool(int number) { if ((unsigned int)number > m_ToolCollection.size()) return false; std::vector::iterator it = m_ToolCollection.begin() + number; m_ToolCollection.erase(it); return true; } +bool mitk::NavigationToolStorage::DeleteAllTools() + { + while(m_ToolCollection.size() > 0) if (!DeleteTool(0)) return false; + return true; + } bool mitk::NavigationToolStorage::AddTool(mitk::NavigationTool::Pointer tool) { if (GetTool(tool->GetIdentifier()).IsNotNull()) return false; else { m_ToolCollection.push_back(tool); return true; } } mitk::NavigationTool::Pointer mitk::NavigationToolStorage::GetTool(int number) { return m_ToolCollection.at(number); } mitk::NavigationTool::Pointer mitk::NavigationToolStorage::GetTool(std::string identifier) { for (int i=0; iGetIdentifier())==identifier) return GetTool(i); return NULL; } mitk::NavigationTool::Pointer mitk::NavigationToolStorage::GetToolByName(std::string name) { for (int i=0; iGetToolName())==name) return GetTool(i); return NULL; } int mitk::NavigationToolStorage::GetToolCount() { return m_ToolCollection.size(); } bool mitk::NavigationToolStorage::isEmpty() { return m_ToolCollection.empty(); } diff --git a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h index b89d3d0ccf..4a03bcdfc0 100644 --- a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h +++ b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h @@ -1,98 +1,103 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-08-11 15:15:02 +0200 (Di, 11 Aug 2009) $ 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 NAVIGATIONTOOLSTORAGE_H_INCLUDED #define NAVIGATIONTOOLSTORAGE_H_INCLUDED //itk headers #include //mitk headers #include #include #include "mitkNavigationTool.h" namespace mitk { /**Documentation * \brief An object of this class represents a collection of navigation tools. * You may add/delete navigation tools or store/load the whole collection * to/from the harddisc by using the class NavigationToolStorageSerializer * and NavigationToolStorageDeserializer. * * \ingroup IGT */ class MitkIGT_EXPORT NavigationToolStorage : public itk::Object { public: mitkClassMacro(NavigationToolStorage,itk::Object); itkNewMacro(Self); /** * @brief Adds a tool to the storage. Be sure that the tool has a unique * identifier which is not already part of this storage. * @return Returns true if the tool was added to the storage, false if not * (false can be returned if the identifier already exists in this storage * for example). */ bool AddTool(mitk::NavigationTool::Pointer tool); /** * @return Returns the tracking tool at the position "number" * in the storage. Returns NULL if there is no * tracking tool at this position. */ mitk::NavigationTool::Pointer GetTool(int number); /** * @return Returns the tracking tool with the given identifier. * Returns NULL if there is no * tracking tool with this identifier in the storage. */ mitk::NavigationTool::Pointer GetTool(std::string identifier); /** * @return Returns the tracking tool with the given name. * Returns NULL if there is no * tracking tool with this name in the storage. */ mitk::NavigationTool::Pointer GetToolByName(std::string name); /** * @brief Deletes a tool from the collection. */ bool DeleteTool(int number); + /** + * @brief Deletes all tools from the collection. + */ + bool DeleteAllTools(); + /** * @return Returns the number of tools stored in the storage. */ int GetToolCount(); /** * @return Returns true if the storage is empty, false if not. */ bool isEmpty(); protected: NavigationToolStorage(); ~NavigationToolStorage(); std::vector m_ToolCollection; }; } // namespace mitk #endif //NAVIGATIONTOOLSTORAGE \ No newline at end of file diff --git a/Modules/IGT/IGTTrackingDevices/mitkClaronTrackingDevice.cpp b/Modules/IGT/IGTTrackingDevices/mitkClaronTrackingDevice.cpp index 039d2d30bf..7a0da04437 100644 --- a/Modules/IGT/IGTTrackingDevices/mitkClaronTrackingDevice.cpp +++ b/Modules/IGT/IGTTrackingDevices/mitkClaronTrackingDevice.cpp @@ -1,329 +1,328 @@ /*========================================================================= 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 "mitkClaronTrackingDevice.h" #include "mitkClaronTool.h" #include "mitkIGTConfig.h" #include "mitkTimeStamp.h" #include #include #include typedef itk::MutexLockHolder MutexLockHolder; mitk::ClaronTrackingDevice::ClaronTrackingDevice(): mitk::TrackingDevice() { //set the type of this tracking device this->m_Type = ClaronMicron; this->m_MultiThreader = itk::MultiThreader::New(); m_ThreadID = 0; m_Device = mitk::ClaronInterface::New(); //############################# standard directories (from cmake) ################################## if (m_Device->IsMicronTrackerInstalled()) { #ifdef MITK_MICRON_TRACKER_TEMP_DIR m_ToolfilesDir = std::string(MITK_MICRON_TRACKER_TEMP_DIR); m_ToolfilesDir.append("/MT-tools"); #endif #ifdef MITK_MICRON_TRACKER_CALIBRATION_DIR m_CalibrationDir = std::string(MITK_MICRON_TRACKER_CALIBRATION_DIR); #endif } else { m_ToolfilesDir = "Error - No Microntracker installed"; m_CalibrationDir = "Error - No Microntracker installed"; } //################################################################################################## m_Device->Initialize(m_CalibrationDir, m_ToolfilesDir); } mitk::ClaronTrackingDevice::~ClaronTrackingDevice() { } mitk::TrackingTool* mitk::ClaronTrackingDevice::AddTool( const char* toolName, const char* fileName ) { mitk::ClaronTool::Pointer t = mitk::ClaronTool::New(); if (t->LoadFile(fileName) == false) { return NULL; } t->SetToolName(toolName); if (this->InternalAddTool(t) == false) return NULL; return t.GetPointer(); } bool mitk::ClaronTrackingDevice::InternalAddTool(ClaronTool::Pointer tool) { m_AllTools.push_back(tool); return true; } std::vector mitk::ClaronTrackingDevice::DetectTools() { std::vector returnValue; std::vector allHandles = m_Device->GetAllActiveTools(); for (std::vector::iterator iter = allHandles.begin(); iter != allHandles.end(); ++iter) { ClaronTool::Pointer newTool = ClaronTool::New(); newTool->SetToolName(m_Device->GetName(*iter)); newTool->SetCalibrationName(m_Device->GetName(*iter)); newTool->SetToolHandle(*iter); returnValue.push_back(newTool); } return returnValue; } bool mitk::ClaronTrackingDevice::StartTracking() { //By Alfred: next line because no temp directory is set if MicronTracker is not installed if (!m_Device->IsMicronTrackerInstalled()) return false; //################################################################################## //be sure that the temp-directory is empty at start: delete all files in the tool files directory itksys::SystemTools::RemoveADirectory(m_ToolfilesDir.c_str()); itksys::SystemTools::MakeDirectory(m_ToolfilesDir.c_str()); //copy all toolfiles into the temp directory for (unsigned int i=0; iGetFile().c_str(), m_ToolfilesDir.c_str()); } this->SetState(Tracking); // go to mode Tracking this->m_StopTrackingMutex->Lock(); // update the local copy of m_StopTracking this->m_StopTracking = false; this->m_StopTrackingMutex->Unlock(); //restart the Microntracker, so it will load the new tool files m_Device->StopTracking(); m_Device->Initialize(m_CalibrationDir,m_ToolfilesDir); m_TrackingFinishedMutex->Unlock(); // transfer the execution rights to tracking thread if (m_Device->StartTracking()) { mitk::TimeStamp::GetInstance()->Start(this); m_ThreadID = m_MultiThreader->SpawnThread(this->ThreadStartTracking, this); // start a new thread that executes the TrackTools() method return true; } else { m_ErrorMessage = "Error while trying to start the device!"; return false; } } bool mitk::ClaronTrackingDevice::StopTracking() { Superclass::StopTracking(); //delete all files in the tool files directory itksys::SystemTools::RemoveADirectory(m_ToolfilesDir.c_str()); return true; } unsigned int mitk::ClaronTrackingDevice::GetToolCount() const { return (unsigned int)this->m_AllTools.size(); } mitk::TrackingTool* mitk::ClaronTrackingDevice::GetTool(unsigned int toolNumber) const { if ( toolNumber >= this->GetToolCount()) return NULL; else return this->m_AllTools[toolNumber]; } bool mitk::ClaronTrackingDevice::OpenConnection() { bool returnValue; //Create the temp directory itksys::SystemTools::MakeDirectory(m_ToolfilesDir.c_str()); m_Device->Initialize(m_CalibrationDir,m_ToolfilesDir); returnValue = m_Device->StartTracking(); if (returnValue) { this->SetState(Ready); } else { //reset everything if (m_Device.IsNull()) { m_Device = mitk::ClaronInterface::New(); m_Device->Initialize(m_CalibrationDir, m_ToolfilesDir); } m_Device->StopTracking(); this->SetState(Setup); m_ErrorMessage = "Error while trying to open connection to the MicronTracker."; } return returnValue; } bool mitk::ClaronTrackingDevice::CloseConnection() { bool returnValue = true; if (this->GetState() == Setup) return true; returnValue = m_Device->StopTracking(); //delete the temporary directory itksys::SystemTools::RemoveADirectory(m_ToolfilesDir.c_str()); this->SetState(Setup); return returnValue; } mitk::ClaronInterface* mitk::ClaronTrackingDevice::GetDevice() { return m_Device; } std::vector mitk::ClaronTrackingDevice::GetAllTools() { return this->m_AllTools; } void mitk::ClaronTrackingDevice::TrackTools() { try { /* lock the TrackingFinishedMutex to signal that the execution rights are now transfered to the tracking thread */ MutexLockHolder trackingFinishedLockHolder(*m_TrackingFinishedMutex); // keep lock until end of scope bool localStopTracking; // Because m_StopTracking is used by two threads, access has to be guarded by a mutex. To minimize thread locking, a local copy is used here this->m_StopTrackingMutex->Lock(); // update the local copy of m_StopTracking localStopTracking = this->m_StopTracking; this->m_StopTrackingMutex->Unlock(); while ((this->GetState() == Tracking) && (localStopTracking == false)) { this->GetDevice()->GrabFrame(); std::vector detectedTools = this->DetectTools(); std::vector allTools = this->GetAllTools(); std::vector::iterator itAllTools; for(itAllTools = allTools.begin(); itAllTools != allTools.end(); itAllTools++) { mitk::ClaronTool::Pointer currentTool = *itAllTools; - //test if current tool was detected std::vector::iterator itDetectedTools; bool foundTool = false; for(itDetectedTools = detectedTools.begin(); itDetectedTools != detectedTools.end(); itDetectedTools++) { mitk::ClaronTool::Pointer aktuDet = *itDetectedTools; std::string tempString(currentTool->GetCalibrationName()); if (tempString.compare(aktuDet->GetCalibrationName())==0) { currentTool->SetToolHandle(aktuDet->GetToolHandle()); foundTool = true; } } if (!foundTool) { currentTool->SetToolHandle(0); } if (currentTool->GetToolHandle() != 0) { currentTool->SetDataValid(true); //get tip position of tool: std::vector pos_vector = this->GetDevice()->GetTipPosition(currentTool->GetToolHandle()); //write tip position into tool: mitk::Point3D pos; pos[0] = pos_vector[0]; pos[1] = pos_vector[1]; pos[2] = pos_vector[2]; currentTool->SetPosition(pos); //get tip quaternion of tool std::vector quat = this->GetDevice()->GetTipQuaternions(currentTool->GetToolHandle()); //write tip quaternion into tool mitk::Quaternion orientation(quat[1], quat[2], quat[3], quat[0]); currentTool->SetOrientation(orientation); } else { mitk::Point3D origin; origin.Fill(0); currentTool->SetPosition(origin); currentTool->SetOrientation(mitk::Quaternion(0,0,0,0)); currentTool->SetDataValid(false); } } /* Update the local copy of m_StopTracking */ this->m_StopTrackingMutex->Lock(); localStopTracking = m_StopTracking; this->m_StopTrackingMutex->Unlock(); } } catch(...) { this->StopTracking(); this->SetErrorMessage("Error while trying to track tools. Thread stopped."); } } bool mitk::ClaronTrackingDevice::IsMicronTrackerInstalled() { return this->m_Device->IsMicronTrackerInstalled(); } ITK_THREAD_RETURN_TYPE mitk::ClaronTrackingDevice::ThreadStartTracking(void* pInfoStruct) { /* extract this pointer from Thread Info structure */ struct itk::MultiThreader::ThreadInfoStruct * pInfo = (struct itk::MultiThreader::ThreadInfoStruct*)pInfoStruct; if (pInfo == NULL) { return ITK_THREAD_RETURN_VALUE; } if (pInfo->UserData == NULL) { return ITK_THREAD_RETURN_VALUE; } ClaronTrackingDevice *trackingDevice = (ClaronTrackingDevice*)pInfo->UserData; if (trackingDevice != NULL) trackingDevice->TrackTools(); return ITK_THREAD_RETURN_VALUE; } \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp index f2d52b4753..d2b8932e39 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp @@ -1,336 +1,362 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-12 19:14:45 +0200 (Di, 12 Mai 2009) $ Version: $Revision: 1.12 $ 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 "QmitkNavigationToolManagementWidget.h" //mitk headers #include "mitkTrackingTypes.h" #include #include #include #include #include #include #include //qt headers #include #include +//poco headers +#include + const std::string QmitkNavigationToolManagementWidget::VIEW_ID = "org.mitk.views.navigationtoolmanagementwidget"; QmitkNavigationToolManagementWidget::QmitkNavigationToolManagementWidget(QWidget* parent, Qt::WindowFlags f) : QWidget(parent, f) { m_Controls = NULL; CreateQtPartControl(this); CreateConnections(); m_NavigationToolStorage = mitk::NavigationToolStorage::New(); m_Controls->m_SurfaceChooser->SetAutoSelectNewItems(true); } QmitkNavigationToolManagementWidget::~QmitkNavigationToolManagementWidget() { } void QmitkNavigationToolManagementWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkNavigationToolManagementWidgetControls; m_Controls->setupUi(parent); } } void QmitkNavigationToolManagementWidget::CreateConnections() { if ( m_Controls ) { //main widget page: connect( (QObject*)(m_Controls->m_AddTool), SIGNAL(clicked()), this, SLOT(OnAddTool()) ); connect( (QObject*)(m_Controls->m_DeleteTool), SIGNAL(clicked()), this, SLOT(OnDeleteTool()) ); connect( (QObject*)(m_Controls->m_EditTool), SIGNAL(clicked()), this, SLOT(OnEditTool()) ); connect( (QObject*)(m_Controls->m_LoadSingleTool), SIGNAL(clicked()), this, SLOT(OnLoadSingleTool()) ); connect( (QObject*)(m_Controls->m_SaveSingleTool), SIGNAL(clicked()), this, SLOT(OnSaveSingleTool()) ); connect( (QObject*)(m_Controls->m_LoadStorage), SIGNAL(clicked()), this, SLOT(OnLoadStorage()) ); connect( (QObject*)(m_Controls->m_SaveStorage), SIGNAL(clicked()), this, SLOT(OnSaveStorage()) ); //widget page "add tool": connect( (QObject*)(m_Controls->m_AddToolCancel), SIGNAL(clicked()), this, SLOT(OnAddToolCancel()) ); connect( (QObject*)(m_Controls->m_AddToolSave), SIGNAL(clicked()), this, SLOT(OnAddToolSave()) ); connect( (QObject*)(m_Controls->m_LoadSurface), SIGNAL(clicked()), this, SLOT(OnLoadSurface()) ); connect( (QObject*)(m_Controls->m_LoadCalibrationFile), SIGNAL(clicked()), this, SLOT(OnLoadCalibrationFile()) ); } } void QmitkNavigationToolManagementWidget::Initialize(mitk::DataStorage* dataStorage) { m_DataStorage = dataStorage; } //################################################################################## //############################## slots: main widget ################################ //################################################################################## void QmitkNavigationToolManagementWidget::OnAddTool() { //initialize UI components m_Controls->m_SurfaceChooser->SetDataStorage(m_DataStorage); m_Controls->AddToolLabel->setText("Add Tool:"); m_Controls->m_MainWidgets->setCurrentIndex(1); //reset input fields m_Controls->m_ToolNameEdit->setText(""); m_Controls->m_IdentifierEdit->setText("NavigationTool#"+QString::number(m_NavigationToolStorage->GetToolCount())); m_Controls->m_SerialNumberEdit->setText(""); m_Controls->m_CalibrationFileName->setText(""); m_edit = false; } void QmitkNavigationToolManagementWidget::OnDeleteTool() { //if no item is selected, show error message: if (m_Controls->m_ToolList->currentItem() == NULL) {MessageBox("Error: Please select tool first!");return;} m_DataStorage->Remove(m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row())->GetDataNode()); m_NavigationToolStorage->DeleteTool(m_Controls->m_ToolList->currentIndex().row()); UpdateToolTable(); } void QmitkNavigationToolManagementWidget::OnEditTool() { //if no item is selected, show error message: if (m_Controls->m_ToolList->currentItem() == NULL) {MessageBox("Error: Please select tool first!");return;} //initialize UI components m_Controls->m_SurfaceChooser->SetDataStorage(m_DataStorage); m_Controls->AddToolLabel->setText("Edit Tool:"); m_Controls->m_MainWidgets->setCurrentIndex(1); //fill forms mitk::NavigationTool::Pointer selectedTool = m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()); m_Controls->m_ToolNameEdit->setText(QString(selectedTool->GetDataNode()->GetName().c_str())); m_Controls->m_IdentifierEdit->setText(QString(selectedTool->GetIdentifier().c_str())); m_Controls->m_SerialNumberEdit->setText(QString(selectedTool->GetSerialNumber().c_str())); switch(selectedTool->GetTrackingDeviceType()) { case mitk::NDIAurora: m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(0);break; case mitk::NDIPolaris: m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(1);break; case mitk::ClaronMicron: m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(2);break; default: m_Controls->m_TrackingDeviceTypeChooser->setCurrentIndex(0); } m_Controls->m_CalibrationFileName->setText(QString(selectedTool->GetCalibrationFile().c_str())); switch(selectedTool->GetType()) { case mitk::NavigationTool::Instrument: m_Controls->m_ToolTypeChooser->setCurrentIndex(0); break; case mitk::NavigationTool::Fiducial: m_Controls->m_ToolTypeChooser->setCurrentIndex(1); break; case mitk::NavigationTool::Skinmarker: m_Controls->m_ToolTypeChooser->setCurrentIndex(2); break; case mitk::NavigationTool::Unknown: m_Controls->m_ToolTypeChooser->setCurrentIndex(3); break; } m_Controls->m_SurfaceChooser->SetSelectedNode(selectedTool->GetDataNode()); m_edit = true; } void QmitkNavigationToolManagementWidget::OnLoadSingleTool() { mitk::NavigationToolReader::Pointer myReader = mitk::NavigationToolReader::New(m_DataStorage); mitk::NavigationTool::Pointer readTool = myReader->DoRead(QFileDialog::getOpenFileName(NULL,tr("Open Navigation Tool"), "/", "*.*").toAscii().data()); if (readTool.IsNull()) MessageBox("Error: " + myReader->GetErrorMessage()); else { if (!m_NavigationToolStorage->AddTool(readTool)) { MessageBox("Error: Can't add tool!"); m_DataStorage->Remove(readTool->GetDataNode()); } UpdateToolTable(); } } void QmitkNavigationToolManagementWidget::OnSaveSingleTool() { //if no item is selected, show error message: if (m_Controls->m_ToolList->currentItem() == NULL) {MessageBox("Error: Please select tool first!");return;} mitk::NavigationToolWriter::Pointer myWriter = mitk::NavigationToolWriter::New(); if (!myWriter->DoWrite(QFileDialog::getSaveFileName(NULL,tr("Save Navigation Tool"), "/", "*.*").toAscii().data(),m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()))) MessageBox("Error: "+ myWriter->GetErrorMessage()); } void QmitkNavigationToolManagementWidget::OnLoadStorage() { mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(m_DataStorage); std::string filename = QFileDialog::getOpenFileName(NULL,tr("Open Navigation Tool"), "/", "*.*").toAscii().data(); + if (filename == "") return; mitk::NavigationToolStorage::Pointer tempStorage = myDeserializer->Deserialize(filename); if (tempStorage.IsNull()) MessageBox("Error" + myDeserializer->GetErrorMessage()); else { m_NavigationToolStorage = tempStorage; - m_Controls->m_StorageName->setText(filename.c_str()); + Poco::Path myPath = Poco::Path(filename.c_str()); + m_Controls->m_StorageName->setText(myPath.getFileName().c_str()); } UpdateToolTable(); } void QmitkNavigationToolManagementWidget::OnSaveStorage() { mitk::NavigationToolStorageSerializer::Pointer mySerializer = mitk::NavigationToolStorageSerializer::New(); std::string filename = QFileDialog::getSaveFileName(NULL,tr("Save Navigation Tool"), "/", "*.*").toAscii().data(); if (!mySerializer->Serialize(filename,m_NavigationToolStorage)) MessageBox("Error: " + mySerializer->GetErrorMessage()); - else m_Controls->m_StorageName->setText(QString(filename.c_str())); + else + { + Poco::Path myPath = Poco::Path(filename.c_str()); + m_Controls->m_StorageName->setText(myPath.getFileName().c_str()); + } } //################################################################################## //############################## slots: add tool widget ############################ //################################################################################## void QmitkNavigationToolManagementWidget::OnAddToolSave() { mitk::NavigationTool::Pointer workTool; if (m_edit) //here we edit a existing tool { workTool = m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()); //edit existing DataNode... workTool->GetDataNode()->SetName(m_Controls->m_ToolNameEdit->text().toLatin1()); workTool->GetDataNode()->SetData(m_Controls->m_SurfaceChooser->GetSelectedNode()->GetData()); } else //here we create a new tool { workTool = mitk::NavigationTool::New(); //create DataNode... mitk::DataNode::Pointer newNode = mitk::DataNode::New(); newNode->SetName(m_Controls->m_ToolNameEdit->text().toLatin1()); newNode->SetData(m_Controls->m_SurfaceChooser->GetSelectedNode()->GetData()); m_DataStorage->Add(newNode); workTool->SetDataNode(newNode); } //fill NavigationTool object workTool->SetCalibrationFile(m_Controls->m_CalibrationFileName->text().toAscii().data()); workTool->SetIdentifier(m_Controls->m_IdentifierEdit->text().toAscii().data()); workTool->SetSerialNumber(m_Controls->m_SerialNumberEdit->text().toAscii().data()); //Tracking Device if (m_Controls->m_TrackingDeviceTypeChooser->currentText()=="NDI Aurora") workTool->SetTrackingDeviceType(mitk::NDIAurora); else if (m_Controls->m_TrackingDeviceTypeChooser->currentText()=="NDI Polaris") workTool->SetTrackingDeviceType(mitk::NDIPolaris); else if (m_Controls->m_TrackingDeviceTypeChooser->currentText()=="Claron Technology Micron Tracker") workTool->SetTrackingDeviceType(mitk::ClaronMicron); else workTool->SetTrackingDeviceType(mitk::TrackingSystemNotSpecified); //ToolType if (m_Controls->m_ToolTypeChooser->currentText()=="Instrument") workTool->SetType(mitk::NavigationTool::Instrument); else if (m_Controls->m_ToolTypeChooser->currentText()=="Fiducial") workTool->SetType(mitk::NavigationTool::Fiducial); else if (m_Controls->m_ToolTypeChooser->currentText()=="Skinmarker") workTool->SetType(mitk::NavigationTool::Skinmarker); else workTool->SetType(mitk::NavigationTool::Unknown); if (!m_edit) m_NavigationToolStorage->AddTool(workTool); UpdateToolTable(); m_Controls->m_MainWidgets->setCurrentIndex(0); } void QmitkNavigationToolManagementWidget::OnAddToolCancel() { m_Controls->m_MainWidgets->setCurrentIndex(0); } void QmitkNavigationToolManagementWidget::OnLoadSurface() { std::string filename = QFileDialog::getOpenFileName(NULL,tr("Open Surface"), "/", "*.stl").toLatin1().data(); mitk::STLFileReader::Pointer stlReader = mitk::STLFileReader::New(); try { stlReader->SetFileName( filename.c_str() ); stlReader->Update(); } catch (...) { } if ( stlReader->GetOutput() == NULL ); else { mitk::DataNode::Pointer newNode = mitk::DataNode::New(); newNode->SetName(filename); newNode->SetData(stlReader->GetOutput()); m_DataStorage->Add(newNode); } } void QmitkNavigationToolManagementWidget::OnLoadCalibrationFile() { m_Controls->m_CalibrationFileName->setText(QFileDialog::getOpenFileName(NULL,tr("Open Calibration File"), "/", "*.*")); } //################################################################################## //############################## private help methods ############################## //################################################################################## void QmitkNavigationToolManagementWidget::UpdateToolTable() { m_Controls->m_ToolList->clear(); for(int i=0; iGetToolCount(); i++) { QString currentTool = "Tool" + QString::number(i) + ": " + QString(m_NavigationToolStorage->GetTool(i)->GetDataNode()->GetName().c_str())+ " "; switch (m_NavigationToolStorage->GetTool(i)->GetTrackingDeviceType()) { case mitk::ClaronMicron: currentTool += "(MicronTracker/"; break; case mitk::NDIAurora: currentTool += "(NDI Aurora/"; break; case mitk::NDIPolaris: currentTool += "(NDI Polaris/"; break; default: currentTool += "(unknown tracking system/"; break; } switch (m_NavigationToolStorage->GetTool(i)->GetType()) { case mitk::NavigationTool::Instrument: currentTool += "Instrument)"; break; case mitk::NavigationTool::Fiducial: currentTool += "Fiducial)"; break; case mitk::NavigationTool::Skinmarker: currentTool += "Skinmarker)"; break; default: currentTool += "Unknown)"; } m_Controls->m_ToolList->addItem(currentTool); } } void QmitkNavigationToolManagementWidget::MessageBox(std::string s) { QMessageBox msgBox; msgBox.setText(s.c_str()); msgBox.exec(); + } + +void QmitkNavigationToolManagementWidget::EnableSingleToolSave(bool enable) + { + if (enable) + { + m_Controls->m_LoadSingleTool->setVisible(true); + m_Controls->m_SaveSingleTool->setVisible(true); + m_Controls->m_singleToolLabel->setVisible(true); + } + else + { + m_Controls->m_LoadSingleTool->setVisible(false); + m_Controls->m_SaveSingleTool->setVisible(false); + m_Controls->m_singleToolLabel->setVisible(false); + } + } \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h index 25770649d3..081069cc5c 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h @@ -1,94 +1,97 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-12 19:14:45 +0200 (Di, 12 Mai 2009) $ Version: $Revision: 1.12 $ 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 QMITKNAVIGATIONTOOLMANAGEMENTWIDGET_H #define QMITKNAVIGATIONTOOLMANAGEMENTWIDGET_H //QT headers #include //mitk headers #include "MitkIGTUIExports.h" #include "mitkNavigationTool.h" #include //ui header #include "ui_QmitkNavigationToolManagementWidgetControls.h" /** Documentation: * \brief An object of this class offers an UI to manage NavigationTools and * NavigationToolStorages. This means a user may create, save and load * single NavigationTools and/or NavigationToolStorages with this widget. * * Be sure to call the Initialize-methode before you start the widget * otherwise some errors might occure. * * \ingroup IGTUI */ class MitkIGTUI_EXPORT QmitkNavigationToolManagementWidget : public QWidget { Q_OBJECT public: static const std::string VIEW_ID; void Initialize(mitk::DataStorage* dataStorage); QmitkNavigationToolManagementWidget(QWidget* parent = 0, Qt::WindowFlags f = 0); ~QmitkNavigationToolManagementWidget(); + /** @brief Enables/disables if single tools can be saved or loaded. Default is on.*/ + void EnableSingleToolSave(bool enable); + protected slots: //main widget page: void OnAddTool(); void OnDeleteTool(); void OnEditTool(); void OnLoadSingleTool(); void OnSaveSingleTool(); void OnLoadStorage(); void OnSaveStorage(); //widget page "add tool": void OnAddToolCancel(); void OnAddToolSave(); void OnLoadSurface(); void OnLoadCalibrationFile(); protected: /// \brief Creation of the connections virtual void CreateConnections(); virtual void CreateQtPartControl(QWidget *parent); Ui::QmitkNavigationToolManagementWidgetControls* m_Controls; /** @brief holds the DataStorage */ mitk::DataStorage* m_DataStorage; /** @brief holds the NavigationToolStorage we are working with. */ mitk::NavigationToolStorage::Pointer m_NavigationToolStorage; /** @brief shows if we are in edit mode, if not we create new navigation tool objects. */ bool m_edit; //############## private help methods ####################### void MessageBox(std::string s); void UpdateToolTable(); }; #endif \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui index 8a7e0931d9..1abab918df 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui @@ -1,564 +1,565 @@ - + + QmitkNavigationToolManagementWidgetControls - - + + 0 0 - 360 + 346 534 - + Form - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt; font-weight:600;">Navigation Tool Management</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt; font-weight:600;">Navigation Tool Management</span></p></body></html> - - + + Qt::Horizontal - - + + 0 - - + + - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Filename:</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Filename:</span></p></body></html> - - - <NO NAME> + + + <NO NAME> - - + + Qt::Horizontal - + 40 20 - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Tools:</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Tools:</span></p></body></html> - - + + Qt::Horizontal - + 40 20 - - + + Add - - + + Delete - - + + Edit - + - + - - + + Qt::Horizontal - + 40 20 - - + + single tool (selected): - - + + Load - - + + Save - + - - + + Qt::Horizontal - + 40 20 - - + + whole storage: - - + + Load - - + + Save - - + + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600; text-decoration: underline;">Add Tool</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600; text-decoration: underline;">Add Tool</span></p></body></html> - + - - + + 100 0 - + Name: - + - + - - + + 100 0 - + Identifier: - + - + - - + + 100 0 - + Serial Number: - + - + - - + + 100 0 - + Tracking Device: - - + + 150 0 - + 150 16777215 - + NDI Aurora - + NDI Polaris - + Claron Technology Micron Tracker - - + + Qt::Horizontal - + 40 20 - + - - + + 100 0 - + Tool Type: - - + + 150 0 - + 150 16777215 - + Instrument - + Fiducial - + Skinmarker - + Unkown - - + + Qt::Horizontal - + 40 20 - + - - + + 100 0 - + Calibration File: - + - - + + 40 16777215 - + Load - + - - + + 100 0 - + Surface: - - + + 150 0 - + 150 16777215 - - + + Qt::Horizontal - + 40 20 - - + + 40 16777215 - + Load - - + + Qt::Vertical - + 20 40 - - + + Qt::Horizontal - + - - + + Qt::Horizontal - + 40 20 - - + + cancel - - + + save QmitkDataStorageComboBox QComboBox
QmitkDataStorageComboBox.h
diff --git a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp index 11bdda4815..bd655b92e7 100644 --- a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.cpp @@ -1,141 +1,213 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-03-21 19:27:37 +0100 (Sa, 21 Mrz 2009) $ Version: $Revision: 16719 $ 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 "QmitkToolTrackingStatusWidget.h" QmitkToolTrackingStatusWidget::QmitkToolTrackingStatusWidget(QWidget* parent) : QWidget(parent), m_Controls(NULL), m_StatusLabels (NULL), m_NavigationDatas(NULL) { this->CreateQtPartControl( this ); + m_ShowPositions = false; + m_Alignment = Qt::AlignHCenter; + m_Style = QmitkToolTrackingStatusWidget::VerticalUpperStyle; +} + + +void QmitkToolTrackingStatusWidget::SetStyle(QmitkToolTrackingStatusWidget::Style newStyle) + { + m_Style = newStyle; + } + +void QmitkToolTrackingStatusWidget::SetShowPositions(bool enable) +{ + m_ShowPositions = enable; +} + +void QmitkToolTrackingStatusWidget::SetTextAlignment(Qt::AlignmentFlag alignment) +{ + m_Alignment = alignment; } QmitkToolTrackingStatusWidget::~QmitkToolTrackingStatusWidget() { //m_Controls = NULL; delete m_StatusLabels; delete m_NavigationDatas; } void QmitkToolTrackingStatusWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkToolTrackingStatusWidgetControls; m_Controls->setupUi(parent); this->CreateConnections(); } } void QmitkToolTrackingStatusWidget::CreateConnections() { } void QmitkToolTrackingStatusWidget::SetNavigationDatas(std::vector* navDatas) { m_NavigationDatas = navDatas; } void QmitkToolTrackingStatusWidget::AddNavigationData(mitk::NavigationData::Pointer nd) { if(m_NavigationDatas == NULL) m_NavigationDatas = new std::vector(); m_NavigationDatas->push_back(nd); } void QmitkToolTrackingStatusWidget::Refresh() { if(m_NavigationDatas == NULL || m_NavigationDatas->size() <= 0) return; mitk::NavigationData* navData; for(unsigned int i = 0; i < m_NavigationDatas->size(); i++) { navData = m_NavigationDatas->at(i).GetPointer(); QString name(navData->GetName()); - - if(name.compare(m_StatusLabels->at(i)->text()) == 0) + QString pos = ""; + if (m_ShowPositions) + { + mitk::Point3D position = navData->GetPosition(); + pos = " [" + QString::number(position[0]) + ";" + QString::number(position[1]) + ";" + QString::number(position[2]) + "]"; + } + + if(name.compare(m_StatusLabels->at(i)->objectName()) == 0) { + m_StatusLabels->at(i)->setText(name+pos); if(navData->IsDataValid()) m_StatusLabels->at(i)->setStyleSheet("QLabel{background-color: #8bff8b }"); + else m_StatusLabels->at(i)->setStyleSheet("QLabel{background-color: #ff7878 }"); } } } void QmitkToolTrackingStatusWidget::ShowStatusLabels() { + RemoveGuiLabels(); if(m_NavigationDatas == NULL || m_NavigationDatas->size() <= 0) return; m_StatusLabels = new QVector(); mitk::NavigationData* navData; QLabel* label; for(unsigned int i = 0; i < m_NavigationDatas->size(); i++) { navData = m_NavigationDatas->at(i).GetPointer(); QString name(navData->GetName()); - + label = new QLabel(name, this); - label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + label->setObjectName(name); + label->setAlignment(m_Alignment | Qt::AlignVCenter); label->setFrameStyle(QFrame::Panel | QFrame::Sunken); m_StatusLabels->append(label); - m_Controls->m_GridLayout->addWidget(m_StatusLabels->at(i),0,i); + if (m_Style == QmitkToolTrackingStatusWidget::VerticalUpperStyle) m_Controls->m_VerticalLayout->addWidget(m_StatusLabels->at(i)); + else m_Controls->m_GridLayout->addWidget(m_StatusLabels->at(i),0,i); + } } +void QmitkToolTrackingStatusWidget::PreShowTools(mitk::NavigationToolStorage::Pointer toolStorage) + { + QLabel* label; -void QmitkToolTrackingStatusWidget::RemoveStatusLabels() -{ + for(unsigned int i = 0; i < toolStorage->GetToolCount(); i++) + { + QString name(toolStorage->GetTool(i)->GetToolName().c_str()); + + label = new QLabel(name, this); + label->setObjectName(name); + label->setAlignment(m_Alignment | Qt::AlignVCenter); + label->setFrameStyle(QFrame::Panel | QFrame::Sunken); + if (m_Style == QmitkToolTrackingStatusWidget::VerticalUpperStyle) m_Controls->m_VerticalLayout->addWidget(label); + else m_Controls->m_GridLayout->addWidget(label); + + } - while(m_Controls->m_GridLayout->count() > 0) - { - QWidget* actWidget = m_Controls->m_GridLayout->itemAt(0)->widget(); - m_Controls->m_GridLayout->removeWidget(actWidget); - delete actWidget; } + +void QmitkToolTrackingStatusWidget::RemoveStatusLabels() +{ + //remove GUI elements + RemoveGuiLabels(); + + //clear members if(m_StatusLabels != NULL && m_StatusLabels->size() > 0) - m_StatusLabels->clear(); + { + delete m_StatusLabels; + m_StatusLabels = new QVector< QLabel* >(); + } + if(m_NavigationDatas != NULL && m_NavigationDatas->size() > 0) - m_NavigationDatas->clear(); + { + delete m_NavigationDatas; + m_NavigationDatas = new std::vector(); + } } +void QmitkToolTrackingStatusWidget::RemoveGuiLabels() + { + while(m_Controls->m_GridLayout->count() > 0 || m_Controls->m_VerticalLayout->count() > 0) + { + if (m_Controls->m_GridLayout->count() > 0) + { + QWidget* actWidget = m_Controls->m_GridLayout->itemAt(0)->widget(); + m_Controls->m_GridLayout->removeWidget(actWidget); + delete actWidget; + } + else if (m_Controls->m_VerticalLayout->count() > 0) + { + QWidget* actWidget = m_Controls->m_VerticalLayout->itemAt(0)->widget(); + m_Controls->m_VerticalLayout->removeWidget(actWidget); + delete actWidget; + } + } + } + diff --git a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h index ab8bb69cb6..18123a1263 100644 --- a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h +++ b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidget.h @@ -1,97 +1,128 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-03-21 19:27:37 +0100 (Sa, 21 Mrz 2009) $ Version: $Revision: 16719 $ 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 _QmitkToolTrackingStatusWidget_H_INCLUDED #define _QmitkToolTrackingStatusWidget_H_INCLUDED #include "ui_QmitkToolTrackingStatusWidgetControls.h" #include "MitkIGTUIExports.h" #include +#include #include #include /*! \brief QmitkToolTrackingStatusWidget Widget for setting up and controlling an update timer in an IGT-Pipeline. */ class MitkIGTUI_EXPORT QmitkToolTrackingStatusWidget : public QWidget { Q_OBJECT // this is needed for all Qt objects that should have a MOC object (everything that derives from QObject) public: typedef std::vector< mitk::NavigationData::Pointer > NavigationDataPointerArray; - + enum Style + { + GridLowerStyle, + VerticalUpperStyle + }; /*! \brief default constructor */ QmitkToolTrackingStatusWidget( QWidget* parent ); + /*! \brief default destructor */ virtual ~QmitkToolTrackingStatusWidget(); /*! \brief Sets up the labels in this widget's QGridLayout for showing the track status of the tracking tools */ void ShowStatusLabels(); /*! \brief Sets the ND for this widget */ void SetNavigationDatas(std::vector* navDatas); void AddNavigationData(mitk::NavigationData::Pointer nd); /*! \brief Changes background color of status labels (green or red) to show if actual navigation data of each tool is valid. */ void Refresh(); /*! \brief Removes all status labels. */ void RemoveStatusLabels(); + /** @brief Enables / disables if the tool positions are shown. Default is off.*/ + void SetShowPositions(bool enable); + + /** @brief Sets the text alignment of the tool labels. Default is center. Example: Use Qt::AlignLeft for left alignment. */ + void SetTextAlignment(Qt::AlignmentFlag alignment); + + /** @brief Sets the alignment style of this widget: + * GridLowerStyle: Tool labels are at the lower side of the widget in grid alignment + * VerticalUpperStyle: Tool labels are at the upper side in a vertical alignment (default) + */ + void SetStyle(QmitkToolTrackingStatusWidget::Style newStyle); + + /** @brief Shows tool labels for the tools in the tool storage. This method can be called BEFORE connecting the navigation data to + * make a preview of the tools. + */ + void PreShowTools(mitk::NavigationToolStorage::Pointer toolStorage); + protected: void CreateConnections(); void CreateQtPartControl( QWidget *parent ); Ui::QmitkToolTrackingStatusWidgetControls* m_Controls; ///< gui widgets private: /*! \brief Vector for all tool tracking status labels. */ QVector< QLabel* >* m_StatusLabels; std::vector* m_NavigationDatas; + bool m_ShowPositions; + + Qt::AlignmentFlag m_Alignment; + + QmitkToolTrackingStatusWidget::Style m_Style; + + void RemoveGuiLabels(); + }; #endif // _QmitkToolTrackingStatusWidget_H_INCLUDED diff --git a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui index bb7560bf33..5fcbd61a4b 100644 --- a/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui +++ b/Modules/IGTUI/Qmitk/QmitkToolTrackingStatusWidgetControls.ui @@ -1,37 +1,40 @@ QmitkToolTrackingStatusWidgetControls 0 0 361 - 177 + 195 Form + + + Qt::Vertical 20 40 diff --git a/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.cpp b/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.cpp index 44748e75a4..339b5e6a0b 100644 --- a/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.cpp @@ -1,206 +1,232 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-12 19:14:45 +0200 (Di, 12 Mai 2009) $ Version: $Revision: 1.12 $ 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 "QmitkTrackingDeviceConfigurationWidget.h" #include "mitkClaronTrackingDevice.h" #include "mitkNDITrackingDevice.h" #include "mitkSerialCommunication.h" #include "qscrollbar.h" const std::string QmitkTrackingDeviceConfigurationWidget::VIEW_ID = "org.mitk.views.trackingdeviceconfigurationwidget"; QmitkTrackingDeviceConfigurationWidget::QmitkTrackingDeviceConfigurationWidget(QWidget* parent, Qt::WindowFlags f) : QWidget(parent, f) { m_Controls = NULL; CreateQtPartControl(this); CreateConnections(); //reset a few things ResetOutput(); AddOutput("
NDI Polaris selected"); + this->m_TrackingDeviceConfigurated = false; + + m_AdvancedUserControl = true; } QmitkTrackingDeviceConfigurationWidget::~QmitkTrackingDeviceConfigurationWidget() { } void QmitkTrackingDeviceConfigurationWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkTrackingDeviceConfigurationWidgetControls; m_Controls->setupUi(parent); } } void QmitkTrackingDeviceConfigurationWidget::CreateConnections() { if ( m_Controls ) { connect( (QObject*)(m_Controls->m_trackingDeviceChooser), SIGNAL(currentIndexChanged(int)), this, SLOT(TrackingDeviceChanged()) ); connect( (QObject*)(m_Controls->m_testConnectionPolaris), SIGNAL(clicked()), this, SLOT(TestConnection()) ); connect( (QObject*)(m_Controls->m_testConnectionAurora), SIGNAL(clicked()), this, SLOT(TestConnection()) ); connect( (QObject*)(m_Controls->m_testConnectionMicronTracker), SIGNAL(clicked()), this, SLOT(TestConnection()) ); connect( (QObject*)(m_Controls->m_resetButton), SIGNAL(clicked()), this, SLOT(ResetByUser()) ); connect( (QObject*)(m_Controls->m_finishedButton), SIGNAL(clicked()), this, SLOT(Finished()) ); } } void QmitkTrackingDeviceConfigurationWidget::TrackingDeviceChanged() { //show the correspondig widget m_Controls->m_TrackingSystemWidget->setCurrentIndex(m_Controls->m_trackingDeviceChooser->currentIndex()); //the new trackingdevice is not configurated yet m_TrackingDeviceConfigurated = false; //reset output ResetOutput(); //print output if (m_Controls->m_trackingDeviceChooser->currentIndex()==0) AddOutput("
NDI Polaris selected"); //NDI Polaris else if (m_Controls->m_trackingDeviceChooser->currentIndex()==1) AddOutput("
NDI Aurora selected"); //NDI Aurora else if (m_Controls->m_trackingDeviceChooser->currentIndex()==2) AddOutput("
Microntracker selected"); //ClaronTechnology MicronTracker 2 } void QmitkTrackingDeviceConfigurationWidget::EnableUserReset(bool enable) { if (enable) m_Controls->m_resetButton->setVisible(true); else m_Controls->m_resetButton->setVisible(false); } void QmitkTrackingDeviceConfigurationWidget::TestConnection() { //#### Step 1: construct a tracking device: mitk::TrackingDevice::Pointer testTrackingDevice = ConstructTrackingDevice(); //#### Step 2: test connection and start tracking, generate output AddOutput("
testing connection
..."); if (testTrackingDevice->OpenConnection()) { AddOutput(" OK"); AddOutput("
testing tracking
..."); if (testTrackingDevice->StartTracking()) { AddOutput(" OK"); if (!testTrackingDevice->StopTracking())AddOutput("
ERROR while stop tracking
"); } else AddOutput(" ERROR!"); if (!testTrackingDevice->CloseConnection())AddOutput("
ERROR while closing connection
"); } else AddOutput(" ERROR!"); } void QmitkTrackingDeviceConfigurationWidget::Finished() { m_TrackingDevice = ConstructTrackingDevice(); m_Controls->m_TrackingSystemWidget->setEnabled(false); m_Controls->m_trackingDeviceChooser->setEnabled(false); m_Controls->choose_tracking_device_label->setEnabled(false); m_Controls->configuration_finished_label->setText("\n\n

Configuration finished

"); + this->m_TrackingDeviceConfigurated = true; emit TrackingDeviceConfigurationFinished(); } void QmitkTrackingDeviceConfigurationWidget::Reset() { m_TrackingDevice = NULL; m_Controls->m_TrackingSystemWidget->setEnabled(true); m_Controls->m_trackingDeviceChooser->setEnabled(true); m_Controls->choose_tracking_device_label->setEnabled(true); m_Controls->configuration_finished_label->setText("\n\n

Press \"Finished\" to confirm configuration

"); + this->m_TrackingDeviceConfigurated = false; emit TrackingDeviceConfigurationReseted(); } void QmitkTrackingDeviceConfigurationWidget::ResetByUser() { Reset(); } //######################### internal help methods ####################################### void QmitkTrackingDeviceConfigurationWidget::ResetOutput() { m_output.str(""); m_output <<"output:"; m_Controls->m_outputTextAurora->setHtml(QString(m_output.str().c_str())); m_Controls->m_outputTextPolaris->setHtml(QString(m_output.str().c_str())); m_Controls->m_outputTextMicronTracker->setHtml(QString(m_output.str().c_str())); } void QmitkTrackingDeviceConfigurationWidget::AddOutput(std::string s) { //print output m_output << s; m_Controls->m_outputTextAurora->setHtml(QString(m_output.str().c_str())); m_Controls->m_outputTextPolaris->setHtml(QString(m_output.str().c_str())); m_Controls->m_outputTextMicronTracker->setHtml(QString(m_output.str().c_str())); m_Controls->m_outputTextPolaris->verticalScrollBar()->setValue(m_Controls->m_outputTextPolaris->verticalScrollBar()->maximum()); m_Controls->m_outputTextAurora->verticalScrollBar()->setValue(m_Controls->m_outputTextAurora->verticalScrollBar()->maximum()); m_Controls->m_outputTextMicronTracker->verticalScrollBar()->setValue(m_Controls->m_outputTextMicronTracker->verticalScrollBar()->maximum()); repaint(); } mitk::TrackingDevice::Pointer QmitkTrackingDeviceConfigurationWidget::ConstructTrackingDevice() { mitk::TrackingDevice::Pointer returnValue; //#### Step 1: configure tracking device: if (m_Controls->m_trackingDeviceChooser->currentIndex()==0)//NDI Polaris { if(m_Controls->m_radioPolaris5D->isChecked()) //5D Tracking { //not yet in the open source part so we'll only get NULL here. returnValue = ConfigureNDI5DTrackingDevice(); } else //6D Tracking { returnValue = ConfigureNDI6DTrackingDevice(); returnValue->SetType(mitk::NDIPolaris); } } else if (m_Controls->m_trackingDeviceChooser->currentIndex()==1)//NDI Aurora { returnValue = ConfigureNDI6DTrackingDevice(); returnValue->SetType(mitk::NDIAurora); } else if (m_Controls->m_trackingDeviceChooser->currentIndex()==2)//ClaronTechnology MicronTracker 2 { returnValue = mitk::ClaronTrackingDevice::New(); } return returnValue; } mitk::TrackingDevice::Pointer QmitkTrackingDeviceConfigurationWidget::ConfigureNDI5DTrackingDevice() { return NULL; } mitk::TrackingDevice::Pointer QmitkTrackingDeviceConfigurationWidget::ConfigureNDI6DTrackingDevice() { mitk::NDITrackingDevice::Pointer tempTrackingDevice = mitk::NDITrackingDevice::New(); int comPort = 0; if (m_Controls->m_trackingDeviceChooser->currentIndex()==1) comPort = m_Controls->m_comPortSpinBoxAurora->value(); else comPort = m_Controls->m_comPortSpinBoxPolaris->value(); tempTrackingDevice->SetPortNumber(static_cast(comPort)); //set the com port mitk::TrackingDevice::Pointer returnValue = static_cast(tempTrackingDevice); return returnValue; } mitk::TrackingDevice::Pointer QmitkTrackingDeviceConfigurationWidget::GetTrackingDevice() { + if (!m_AdvancedUserControl) m_TrackingDevice = ConstructTrackingDevice(); return this->m_TrackingDevice; } +bool QmitkTrackingDeviceConfigurationWidget::GetTrackingDeviceConfigured() + { + return this->m_TrackingDeviceConfigurated; + } + +void QmitkTrackingDeviceConfigurationWidget::ConfigurationFinished() + { + Finished(); + + } + +void QmitkTrackingDeviceConfigurationWidget::EnableAdvancedUserControl(bool enable) + { + m_AdvancedUserControl = enable; + m_Controls->configuration_finished_label->setVisible(enable); + m_Controls->m_finishedLine->setVisible(enable); + m_Controls->m_resetButton->setVisible(enable); + m_Controls->m_finishedButton->setVisible(enable); + } + diff --git a/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.h b/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.h index 333afef03d..8979dea604 100644 --- a/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.h +++ b/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidget.h @@ -1,134 +1,158 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-12 19:14:45 +0200 (Di, 12 Mai 2009) $ Version: $Revision: 1.12 $ 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 QMITKTRACKINGDEVICECONFIGURATIONWIDGET_H #define QMITKTRACKINGDEVICECONFIGURATIONWIDGET_H #include #include "MitkIGTUIExports.h" #include "ui_QmitkTrackingDeviceConfigurationWidgetControls.h" #include "mitkTrackingDevice.h" + +//itk headers + /** Documentation: * \brief An object of this class offers an UI to configurate * a tracking device. If the user finished the configuration process and * a fully configurated tracking device is availiabe the object emits a * signal "TrackingDeviceConfigurationFinished()". You can then get the * tracking device by calling the method GetTrackingDevice(). * * Once the tracking device is configurated there are two ways to reset * the UI to allow the user for configuring a new device. The method Reset() * can be called and there is also a button "reset" which can be pressed by * the user. In both cases a signal "TrackingDeviceConfigurationReseted()" * is emitted and you may wait for a new configurated tracking device. * * The possibility to reset the configuration by the user can also be switched * of by calling the method EnableUserReset(boolean enable). * * \ingroup IGTUI */ class MitkIGTUI_EXPORT QmitkTrackingDeviceConfigurationWidget : public QWidget { Q_OBJECT public: static const std::string VIEW_ID; QmitkTrackingDeviceConfigurationWidget(QWidget* parent = 0, Qt::WindowFlags f = 0); ~QmitkTrackingDeviceConfigurationWidget(); /* @return Returns the current configurated tracking device. If the user didn't finished the * configuration process NULL is returned. */ mitk::TrackingDevice::Pointer GetTrackingDevice(); /* @brief Resets the UI to allow the user for configurating a new tracking device. */ void Reset(); + /** @brief External call to disable this widget when configuration is finished. This is also called by the "finished" button, + * but if you disable the advanced user control you might want to call this when the configuration is finished. + * If you want to configure a new device call the Reset() funktion later. + */ + void ConfigurationFinished(); + /* @brief Sets our unsets the possibility to reset the UI and start * a new configuration by the user. Concretely this means the * button "reset" is shown or not. */ void EnableUserReset(bool enable); + /** @return Returns true if the tracking device is completely configured (you can get it by calling GetTrackingDevice() in this case). + * Returns false if configuration is not finished. + */ + bool GetTrackingDeviceConfigured(); + + /** @brief Enables/disables the advanced user controls which means the reset and finished button. When disabled you'll get NO + * signals from this widget and you've to check by yourself if the configuration is finished. Default value is false. + */ + void EnableAdvancedUserControl(bool enable); + + signals: /* @brief This signal is sent if the user has finished the configuration of the tracking device. * The device is now availiable if the method GetTrackingDevice() is called. The tracking * device you'll get is completly configurated but no tools are added yet. */ void TrackingDeviceConfigurationFinished(); /* @brief This signal is sent if the UI was reseted and the user is required to configurate * a new tracking device. */ void TrackingDeviceConfigurationReseted(); protected: /// \brief Creation of the connections virtual void CreateConnections(); virtual void CreateQtPartControl(QWidget *parent); Ui::QmitkTrackingDeviceConfigurationWidgetControls* m_Controls; std::stringstream m_output; mitk::TrackingDevice::Pointer m_TrackingDevice; + bool m_TrackingDeviceConfigurated; + bool m_AdvancedUserControl; + //######################### internal help methods ####################################### void ResetOutput(); void AddOutput(std::string s); mitk::TrackingDevice::Pointer ConstructTrackingDevice(); + protected slots: /* @brief This method is called when the user changes the selection of the trackingdevice (m_trackingDeviceChooser). It then sets the correct widget for the selected tracking device.*/ void TrackingDeviceChanged(); /* @brief This method is called when the user presses the button "test connection". The method will then create a temporary tracking device, * try to open a connection and start tracking. The user can see the result of the connection test on the small output window. */ void TestConnection(); /* @brief This method is called when the user presses the button "finished". A new tracking device will be created in this case and will then * then be availiable by calling GetTrackingDevice(). Also a signal TrackingDeviceConfigurationFinished() will be emitted. After this the * UI will be disablet until the widget is reseted to configure a new tracking device. */ void Finished(); /* @brief This method is called when the user presses the button "reset". He can configure a new tracking device then. The signal * TrackingDeviceConfigurationReseted() will be emitted if this method is called. The method GetTrackingDevice() will return * NULL until a new tracking device is configured. */ void ResetByUser(); /* @return Returns a configured NDI 5D tracking device. Unfortunately the NDI 5D tracking device is not yet in the open source part * so this method only returns NULL at the moment. */ virtual mitk::TrackingDevice::Pointer ConfigureNDI5DTrackingDevice(); /* @return Returns a configured NDI 6D tracking device. * The type (which means Aurora/Polaris) will not be set in the returnvalue. You have to this later. */ mitk::TrackingDevice::Pointer ConfigureNDI6DTrackingDevice(); }; #endif \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidgetControls.ui b/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidgetControls.ui index a15118bc94..ba4d6d20d4 100644 --- a/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidgetControls.ui +++ b/Modules/IGTUI/Qmitk/QmitkTrackingDeviceConfigurationWidgetControls.ui @@ -1,605 +1,626 @@ - + + QmitkTrackingDeviceConfigurationWidgetControls - - + + 0 0 - 339 - 315 + 338 + 318 - + Form - + - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Tracking Device Configuration</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Tracking Device Configuration</span></p></body></html> - - + + Qt::Horizontal - + 40 20 - + - - + + Qt::Horizontal - + 128 20 - - + + Choose tracking device: - + - + Polaris (NDI) - + Aurora (NDI) - + MicronTracker (Claron Technology) - - + + Qt::Horizontal - - + + 0 - - + + - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; text-decoration: underline;">Polaris</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; text-decoration: underline;">Polaris</span></p></body></html> - - + + Qt::Horizontal - + 40 20 - + - + - + - - + + Com Port: - - + + - + COM - - + + Qt::Horizontal - + 40 20 - - + + Tracking Mode - + - + - - + + false - + 5D Tracking - + false - - + + 6D Tracking - + true - - + + Qt::Horizontal - + 53 20 - - + + Qt::Vertical - + + QSizePolicy::Expanding + + 115 108 - + - + - - + + 120 - 0 + 80 - + 120 - 1000 + 80 - + 120 0 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;" bgcolor="#000000"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:7pt; text-decoration: underline; color:#ffffff;">output:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:7pt; text-decoration: underline; color:#ffffff;"><span style=" text-decoration:none;">NDI Polaris selected</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;" bgcolor="#000000"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt; text-decoration: underline; color:#ffffff;">output:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:7pt; color:#ffffff;">NDI Polaris selected</span></p></body></html> - + Qt::NoTextInteraction - - + + 120 0 - + 120 16777215 - + Test Connection - - + + - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; text-decoration: underline;">Aurora</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; text-decoration: underline;">Aurora</span></p></body></html> - - + + Qt::Horizontal - + 40 20 - + - + - + - - + + Com Port: - - + + COM - - + + Qt::Horizontal - + 40 20 - - + + Qt::Vertical - + 20 40 - + - - + + 120 - 0 + 80 - + 120 - 16777215 + 80 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;" bgcolor="#000000"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" text-decoration: underline; color:#ffffff;">output:</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;" bgcolor="#000000"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; text-decoration: underline; color:#ffffff;">output:</span></p></body></html> - + Qt::NoTextInteraction - - + + 120 0 - + 120 16777215 - + test connection - - + + - + - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; text-decoration: underline;">MicronTracker</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; text-decoration: underline;">MicronTracker</span></p></body></html> - - + + Qt::Horizontal - + 40 20 - + - - - Qt::Horizontal - - - - 40 - 20 - - - + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - + - - + + 120 - 0 + 80 - + 120 - 16777215 + 80 - + 120 0 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;" bgcolor="#000000"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" text-decoration: underline; color:#ffffff;">output:</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;" bgcolor="#000000"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; text-decoration: underline; color:#ffffff;">output:</span></p></body></html> - + Qt::NoTextInteraction - - + + 120 0 - + 120 16777215 - + 120 0 - + test connection - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p align="right" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Press "Finished" to confirm configuration</span></p></body></html> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p align="right" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600;">Press "Finished" to confirm configuration</span></p></body></html> - - + + Qt::Vertical - + 20 14 - - + + Qt::Horizontal - + - - + + Qt::Horizontal - + 40 20 - - + + Reset - - + + Finished