diff --git a/Plugins/org.mitk.gui.qt.multilabelsegmentation/src/internal/QmitkCreatePolygonModelAction.cpp b/Plugins/org.mitk.gui.qt.multilabelsegmentation/src/internal/QmitkCreatePolygonModelAction.cpp index d52ab83158..2b1ea79f07 100644 --- a/Plugins/org.mitk.gui.qt.multilabelsegmentation/src/internal/QmitkCreatePolygonModelAction.cpp +++ b/Plugins/org.mitk.gui.qt.multilabelsegmentation/src/internal/QmitkCreatePolygonModelAction.cpp @@ -1,181 +1,138 @@ /*=================================================================== 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 "QmitkCreatePolygonModelAction.h" // MITK -#include #include #include #include + #include -#include +#include // Blueberry -#include #include +#include #include -#include #include using namespace berry; using namespace mitk; using namespace std; QmitkCreatePolygonModelAction::QmitkCreatePolygonModelAction() { } QmitkCreatePolygonModelAction::~QmitkCreatePolygonModelAction() { } void QmitkCreatePolygonModelAction::Run(const QList &selectedNodes) { DataNode::Pointer selectedNode = selectedNodes[0]; Image::Pointer image = dynamic_cast(selectedNode->GetData()); if (image.IsNull()) + { return; + } try { - if (!m_IsSmoothed) + // Get preference properties for smoothing and decimation + IPreferencesService* prefService = Platform::GetPreferencesService(); + IPreferences::Pointer segPref = prefService->GetSystemPreferences()->Node("/org.mitk.views.multilabelsegmentation"); + + bool smoothingHint = segPref->GetBool("smoothing hint", true); + ScalarType smoothing = segPref->GetDouble("smoothing value", 1.0); + ScalarType decimation = segPref->GetDouble("decimation rate", 0.5); + + if (smoothingHint) { - ShowSegmentationAsSurface::Pointer surfaceFilter = ShowSegmentationAsSurface::New(); + smoothing = 0.0; + Vector3D spacing = image->GetGeometry()->GetSpacing(); - itk::SimpleMemberCommand::Pointer successCommand = itk::SimpleMemberCommand::New(); - successCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); - surfaceFilter->AddObserver(ResultAvailable(), successCommand); + for (Vector3D::Iterator iter = spacing.Begin(); iter != spacing.End(); ++iter) + smoothing = max(smoothing, *iter); + } - itk::SimpleMemberCommand::Pointer errorCommand = itk::SimpleMemberCommand::New(); - errorCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); - surfaceFilter->AddObserver(ProcessingError(), errorCommand); + ShowSegmentationAsSurface::Pointer surfaceFilter = ShowSegmentationAsSurface::New(); - surfaceFilter->SetDataStorage(*m_DataStorage); - surfaceFilter->SetPointerParameter("Input", image); - surfaceFilter->SetPointerParameter("Group node", selectedNode); - surfaceFilter->SetParameter("Show result", true); - surfaceFilter->SetParameter("Sync visibility", false); - surfaceFilter->SetParameter("Smooth", false); - surfaceFilter->SetParameter("Apply median", false); - surfaceFilter->SetParameter("Median kernel size", 3u); - surfaceFilter->SetParameter("Gaussian SD", 1.5f); - surfaceFilter->SetParameter("Decimate mesh", m_IsDecimated); - surfaceFilter->SetParameter("Decimation rate", 0.8f); + // Activate callback functions + itk::SimpleMemberCommand::Pointer successCommand = itk::SimpleMemberCommand::New(); + successCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); + surfaceFilter->AddObserver(ResultAvailable(), successCommand); - StatusBar::GetInstance()->DisplayText("Surface creation started in background..."); + itk::SimpleMemberCommand::Pointer errorCommand = itk::SimpleMemberCommand::New(); + errorCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); + surfaceFilter->AddObserver(ProcessingError(), errorCommand); - surfaceFilter->StartAlgorithm(); - } - else + // set filter parameter + surfaceFilter->SetDataStorage(*m_DataStorage); + surfaceFilter->SetPointerParameter("Input", image); + surfaceFilter->SetPointerParameter("Group node", selectedNode); + surfaceFilter->SetParameter("Show result", true); + surfaceFilter->SetParameter("Sync visibility", false); + surfaceFilter->SetParameter("Median kernel size", 3u); + surfaceFilter->SetParameter("Decimate mesh", m_IsDecimated); + surfaceFilter->SetParameter("Decimation rate", (float)decimation); + + if (m_IsSmoothed) { - ShowSegmentationAsSurface::Pointer surfaceFilter = ShowSegmentationAsSurface::New(); - - itk::SimpleMemberCommand::Pointer successCommand = itk::SimpleMemberCommand::New(); - successCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); - surfaceFilter->AddObserver(mitk::ResultAvailable(), successCommand); - - itk::SimpleMemberCommand::Pointer errorCommand = itk::SimpleMemberCommand::New(); - errorCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); - surfaceFilter->AddObserver(mitk::ProcessingError(), errorCommand); - - surfaceFilter->SetDataStorage(*m_DataStorage); - surfaceFilter->SetPointerParameter("Input", image); - surfaceFilter->SetPointerParameter("Group node", selectedNode); - surfaceFilter->SetParameter("Show result", true); - surfaceFilter->SetParameter("Sync visibility", false); - surfaceFilter->SetParameter("Median kernel size", 3u); - surfaceFilter->SetParameter("Gaussian SD", 1.5f); - surfaceFilter->SetParameter("Decimate mesh", m_IsDecimated); - surfaceFilter->SetParameter("Decimation rate", 0.5f); surfaceFilter->SetParameter("Apply median", true); surfaceFilter->SetParameter("Smooth", true); - - berry::IWorkbenchPart::Pointer activePart = - berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->GetActivePart(); - mitk::IRenderWindowPart* renderPart = dynamic_cast(activePart.GetPointer()); - mitk::SliceNavigationController* timeNavController = 0; - if (renderPart != 0) - { - timeNavController = renderPart->GetTimeNavigationController(); - } - - int timeNr = timeNavController != 0 ? timeNavController->GetTime()->GetPos() : 0; - surfaceFilter->SetParameter("TimeNr", timeNr); - - IPreferencesService* prefService = berry::Platform::GetPreferencesService(); - IPreferences::Pointer segPref = prefService->GetSystemPreferences()->Node("/org.mitk.views.multilabelsegmentation"); - - bool smoothingHint = segPref->GetBool("smoothing hint", true); - ScalarType smoothing = segPref->GetDouble("smoothing value", 1.0); - ScalarType decimation = segPref->GetDouble("decimation rate", 0.5); - ScalarType closing = segPref->GetDouble("closing ratio", 0.0); - - if (smoothingHint) - { - smoothing = 0.0; - Vector3D spacing = image->GetGeometry()->GetSpacing(); - - for (Vector3D::Iterator iter = spacing.Begin(); iter != spacing.End(); ++iter) - smoothing = max(smoothing, *iter); - } - MITK_INFO << "smoothing" << smoothing; surfaceFilter->SetParameter("Gaussian SD", sqrtf(smoothing)); // use sqrt to account for setting of variance in preferences - - // surfaceFilter->SetParameter("Smoothing", smoothing); - surfaceFilter->SetParameter("Decimation", decimation); - surfaceFilter->SetParameter("Closing", closing); - - // ProgressBar::GetInstance()->AddStepsToDo(8); StatusBar::GetInstance()->DisplayText("Smoothed surface creation started in background..."); - - try { - surfaceFilter->StartAlgorithm(); - } catch (...) - { - MITK_ERROR<<"Error creating smoothed polygon model: Not enough memory!"; - } } + else + { + surfaceFilter->SetParameter("Apply median", false); + surfaceFilter->SetParameter("Smooth", false); + StatusBar::GetInstance()->DisplayText("Surface creation started in background..."); + } + + surfaceFilter->StartAlgorithm(); } - catch(...) + catch (...) { MITK_ERROR << "Surface creation failed!"; } } void QmitkCreatePolygonModelAction::OnSurfaceCalculationDone() { StatusBar::GetInstance()->Clear(); } void QmitkCreatePolygonModelAction::SetDataStorage(DataStorage *dataStorage) { m_DataStorage = dataStorage; } void QmitkCreatePolygonModelAction::SetSmoothed(bool smoothed) { m_IsSmoothed = smoothed; } void QmitkCreatePolygonModelAction::SetDecimated(bool decimated) { m_IsDecimated = decimated; } void QmitkCreatePolygonModelAction::SetFunctionality(QtViewPart *) { -} +} \ No newline at end of file diff --git a/Plugins/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp b/Plugins/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp index 1e3b1a4f83..50a3bf9ea0 100644 --- a/Plugins/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp +++ b/Plugins/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp @@ -1,139 +1,138 @@ /*=================================================================== 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 "QmitkCreatePolygonModelAction.h" // MITK -#include #include #include #include #include #include // Blueberry #include #include #include #include using namespace berry; using namespace mitk; using namespace std; QmitkCreatePolygonModelAction::QmitkCreatePolygonModelAction() { } QmitkCreatePolygonModelAction::~QmitkCreatePolygonModelAction() { } void QmitkCreatePolygonModelAction::Run(const QList &selectedNodes) { DataNode::Pointer selectedNode = selectedNodes[0]; Image::Pointer image = dynamic_cast(selectedNode->GetData()); if (image.IsNull()) { return; } try { // Get preference properties for smoothing and decimation IPreferencesService* prefService = Platform::GetPreferencesService(); IPreferences::Pointer segPref = prefService->GetSystemPreferences()->Node("/org.mitk.views.segmentation"); bool smoothingHint = segPref->GetBool("smoothing hint", true); ScalarType smoothing = segPref->GetDouble("smoothing value", 1.0); ScalarType decimation = segPref->GetDouble("decimation rate", 0.5); if (smoothingHint) { smoothing = 0.0; Vector3D spacing = image->GetGeometry()->GetSpacing(); for (Vector3D::Iterator iter = spacing.Begin(); iter != spacing.End(); ++iter) smoothing = max(smoothing, *iter); } ShowSegmentationAsSurface::Pointer surfaceFilter = ShowSegmentationAsSurface::New(); // Activate callback functions itk::SimpleMemberCommand::Pointer successCommand = itk::SimpleMemberCommand::New(); successCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); surfaceFilter->AddObserver(ResultAvailable(), successCommand); itk::SimpleMemberCommand::Pointer errorCommand = itk::SimpleMemberCommand::New(); errorCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); surfaceFilter->AddObserver(ProcessingError(), errorCommand); // set filter parameter surfaceFilter->SetDataStorage(*m_DataStorage); surfaceFilter->SetPointerParameter("Input", image); surfaceFilter->SetPointerParameter("Group node", selectedNode); surfaceFilter->SetParameter("Show result", true); surfaceFilter->SetParameter("Sync visibility", false); surfaceFilter->SetParameter("Median kernel size", 3u); surfaceFilter->SetParameter("Decimate mesh", m_IsDecimated); surfaceFilter->SetParameter("Decimation rate", (float) decimation); - + if (m_IsSmoothed) { surfaceFilter->SetParameter("Apply median", true); surfaceFilter->SetParameter("Smooth", true); surfaceFilter->SetParameter("Gaussian SD", sqrtf(smoothing)); // use sqrt to account for setting of variance in preferences StatusBar::GetInstance()->DisplayText("Smoothed surface creation started in background..."); } else { surfaceFilter->SetParameter("Apply median", false); surfaceFilter->SetParameter("Smooth", false); StatusBar::GetInstance()->DisplayText("Surface creation started in background..."); } surfaceFilter->StartAlgorithm(); } catch(...) { MITK_ERROR << "Surface creation failed!"; } } void QmitkCreatePolygonModelAction::OnSurfaceCalculationDone() { StatusBar::GetInstance()->Clear(); } void QmitkCreatePolygonModelAction::SetDataStorage(DataStorage *dataStorage) { m_DataStorage = dataStorage; } void QmitkCreatePolygonModelAction::SetSmoothed(bool smoothed) { m_IsSmoothed = smoothed; } void QmitkCreatePolygonModelAction::SetDecimated(bool decimated) { m_IsDecimated = decimated; } void QmitkCreatePolygonModelAction::SetFunctionality(QtViewPart *) { }