diff --git a/Modules/Bundles/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp b/Modules/Bundles/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp index 4f7eb3e927..ed70a035bd 100644 --- a/Modules/Bundles/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.segmentation/src/internal/QmitkCreatePolygonModelAction.cpp @@ -1,107 +1,132 @@ #include "QmitkCreatePolygonModelAction.h" +#include "mitkShowSegmentationAsSmoothedSurface.h" #include "mitkShowSegmentationAsSurface.h" #include "mitkProgressBar.h" #include "mitkStatusBar.h" QmitkCreatePolygonModelAction::QmitkCreatePolygonModelAction() { } QmitkCreatePolygonModelAction::~QmitkCreatePolygonModelAction() { } void QmitkCreatePolygonModelAction::Run(const std::vector& selectedNodes) { NodeList selection = selectedNodes; for ( NodeList::iterator iter = selection.begin(); iter != selection.end(); ++iter ) { mitk::DataNode* node = *iter; if (node) { mitk::Image::Pointer image = dynamic_cast( node->GetData() ); if (image.IsNull()) return; try { - mitk::ShowSegmentationAsSurface::Pointer surfaceFilter = mitk::ShowSegmentationAsSurface::New(); - - // attach observer to get notified about result - itk::SimpleMemberCommand::Pointer goodCommand = itk::SimpleMemberCommand::New(); - goodCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); - surfaceFilter->AddObserver(mitk::ResultAvailable(), goodCommand); - itk::SimpleMemberCommand::Pointer badCommand = itk::SimpleMemberCommand::New(); - badCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); - surfaceFilter->AddObserver(mitk::ProcessingError(), badCommand); - - mitk::DataNode::Pointer nodepointer = node; - surfaceFilter->SetPointerParameter("Input", image); - surfaceFilter->SetPointerParameter("Group node", nodepointer); - surfaceFilter->SetParameter("Show result", true ); - surfaceFilter->SetParameter("Sync visibility", false ); - surfaceFilter->SetDataStorage( *m_DataStorage ); - - if (this->m_IsSmoothed) + if (!m_IsSmoothed) { - surfaceFilter->SetParameter("Smooth", true ); - //surfaceFilter->SetParameter("Apply median", true ); - surfaceFilter->SetParameter("Apply median", false ); // median makes the resulting surfaces look like lego models - surfaceFilter->SetParameter("Median kernel size", 3u ); - surfaceFilter->SetParameter("Gaussian SD", 2.5f ); - surfaceFilter->SetParameter("Decimate mesh", m_IsDecimated ); - surfaceFilter->SetParameter("Decimation rate", 0.8f ); + mitk::ShowSegmentationAsSurface::Pointer surfaceFilter = mitk::ShowSegmentationAsSurface::New(); + + // attach observer to get notified about result + itk::SimpleMemberCommand::Pointer goodCommand = itk::SimpleMemberCommand::New(); + goodCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); + surfaceFilter->AddObserver(mitk::ResultAvailable(), goodCommand); + itk::SimpleMemberCommand::Pointer badCommand = itk::SimpleMemberCommand::New(); + badCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); + surfaceFilter->AddObserver(mitk::ProcessingError(), badCommand); + + mitk::DataNode::Pointer nodepointer = node; + surfaceFilter->SetPointerParameter("Input", image); + surfaceFilter->SetPointerParameter("Group node", nodepointer); + surfaceFilter->SetParameter("Show result", true ); + surfaceFilter->SetParameter("Sync visibility", false ); + surfaceFilter->SetDataStorage( *m_DataStorage ); + + /*if (this->m_IsSmoothed) + { + surfaceFilter->SetParameter("Smooth", true ); + //surfaceFilter->SetParameter("Apply median", true ); + surfaceFilter->SetParameter("Apply median", false ); // median makes the resulting surfaces look like lego models + surfaceFilter->SetParameter("Median kernel size", 3u ); + surfaceFilter->SetParameter("Gaussian SD", 2.5f ); + surfaceFilter->SetParameter("Decimate mesh", m_IsDecimated ); + surfaceFilter->SetParameter("Decimation rate", 0.8f ); + } + else + {*/ + 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 ); + //} + + mitk::ProgressBar::GetInstance()->AddStepsToDo(10); + mitk::ProgressBar::GetInstance()->Progress(2); + mitk::StatusBar::GetInstance()->DisplayText("Surface creation started in background..."); + surfaceFilter->StartAlgorithm(); } else { - 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 ); - } + mitk::ShowSegmentationAsSmoothedSurface::Pointer filter = mitk::ShowSegmentationAsSmoothedSurface::New(); + + itk::SimpleMemberCommand::Pointer goodCommand = itk::SimpleMemberCommand::New(); + goodCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); + filter->AddObserver(mitk::ResultAvailable(), goodCommand); + + itk::SimpleMemberCommand::Pointer badCommand = itk::SimpleMemberCommand::New(); + badCommand->SetCallbackFunction(this, &QmitkCreatePolygonModelAction::OnSurfaceCalculationDone); + filter->AddObserver(mitk::ProcessingError(), badCommand); - mitk::ProgressBar::GetInstance()->AddStepsToDo(10); - mitk::ProgressBar::GetInstance()->Progress(2); - mitk::StatusBar::GetInstance()->DisplayText("Surface creation started in background..."); - surfaceFilter->StartAlgorithm(); + mitk::DataNode::Pointer nodepointer = node; + filter->SetPointerParameter("Input", image); + filter->SetPointerParameter("Group node", nodepointer); + filter->SetDataStorage(*m_DataStorage); + + // TODO: Set up progress bar and status bar text + + filter->StartAlgorithm(); + } } catch(...) { MITK_ERROR << "surface creation filter had an error"; } } else { MITK_INFO << " a NULL node selected"; } } } void QmitkCreatePolygonModelAction::OnSurfaceCalculationDone() { mitk::ProgressBar::GetInstance()->Progress(8); } void QmitkCreatePolygonModelAction::SetSmoothed(bool smoothed) { this->m_IsSmoothed = smoothed; } void QmitkCreatePolygonModelAction::SetDecimated(bool decimated) { this->m_IsDecimated = decimated; } void QmitkCreatePolygonModelAction::SetDataStorage(mitk::DataStorage* dataStorage) { this->m_DataStorage = dataStorage; } void QmitkCreatePolygonModelAction::SetFunctionality(berry::QtViewPart *functionality) { //not needed } diff --git a/Modules/MitkExt/Algorithms/mitkShowSegmentationAsSmoothedSurface.cpp b/Modules/MitkExt/Algorithms/mitkShowSegmentationAsSmoothedSurface.cpp new file mode 100644 index 0000000000..dc55fced6c --- /dev/null +++ b/Modules/MitkExt/Algorithms/mitkShowSegmentationAsSmoothedSurface.cpp @@ -0,0 +1,65 @@ +/*========================================================================= + +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 "mitkShowSegmentationAsSmoothedSurface.h" + +using namespace mitk; +using namespace std; + +ShowSegmentationAsSmoothedSurface::ShowSegmentationAsSmoothedSurface() +{ +} + +ShowSegmentationAsSmoothedSurface::~ShowSegmentationAsSmoothedSurface() +{ +} + +void ShowSegmentationAsSmoothedSurface::Initialize(const NonBlockingAlgorithm *other) +{ + Superclass::Initialize(other); + + // TODO: Set up default parameters +} + +bool ShowSegmentationAsSmoothedSurface::ReadyToRun() +{ + try + { + Image::Pointer image; + GetPointerParameter("Input", image); + + return image.IsNotNull() && GetGroupNode(); + } + catch (const invalid_argument &) + { + return false; + } +} + +bool ShowSegmentationAsSmoothedSurface::ThreadedUpdateFunction() +{ + // TODO + + return true; +} + +void ShowSegmentationAsSmoothedSurface::ThreadedUpdateSuccessful() +{ + // TODO + + Superclass::ThreadedUpdateSuccessful(); +} diff --git a/Modules/MitkExt/Algorithms/mitkShowSegmentationAsSmoothedSurface.h b/Modules/MitkExt/Algorithms/mitkShowSegmentationAsSmoothedSurface.h new file mode 100644 index 0000000000..34e09ae416 --- /dev/null +++ b/Modules/MitkExt/Algorithms/mitkShowSegmentationAsSmoothedSurface.h @@ -0,0 +1,46 @@ +/*========================================================================= + +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 MITK_SHOW_SEGMENTATION_AS_SMOOTHED_SURFACE_H +#define MITK_SHOW_SEGMENTATION_AS_SMOOTHED_SURFACE_H + +#include "mitkSegmentationSink.h" +#include "mitkSurface.h" + +namespace mitk +{ + class MitkExt_EXPORT ShowSegmentationAsSmoothedSurface : public SegmentationSink + { + public: + mitkClassMacro(ShowSegmentationAsSmoothedSurface, SegmentationSink) + mitkAlgorithmNewMacro(ShowSegmentationAsSmoothedSurface) + + protected: + void Initialize(const NonBlockingAlgorithm *other = NULL); + bool ReadyToRun(); + bool ThreadedUpdateFunction(); + void ThreadedUpdateSuccessful(); + + private: + ShowSegmentationAsSmoothedSurface(); + ~ShowSegmentationAsSmoothedSurface(); + + Surface::Pointer m_Surface; + }; +} + +#endif diff --git a/Modules/MitkExt/files.cmake b/Modules/MitkExt/files.cmake index a4b226760e..b7d615b751 100644 --- a/Modules/MitkExt/files.cmake +++ b/Modules/MitkExt/files.cmake @@ -1,194 +1,195 @@ SET(CPP_FILES Algorithms/mitkMaskAndCutRoiImageFilter.cpp Algorithms/mitkBoundingObjectToSegmentationFilter.cpp Algorithms/vtkPointSetSlicer.cxx Algorithms/mitkCoreExtObjectFactory.cpp Algorithms/mitkAngleCorrectByPointFilter.cpp Algorithms/mitkAutoCropImageFilter.cpp Algorithms/mitkBoundingObjectCutter.cpp Algorithms/mitkCalculateSegmentationVolume.cpp Algorithms/mitkContourSetToPointSetFilter.cpp Algorithms/mitkContourUtils.cpp Algorithms/mitkCorrectorAlgorithm.cpp Algorithms/mitkCylindricToCartesianFilter.cpp Algorithms/mitkDiffImageApplier.cpp Algorithms/mitkDopplerToStrainRateFilter.cpp Algorithms/mitkGeometryClipImageFilter.cpp Algorithms/mitkGeometryDataSource.cpp Algorithms/mitkHeightFieldSurfaceClipImageFilter.cpp Algorithms/mitkImageToLookupTableFilter.cpp Algorithms/mitkImageToSurfaceFilter.cpp Algorithms/mitkInterpolateLinesFilter.cpp Algorithms/mitkLabeledImageToSurfaceFilter.cpp Algorithms/mitkLabeledImageVolumeCalculator.cpp Algorithms/mitkLookupTableSource.cpp Algorithms/mitkManualSegmentationToSurfaceFilter.cpp Algorithms/mitkMaskImageFilter.cpp Algorithms/mitkMeshSource.cpp Algorithms/mitkNonBlockingAlgorithm.cpp Algorithms/mitkOverwriteSliceImageFilter.cpp Algorithms/mitkOverwriteDirectedPlaneImageFilter.cpp Algorithms/mitkPadImageFilter.cpp Algorithms/mitkPlaneCutFilter.cpp Algorithms/mitkPlaneFit.cpp Algorithms/mitkPlanesPerpendicularToLinesFilter.cpp Algorithms/mitkPointLocator.cpp Algorithms/mitkPointSetToCurvedGeometryFilter.cpp Algorithms/mitkPointSetToGeometryDataFilter.cpp Algorithms/mitkPointSetIndexToWorldTransformFilter.cpp Algorithms/mitkSurfaceIndexToWorldTransformFilter.cpp Algorithms/mitkPolygonToRingFilter.cpp Algorithms/mitkProbeFilter.cpp Algorithms/mitkSegmentationSink.cpp Algorithms/mitkShapeBasedInterpolationAlgorithm.cpp + Algorithms/mitkShowSegmentationAsSmoothedSurface.cpp Algorithms/mitkShowSegmentationAsSurface.cpp Algorithms/mitkSimpleHistogram.cpp Algorithms/mitkSimpleUnstructuredGridHistogram.cpp Algorithms/mitkSurfaceToImageFilter.cpp Algorithms/mitkUnstructuredGridHistogram.cpp Algorithms/mitkUnstructuredGridSource.cpp Algorithms/mitkVolumeVisualizationImagePreprocessor.cpp Controllers/mitkMovieGenerator.cpp Controllers/mitkMultiStepper.cpp Controllers/mitkSegmentationInterpolationController.cpp Controllers/mitkToolManager.cpp DataManagement/mitkAffineTransformationOperation.cpp DataManagement/mitkApplyDiffImageOperation.cpp DataManagement/mitkBoundingObject.cpp DataManagement/mitkBoundingObjectGroup.cpp DataManagement/mitkCellOperation.cpp DataManagement/mitkColorConversions.cpp DataManagement/mitkColorSequence.cpp DataManagement/mitkColorSequenceCycleH.cpp DataManagement/mitkColorSequenceHalfTones.cpp DataManagement/mitkColorSequenceRainbow.cpp DataManagement/mitkCompressedImageContainer.cpp DataManagement/mitkCone.cpp DataManagement/mitkContour.cpp DataManagement/mitkContourSet.cpp DataManagement/mitkCuboid.cpp DataManagement/mitkCylinder.cpp DataManagement/mitkDataStorageSelection.cpp DataManagement/mitkDelegateManager.cpp DataManagement/mitkDrawOperation.cpp DataManagement/mitkEllipsoid.cpp DataManagement/mitkExternAbstractTransformGeometry.cpp DataManagement/mitkExtrudedContour.cpp DataManagement/mitkFrameOfReferenceUIDManager.cpp DataManagement/mitkGridRepresentationProperty.cpp DataManagement/mitkGridVolumeMapperProperty.cpp DataManagement/mitkItkBaseDataAdapter.cpp DataManagement/mitkLabeledImageLookupTable.cpp DataManagement/mitkLineOperation.cpp DataManagement/mitkMesh.cpp DataManagement/mitkObjectSet.cpp DataManagement/mitkOrganTypeProperty.cpp DataManagement/mitkPlaneLandmarkProjector.cpp DataManagement/mitkPlane.cpp DataManagement/mitkPropertyManager.cpp DataManagement/mitkPropertyObserver.cpp DataManagement/mitkSeedsImage.cpp DataManagement/mitkSeedsImageLookupTableSource.cpp DataManagement/mitkSphereLandmarkProjector.cpp # DataManagement/mitkUSLookupTableSource.cpp DataManagement/mitkUnstructuredGrid.cpp DataManagement/mitkVideoSource.cpp DataManagement/vtkObjectSet.cpp IO/mitkObjFileIOFactory.cpp IO/mitkObjFileReader.cpp IO/mitkPACSPlugin.cpp IO/mitkParRecFileIOFactory.cpp IO/mitkParRecFileReader.cpp IO/mitkStlVolumeTimeSeriesIOFactory.cpp IO/mitkStlVolumeTimeSeriesReader.cpp IO/mitkUnstructuredGridVtkWriter.cpp IO/mitkUnstructuredGridVtkWriterFactory.cpp IO/mitkVtkUnstructuredGridIOFactory.cpp IO/mitkVtkUnstructuredGridReader.cpp IO/mitkVtkVolumeTimeSeriesIOFactory.cpp IO/mitkVtkVolumeTimeSeriesReader.cpp Interactions/mitkAutoSegmentationTool.cpp Interactions/mitkConferenceEventMapper.cpp Interactions/mitkConnectPointsInteractor.cpp Interactions/mitkContourInteractor.cpp Interactions/mitkContourTool.cpp #Interactions/mitkCoordinateSupplier.cpp #Interactions/mitkDisplayCoordinateOperation.cpp #Interactions/mitkDisplayInteractor.cpp Interactions/mitkAffineInteractor3D.cpp Interactions/mitkDisplayPointSetInteractor.cpp #Interactions/mitkDisplayVectorInteractor.cpp Interactions/mitkExtrudedContourInteractor.cpp Interactions/mitkFeedbackContourTool.cpp Interactions/mitkInteractionDebug.cpp Interactions/mitkInteractionDebugger.cpp Interactions/mitkPaintbrushTool.cpp Interactions/mitkPointInteractor.cpp Interactions/mitkPointSelectorInteractor.cpp #Interactions/mitkPositionTracker.cpp Interactions/mitkSeedsInteractor.cpp Interactions/mitkSegTool2D.cpp Interactions/mitkSegmentationsProcessingTool.cpp Interactions/mitkSetRegionTool.cpp Interactions/mitkSocketClient.cpp Interactions/mitkSurfaceDeformationInteractor3D.cpp Interactions/mitkSurfaceInteractor.cpp Interactions/mitkTool.cpp Interactions/mitkAddContourTool.cpp Interactions/mitkAutoCropTool.cpp Interactions/mitkBinaryThresholdTool.cpp Interactions/mitkCalculateGrayValueStatisticsTool.cpp Interactions/mitkCalculateVolumetryTool.cpp Interactions/mitkCorrectorTool2D.cpp Interactions/mitkCreateSurfaceTool.cpp Interactions/mitkEraseRegionTool.cpp Interactions/mitkFillRegionTool.cpp Interactions/mitkRegionGrowingTool.cpp Interactions/mitkSubtractContourTool.cpp Interactions/mitkDrawPaintbrushTool.cpp Interactions/mitkErasePaintbrushTool.cpp Interactions/mitkMorphologicTool.cpp Interactions/mitkErodeTool.cpp Interactions/mitkDilateTool.cpp Interactions/mitkOpeningTool.cpp Interactions/mitkClosingTool.cpp Interactions/mitkBinaryThresholdULTool.cpp Interactions/mitkPixelManipulationTool.cpp Interactions/mitkRegionGrow3DTool.cpp Rendering/mitkContourMapper2D.cpp Rendering/mitkContourSetMapper2D.cpp Rendering/mitkContourSetVtkMapper3D.cpp Rendering/mitkContourVtkMapper3D.cpp Rendering/mitkEnhancedPointSetVtkMapper3D.cpp Rendering/mitkImageBackground2D.cpp Rendering/mitkLineMapper2D.cpp # Rendering/mitkLineVtkMapper3D.cpp Rendering/mitkMeshMapper2D.cpp Rendering/mitkMeshVtkMapper3D.cpp Rendering/mitkNativeRenderWindowInteractor.cpp Rendering/mitkSplineMapper2D.cpp Rendering/mitkSplineVtkMapper3D.cpp Rendering/mitkUnstructuredGridMapper2D.cpp Rendering/mitkUnstructuredGridVtkMapper3D.cpp Rendering/mitkVectorImageMapper2D.cpp Rendering/vtkUnstructuredGridMapper.cpp Rendering/vtkMaskedGlyph2D.cpp Rendering/vtkMaskedGlyph3D.cpp Rendering/vtkMitkVolumeTextureMapper3D.cpp Rendering/vtkMitkOpenGLVolumeTextureMapper3D.cpp Rendering/mitkGPUVolumeMapper3D.cpp Rendering/vtkMitkGPUVolumeRayCastMapper.cpp Rendering/vtkMitkOpenGLGPUVolumeRayCastMapper.cpp Rendering/vtkMitkOpenGLGPUVolumeRayCastMapperShaders.cpp ) IF(WIN32 AND NOT MINGW) SET(CPP_FILES Controllers/mitkMovieGeneratorWin32.cpp ${CPP_FILES} ) ENDIF(WIN32 AND NOT MINGW)