diff --git a/Modules/AlgorithmsExt/files.cmake b/Modules/AlgorithmsExt/files.cmake index c3d67eb3b9..895500561f 100644 --- a/Modules/AlgorithmsExt/files.cmake +++ b/Modules/AlgorithmsExt/files.cmake @@ -1,35 +1,36 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES mitkAutoCropImageFilter.cpp mitkBoundingObjectCutter.cpp mitkBoundingObjectToSegmentationFilter.cpp mitkGeometryClipImageFilter.cpp mitkGeometryDataSource.cpp mitkHeightFieldSurfaceClipImageFilter.cpp mitkImageToUnstructuredGridFilter.cpp mitkLabeledImageToSurfaceFilter.cpp mitkMaskAndCutRoiImageFilter.cpp mitkMaskImageFilter.cpp mitkMovieGenerator.cpp mitkNonBlockingAlgorithm.cpp mitkPadImageFilter.cpp mitkPlaneFit.cpp mitkPlaneLandmarkProjector.cpp mitkPointLocator.cpp mitkSegmentationSink.cpp mitkSimpleHistogram.cpp mitkSimpleUnstructuredGridHistogram.cpp mitkCovarianceMatrixCalculator.cpp mitkAnisotropicIterativeClosestPointRegistration.cpp mitkWeightedPointTransform.cpp mitkAnisotropicRegistrationCommon.cpp mitkUnstructuredGridClusteringFilter.cpp mitkUnstructuredGridToUnstructuredGridFilter.cpp + mitkSurfaceToPointSetFilter.cpp ) if(WIN32 AND NOT MINGW) list(APPEND CPP_FILES mitkMovieGeneratorWin32.cpp ) endif() diff --git a/Modules/AlgorithmsExt/include/mitkSurfaceToPointSetFilter.h b/Modules/AlgorithmsExt/include/mitkSurfaceToPointSetFilter.h new file mode 100644 index 0000000000..3d419b53b5 --- /dev/null +++ b/Modules/AlgorithmsExt/include/mitkSurfaceToPointSetFilter.h @@ -0,0 +1,62 @@ +/*=================================================================== + +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 MITKSURFACETOPOINTSETFILTER_H_HEADER_INCLUDED_ +#define MITKSURFACETOPOINTSETFILTER_H_HEADER_INCLUDED_ + +// exports +#include "MitkAlgorithmsExtExports.h" + +//mitk headers +#include +#include "mitkSurface.h" +//#include + +namespace mitk { + + + /** Documentation + * @brief This filter converts the input surface into a point set. The output point set contains every point exactly one time + * (no dublicated points like in the stl-format). + */ + + class MITKALGORITHMSEXT_EXPORT SurfaceToPointSetFilter : public mitk::PointSetSource + { + public: + + mitkClassMacro(SurfaceToPointSetFilter,mitk::PointSetSource); + itkNewMacro(Self); + + void SetInput(mitk::Surface::Pointer m_InputSurface); + + + std::string GetErrorMessage(); + + protected: + SurfaceToPointSetFilter(); + ~SurfaceToPointSetFilter(); + + /** @brief method generating the output of this filter. Called in the updated process of the pipeline. */ + virtual void GenerateData(); + + //############### members ######################## + mitk::Surface::Pointer m_InputSurface; + std::string m_ErrorMessage; + + }; + +} // namespace mitk +#endif /* MITKSURFACETODISTANCEIMAGEFILTER_H_HEADER_INCLUDED_ */ diff --git a/Modules/AlgorithmsExt/src/mitkSurfaceToPointSetFilter.cpp b/Modules/AlgorithmsExt/src/mitkSurfaceToPointSetFilter.cpp new file mode 100644 index 0000000000..ceed4de6ee --- /dev/null +++ b/Modules/AlgorithmsExt/src/mitkSurfaceToPointSetFilter.cpp @@ -0,0 +1,86 @@ +/*=================================================================== + +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 "mitkSurfaceToPointSetFilter.h" + +//mitk headers +#include "mitkPointSet.h" + +//itk headers +#include "itkMatrix.h" +#include "itkVector.h" + +//vtk headers +#include +#include + +mitk::SurfaceToPointSetFilter::SurfaceToPointSetFilter() + { + this->SetNumberOfIndexedOutputs(1); + } + +mitk::SurfaceToPointSetFilter::~SurfaceToPointSetFilter() + { + + } + +void mitk::SurfaceToPointSetFilter::GenerateData() + { + if (m_InputSurface.IsNull()) + { + this->SetNthOutput(0,NULL); + m_ErrorMessage = "Error in SurfaceToPointSetFilter: Input is not set correctly."; + return; + } + mitk::PointSet::Pointer result = mitk::PointSet::New(); + + vtkPolyData* points = this->m_InputSurface->GetVtkPolyData(); + vtkCleanPolyData *cleaner = vtkCleanPolyData::New(); + cleaner->PieceInvariantOff(); + cleaner->ConvertLinesToPointsOff(); + cleaner->ConvertPolysToLinesOff(); + cleaner->ConvertStripsToPolysOff(); + cleaner->PointMergingOn(); + cleaner->SetInputData(points); + cleaner->Update(); + + vtkPolyData* mergedPoints = cleaner->GetOutput(); + + //generate filter output + for (int i=0; iGetNumberOfPoints(); i++) + { + mitk::Point3D currentPoint; + currentPoint[0] = mergedPoints->GetPoint(i)[0]; + currentPoint[1] = mergedPoints->GetPoint(i)[1]; + currentPoint[2] = mergedPoints->GetPoint(i)[2]; + result->InsertPoint(i,currentPoint); + } + this->SetNthOutput(0,result); + //------------------------- + + cleaner->Delete(); + } + +void mitk::SurfaceToPointSetFilter::SetInput(mitk::Surface::Pointer InputSurface) + { + m_InputSurface = InputSurface; + this->Modified(); + } + +std::string mitk::SurfaceToPointSetFilter::GetErrorMessage() + { + return this->m_ErrorMessage; + }