diff --git a/Modules/SurfaceRegistration/CMakeLists.txt b/Modules/SurfaceRegistration/CMakeLists.txt index 017932dd79..467124a7c8 100644 --- a/Modules/SurfaceRegistration/CMakeLists.txt +++ b/Modules/SurfaceRegistration/CMakeLists.txt @@ -1,3 +1,5 @@ mitk_create_module( SurfaceRegistration + INCLUDE_DIRS PRIVATE src/DataManagement src/Interactions src/IO src/Rendering DEPENDS PUBLIC MitkCore + WARNINGS_AS_ERRORS ) diff --git a/Modules/SurfaceRegistration/files.cmake b/Modules/SurfaceRegistration/files.cmake index 9d45d8dad6..e5c7436b9b 100644 --- a/Modules/SurfaceRegistration/files.cmake +++ b/Modules/SurfaceRegistration/files.cmake @@ -1,9 +1,11 @@ +file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") + set(CPP_FILES - AwesomeImageFilter.cpp - AwesomeImageInteractor.cpp + #mitkShapeComparisonManager.cpp ) set(RESOURCE_FILES Interactions/Paint.xml Interactions/PaintConfig.xml ) + diff --git a/Modules/SurfaceRegistration/include/AwesomeImageFilter.h b/Modules/SurfaceRegistration/include/AwesomeImageFilter.h deleted file mode 100644 index 8cb5750b2e..0000000000 --- a/Modules/SurfaceRegistration/include/AwesomeImageFilter.h +++ /dev/null @@ -1,52 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#ifndef AwesomeImageFilter_h -#define AwesomeImageFilter_h - -#include - -// The following header file is generated by CMake and thus it's located in -// the build directory. It provides an export macro for classes and functions -// that you want to be part of the public interface of your module. -#include - -// While you are free to derive directly from ITK filter base classes, -// MITK filter base classes provide typed accessor methods for the inputs -// and outputs, which will save you and your clients lots of manual casting. -class MITKSURFACEREGISTRATION_EXPORT AwesomeImageFilter final : public mitk::ImageToImageFilter -{ -public: - // All classes that derive from an ITK-based MITK class need at least the - // following two macros. Make sure you don't declare the constructor public - // to force clients of your class to follow the ITK convention for - // instantiating classes via the static New() method. - mitkClassMacro(AwesomeImageFilter, mitk::ImageToImageFilter) - itkFactorylessNewMacro(Self) - - itkSetMacro(Offset, int) - itkGetMacro(Offset, int) - -private: - AwesomeImageFilter(); - ~AwesomeImageFilter(); - - void GenerateData() override; - - int m_Offset; -}; - -#endif diff --git a/Modules/SurfaceRegistration/include/MitkShapeComparisonManager.h b/Modules/SurfaceRegistration/include/MitkShapeComparisonManager.h new file mode 100644 index 0000000000..3a72b9e7fe --- /dev/null +++ b/Modules/SurfaceRegistration/include/MitkShapeComparisonManager.h @@ -0,0 +1,60 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef MitkShapeComparisonManager_h +#define MitkShapeComparisonManager_h + +#include "mitkSurface.h" +#include +#include "mitkDataNode.h" + +#include + +// The following header file is generated by CMake and thus it's located in +// the build directory. It provides an export macro for classes and functions +// that you want to be part of the public interface of your module. +#include + +namespace mitk +{ + // While you are free to derive directly from ITK filter base classes, + // MITK filter base classes provide typed accessor methods for the inputs + // and outputs, which will save you and your clients lots of manual casting. + class MITKSURFACEREGISTRATION_EXPORT ShapeComparisonManager final : public mitk::SurfaceToSurfaceFilter + { + public: + // All classes that derive from an ITK-based MITK class need at least the + // following two macros. Make sure you don't declare the constructor public + // to force clients of your class to follow the ITK convention for + // instantiating classes via the static New() method. + mitkClassMacro(ShapeComparisonManager, mitk::SurfaceToSurfaceFilter) + itkFactorylessNewMacro(Self) + + /* itkSetMacro(Offset, int) + itkGetMacro(Offset, int)*/ + ShapeComparisonManager(); + ~ShapeComparisonManager(); + + private: + void GenerateData() override; + + const mitk::Surface *m_MovingSurface; + const mitk::Surface *m_TargetSurface; + // mitk::Surface::Pointer + }; +} + +#endif diff --git a/Modules/SurfaceRegistration/src/AwesomeImageFilter.cpp b/Modules/SurfaceRegistration/src/AwesomeImageFilter.cpp deleted file mode 100644 index 2f91a99430..0000000000 --- a/Modules/SurfaceRegistration/src/AwesomeImageFilter.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - -#include - -#include -#include - -#include - -// See definition of AwesomeImageFilter::GenerateData() further below for -// a rationale behind this function template. -template -static void AddOffset(const itk::Image* inputImage, int offset, mitk::Image::Pointer outputImage) -{ - typedef itk::Image ImageType; - typedef itk::ShiftScaleImageFilter FilterType; - - auto filter = FilterType::New(); - filter->SetInput(inputImage); - filter->SetShift(offset); - - filter->Update(); - - // This is the tricky part that is done wrong very often. As the image data - // of ITK images and MITK images are binary compatible, we don't need to - // cast or copy the ITK output image. Instead, we just want to reference - // the image data and tell ITK that we took the ownership. - mitk::GrabItkImageMemory(filter->GetOutput(), outputImage); -} - -AwesomeImageFilter::AwesomeImageFilter() - : m_Offset(0) -{ - this->SetNumberOfRequiredInputs(1); - this->SetNumberOfRequiredOutputs(1); -} - -AwesomeImageFilter::~AwesomeImageFilter() -{ -} - -void AwesomeImageFilter::GenerateData() -{ - mitk::Image::Pointer inputImage = this->GetInput(0); - - if (m_Offset == 0) - { - // Nothing to calculate in this case, just copy the input image. - this->SetPrimaryOutput(inputImage->Clone().GetPointer()); - } - else - { - mitk::Image::Pointer outputImage = this->GetOutput(); - - try - { - // We want to apply an ITK filter to the MITK input image. While MITK - // images are not templated, ITK images are templated by both pixel type - // and image dimension. The actual image data is binary compatible, though. - // MITK provides ITK access macros that enable you to directly operate - // on MITK images without any superfluous copying. - // To allow ITK filters to work with different image types at runtime you - // would be required to instantiate your function templates for each and - // every expected combination of pixel type and image dimension. Luckily, - // MITK provides a whole bunch of multiplexer macros to save you doing this - // manually (see mitkImageAccessByItk.h). - // These macros range from being completely generic to partly constrained - // variants. For example, you may want to constrain the image dimension or - // the pixel type. As your function template is compiled for each allowed - // combination, compile time and code size may increase dramatically. - // As a rule of thumb, use a suitable multiplexer macro that is as - // constrained as possible and yet as generic as necessary. - // To prevent a combinatorial explosion, image dimension is restricted to - // 2 and 3 even for the dimension-variable multiplexer macros. - // Thus, the following multiplexer macro allows for 2-dimensional and - // 3-dimensional images with an integer pixel type, for example, - // (un)signed char, short, and int, resulting in a total of 12 distinct - // combinations. - AccessIntegralPixelTypeByItk_n(inputImage, AddOffset, (m_Offset, outputImage)); - } - catch (const mitk::AccessByItkException& e) - { - MITK_ERROR << "Unsupported pixel type or image dimension: " << e.what(); - } - } -} diff --git a/Modules/SurfaceRegistration/src/mitkShapeComparisonManager.cpp b/Modules/SurfaceRegistration/src/mitkShapeComparisonManager.cpp new file mode 100644 index 0000000000..8496aa7304 --- /dev/null +++ b/Modules/SurfaceRegistration/src/mitkShapeComparisonManager.cpp @@ -0,0 +1,80 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include +#include + +//#include +//#include +// +//#include + +// See definition of AwesomeImageFilter::GenerateData() further below for +// a rationale behind this function template. +//template +//static void AddOffset(const itk::Image* inputImage, int offset, mitk::Image::Pointer outputImage) +//{ +// typedef itk::Image ImageType; +// typedef itk::ShiftScaleImageFilter FilterType; +// +// auto filter = FilterType::New(); +// filter->SetInput(inputImage); +// filter->SetShift(offset); +// +// filter->Update(); +// +// // This is the tricky part that is done wrong very often. As the image data +// // of ITK images and MITK images are binary compatible, we don't need to +// // cast or copy the ITK output image. Instead, we just want to reference +// // the image data and tell ITK that we took the ownership. +// mitk::GrabItkImageMemory(filter->GetOutput(), outputImage); +//} + +mitk::ShapeComparisonManager::ShapeComparisonManager() +{ + this->SetNumberOfRequiredInputs(2); + this->SetNumberOfRequiredOutputs(1); + //TODO set number of outputs +} + +mitk::ShapeComparisonManager::~ShapeComparisonManager() +{ + +} + + +void mitk::ShapeComparisonManager::GenerateData() +{ + MITK_INFO << "shapecomparison"; + m_MovingSurface = this->GetInput(0); + m_TargetSurface = this->GetInput(1); + + auto shortestDistanceCalc = MitkShortestDistanceCalculator(m_MovingSurface, m_TargetSurface); + //TODO Calc and output + + //auto filter = FilterType::New(); + //filter->SetInput(inputImage); + //filter->SetShift(offset); + + //filter->Update(); + + //// This is the tricky part that is done wrong very often. As the image data + //// of ITK images and MITK images are binary compatible, we don't need to + //// cast or copy the ITK output image. Instead, we just want to reference + //// the image data and tell ITK that we took the ownership. + //mitk::GrabItkImageMemory(filter->GetOutput(), outputImage); + +} diff --git a/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.cpp b/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.cpp index 4cbc7176fe..48a8252420 100644 --- a/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.cpp +++ b/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.cpp @@ -1,156 +1,193 @@ /*========================================================================= 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 "QmitkSurfaceRegistration.h" #include #include #include #include #include #include #include // Includes for image casting between ITK and MITK: added after using Plugin Generator #include // added for surface dynamic cast +#include #include #include +#include +#include +#include + +#include +#include + const std::string QmitkSurfaceRegistration::VIEW_ID = "org.mitk.views.qmitksurfaceregistration"; QmitkSurfaceRegistration::QmitkSurfaceRegistration(QObject *parent) : m_ParentWidget(0), m_movingSurfaceNode(nullptr), m_targetSurfaceNode(nullptr) { } QmitkSurfaceRegistration::~QmitkSurfaceRegistration() { // delete pointer objects m_movingSurfaceNode = nullptr; m_targetSurfaceNode = nullptr; } // void QmitkSurfaceRegistration::SetFocus(){ + m_Controls.groupBoxMoving->setFocus(); } void QmitkSurfaceRegistration::CreateQtPartControl(QWidget *parent) { // create GUI widgets from the Qt Designer's .ui file m_Controls.setupUi(parent); - connect(m_Controls.pushButtonExecute, SIGNAL(clicked()), this, SLOT(doExecute())); connect(m_Controls.radioButtonMirroring, SIGNAL(clicked()), this, SLOT(doMirroring())); m_ParentWidget = parent; } -void QmitkSurfaceRegistration::doExecute() -{ - MITK_INFO << "pushButtonExecute clicked"; -} - -void QmitkSurfaceRegistration::doMirroring() -{ - MITK_INFO << "radioButton Mirroring clicked"; -} - void QmitkSurfaceRegistration::OnSelectionChanged(berry::IWorkbenchPart::Pointer /*part*/, const QList &nodes) { + + MITK_INFO << "On Selection Changed"; bool rotationEnabled = false; + if (nodes.empty()) { MITK_INFO << "Nothing selected yet"; m_Controls.labelSelectMovingSurface->setStyleSheet(" QLabel { color: rgb(255, 0, 0) }"); m_Controls.labelSelectTargetSurface->setStyleSheet(" QLabel { color: rgb(255, 0, 0) }"); - m_Controls.labelMovingSurfaceName->setText(QString::fromStdString("No moving surface selected")); m_Controls.labelTargetSurfaceName->setText(QString::fromStdString("No target surface selected")); - + m_Controls.groupBoxMoving->setEnabled(true); m_Controls.groupBoxMappedData->setEnabled(false); + if (m_useTestConfig) + { + m_Controls.pushButtonExecute->setEnabled(true); + } + else{ m_Controls.pushButtonExecute->setEnabled(false); - + } + m_Controls.radioButtonMirroring->setEnabled(false); return; } else { if (nodes.size() == 1) { if (nodes[0].IsNotNull() && dynamic_cast(nodes[0]->GetData())) { MITK_INFO << "There is exactly one image selected"; m_movingSurfaceNode = nodes[0]; m_Controls.labelSelectMovingSurface->setText("Selected moving surface:"); m_Controls.labelSelectMovingSurface->setStyleSheet(" QLabel { color: rgb(0, 0, 0) }"); m_Controls.labelMovingSurfaceName->setText( QString::fromStdString("File name: " + m_movingSurfaceNode->GetName())); - m_Controls.groupBoxMoving->setEnabled(true); + m_Controls.radioButtonMirroring->setEnabled(true); + m_Controls.groupBoxTarget->setEnabled(true); + m_Controls.groupBoxMappedData->setEnabled(true); + m_Controls.groupBoxTarget->setEnabled(true); } else { QMessageBox::information(nullptr, "Warning", "Are you sure? - I dont think this is a Surface! Try again!"); } } else if (nodes.size() == 2) { if (nodes[1].IsNotNull() && dynamic_cast(nodes[1]->GetData())) { - MITK_INFO << "There is two images selected"; + MITK_INFO << "There are two images selected"; m_targetSurfaceNode = nodes[1]; - m_Controls.labelSelectTargetSurface->setText("Selected target su rface:"); + m_Controls.labelSelectTargetSurface->setText("Selected target surface:"); m_Controls.labelSelectTargetSurface->setStyleSheet(" QLabel { color: rgb(0, 0, 0) }"); m_Controls.labelTargetSurfaceName->setText( QString::fromStdString("File name: " + m_targetSurfaceNode->GetName())); - m_Controls.groupBoxMappedData->setEnabled(true); m_Controls.textMappedDataName->setEnabled(true); m_Controls.pushButtonExecute->setEnabled(true); - m_Controls.groupBoxTarget->setEnabled(true); } else { QMessageBox::information(nullptr, "Warning", "Are you sure? - I dont think this is a Surface!"); } } - else - { - QMessageBox::information(nullptr, "Warning", "You do know that it only works with two surfaces, right? If you continue to click execute, this might crash one day!"); - //wie kann ich die Auswahl zurueck setzen? - } + else + { + QMessageBox::information(nullptr, "Warning", "You do know that it only works with two surfaces, right? If you continue to click execute, this might crash one day!"); + //wie kann ich die Auswahl zurueck setzen? + } + } +} +void QmitkSurfaceRegistration::doExecute() +{ + + if (m_useTestConfig){ + mitk::StandaloneDataStorage::Pointer ds = mitk::StandaloneDataStorage::New(); + mitk::IOUtil::Load("//ad/fs/E130-Projekte/BGLU/Fibula/Python/DataGAN/Registered/Surface/Tibia/tibia01_q0.stl", *ds); + mitk::IOUtil::Load("//ad/fs/E130-Projekte/BGLU/Fibula/Python/DataGAN/Registered/Surface/Tibia/tibia02_q0.stl", *ds); + + m_movingSurfaceNode = ds->GetAll()->at(0); + m_targetSurfaceNode = ds->GetAll()->at(1); + this->GetDataStorageReference()->GetDataStorage()->Add(mitk::DataNode::Pointer(ds->GetAll()->at(0))); + this->GetDataStorageReference()->GetDataStorage()->Add(mitk::DataNode::Pointer(ds->GetAll()->at(1))); + + m_Controls.pushButtonExecute->setEnabled(true); + m_Controls.labelMovingSurfaceName->setText("tibia01_q0"); + m_Controls.labelTargetSurfaceName->setText("tibia02_q0"); + m_Controls.labelSelectMovingSurface->setText("Selected moving surface:"); + m_Controls.labelSelectMovingSurface->setStyleSheet(" QLabel { color: rgb(0, 0, 0) }"); + m_Controls.labelSelectTargetSurface->setText("Selected target surface:"); + m_Controls.labelSelectTargetSurface->setStyleSheet(" QLabel { color: rgb(0, 0, 0) }"); + } - // mitk::Image::Pointer image = dynamic_cast(m_ImageNode->GetData()); - // if (image != nullptr) - // { - // vtkSmartPointer imageMat = image->GetGeometry()->GetVtkMatrix(); - // // check whether the image geometry is rotated, if so, no pixel aligned cropping or masking can be performed - // if ((imageMat->GetElement(1, 0) == 0.0) && (imageMat->GetElement(0, 1) == 0.0) && - // (imageMat->GetElement(1, 2) == 0.0) && (imageMat->GetElement(2, 1) == 0.0) && - // (imageMat->GetElement(2, 0) == 0.0) && (imageMat->GetElement(0, 2) == 0.0)) - // { - // rotationEnabled = false; - // m_Controls.labelWarningRotation->setVisible(false); - // } - // else - // { - // rotationEnabled = true; - // m_Controls.labelWarningRotation->setStyleSheet(" QLabel { color: rgb(255, 0, 0) }"); - // m_Controls.labelWarningRotation->setVisible(true); - // } + MITK_INFO << "pushButtonExecute clicked"; + /*mitk::Surface *movingSurface = dynamic_cast(m_movingSurfaceNode); + mitk::Surface *targetSurface = dynamic_cast(m_targetSurfaceNode);*/ + /*auto manager = MitkShapeComparisonManager::New(); + manager->SetInput(0, dynamic_cast(m_movingSurfaceNode->GetData())); + manager->SetInput(1, dynamic_cast(m_targetSurfaceNode->GetData()));*/ + + + + /* vtkSmartPointer icp = vtkSmartPointer::New(); + icp->SetCheckMeanDistance(1); + mitk::Surface::Pointer movingSurface = dynamic_cast (m_movingSurfaceNode); + + icp->SetSource(movingSurface->GetVtkPolyData()); + icp->SetTarget(m_targetSurfaceNode->GetVtkPolyData()); + icp->SetMaximumNumberOfIterations(500); + icp->SetMaximumMeanDistance(0.01); + icp->SetMeanDistanceModeToRMS(); + icp->StartByMatchingCentroidsOn(); + icp->SetMaximumNumberOfLandmarks(100000); + vtkSmartPointer transform = vtkSmartPointer::New(); + transform = icp->GetLandmarkTransform(); +*/ + + } \ No newline at end of file diff --git a/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.h b/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.h index 0ff64491c1..f7c9c55068 100644 --- a/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.h +++ b/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/QmitkSurfaceRegistration.h @@ -1,102 +1,103 @@ /*========================================================================= 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 QmitkSurfaceRegistration_h #define QmitkSurfaceRegistration_h #include #ifdef WIN32 #pragma warning( disable : 4250 ) #endif #include "QVTKWidget.h" #include "QmitkRegisterClasses.h" #include #include "ui_SurfaceRegistrationControls.h" #include "usServiceRegistration.h" /*! @brief QmitkSurfaceRegistrationView \warning This class is not yet documented. Use "git blame" and ask the author to provide basic documentation. \sa QmitkFunctionality \ingroup ${plugin_target}_internal */ class QmitkSurfaceRegistration : public QmitkAbstractView { // 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) private: Q_OBJECT public: /*! @brief Constructor. Called by SampleApp (or other apps that use functionalities) */ QmitkSurfaceRegistration(QObject *parent = 0); virtual ~QmitkSurfaceRegistration(); static const std::string VIEW_ID; virtual void CreateQtPartControl(QWidget *parent); virtual void SetFocus() override; ///*! //@brief Creates the Qt connections needed //*/ QWidget* GetControls(); /// @brief Called when the user clicks the GUI button protected slots: void doExecute(); - void doMirroring(); - protected: // /*! //@brief called by QmitkFunctionality when DataManager's selection has changed // */ void OnSelectionChanged(berry::IWorkbenchPart::Pointer part, const QList& nodes) override; + private: /*! * The parent QWidget */ QWidget* m_ParentWidget; /*! * @brief A pointer to the node of the moving surface. */ - mitk::WeakPointer m_movingSurfaceNode; + mitk::DataNode *m_movingSurfaceNode; /*! * @brief A pointer to the node of the target surface. */ - mitk::WeakPointer m_targetSurfaceNode; + mitk::DataNode *m_targetSurfaceNode; Ui::SurfaceRegistrationControls m_Controls; + + bool m_useTestConfig = true; }; #endif // QmitkSurfaceRegistration_h \ No newline at end of file diff --git a/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/SurfaceRegistrationControls.ui b/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/SurfaceRegistrationControls.ui index f86eb0a423..588e537e2e 100644 --- a/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/SurfaceRegistrationControls.ui +++ b/Plugins/org.mitk.gui.qt.surfaceregistration/src/internal/SurfaceRegistrationControls.ui @@ -1,453 +1,456 @@ SurfaceRegistrationControls Qt::WindowModal - false + true 0 0 271 863 0 0 100 100 16777215 16777215 QmitkTemplate - false + true 0 0 0 95 Moving false 10 20 347 13 0 0 QLabel { color: rgb(255, 0, 0) } Select moving surface 10 40 171 20 0 0 50 20 16777215 16777215 QFrame::Box No moving surface selected false 10 70 82 17 Mirroring + + false + 0 0 0 75 Target false 10 20 331 16 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 QLabel { color: rgb(255, 0, 0) } Select target surface 10 40 171 20 0 0 50 20 16777215 16777215 QFrame::Box No target surface selected false 0 0 0 75 0 75 Mapped Data 10 20 331 16 0 0 0 0 0 0 120 120 120 Type mapped data name: 10 40 171 20 0 0 50 20 true false Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff QAbstractScrollArea::AdjustIgnored true defaultMappedDataName Qt::TextEditable - false + true Execute Qt::Vertical 20 40