diff --git a/Core/Documentation/Doxygen/Concepts/Concepts.dox b/Core/Documentation/Doxygen/Concepts/Concepts.dox index 4caf8cec74..b371c3596e 100644 --- a/Core/Documentation/Doxygen/Concepts/Concepts.dox +++ b/Core/Documentation/Doxygen/Concepts/Concepts.dox @@ -1,17 +1,29 @@ /** \page Concepts MITK concepts The following items describe some issues about MITK on a more abstract level. -If you want to start using MITK, you also want to see \ref Development +-# \subpage OverviewPage +-# Coding Concepts + -# General (Todo) + -# Coding Style (Todo) + -# Using Macros (Todo) + -# \subpage MicroServices_Overview +-# Data Concepts + -# Data Storage (Todo) + -# \subpage PropertiesPage + -# \subpage GeometryOverviewPage +-# \subpage QVTKRendering +-# \subpage InteractionPage +-# \subpage LoggingPage +-# \subpage ExceptionPage +-# Testing Concept + -# \subpage GeneralTests + -# \subpage RenderingTests +-# Application Concept + -# General: MITK Applications (Todo) + -# Plug-Ins (Todo) + -# Perspective Concept (Todo) -\li \subpage OverviewPage -\li \subpage QVTKRendering -\li \subpage InteractionPage -\li \subpage ExceptionPage -\li \subpage LoggingPage -\li \subpage PropertiesPage -\li \subpage GeometryOverviewPage -\li \subpage MicroServices_Overview -\li \subpage RenderingTests +If you want to start using MITK, you also want to see the chapter \ref Development. */ diff --git a/Core/Documentation/Doxygen/Concepts/Overview.dox b/Core/Documentation/Doxygen/Concepts/Overview.dox index 1891b083fb..8612b907fe 100644 --- a/Core/Documentation/Doxygen/Concepts/Overview.dox +++ b/Core/Documentation/Doxygen/Concepts/Overview.dox @@ -1,52 +1,52 @@ /** -\page OverviewPage Overview on the Medical Imaging Interaction Toolkit (MITK) +\page OverviewPage Introduction: Overview on the Medical Imaging Interaction Toolkit (MITK) Four issues are important for advanced interactive medical imaging software: Today, there are two major open-source toolkits for visualization and image processing: ITK provides powerful algorithms, but is not designed for visualization or interaction. VTK has powerful visualization capabilities, but only low-level support for interaction such as picking methods, rotation, movement and scaling of objects. Support for high level interactions with data as, for example, the interactive construction and modification of deformable models, and undo-capabilities is outside the scope of VTK. Furthermore, it is designed to create \em one \em kind of view on the data. There is no special assistance to realized multiple, different views of the data (as a multiplanar reconstruction and a 3D rendering). Finally, VTK supports only 2D and 3D data, not 3D+t data, which are required for some medical applications, and there is currently no convenient possibility to combine VTK with ITK. The aim of MITK is to use VTK and ITK, allow an easy combination of both and extend them with those features, which are outside the scope of both. \section OverviewPage_DesignOverview Design Overview The basic design concept of MITK is model-view-controller (MVC). Although some people think MVC is out-of-date, it is useful in this case (and also we do not really use pure MVC): we have data (\em model), on which we want to have different @em views and we want to interact with the data (\em controller), which should result in a simultaneous and consistent update of all views. ... */ diff --git a/Core/Documentation/Doxygen/Concepts/Properties.dox b/Core/Documentation/Doxygen/Concepts/Properties.dox index 1a9cb7236d..e0cba92da5 100644 --- a/Core/Documentation/Doxygen/Concepts/Properties.dox +++ b/Core/Documentation/Doxygen/Concepts/Properties.dox @@ -1,226 +1,226 @@ /** -\page PropertiesPage The MITK Property Concept +\page PropertiesPage Properties \section PropertyConcept The Concept Behind MITK Properties Properties belong to a datanode and contain information relevant to the handling of the node by MITK. They provide a place to store additional information which is not part of the actual data, and as such have no reason to be contained within the data/file itself, but might be needed for such things as rendering (e.g. transfer functions) or interaction (e.g. the name of the node). Propteries can be read an set: \code mitk::ColorProperty::Pointer colorProperty = dynamic_cast(node->GetProperty("color")); node->SetProperty( "IsTensorVolume", mitk::BoolProperty::New( true ) ); \endcode \section ListOfIndependentProperty A List Of Module Independent Properties \subsection FileManagement File Management \subsection GenericRenderingProperty Generic Rendering Properties \subsection SurfaceRenderingProperties Surface Rendering Properties \subsection VolumeRenderingProperties Volume Rendering Properties \remark Uselod can be active with usegpu, usemip, useray, but any of the latter can not be used with another one of them. \subsection PointSetProperties Point Set Properties Information on properties not in this list can be found in the appropriate module. \subsection PropertiesPageSeeAlso See Also */ diff --git a/Core/Documentation/Doxygen/Concepts/QVTKRendering.dox b/Core/Documentation/Doxygen/Concepts/QVTKRendering.dox index 1f1f070925..4529f5c291 100644 --- a/Core/Documentation/Doxygen/Concepts/QVTKRendering.dox +++ b/Core/Documentation/Doxygen/Concepts/QVTKRendering.dox @@ -1,107 +1,107 @@ /** -\page QVTKRendering Rendering in MITK by means of the QT-VTK widget +\page QVTKRendering Rendering Concept -\brief This page describes the MITK rendering mechanism switching to the QTVTK widget. MITK releases with version > 0.8 use this new rendering pipeline. Several changes in contrast to the established old rendering pipeline are explained in the following. +\brief Rendering in MITK by means of the QT-VTK widget. This page describes the MITK rendering mechanism switching to the QTVTK widget. MITK releases with version > 0.8 use this new rendering pipeline. Several changes in contrast to the established old rendering pipeline are explained in the following. \section QVTKRendering_Pipeline_VTK VTK Rendering Pipeline \image html RenderingOverviewVTK.png "Rendering in VTK" \li In VTK, the vtkRenderWindow coordinates the rendering process. Several vtkRenderers may be associated to one vtkRenderWindow. \li All visible objects, which can exist in a rendered scene (2D and 3D scene), inherit from vtkProp. \li A vtkPropAssembly is an assembly of several vtkProps, which appears like one single vtkProp. \li MITK uses a new interface class, the "vtkMitkRenderProp", which is inherited from vtkProp. Similar to a vtkPropAssembly, all MITK rendering stuff is performed via this interface class. \li Thus, the MITK rendering process is completely integrated into the VTK rendering pipeline. From VTK point of view, MITK renders like a custom vtkProp object. More information about the VTK rendering pipeline can be found at http://www.vtk.org and in the several VTK books. \section QVTKRendering_Pipeline_MITK MITK Rendering Pipeline In contrast to the former MITK rendering pipeline, the new process is tightly connected to VTK, which makes it straight forward and simple. In consequence, several MITK classes have been dropped out: \li Qmitk::SelectableGLWidget and all inheritors \li mitk::RenderWindow \li mitk::VtkRenderWindow and all inheritors \li mitk::OpenGLRenderer \li mitk::SimpleTextRendering Instead, we use the above mentioned "vtkMitkRenderProp" in conjunction with a new mitk::VtkPropRenderer for integration into the VTK pipeline. Also, the QmitkRenderWindow does not inherit from mitk::RenderWindow, but from the QVTKWidget, which is provided by VTK. The main classes of the MITK rendering process can be illustrated like this: \image html qVtkRenderingClassOverview.png "Rendering in MITK" A render request to the vtkRenderWindow does not only update the VTK pipeline, but also the MITK pipeline. However, the mitk::RenderingManager still coordinates the rendering update behaviour. Update requests should be sent to the RenderingManager, which then, if needed, will request an update of the overall vtkRenderWindow. The vtkRenderWindow then starts to call the Render() function of all vtkRenderers, which are associated to the vtkRenderWindow. Currently, MITK uses specific vtkRenderers (outside the standard MITK rendering pipeline) for purposes, like displaying a gradient background (mitk::GradientBackground), displaying video sources (QmitkVideoBackround and mitk::VideoSource), or displaying a (department) logo (mitk::ManufacturerLogo), etc. Despite these specific renderers, a kind of "SceneRenderer" is member of each QmitkRenderWindow. This vtkRenderer is associated with the custom vtkMitkRenderProp and is responsible for the MITK rendering. A sequence diagramm, which illustrates the actions after calling the Render() function of the MITK-Scene vtkRenderer is shown below: \image html qVtkRenderingSequence.png "Sequence overview MITK scene rendering" \section QVTKRendering_programmerGuide User Guide: Changes in programming of rendering related stuff \li Within a functionality the vtkRenderWindow can be accessed like this: vtkRenderWindow* vtkRenWin = m_MultiWidget->mitkWidget4->GetRenderWindow(); \li Within a functionality the mitkBaseRenderer can be accessed like this: mitk::BaseRenderer* renderer = mitk::BaseRenderer::GetInstance(m_MultiWidget->mitkWidget4->GetRenderWindow()); \li An update request of the overall QmitkStdMultiWidget can be performed with: m_MultiWidget->RequestUpdate(); \li An update of the overall QmitkStdMultiWidget can be forced with: m_MultiWidget->ForceImmediateUpdate(); \li A single QmitkRenderWindow update request can be done like this: mitk::RenderingManager::GetInstance()->RequestUpdate(m_MultiWidget->mitkWidget4->GetRenderWindow()); \li A single QmitkRenderWindow update can be forced like this: mitk::RenderingManager::GetInstance()->ForceImmediateUpdate(m_MultiWidget->mitkWidget4->GetRenderWindow()); \li Getting a BaseRenderer by the widget name can be done like this: mitk::BaseRenderer::GetByName("mitkWidget1"); \subsection QVTKRendering_distinctRenderWindow Setting up a distinct Rendering-Pipeline It is sometimes desired to have one (or more) QmitkRenderWindows that are managed totally independent of the 'usual' renderwindows defined by the QmitkStdMultiWidget. This may include the data that is rendered as well as possible interactions. In order to achieve this, a set of objects is needed: \li mitk::RenderingManager -> Manages the rendering \li mitk::DataStorage -> Manages the data that is rendered \li mitk::GlobalInteraction -> Manages all interaction \li QmitkRenderWindow -> Actually visualizes the data The actual setup, respectively the connection, of these classes is rather simple: \code // create a new instance of mitk::RenderingManager mitk::RenderingManager::Pointer renderingManager = mitk::RenderingManager::New(); // create new instances of DataStorage and GlobalInteraction mitk::DataStorage::Pointer dataStorage = mitk::DataStorage::New(); mitk::GlobalInteraction::Pointer globalInteraction = mitk::GlobalInteraction::New(); // add both to the RenderingManager renderingManager->SetDataStorage( dataStorage ); renderingManager->SetGlobalInteraction( globalInteraction ); // now create a new QmitkRenderWindow with this renderingManager as parameter QmitkRenderWindow* renderWindow = new QmitkRenderWindow( parent, "name", renderer, renderingManager ); \endcode That is basically all you need to setup your own rendering pipeline. Obviously you have to add all data you want to render to your new DataStorage. If you want to interact with this renderwindow, you will also have to add additional Interactors/Listeners. Note: \li Dynamic casts of a mitk::BaseRenderer class to an OpenGLRenderer (or now, to an VtkPropRenderer) should be avoided. The "MITK Scene" vtkRenderer and the vtkRenderWindow as well, are therefore now included in the mitk::BaseRenderer. */ diff --git a/Core/Documentation/Doxygen/Concepts/TestsGeneral.dox b/Core/Documentation/Doxygen/Concepts/TestsGeneral.dox new file mode 100644 index 0000000000..554920d4f2 --- /dev/null +++ b/Core/Documentation/Doxygen/Concepts/TestsGeneral.dox @@ -0,0 +1,4 @@ +/** +\page GeneralTests General: Tests in MITK +TODO +*/