diff --git a/Documentation/Doxygen/Modules/Modules.dox b/Documentation/Doxygen/Modules/Modules.dox index 57ee480242..67cd78f73e 100644 --- a/Documentation/Doxygen/Modules/Modules.dox +++ b/Documentation/Doxygen/Modules/Modules.dox @@ -1,123 +1,123 @@ /** \defgroup Core Core Classes \brief This category includes classes of the MITK Core library. */ /** \defgroup Data Data Classes \ingroup DataManagement \brief This subcategory includes the data classes, e.g., for images (mitk::Image), surfaces (mitk::Surface), vessel-trees (mitk::VesselTreeData), etc. Data access classes are only included, if there is no equivalent in itk (see \ref ProcessAndAdaptorClasses "Process and Adaptor Classes" below). */ /** \defgroup IO IO Classes \ingroup DataManagement \brief This subcategory includes the IO classes to read or write data objects. */ /** \defgroup DataStorage Data Storage Classes \ingroup DataManagement \brief This subcategory includes the classes to store and retrieve objects from the mitk::DataStorage */ /** \defgroup ProcessAdaptor Process and Adaptor Classes \ingroup Core \anchor ProcessAndAdaptorClasses \brief This category includes process (algorithm) classes developed specifically for mitk and (mainly) adaptor classes for the integration of algorithms from other toolkits (currently vtk, itk). The itk adaptor classes are also useful for data access to mitk data objects. */ /** \defgroup Process Process Classes \ingroup ProcessAdaptor \brief This subcategory includes process (algorithm) classes developed specifically for mitk. */ /** \defgroup InteractionUndo Interaction and Undo Classes \ingroup Core \brief This category includes classes that support the developer to create software that allows the user to interact with the data. This includes complex interactions that have multiple states (e.g., moving a handle of an active contour vs changing its local elasicity) and a concept to realize an undo/redo-mechanism. A detailed description of the rationale for these classes can be found in \ref InteractionPage. */ /** \defgroup Interaction Interaction Classes \ingroup InteractionUndo \brief This subcategory includes interaction classes (subclasses of mitk::StateMachine) that change the data according to the input of the user. For undo-support, the change is done by sending an OperationEvent to the respective data object, which changes itself accordingly. A detailed description of the rationale for these classes can be found in \ref InteractionPage. */ /** \defgroup Undo Undo Classes \ingroup InteractionUndo \brief This subcategory includes the undo/redo-specific classes. For undo-support, the change is done by sending an OperationEvent to the respective data object, which changes itself accordingly. A detailed description of the rationale for these classes can be found in \ref InteractionPage. */ /** - \defgroup ToolManagerEtAl Classes related to the Segmentation bundle + \defgroup ToolManagerEtAl Classes related to the Segmentation plugin - \brief A couple of classes related to the Segmentation bundle. See also + \brief A couple of classes related to the Segmentation plugin. See also \ref QmitkSegmentationTechnicalPage */ /** \defgroup Registration Registration \brief A couple of classes related to registration. */ /** \defgroup RigidRegistration Classes related to rigid registration \ingroup Registration \brief A couple of classes related to rigid registration. */ /** \defgroup PointBasedRegistration Classes related to point based registration \ingroup Registration \brief A couple of classes related to point based registration. */ /** \defgroup MITKPlugins MITK Plugins \brief This group includes all MITK Plugins */ diff --git a/Documentation/MITKDoxygenLayout.xml b/Documentation/DoxygenLayout.xml similarity index 100% rename from Documentation/MITKDoxygenLayout.xml rename to Documentation/DoxygenLayout.xml diff --git a/Modules/MitkExt/DataManagement/itkAffineGeometryFrame.h.dox b/Modules/MitkExt/DataManagement/itkAffineGeometryFrame.h.dox new file mode 100644 index 0000000000..883893b4cc --- /dev/null +++ b/Modules/MitkExt/DataManagement/itkAffineGeometryFrame.h.dox @@ -0,0 +1,129 @@ +// copied here for documentation purposes +#ifdef DOXYGEN_SKIP +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile: itkAffineGeometryFrame.h,v $ + Language: C++ + Date: $Date$ + Version: $Revision: 1.7 $ + + Copyright (c) Insight Software Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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 __itkAffineGeometryFrame_h +#define __itkAffineGeometryFrame_h + +#include "itkObject.h" +#include "itkMacro.h" +#include "itkScalableAffineTransform.h" +#include "itkBoundingBox.h" + +namespace itk +{ + + /** \class AffineGeometryFrame + * \brief Describes the geometry of a data object + */ +template +class AffineGeometryFrame : public itk::Object +{ +public: + typedef AffineGeometryFrame Self; + typedef itk::Object Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + typedef ScalableAffineTransform TransformType; + typedef BoundingBox BoundingBoxType; + typedef typename BoundingBoxType::BoundsArrayType BoundsArrayType; + typedef typename BoundingBoxType::Pointer BoundingBoxPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** \brief Method for creation through the object factory. */ + itkTypeMacro(AffineGeometryFrame, Object); + + /** \brief Get the bounding box */ + itkGetConstObjectMacro(BoundingBox, BoundingBoxType); + + const BoundsArrayType GetBounds() const + { + assert(m_BoundingBox.IsNotNull()); + return m_BoundingBox->GetBounds(); + } + + /** \brief Set the bounding box Only possible via the BoundsArray + * to make clear that a copy of the bounding-box is stored, + * not a reference to it.*/ + virtual void SetBounds(const BoundsArrayType& bounds); + + /** \brief Get the extent of the bounding box */ + TScalarType GetExtent(unsigned int direction) const + { + assert(directionGetBounds(); + return bounds[direction*2+1]-bounds[direction*2]; + } + + /** \brief Set/Get the IndexToObjectTransform */ + itkGetConstObjectMacro(IndexToObjectTransform, TransformType); + itkGetObjectMacro(IndexToObjectTransform, TransformType); + itkSetObjectMacro(IndexToObjectTransform, TransformType); + + /** \brief Set/Get the ObjectToNodeTransform */ + itkGetConstObjectMacro(ObjectToNodeTransform, TransformType); + itkGetObjectMacro(ObjectToNodeTransform, TransformType); + itkSetObjectMacro(ObjectToNodeTransform, TransformType); + + /** \brief Set/Get the IndexToWorldTransform */ + itkGetConstObjectMacro(IndexToWorldTransform, TransformType); + itkGetObjectMacro(IndexToWorldTransform, TransformType); + itkSetObjectMacro(IndexToWorldTransform, TransformType); + + + /** \brief Get the IndexToNodeTransform + * This Transform cannot be set, and is just computed internally */ + itkGetConstObjectMacro(IndexToNodeTransform, TransformType); + + /** \brief Initialize the geometry frame */ + virtual void Initialize(); + + /** Clone the geometry frame */ + virtual Pointer Clone() const; + +protected: + + AffineGeometryFrame(); + virtual ~AffineGeometryFrame(); + + /** \brief used in clone to initialize the newly created geometry */ + virtual void InitializeGeometry(Self * newGeometry) const; + void SetBoundsArray(const BoundsArrayType& bounds, + BoundingBoxPointer& boundingBox); + mutable BoundingBoxPointer m_BoundingBox; + + /** \brief Transform from unit coordinates to object coordinates */ + typename TransformType::Pointer m_IndexToObjectTransform; + typename TransformType::Pointer m_ObjectToNodeTransform; + typename TransformType::Pointer m_IndexToNodeTransform; + typename TransformType::Pointer m_IndexToWorldTransform; + +private: + AffineGeometryFrame(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + +}; + +} // namespace itk + +#endif /* __itkAffineGeometryFrame_h */ + +#endif \ No newline at end of file diff --git a/Plugins/org.mitk.gui.qt.diffusionimaging/documentation/UserManual/QmitkDiffusionImagingUserManual.dox b/Plugins/org.mitk.gui.qt.diffusionimaging/documentation/UserManual/QmitkDiffusionImagingUserManual.dox index cbceede24e..5124408e30 100644 --- a/Plugins/org.mitk.gui.qt.diffusionimaging/documentation/UserManual/QmitkDiffusionImagingUserManual.dox +++ b/Plugins/org.mitk.gui.qt.diffusionimaging/documentation/UserManual/QmitkDiffusionImagingUserManual.dox @@ -1,122 +1,122 @@ /** \page org_mitk_gui_qt_diffusionimaging MITK Diffusion Imaging (MITK-DI) This module provides means to diffusion weighted image reconstruction, visualization and quantification. Diffusion tensors as well as different q-ball reconstruction schemes are supported. Q-ball imaging aims at recovering more detailed information about the orientations of fibers from diffusion MRI measurements and, in particular, to resolve the orientations of crossing fibers. Available sections: - \ref QmitkDiffusionImagingUserManualIssues - \ref QmitkDiffusionImagingUserManualPreprocessing - \ref QmitkDiffusionImagingUserManualTensorReconstruction - \ref QmitkDiffusionImagingUserManualQBallReconstruction - \ref QmitkDiffusionImagingUserManualDicomImport - \ref QmitkDiffusionImagingUserManualQuantification - \ref QmitkDiffusionImagingUserManualVisualizationSettings - \ref QmitkDiffusionImagingUserManualReferences - \ref QmitkDiffusionImagingUserManualTechnicalDetail - \ref QmitkDiffusionImagingUserManualSubManuals \section QmitkDiffusionImagingUserManualIssues Known Issues \li Dicom Import: The dicom import has so far only been implemented for Siemens dicom images. MITK-DI is capable of reading the nrrd format, which is documented elsewhere [1, 2]. These files can be created by combining the raw image data with a corresponding textual header file. The file extension should be changed from *.nrrd to *.dwi or from *.nhdr to *.hdwi respectively in order to let MITK-DI recognize the diffusion related header information provided in the files. \section QmitkDiffusionImagingUserManualPreprocessing Preprocessing The preprocessing view gives an overview over the important features of a diffusion weighted image like the number of gradient directions, b-value and the measurement frame. Additionally it allows the extraction of the B0 image, reduction of gradient directions and the generation of a binary brain mask. The image volume can be modified by applying a new mesurement frame, which is useful if the measurement frame is not set correctly in the image header, or by averaging redundant gradient directions. \image html prepro1.png Preprocessing \section QmitkDiffusionImagingUserManualTensorReconstruction Tensor Reconstruction The tensor reconstruction view allows ITK based tensor reconstruction [3]. The advanced settings for ITK reconstruction let you configure a manual threshold on the non-diffusion weighted image. All voxels below this threshold will not be reconstructed and left blank. It is also possible to check for negative eigenvalues. The according voxels are also left blank. \image html tensor1.png ITK tensor reconstruction A few seconds (depending on the image size) after the reconstruction button is hit, a colored image should appear in the main window. \image html tensor4.png Tensor image after reconstruction The view also allows the generation of artificial diffusion weighted or Q-Ball images from the selected tensor image. The ODFs of the Q-Ball image are directly initialized from the tensor values and afterwards normalized. The diffusion weighted image is estimated using the l2-norm image of the tensor image as B0. The gradient images are afterwards generated using the standard tensor equation. \section QmitkDiffusionImagingUserManualQBallReconstruction Q-Ball Reconstruction -The q-ball reonstruction bundle implements a variety of reconstruction methods. The different reconstruction methods are described in the following: +The q-ball reonstruction view implements a variety of reconstruction methods. The different reconstruction methods are described in the following: \li Numerical: The original, numerical q-ball reconstruction presented by Tuch et al. [5] \li Standard (SH): Descoteaux's reconstruction based on spherical harmonic basis functions [6] \li Solid Angle (SH): Aganj's reconstruction with solid angle consideration [7] \li ADC-profile only: The ADC-profile reconstructed with spherical harmonic basis functions \li Raw signal only: The raw signal reconstructed with spherical harmonic basis functions \image html qballs1.png The q-ball resonstruction view B0 threshold works the same as in tensor reconstruction. The maximum l-level configures the size of the spherical harmonics basis. Larger l-values (e.g. l=8) allow higher levels of detail, lower levels are more stable against noise (e.g. l=4). Lambda is a regularisation parameter. Set it to 0 for no regularisation. lambda = 0.006 has proven to be a stable choice under various settings. \image html qballs2.png Advanced q-ball reconstruction settings This is how a q-ball image should initially look after reconstruction. Standard q-balls feature a relatively low GFA and thus appear rather dark. Adjust the level-window to solve this. \image html qballs3.png q-ball image after reconstruction \section QmitkDiffusionImagingUserManualDicomImport Dicom Import The dicom import does not cover all hardware manufacturers but only Siemens dicom images. MITK-DI is also capable of reading the nrrd format, which is documented elsewhere [1, 2]. These files can be created by combining the raw image data with a corresponding textual header file. The file extension should be changed from *.nrrd to *.dwi or from *.nhdr to *.hdwi respectively in order to let MITK-DI recognize the diffusion related header information provided in the files. In case your dicom images are readable by MITK-DI, select one or more input dicom folders and click import. Each input folder must only contain DICOM-images that can be combined into one vector-valued 3D output volume. Different patients must be loaded from different input-folders. The folders must not contain other acquisitions (e.g. T1,T2,localizer). In case many imports are performed at once, it is recommended to set the the optional output folder argument. This prevents the images from being kept in memory. \image html dicom1.png Dicom import The option "Average duplicate gradients" accumulates the information that was acquired with multiple repetitions for one gradient. Vectors do not have to be precisely equal in order to be merged, if a "blur radius" > 0 is configured. \section QmitkDiffusionImagingUserManualQuantification Quantification The quantification view allows the derivation of different scalar anisotropy measures for the reconstructed tensors (Fractional Anisotropy, Relative Anisotropy, Axial Diffusivity, Radial Diffusivity) or q-balls (Generalized Fractional Anisotropy). \image html quantification.png Anisotropy quantification \section QmitkDiffusionImagingUserManualVisualizationSettings ODF Visualization Setting In this small view, the visualization of ODFs and diffusion images can be configured. Depending on the selected image in the data storage, different options are shown here. For tensor or q-ball images, the visibility of glyphs in the different render windows (T)ransversal, (S)agittal, and (C)oronal can be configured here. The maximal number of glyphs to display can also be configured here for. This is usefull to keep the system response time during rendering feasible. The other options configure normalization and scaling of the glyphs. In diffusion images, a slider lets you choose the desired image channel from the vector of images (each gradient direction one image) for rendering. Furthermore reinit can be performed and texture interpolation toggled. This is how a visualization with activated glyphs should look like: \image html visualization3.png Q-ball image with ODF glyph visibility toggled ON \section QmitkDiffusionImagingUserManualReferences References 1. http://teem.sourceforge.net/nrrd/format.html 2. http://www.cmake.org/Wiki/Getting_Started_with_the_NRRD_Format 3. C.F.Westin, S.E.Maier, H.Mamata, A.Nabavi, F.A.Jolesz, R.Kikinis, "Processing and visualization for Diffusion tensor MRI", Medical image Analysis, 2002, pp 93-108 5. Tuch, D.S., 2004. Q-ball imaging. Magn Reson Med 52, 1358-1372. 6. Descoteaux, M., Angelino, E., Fitzgibbons, S., Deriche, R., 2007. Regularized, fast, and robust analytical Q-ball imaging. Magn Reson Med 58, 497-510. 7. Aganj, I., Lenglet, C., Sapiro, G., 2009. ODF reconstruction in q-ball imaging with solid angle consideration. Proceedings of the Sixth IEEE International Symposium on Biomedical Imaging Boston, MA. 8. Goh, A., Lenglet, C., Thompson, P.M., Vidal, R., 2009. Estimating Orientation Distribution Functions with Probability Density Constraints and Spatial Regularity. Med Image Comput Comput Assist Interv Int Conf Med Image Comput Comput Assist Interv LNCS 5761, 877 ff. \section QmitkDiffusionImagingUserManualTechnicalDetail Technical Information for Developers The diffusion imaging module uses additional properties beside the ones in use in other modules, for further information see \ref DiffusionImagingPropertiesPage . \section QmitkDiffusionImagingUserManualSubManuals Manuals of componentes The MITK Diffusion tools consist of further components, which have their own documentation, see: \li \subpage org_mitk_views_fiberprocessing \li \subpage org_mitk_views_gibbstracking \li \subpage org_mitk_views_odfdetails \li \subpage org_mitk_views_partialvolumeanalysisview \li \subpage org_mitk_views_screenshotmaker \li \subpage org_mitk_views_stochasticfibertracking \li \subpage org_mitk_views_ivim \li \subpage org_mitk_views_brainnetworkanalysis \li \subpage org_mitk_views_tractbasedspatialstatistics */ diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/ColorImageProcessing.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/ColorImageProcessing.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/ColorImageProcessing.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/ColorImageProcessing.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/IsoSurfaceGUI.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/IsoSurfaceGUI.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/IsoSurfaceGUI.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/IsoSurfaceGUI.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/IsoSurfaceIcon.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/IsoSurfaceIcon.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/IsoSurfaceIcon.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/IsoSurfaceIcon.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/MITKExamples.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/MITKExamples.dox similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/MITKExamples.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/MITKExamples.dox diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkColourImageProcessing.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkColourImageProcessing.dox similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkColourImageProcessing.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkColourImageProcessing.dox diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkIsoSurfaceUserManual.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkIsoSurfaceUserManual.dox similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkIsoSurfaceUserManual.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkIsoSurfaceUserManual.dox diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkRegionGrowingUserManual.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkRegionGrowingUserManual.dox similarity index 71% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkRegionGrowingUserManual.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkRegionGrowingUserManual.dox index 97360b23ea..2b1f8a2467 100644 --- a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkRegionGrowingUserManual.dox +++ b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkRegionGrowingUserManual.dox @@ -1,29 +1,29 @@ /** -\page org_mitk_views_regiongrowing The Region Growing Module +\page org_mitk_views_regiongrowing The Region Growing View -\image html regiongrowing.png "Icon of the Module" +\image html regiongrowing.png "Icon of the View" Available documentation sections: - \ref QmitkRegionGrowingUserManualOverview - \ref QmitkRegionGrowingUserManualUsage \section QmitkRegionGrowingUserManualOverview Overview -The Region growing module provides a programming example, showing developers how to create new bundles for MITK with a graphical user interface (GUI) that also uses some ITK image filters. +The Region growing view provides a programming example, showing developers how to create new views for MITK with a graphical user interface (GUI) that also uses some ITK image filters. For the programmers: this functionality is the result of tutorial step 9 \section QmitkRegionGrowingUserManualUsage Usage
  • you can set a number of seed points by clicking into the render windows while holding down the shift key.
  • when clicking "Start region growing", a region growing algorithm starts. This algorithm is gray values based. The gray values are determined from the gray values at all point positions plus/minus a safety margin of 30 (Hounsfield units).
*/ diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkSimpleExampleUserManual.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkSimpleExampleUserManual.dox similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkSimpleExampleUserManual.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkSimpleExampleUserManual.dox diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkSimpleMeasurementUserManual.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkSimpleMeasurementUserManual.dox similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/QmitkSimpleMeasurementUserManual.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/QmitkSimpleMeasurementUserManual.dox diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/SimpleExample.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/SimpleExample.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/SimpleExample.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/SimpleExample.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/SimpleMeasurementGUI.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/SimpleMeasurementGUI.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/SimpleMeasurementGUI.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/SimpleMeasurementGUI.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/SimpleMeasurementIcon.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/SimpleMeasurementIcon.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/SimpleMeasurementIcon.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/SimpleMeasurementIcon.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/org_mitk_gui_qt_viewinitialization.dox b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/org_mitk_gui_qt_viewinitialization.dox similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/org_mitk_gui_qt_viewinitialization.dox rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/org_mitk_gui_qt_viewinitialization.dox diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/regiongrowing.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/regiongrowing.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/regiongrowing.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/regiongrowing.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/regiongrowing.xpm b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/regiongrowing.xpm similarity index 95% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/regiongrowing.xpm rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/regiongrowing.xpm index 45304646ee..5ba3fbe102 100644 --- a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/regiongrowing.xpm +++ b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/regiongrowing.xpm @@ -1,53 +1,53 @@ -/* XPM */ -static const char * icon_xpm[] = { -"28 26 24 1", -" c None", -". c #000000", -"+ c #639A31", -"@ c #316500", -"# c #6B9A31", -"$ c #94CF63", -"% c #396500", -"& c #9CCB6B", -"* c #94CB63", -"= c #9CCB63", -"- c #6B9639", -"; c #316900", -"> c #949A94", -", c #9C969C", -"' c #6B656B", -") c #CECBCE", -"! c #9C9A9C", -"~ c #393039", -"{ c #313431", -"] c #C6CFC6", -"^ c #636963", -"/ c #636563", -"( c #9C6500", -"_ c #946500", -" .. ", -" .+@. ", -" .#$%. ", -" .&+. .... ", -" .+. .+&*@. ", -" . .=$#+%. ", -" .$.... ", -" . ", -" ............ ", -" ..+*&=+&++-+++.. ", -" .=-;%;@%@%;@@%;-+. ... ", -" .+@@@@%;@;%;%;@@&+. .++-. ", -" .%@-+=&+-++#++-*#+. .&+@.", -" .>>@;@;;@;#+%+;@;-. .&%.", -" .,'))>!'>'=+%;'~{+. .;.", -" .>!])'!^!{-+;//{{-@. . ", -" .!'))>!'{~;&@'{/~+@. ", -" .(>>)]'>{{/'@/{'{{+%. ", -"._{{{{{{~{,'^'/'/{~@@. ", -" .(,>))/>/!//^'^{'{.. ", -" .>/])>,/>'/'/~^{{. ", -" .!,>>'>'>/^/^'/~{./^ ", -" .{{!'!!'>''''/~{{.''//'/ ", -" /..{{~{{~{{{{{{../^^/'^'' ", -" ^/............'^/''^'// ", -" /'^'/^'//^//'// "}; +/* XPM */ +static const char * icon_xpm[] = { +"28 26 24 1", +" c None", +". c #000000", +"+ c #639A31", +"@ c #316500", +"# c #6B9A31", +"$ c #94CF63", +"% c #396500", +"& c #9CCB6B", +"* c #94CB63", +"= c #9CCB63", +"- c #6B9639", +"; c #316900", +"> c #949A94", +", c #9C969C", +"' c #6B656B", +") c #CECBCE", +"! c #9C9A9C", +"~ c #393039", +"{ c #313431", +"] c #C6CFC6", +"^ c #636963", +"/ c #636563", +"( c #9C6500", +"_ c #946500", +" .. ", +" .+@. ", +" .#$%. ", +" .&+. .... ", +" .+. .+&*@. ", +" . .=$#+%. ", +" .$.... ", +" . ", +" ............ ", +" ..+*&=+&++-+++.. ", +" .=-;%;@%@%;@@%;-+. ... ", +" .+@@@@%;@;%;%;@@&+. .++-. ", +" .%@-+=&+-++#++-*#+. .&+@.", +" .>>@;@;;@;#+%+;@;-. .&%.", +" .,'))>!'>'=+%;'~{+. .;.", +" .>!])'!^!{-+;//{{-@. . ", +" .!'))>!'{~;&@'{/~+@. ", +" .(>>)]'>{{/'@/{'{{+%. ", +"._{{{{{{~{,'^'/'/{~@@. ", +" .(,>))/>/!//^'^{'{.. ", +" .>/])>,/>'/'/~^{{. ", +" .!,>>'>'>/^/^'/~{./^ ", +" .{{!'!!'>''''/~{{.''//'/ ", +" /..{{~{{~{{{{{{../^^/'^'' ", +" ^/............'^/''^'// ", +" /'^'/^'//^//'// "}; diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/viewInitializationIcon.png b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/viewInitializationIcon.png similarity index 100% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/viewInitializationIcon.png rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/viewInitializationIcon.png diff --git a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/viewInitializationIcon.xpm b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/viewInitializationIcon.xpm similarity index 93% rename from Plugins/org.mitk.gui.qt.examples/documentation/Manual/viewInitializationIcon.xpm rename to Plugins/org.mitk.gui.qt.examples/documentation/UserManual/viewInitializationIcon.xpm index 819882324c..11ccbcc699 100644 --- a/Plugins/org.mitk.gui.qt.examples/documentation/Manual/viewInitializationIcon.xpm +++ b/Plugins/org.mitk.gui.qt.examples/documentation/UserManual/viewInitializationIcon.xpm @@ -1,17 +1,17 @@ -/* XPM */ -static const char * icon_xpm[] = { -"11 11 3 1", -" c None", -". c #CBCBCB", -"+ c #404040", -"+++++++++++", -"+..+...+..+", -"+++++++++++", -"+..+...+..+", -"+..+...+..+", -"+++++++++++", -"+..+...+..+", -"+..+...+..+", -"+++++++++++", -"+..+...+..+", -"+++++++++++"}; +/* XPM */ +static const char * icon_xpm[] = { +"11 11 3 1", +" c None", +". c #CBCBCB", +"+ c #404040", +"+++++++++++", +"+..+...+..+", +"+++++++++++", +"+..+...+..+", +"+..+...+..+", +"+++++++++++", +"+..+...+..+", +"+..+...+..+", +"+++++++++++", +"+..+...+..+", +"+++++++++++"}; diff --git a/Plugins/org.mitk.gui.qt.igtexamples/documentation/UserManual/Manual.dox b/Plugins/org.mitk.gui.qt.igtexamples/documentation/UserManual/Manual.dox index 116b47b88d..d80a8bc5dc 100644 --- a/Plugins/org.mitk.gui.qt.igtexamples/documentation/UserManual/Manual.dox +++ b/Plugins/org.mitk.gui.qt.igtexamples/documentation/UserManual/Manual.dox @@ -1,12 +1,12 @@ /** \page org_mitk_gui_qt_igtexample IGT Examples -This bundle includes views with examples and help applications for IGT. The different views are described on the pages below: +This plugin includes views with examples and help applications for IGT. The different views are described on the pages below:
  • \subpage org_igttrackinglab
  • \subpage org_imageguidedtherapytutorial
*/ diff --git a/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/Manual.dox b/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/Manual.dox index 6ac68844cb..08bbb387ff 100644 --- a/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/Manual.dox +++ b/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/Manual.dox @@ -1,15 +1,15 @@ /** \page org_mitk_gui_qt_igttracking IGT Tracking -This bundle offers basic tracking functionalities. This includes connecting to a tracking system, logging and recording of tracking data, managing tracking tools and playing recorded tracking data. +This plugin offers basic tracking functionalities. This includes connecting to a tracking system, logging and recording of tracking data, managing tracking tools and playing recorded tracking data. -The bundle includes different views, which are described in different pages in detail: +The plugin includes different views, which are described in different pages in detail:
  • \subpage org_mitk_views_igttrackingtoolbox : Allows for connecting to a tracking system and logging/recording of the tracked data.
  • \subpage org_mitk_views_igtnavigationtoolmanager : Navigation Tool Manager: This view offers functionality to manage tool storages. Each tool storage holds a preconfigured tool collection. Once saved you can load a tool storage in the Tracking Toolbox and don't need to add every tool seperately.
  • \subpage org_mitk_views_navigationdataplayer : Navigation Data Player: Plays navigation data which was recorded with the Tracking Toolbox for example.
*/ diff --git a/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTNavigationToolManager.dox b/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTNavigationToolManager.dox index 2253f1917f..0068963460 100644 --- a/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTNavigationToolManager.dox +++ b/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTNavigationToolManager.dox @@ -1,47 +1,47 @@ /** \page org_mitk_views_igtnavigationtoolmanager The MITK-IGT Navigation Tool Manager \image html iconNavigationToolManager.png "Icon of the Module" \section QmitkMITKIGTNavigationToolManager Introduction -This bundle allows for creating and editing NavigationToolStorages. These storages contains naviagtion tools of a tracking device, can be saved permanently and used later for any other IGT application. +This view allows for creating and editing NavigationToolStorages. These storages contains naviagtion tools of a tracking device, can be saved permanently and used later for any other IGT application. Available sections: - \ref QmitkMITKIGTNavigationToolManager - \ref QmitkMITKIGTNavigationToolManagerToolOverview - \ref QmitkMITKIGTNavigationToolManagerManagingNavigationToolStorage - \ref QmitkMITKIGTNavigationToolManagerAddingEditingNavigationTools \section QmitkMITKIGTNavigationToolManagerToolOverview Navigation Tools Overview A navigation tool of MITK-IGT represents a tracking tool (e.g. an emt sensor or an optically tracked tool) and it's corresponding data, like it's name and it's surface. A navigation tool is a generalized container for any trackable object in combination with it's additional information. Every navigation tool has different properties which are:
  • Name
  • Unique identifier
  • Tool definition file
  • Serial number
  • Surface for visualization
  • Type of tracking device
  • Type of the tool
-Note that not all properties are needed for all types of tools. A tool definition file, for example, is only needed by optical tracking tools (e.g. a .rom file for Polaris or a toolfile for the MicronTracker). A tool associated with the aurora system is alwalys identified by it's serial number. You can also detect Aurora tools automatically with the TrackingToolbox bundle and edit the automatically detected tool storage later with this bundle. +Note that not all properties are needed for all types of tools. A tool definition file, for example, is only needed by optical tracking tools (e.g. a .rom file for Polaris or a toolfile for the MicronTracker). A tool associated with the aurora system is alwalys identified by it's serial number. You can also detect Aurora tools automatically with the TrackingToolbox view and edit the automatically detected tool storage later with this view. \section QmitkMITKIGTNavigationToolManagerManagingNavigationToolStorage Managing Navigation Tool Storage In order to create a new storage container, or edit an existing one, you can use the buttons "add", "edit" and "delete" to manage the contained navigation tools. If you click "edit" or "delete" the operation is applied on the currently selected tool, as shown in the screenshot below. If you want to create a new storage container, just start adding tools when you start the program and save the storage container. To edit an existing tool storage container click "load" and add/edit/delete tools. \image html NavigationToolManagemantStartScreen.png "Screenshot of the main view of NavigationToolManagent" \section QmitkMITKIGTNavigationToolManagerAddingEditingNavigationTools Adding / Editing Navigation Tools If you add or edit a navigation tool, an input mask, as shown in the screenshot below, appears. The tool identifier is filled automatically, if you change it, remember that it is unique in the current storage. Also, choose a valid surface for every tool, this is nessesary for correct tool visualization. The other information depends on the tracking system type. So choose a tool file for the Polaris or the MicronTracker system and type in a serial number for the Aurora system. Two identical tools with the same serial number are also possible, they are assigned by the order in which they are attached to the device. As long as they also have the same surface, this should not be a problem. The tool type is additional information which is not needed by the tracking device but might be needed by further IGT applications. \image html NavigationToolManagementAddTool.png "Screenshot of add/edit navigation tool screen" */ \ No newline at end of file diff --git a/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTTrackingToolbox.dox b/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTTrackingToolbox.dox index c6d911fe51..0d1c66231c 100644 --- a/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTTrackingToolbox.dox +++ b/Plugins/org.mitk.gui.qt.igttracking/documentation/UserManual/QmitkMITKIGTTrackingToolbox.dox @@ -1,64 +1,64 @@ /** \page org_mitk_views_igttrackingtoolbox The MITK-IGT Tracking Toolbox \image html iconTrackingToolbox.png "Icon of the module" Available sections: - \ref QmitkMITKIGTTrackingToolboxIntroduction - \ref QmitkMITKIGTTrackingToolboxWorkflow - \ref QmitkMITKIGTTrackingToolboxConnecting - \ref QmitkMITKIGTTrackingToolboxLoadingTools - \ref QmitkMITKIGTTrackingToolboxAutoDetection - \ref QmitkMITKIGTTrackingToolboxStartTracking - \ref QmitkMITKIGTTrackingToolboxLogging - \ref QmitkMITKIGTTrackingOptions \section QmitkMITKIGTTrackingToolboxIntroduction Introduction -The MITK-IGT Tracking Toolbox is a bundle which allows you to connect to a tracking device, track and visualize navigation tools and write the tracked data into a log file. Currently the devices Polaris, Aurora (both Northern Digital Inc. (NDI); Waterloo, Ontario, Canada) and MicronTracker (Claron Technology, Inc.; Toronto, Ontario, Canada) are supported. The MicroBird family (Ascension Technology Corporation, Inc.; Burlington, USA) will hopefully follow soon since it is already supported by the tracking layer of IGT. The logging feature of the Tracking Toolbox supports logging in XML or CSV format. +The MITK-IGT Tracking Toolbox is a view which allows you to connect to a tracking device, track and visualize navigation tools and write the tracked data into a log file. Currently the devices Polaris, Aurora (both Northern Digital Inc. (NDI); Waterloo, Ontario, Canada) and MicronTracker (Claron Technology, Inc.; Toronto, Ontario, Canada) are supported. The MicroBird family (Ascension Technology Corporation, Inc.; Burlington, USA) will hopefully follow soon since it is already supported by the tracking layer of IGT. The logging feature of the Tracking Toolbox supports logging in XML or CSV format. \image html screenshot_mitk.png "MITK Screenshot with the TrackingToolbox activated" \section QmitkMITKIGTTrackingToolboxWorkflow General workflow Introduction A general Workflow with the Tracking Toolbox may be:
  • Configuration of a tracking device
  • Loading a toolfile which holds tool definitions
  • Start tracking
  • Logging tracked data
\section QmitkMITKIGTTrackingToolboxConnecting Tracking Device Configuration The tracking device can be specified in the tracking device configuration section located in the upper area of the tracking tab. As shown in the screenshot below, you choose your tracking device in the drop down menu. If you use a tracking system connected to a serial port, like Aurora or Polaris, you then need to specifiy the serial port. In case of the MicronTracker you only need to ensure that all drivers are installed correctly and integrated into MITK. If you want to check the connection, press "test connection". The results are displayed in the small black box on the right. \image html configurationWidget.png "Tracking Device Configuration" \section QmitkMITKIGTTrackingToolboxLoadingTools Loading tools -To load tools which can be tracked you need a predefined tracking tool storage. If you use the Aurora system you also have the possibility to automatically detect the connected tools. In this case a tracking tool storage is created by the software (see section below). Otherwise you can use the MITK bundle NavigationToolManager to define a navigation tool storage. There you can create navigation tools with the corresponding toolfiles, visualization surfaces and so on. Please see NavigationToolManager manual for more details. +To load tools which can be tracked you need a predefined tracking tool storage. If you use the Aurora system you also have the possibility to automatically detect the connected tools. In this case a tracking tool storage is created by the software (see section below). Otherwise you can use the MITK view NavigationToolManager to define a navigation tool storage. There you can create navigation tools with the corresponding toolfiles, visualization surfaces and so on. Please see NavigationToolManager manual for more details. Navigation tool storages can be loaded by pressing the button "Load Tools". Please ensure that the tracking device type of the tools matches the chosen tracking device, otherwise you will get an error message if you try to start tracking. All loaded tools will then be displayed in grey as shown in the screenshot below. If you start tracking they will become green if the tools were found and red if they were not found inside the tracking volume. \image html trackingToolsWidget.png "Tracking Tools" \section QmitkMITKIGTTrackingToolboxAutoDetection Auto detection of tools (only Aurora) If the Aurora tracking system is used, a button "Auto Detection" appears. If you press this button the software connects to the system and automatically detects all connected tools. You will then be asked whether you want to save the detected tools as a tool storage to the hard drive. You might want to do this if you want to use or modify this tool storage later. In the automatically detected tool storage the tools are named AutoDetectedTools1, AutoDetectedTools2, and so on. Small spheres are used as tool surfaces. After autodetection the detected tools are loaded automatically even if you did not save them. \section QmitkMITKIGTTrackingToolboxStartTracking Start/stop tracking Tracking can simply be started by pressing "Start Tracking". Note that options may not be changed during tracking. Once tracking has started the tracking volume (only if the option is on) and the tools are visualized in the 3D view of MITK. \section QmitkMITKIGTTrackingToolboxLogging Logging features If your device is tracking, you are able to log the tracking data by using the logging tab. You first must define a file name. You can then choose whether you want comma seperated (csv) or xml format. Press "Start Logging" to start logging. You can also limit the number of logged frames, which will cause the logging to stop automatically after the given number. \section QmitkMITKIGTTrackingOptions Options In the options tab you can enable or disable the visualization of the tracking volume and of the tool quaternions. If enabled, the tool quaternions are shown in the tool information. You can also define the update rate of the tracking data. The update rate should not be set higher than the update rate of the tracking system. */ \ No newline at end of file diff --git a/Plugins/org.mitk.gui.qt.measurementtoolbox/documentation/UserManual/QmitkMeasurement.dox b/Plugins/org.mitk.gui.qt.measurementtoolbox/documentation/UserManual/QmitkMeasurement.dox index 451a2e169f..c990dbef5a 100644 --- a/Plugins/org.mitk.gui.qt.measurementtoolbox/documentation/UserManual/QmitkMeasurement.dox +++ b/Plugins/org.mitk.gui.qt.measurementtoolbox/documentation/UserManual/QmitkMeasurement.dox @@ -1,134 +1,134 @@ /** \page org_mitk_views_measurement The Measurement View \image html Measurement_48.png "Icon of the View" \section QmitkMeasurementUserManualOverview Overview The Measurement view enables the user to interact with 2D images or single slices of 3D image stacks and planar figure data types. It allows to measure distances, angels, pathes and several geometric figures on a dataset. Available Sections: - \ref QmitkMeasurementUserManualOverview - \ref QmitkMeasurementUserManualFeatures - \ref SubOne - \ref SubTwo - \ref SubThree - \ref SubFour - \ref SubFive - \ref SubSix - \ref SubSeven - \ref QmitkMeasurementUserManualUsage - \ref One - \ref Two - \ref Three - \ref Four The workflow to use this view is: \image html Workflow.png -The workflow is repeatedly useable with the same or different measurement figures, which are correlated to the choosen image and can be saved together with it for future use. On pressing the Measurement icon (see picture below the page title) in the view button line the basic appearance of the bundle is as follws. +The workflow is repeatedly useable with the same or different measurement figures, which are correlated to the choosen image and can be saved together with it for future use. On pressing the Measurement icon (see picture below the page title) in the view button line the basic appearance of the view is as follws. \image html Basic_Screen_edited.JPG -The standard working plane is "Axial" but the other standard viewplanes ("Saggital" and "Coronal") are also valid for measurements. To swap between the view planes refer to 3M Application Bundle User Manual. +The standard working plane is "Axial" but the other standard viewplanes ("Saggital" and "Coronal") are also valid for measurements. To swap between the view planes refer to the application user manual. \section QmitkMeasurementUserManualFeatures Features -The bundle as it is depicted below offers the following features in the order of apperance on the image from top to bottom: +The view as it is depicted below offers the following features in the order of apperance on the image from top to bottom: \image html Measurement_View.JPG The first information is the selected image's name (here: DICOM-MRI-Image) followed by the measurement figures button line with the seven measurement figures. From left to right the buttons are connected with the following functions: \subsection SubOne Draw Line Draws a line between two set points and returns the distance between these points. \subsection SubTwo Draw Path Draws a path between several set points (two and more) and calculates the circumference, that is all line's length summed up. Add the final point by double left click. \subsection SubThree Draw Angle Draws two lines from three set points connected in the second set point and returns the inner angle at the second point. \subsection SubFour Draw Four Point Angle Draws two lines that may but must not intersect from four set points. The returned angle is the one depicted in the icon. \subsection SubFive Draw Circle Draws a circle by setting two points, whereas the first set point is the center and the second the radius of the circle. The measured values are the radius and the included area. \subsection SubSix Draw Rectangle Draws a rectangle by setting two points at the opposing edges of the rectangle starting with the upper left edge. The measured values are the circumference and the included area. \subsection SubSeven Draw Polygon Draws a polygon by setting three or more points. The measured values are the circumference and the included area. Add the final point by double left click. Below the buttonline the statistics window is situated, it displays the results of the actual measurements from the selected measurement figures. The content of the statistics window can be copied to the clipboard with the correspondig button for further use in a table calculation programm (e.g. Open Office Calc etc.). \image html Image_processed.JPG -The last row contains again a button line to swap from the measurement bundle (activated in the image) to other supported MITK 3M3 bundles. +The last row contains again a button line to swap from the measurement perspective (activated in the image) to other supported MITK perspectives. \section QmitkMeasurementUserManualUsage Usage This Section is subdivided into four subsections:
  1. Add an image
  2. Work with measurement figures
  3. Save the image with measurement information
  4. Remove measurement figures or image
Let's start with subsection 1 \subsection One Add an image There are two possible ways to add an image to the programm. One is to grap the image with left mouse click from your prefered file browser and simply drag&drop it to the View Plane field. The other way is to use the \image html OpenButton.png button in the upper left corner of the application. A dialog window appears showing the file tree of the computer. Navigate to the wanted file and select it with the left mouse click. Afterwards just use the dialog's open button. The wanted image appears in the View Plane and in the Data Manager the images name appears as a new tree node. Now the image is loaded it can be adjusted in the usual way ( zoom in/out: right mouse button + moving the mouse up and down, moving the image: press mouse wheel and move the mouse to the wished direction, scroll through the slices( only on 3D images): scroll mouse wheel up and down). \image html Image_Loaded_Screen.JPG After the image is loaded the image's name appears in the Data Manager. By left-clicking on the image name the buttonline becomes activated. \subsection Two Work with measurement figures The measurement view comes with seven measurement figures(see picture below), that can be applied to the images. \image html MeasurementFigureButtonline.jpg The results of the measurement with each of these figures is shown in the statistics window and in the lower right corner of the view plane. \image html Image_processed_Screen.JPG When applying more then one measurement figure to the image the actual measurement figure is depicted in red and the displayed values belong to this measurement figure. All measurement figures become part of the Data Manager as a node of the image tree. \subsection Three Save the image with measurement information After applying the wanted measurement figures the entire scene consisting of the image and the measurement figures can be saved for future use. Therefore just click the right mouse button when over the image item in the Data Manager and choose the item "Save" in the opening item list. Following to that a save dialog appears where the path to the save folder can be set. Afterwards just accept your choice with the save button. \subsection Four Remove measurement figures or image If the single measurement figures or the image is not needed any longer, it can be removed solely or as an entire group. The image can't be removed without simultaneously removing all the dependent measurement figures that belong to the image tree in the Data Manager. To remove just select the wanted items in the data manager list by left-click on it or if several items wanted to be removed left click on all wanted by simultaneously holding the ctrl-button pressed. For more detailed usage of the save/remove functionality refer to the Data Manager User Manual. */ diff --git a/Plugins/org.mitk.gui.qt.segmentation/documentation/UserManual/ToolExtensionsGeneralOverview.dox b/Plugins/org.mitk.gui.qt.segmentation/documentation/UserManual/ToolExtensionsGeneralOverview.dox index a30a965483..910d24fc46 100644 --- a/Plugins/org.mitk.gui.qt.segmentation/documentation/UserManual/ToolExtensionsGeneralOverview.dox +++ b/Plugins/org.mitk.gui.qt.segmentation/documentation/UserManual/ToolExtensionsGeneralOverview.dox @@ -1,181 +1,181 @@ /** -\page toolextensions How to extend the Segmentation bundle with external tools +\page toolextensions How to extend the Segmentation view with external tools
  • \ref ToolExtensionsGeneralOverview2
  • \ref ToolExtensionsGeneralOverview3
    • \ref ToolExtensionsGeneralOverview31
    • \ref ToolExtensionsGeneralOverview32
    • \ref ToolExtensionsGeneralOverview33
  • \ref ToolExtensionsGeneralOverview4
  • \ref ToolExtensionsGeneralOverview5
  • \ref ToolExtensionsGeneralOverview6
\section ToolExtensionsGeneralOverview2 Introduction -The application for manual segmentation in MITK (Segmentation bundle) comes +The application for manual segmentation in MITK (Segmentation view) comes with a tool class framework that is extensible with new tools (description at \ref QmitkSegmentationTechnicalPage). The usual way to create new tools (since it is mostly used inside DKFZ) is to just add new files to the MITK source code tree. However, this requires to be familiar with the MITK build system and turnaround time during development might be long (recompiling parts of MITK again and again). For external users who just want to use MITK as a library and application, there is a way to create new segmentation tools in an MITK external project, which will compile the new tools into a shared object (DLL). Such shared objects can be loaded via the ITK object factory and its autoload feature on application startup. This document describes how to build such external extensions. Example files can be found in the MITK source code in the directory ${MITK_SOURCE_DIR}/QApplications/ToolExtensionsExample/. \section ToolExtensionsGeneralOverview3 What might be part of an extension The extension concept assumes that you want to create one or several new interactive segmentation tools for Segmentation or another MITK functionality that uses the tools infrastructure. In the result you will create a shared object (DLL), which contains several tools and their GUI counterparts, plus optional code that your extension requires. The following sections shortly describe each of these parts. \subsection ToolExtensionsGeneralOverview31 Tool classes A tool is basically any subclass of mitk::Tool. Tools are created at runtime through the ITK object factory (so they inherit from itk::Object). Tools should handle the interaction part of a segmentation method, i.e. create seed points, draw contours, etc., in order to parameterize segmentation algorithms. Simple algorithms can even be part of a tool. A tools is identified by icon (XPM format), name (short string) and optionally a group name (e.g. the group name for Segmentation is "default"). There is a naming convention: you should put a tool called \c mitk::ExternalTool into files called \c mitkExternalTool.h and \c mitkExternalTool.cpp. This is \e required if you use the convenience macros described below, because there need to be ITK factories, which names are directly derived from the file names of the tools. For the example of mitk::ExternalTool there would be a factory called \c mitk::ExternalToolFactory in a file named \c mitkExternalToolFactory.cpp. \subsection ToolExtensionsGeneralOverview32 GUI classes for tools Tools are non-graphical classes that only implement interactions in renderwindows. However, some tools will need a means to allow the user to set some parameters -- a graphical user interface, GUI. In the Qt3 case, tool GUIs inherit from QmitkToolGUI, which is a mixture of QWidget and itk::Object. Tool GUIs are also created through the ITK object factory. Tools inform their GUIs about state changes by messages. Tool GUIs communicate with their associated tools via direct method calls (they know their tools). See mitk::BinaryThresholdTool for examples. Again a naming convention: if the convenience macros for tool extension shared objects are used, you have to put a tool GUI called \c QmitkExternalToolGUI into a files named \c QmitkExternalToolGUI.cpp and \c QmitkExternalToolGUI.h. The convenience macro will create a factory called \c QmitkExternalToolGUIFactory into a file named \c QmitkExternalToolGUIFactory.cpp. \subsection ToolExtensionsGeneralOverview33 Additional files If you are writing tools MITK externally, these tools might depend on additional files, e.g. segmentation algorithms. These can also be compiled into a tool extension shared object. \section ToolExtensionsGeneralOverview4 Writing a CMake file for a tool extension Summing up the last section, an example tool extension could comprise the following files: \verbatim mitkExternalTool.h \ mitkExternalTool.xpm >--- implementing mitk::ExternalTool (header, icon, implementation) mitkExternalTool.cpp / QmitkExternalToolGUI.h ,-- implementing a GUI for mitk::ExternalTool QmitkExternalToolGUI.cpp / externalalgorithm.h \ externalalgorithm.cpp \ externalalgorithmsolver.h >-- a couple of files (not related to MITK tools) externalalgorithmsolver.cpp / \endverbatim This should all be compiled into one shared object. Just like ITK, VTK and MITK we will use CMake for this purpose (I assume you either know or are willing to learn about www.cmake.org) A CMake file for the above example would look like this: \code project( ExternalTool ) find_package(ITK) find_package(MITK) find_package(Qt3) add_definitions(${QT_DEFINITIONS}) set( TOOL_QT3GUI_FILES QmitkExternalToolGUI.cpp ) set( TOOL_FILES mitkExternalTool.cpp ) set( TOOL_ADDITIONAL_CPPS externalalgorithm.cpp externalalgorithmsolver.cpp ) set( TOOL_ADDITIONAL_MOC_H ) MITK_GENERATE_TOOLS_LIBRARY(mitkExternalTools) \endcode Basically, you only have to change the definitions of \c TOOL_FILES and, optionally, \c TOOL_QT3GUI_FILES, \c TOOL_ADDITIONAL_CPPS and \c TOOL_ADDITIONAL_MOC_H. For all .cpp files in \c TOOL_FILES and \c TOOL_QT3GUI_FILES there will be factories created assuming the naming conventions described in the sections above. Files listed in \c TOOL_ADDITIONAL_CPPS will just be compiled. Files listed in \c TOOL_ADDITIONAL_MOC_H will be run through Qts meta object compiler \c moc -- this is neccessary for all objects that have the Q_OBJECT macro in their declaration. \c moc will create new files that will also be compiled into the library. \section ToolExtensionsGeneralOverview5 Compiling the extension For compiling a tool extension, you will need a compiled version of MITK. We will assume MITK was compiled into /home/user/mitk/debug. You need to build MITK with BUILD_SHARED_CORE turned on! You build the tool extension just like any other CMake based project: \li know where your source code is (e.g. /home/user/mitk/tool-extension-src) \li change into the directory, where you want to compile the shared object (e.g. /home/user/mitk/tool-extension-debug) \li invoke cmake: ccmake /home/user/mitk/tool-extension-src \li configure (press c or the "configure" button) \li set the ITK_DIR variable to the directory, where you compiled ITK \li set the MITK_DIR variable to the directory, where you compiled MITK: /home/user/mitk/debug \li configure (press "c" or the "configure" button) \li generate (press "g" or the "generate" button) This should do it and leave you with a or project file or Makefile that you can compile (using make or VisualStudio). \section ToolExtensionsGeneralOverview6 Configuring ITK autoload If the compile succeeds, you will get a library mitkExternalTools.dll or libmitkExternalTools.so. This library exports a symbol \c itkLoad which is expected by the ITK object factory. On application startup the ITK object factory will search a list of directories from the environment variable \c ITK_AUTOLOAD_PATH. Set this environment variable to your binary directory (/home/user/mitk/tool-extension-debug). The ITK object factory will load all shared objects that it finds in the specified directories and will test if they contain a symbol (function pointer) \c itkLoad, which is expected to return a pointer to a itk::ObjectFactoryBase instance. If such a symbol is found, the returned factory will be registered with the ITK object factory. If you successfully followed all the steps above, MITK will find your mitk::ExternalTool on application startup, when the ITK object factory is asked to create all known instances of mitk::Tool. Furthermore, if your mitk::ExternalTool claims to be part of the "default" group, there will be a new icon in Segmentation, which activates your tool. Have fun! (And Windows users: welcome to the world of DLLs) **/