diff --git a/Core/Code/Algorithms/mitkClippedSurfaceBoundsCalculator.cpp b/Core/Code/Algorithms/mitkClippedSurfaceBoundsCalculator.cpp new file mode 100644 index 0000000000..2b11413d70 --- /dev/null +++ b/Core/Code/Algorithms/mitkClippedSurfaceBoundsCalculator.cpp @@ -0,0 +1,149 @@ +#include "mitkClippedSurfaceBoundsCalculator.h" +#include "vtkPolyData.h" +#include "vtkPlaneSource.h" +#include "vtkPPolyDataNormals.h" +#include "mitkGeometry2D.h" +#include "mitkSliceNavigationController.h" +#include "mitkLine.h" +#include "vtkSmartPointer.h" + +#define ROUND_P(x) ((int)((x)+0.5)) + +mitk::ClippedSurfaceBoundsCalculator::ClippedSurfaceBoundsCalculator(const mitk::PlaneGeometry* geometry, mitk::Image::Pointer image) +{ + this->SetInput(geometry, image); +} + +mitk::ClippedSurfaceBoundsCalculator::~ClippedSurfaceBoundsCalculator() +{ +} + +void mitk::ClippedSurfaceBoundsCalculator::SetInput(const mitk::PlaneGeometry* geometry, mitk::Image::Pointer image) +{ + if(geometry != NULL && image.IsNotNull()) + { + this->m_Geometry2D = geometry; + this->m_Image = image; + for(int i = 0; i < 3; i++) + { + this->m_MinMaxOutput.push_back(outputType( std::numeric_limits::max() , std::numeric_limits::min() )); + } + } +} + +void mitk::ClippedSurfaceBoundsCalculator::CalculateSurfaceBounds() +{ + + //Get the corner points of the geometry3D + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, false, false) + , m_Image->GetGeometry()->GetCornerPoint(true, false, false)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, false, false) + , m_Image->GetGeometry()->GetCornerPoint(false, true, false)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, false, false) + , m_Image->GetGeometry()->GetCornerPoint(false, false, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, true, false) + , m_Image->GetGeometry()->GetCornerPoint(true, true, false)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, true, false) + , m_Image->GetGeometry()->GetCornerPoint(false, true, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, false, true) + , m_Image->GetGeometry()->GetCornerPoint(true, false, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, false, true) + , m_Image->GetGeometry()->GetCornerPoint(false, true, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(false, true, true) + , m_Image->GetGeometry()->GetCornerPoint(true, true, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(true, false, true) + , m_Image->GetGeometry()->GetCornerPoint(true, true, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(true, false, false) + , m_Image->GetGeometry()->GetCornerPoint(true, false, true)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(true, false, false) + , m_Image->GetGeometry()->GetCornerPoint(true, true, false)); + + CalculateSurfaceBounds( m_Image->GetGeometry()->GetCornerPoint(true, true, false) + , m_Image->GetGeometry()->GetCornerPoint(true, true, true)); +} + +void mitk::ClippedSurfaceBoundsCalculator::CalculateSurfaceBounds(Point3D startPoint, Point3D endPoint) +{ + if(this->GetIntersectionPoint(startPoint, endPoint) != NULL) + { + mitk::Point3D* point3D = this->GetIntersectionPoint(startPoint, endPoint); + mitk::Point3D indexPoint3D; + m_Image->GetGeometry()->WorldToIndex(*point3D, indexPoint3D); + + for(int dim = 0; dim < 3; dim++) + { + // minimum + if(this->m_MinMaxOutput[dim].first > ROUND_P(indexPoint3D[dim])) + { + this->m_MinMaxOutput[dim].first = ROUND_P(indexPoint3D[dim]); + } + + // maximum + if(this->m_MinMaxOutput[dim].second < ROUND_P(indexPoint3D[dim])) + { + this->m_MinMaxOutput[dim].second = ROUND_P(indexPoint3D[dim]); + } + } + delete point3D; + } + +// } +} + +mitk::Point3D* mitk::ClippedSurfaceBoundsCalculator::GetIntersectionPoint(Point3D startPoint, Point3D endPoint) +{ + Point3D* intersectionPoint = new Point3D(); + vtkSmartPointer points = vtkPoints::New(); + points->SetNumberOfPoints(1); + + endPoint[0] =- startPoint[0]; + endPoint[1] =- startPoint[1]; + endPoint[2] =- startPoint[2]; + + Vector3D bottomVec; + + FillVector3D(bottomVec, endPoint[0], endPoint[1], endPoint[2]); + + mitk::Line3D line(startPoint, bottomVec); + + m_Geometry2D->IntersectionPoint(line, *intersectionPoint); + + if(m_Geometry2D->IsOnPlane(*intersectionPoint)) + { + return intersectionPoint; + } + else + { + return NULL; + } +} + +mitk::ClippedSurfaceBoundsCalculator::outputType mitk::ClippedSurfaceBoundsCalculator::GetMinMaxSpatialDirectionX() +{ + return this->m_MinMaxOutput[0]; +} + +mitk::ClippedSurfaceBoundsCalculator::outputType mitk::ClippedSurfaceBoundsCalculator::GetMinMaxSpatialDirectionY() +{ + return this->m_MinMaxOutput[1]; +} + +mitk::ClippedSurfaceBoundsCalculator::outputType mitk::ClippedSurfaceBoundsCalculator::GetMinMaxSpatialDirectionZ() +{ + return this->m_MinMaxOutput[2]; +} + +void mitk::ClippedSurfaceBoundsCalculator::Update() +{ + this->CalculateSurfaceBounds(); +} diff --git a/Core/Code/Algorithms/mitkClippedSurfaceBoundsCalculator.h b/Core/Code/Algorithms/mitkClippedSurfaceBoundsCalculator.h new file mode 100644 index 0000000000..f0a8f68bab --- /dev/null +++ b/Core/Code/Algorithms/mitkClippedSurfaceBoundsCalculator.h @@ -0,0 +1,54 @@ +#ifndef ClippedSurfaceBoundsCalculator_h_included +#define ClippedSurfaceBoundsCalculator_h_included + +#include "OverlaysExports.h" +#include "mitkGeometry2DData.h" +#include "mitkImage.h" +#include "mitkGeometry2DDataToSurfaceFilter.h" +#include "mitkSlicedGeometry3D.h" +#include "mitkSliceNavigationController.h" +#include "mitkCommon.h" +#include "vtkPoints.h" +#include "mitkVector.h" + + +/** + * \brief Class to find + * +*/ + +namespace mitk +{ + +class Overlays_EXPORT ClippedSurfaceBoundsCalculator +{ + + public: + ClippedSurfaceBoundsCalculator(const mitk::PlaneGeometry* geometry = NULL, mitk::Image::Pointer image = NULL); + virtual ~ClippedSurfaceBoundsCalculator(); + + + void SetInput(const mitk::PlaneGeometry* geometry, mitk::Image::Pointer image); + void Update(); + + typedef std::pair outputType; + + outputType GetMinMaxSpatialDirectionX(); + outputType GetMinMaxSpatialDirectionY(); + outputType GetMinMaxSpatialDirectionZ(); + + protected: + void CalculateSurfaceBounds(); + void CalculateSurfaceBounds(Point3D right, Point3D bottom); + mitk::Point3D* GetIntersectionPoint(Point3D right, Point3D bottom); + + const mitk::PlaneGeometry* m_Geometry2D; + mitk::Image::Pointer m_Image; + std::vector< outputType > m_MinMaxOutput; + +}; + +} //namespace mitk +#endif + + diff --git a/Core/Code/files.cmake b/Core/Code/files.cmake index f4a7a6bf40..a0c3235dc8 100644 --- a/Core/Code/files.cmake +++ b/Core/Code/files.cmake @@ -1,275 +1,277 @@ SET(H_FILES Algorithms/itkImportMitkImageContainer.h Algorithms/itkImportMitkImageContainer.txx Algorithms/itkLocalVariationImageFilter.h Algorithms/itkLocalVariationImageFilter.txx Algorithms/itkMITKScalarImageToHistogramGenerator.h Algorithms/itkMITKScalarImageToHistogramGenerator.txx Algorithms/itkTotalVariationDenoisingImageFilter.h Algorithms/itkTotalVariationDenoisingImageFilter.txx Algorithms/itkTotalVariationSingleIterationImageFilter.h Algorithms/itkTotalVariationSingleIterationImageFilter.txx Algorithms/mitkImageAccessByItk.h Algorithms/mitkImageCast.h Algorithms/mitkImageToItk.h Algorithms/mitkImageToItk.txx Algorithms/mitkInstantiateAccessFunctions.h Algorithms/mitkITKImageImport.h Algorithms/mitkITKImageImport.txx Algorithms/mitkPixelTypeList.h # Preprocessor macros taken from Boost Algorithms/mitkPPArithmeticDec.h Algorithms/mitkPPArgCount.h Algorithms/mitkPPCat.h Algorithms/mitkPPConfig.h Algorithms/mitkPPControlExprIIf.h Algorithms/mitkPPControlIf.h Algorithms/mitkPPControlIIf.h Algorithms/mitkPPDebugError.h Algorithms/mitkPPDetailAutoRec.h Algorithms/mitkPPDetailDMCAutoRec.h Algorithms/mitkPPExpand.h Algorithms/mitkPPFacilitiesEmpty.h Algorithms/mitkPPFacilitiesExpand.h Algorithms/mitkPPLogicalBool.h Algorithms/mitkPPRepetitionDetailDMCFor.h Algorithms/mitkPPRepetitionDetailEDGFor.h Algorithms/mitkPPRepetitionDetailFor.h Algorithms/mitkPPRepetitionDetailMSVCFor.h Algorithms/mitkPPRepetitionFor.h Algorithms/mitkPPSeqElem.h Algorithms/mitkPPSeqForEach.h Algorithms/mitkPPSeqForEachProduct.h Algorithms/mitkPPSeq.h Algorithms/mitkPPSeqEnum.h Algorithms/mitkPPSeqSize.h Algorithms/mitkPPSeqToTuple.h Algorithms/mitkPPStringize.h Algorithms/mitkPPTupleEat.h Algorithms/mitkPPTupleElem.h Algorithms/mitkPPTupleRem.h + Algorithms/mitkClippedSurfaceBoundsCalculator.h DataManagement/mitkCommon.h Interactions/mitkEventMapperAddOn.h ) SET(CPP_FILES Algorithms/mitkBaseDataSource.cpp Algorithms/mitkBaseProcess.cpp Algorithms/mitkCoreObjectFactoryBase.cpp Algorithms/mitkCoreObjectFactory.cpp Algorithms/mitkDataNodeFactory.cpp Algorithms/mitkDataNodeSource.cpp Algorithms/mitkGeometry2DDataToSurfaceFilter.cpp Algorithms/mitkHistogramGenerator.cpp Algorithms/mitkImageCaster.cpp Algorithms/mitkImageCastPart1.cpp Algorithms/mitkImageCastPart2.cpp Algorithms/mitkImageCastPart3.cpp Algorithms/mitkImageCastPart4.cpp Algorithms/mitkImageChannelSelector.cpp Algorithms/mitkImageSliceSelector.cpp Algorithms/mitkImageSource.cpp Algorithms/mitkImageTimeSelector.cpp Algorithms/mitkImageToImageFilter.cpp Algorithms/mitkPointSetSource.cpp Algorithms/mitkPointSetToPointSetFilter.cpp Algorithms/mitkRGBToRGBACastImageFilter.cpp Algorithms/mitkSubImageSelector.cpp Algorithms/mitkSurfaceSource.cpp Algorithms/mitkSurfaceToSurfaceFilter.cpp Algorithms/mitkUIDGenerator.cpp Algorithms/mitkVolumeCalculator.cpp + Algorithms/mitkClippedSurfaceBoundsCalculator.cpp Controllers/mitkBaseController.cpp Controllers/mitkCallbackFromGUIThread.cpp Controllers/mitkCameraController.cpp Controllers/mitkCameraRotationController.cpp Controllers/mitkFocusManager.cpp Controllers/mitkLimitedLinearUndo.cpp Controllers/mitkOperationEvent.cpp Controllers/mitkProgressBar.cpp Controllers/mitkRenderingManager.cpp Controllers/mitkSliceNavigationController.cpp Controllers/mitkSlicesCoordinator.cpp Controllers/mitkSlicesRotator.cpp Controllers/mitkSlicesSwiveller.cpp Controllers/mitkStatusBar.cpp Controllers/mitkStepper.cpp Controllers/mitkTestManager.cpp Controllers/mitkUndoController.cpp Controllers/mitkVerboseLimitedLinearUndo.cpp Controllers/mitkVtkInteractorCameraController.cpp Controllers/mitkVtkLayerController.cpp DataManagement/mitkAbstractTransformGeometry.cpp DataManagement/mitkAnnotationProperty.cpp DataManagement/mitkApplicationCursor.cpp DataManagement/mitkBaseData.cpp DataManagement/mitkBaseProperty.cpp DataManagement/mitkClippingProperty.cpp DataManagement/mitkColorProperty.cpp DataManagement/mitkDataStorage.cpp #DataManagement/mitkDataTree.cpp DataManagement/mitkDataNode.cpp #DataManagement/mitkDataTreeStorage.cpp DataManagement/mitkDisplayGeometry.cpp DataManagement/mitkEnumerationProperty.cpp DataManagement/mitkGeometry2D.cpp DataManagement/mitkGeometry2DData.cpp DataManagement/mitkGeometry3D.cpp DataManagement/mitkGeometryData.cpp DataManagement/mitkGroupTagProperty.cpp DataManagement/mitkImage.cpp DataManagement/mitkImageDataItem.cpp DataManagement/mitkLandmarkBasedCurvedGeometry.cpp DataManagement/mitkLandmarkProjectorBasedCurvedGeometry.cpp DataManagement/mitkLandmarkProjector.cpp DataManagement/mitkLevelWindow.cpp DataManagement/mitkLevelWindowManager.cpp DataManagement/mitkLevelWindowPreset.cpp DataManagement/mitkLevelWindowProperty.cpp DataManagement/mitkLookupTable.cpp DataManagement/mitkLookupTables.cpp # specializations of GenericLookupTable DataManagement/mitkMemoryUtilities.cpp DataManagement/mitkModalityProperty.cpp DataManagement/mitkModeOperation.cpp DataManagement/mitkNodePredicateAnd.cpp DataManagement/mitkNodePredicateBase.cpp DataManagement/mitkNodePredicateCompositeBase.cpp DataManagement/mitkNodePredicateData.cpp DataManagement/mitkNodePredicateDataType.cpp DataManagement/mitkNodePredicateDimension.cpp DataManagement/mitkNodePredicateFirstLevel.cpp DataManagement/mitkNodePredicateNot.cpp DataManagement/mitkNodePredicateOr.cpp DataManagement/mitkNodePredicateProperty.cpp DataManagement/mitkNodePredicateSource.cpp DataManagement/mitkPlaneOrientationProperty.cpp DataManagement/mitkPlaneGeometry.cpp DataManagement/mitkPlaneOperation.cpp DataManagement/mitkPointOperation.cpp DataManagement/mitkPointSet.cpp DataManagement/mitkProperties.cpp DataManagement/mitkPropertyList.cpp DataManagement/mitkRotationOperation.cpp DataManagement/mitkSlicedData.cpp DataManagement/mitkSlicedGeometry3D.cpp DataManagement/mitkSmartPointerProperty.cpp DataManagement/mitkStandaloneDataStorage.cpp DataManagement/mitkStateTransitionOperation.cpp DataManagement/mitkStringProperty.cpp DataManagement/mitkSurface.cpp DataManagement/mitkSurfaceOperation.cpp DataManagement/mitkThinPlateSplineCurvedGeometry.cpp DataManagement/mitkTimeSlicedGeometry.cpp DataManagement/mitkTransferFunction.cpp DataManagement/mitkTransferFunctionInitializer.cpp DataManagement/mitkVector.cpp DataManagement/mitkVtkInterpolationProperty.cpp DataManagement/mitkVtkRepresentationProperty.cpp DataManagement/mitkVtkResliceInterpolationProperty.cpp DataManagement/mitkVtkScalarModeProperty.cpp DataManagement/mitkVtkVolumeRenderingProperty.cpp DataManagement/mitkWeakPointerProperty.cpp DataManagement/mitkShaderProperty.cpp DataManagement/mitkResliceMethodProperty.cpp DataManagement/mitkMaterial.cpp Interactions/mitkAction.cpp Interactions/mitkAffineInteractor.cpp Interactions/mitkCoordinateSupplier.cpp Interactions/mitkDisplayCoordinateOperation.cpp Interactions/mitkDisplayInteractor.cpp Interactions/mitkDisplayPositionEvent.cpp Interactions/mitkDisplayVectorInteractor.cpp Interactions/mitkDisplayVectorInteractorLevelWindow.cpp Interactions/mitkDisplayVectorInteractorScroll.cpp Interactions/mitkEvent.cpp Interactions/mitkEventDescription.cpp Interactions/mitkEventMapper.cpp Interactions/mitkGlobalInteraction.cpp Interactions/mitkInteractor.cpp Interactions/mitkMouseMovePointSetInteractor.cpp Interactions/mitkMoveSurfaceInteractor.cpp Interactions/mitkNodeDepententPointSetInteractor.cpp Interactions/mitkPointSetInteractor.cpp Interactions/mitkPositionEvent.cpp Interactions/mitkPositionTracker.cpp Interactions/mitkState.cpp Interactions/mitkStateEvent.cpp Interactions/mitkStateMachine.cpp Interactions/mitkStateMachineFactory.cpp Interactions/mitkTransition.cpp Interactions/mitkWheelEvent.cpp Interactions/mitkKeyEvent.cpp Interactions/mitkVtkEventAdapter.cpp IO/mitkBaseDataIOFactory.cpp IO/mitkDicomSeriesReader.cpp IO/mitkFileReader.cpp IO/mitkFileSeriesReader.cpp IO/mitkFileWriter.cpp IO/mitkIpPicGet.c IO/mitkImageGenerator.cpp IO/mitkImageWriter.cpp IO/mitkImageWriterFactory.cpp IO/mitkItkImageFileIOFactory.cpp IO/mitkItkImageFileReader.cpp IO/mitkItkPictureWrite.cpp IO/mitkLookupTableProperty.cpp IO/mitkOperation.cpp IO/mitkPicFileIOFactory.cpp IO/mitkPicFileReader.cpp IO/mitkPicFileWriter.cpp IO/mitkPicHelper.cpp IO/mitkPicVolumeTimeSeriesIOFactory.cpp IO/mitkPicVolumeTimeSeriesReader.cpp IO/mitkPixelType.cpp IO/mitkPointSetIOFactory.cpp IO/mitkPointSetReader.cpp IO/mitkPointSetWriter.cpp IO/mitkPointSetWriterFactory.cpp IO/mitkRawImageFileReader.cpp IO/mitkStandardFileLocations.cpp IO/mitkSTLFileIOFactory.cpp IO/mitkSTLFileReader.cpp IO/mitkSurfaceVtkWriter.cpp IO/mitkSurfaceVtkWriterFactory.cpp IO/mitkVtiFileIOFactory.cpp IO/mitkVtiFileReader.cpp IO/mitkVtkImageIOFactory.cpp IO/mitkVtkImageReader.cpp IO/mitkVtkSurfaceIOFactory.cpp IO/mitkVtkSurfaceReader.cpp IO/vtkPointSetXMLParser.cpp IO/mitkLog.cpp Rendering/mitkBaseRenderer.cpp Rendering/mitkVtkMapper2D.cpp Rendering/mitkVtkMapper3D.cpp Rendering/mitkRenderWindowFrame.cpp Rendering/mitkGeometry2DDataMapper2D.cpp Rendering/mitkGeometry2DDataVtkMapper3D.cpp Rendering/mitkGLMapper2D.cpp Rendering/mitkGradientBackground.cpp Rendering/mitkManufacturerLogo.cpp Rendering/mitkMapper2D.cpp Rendering/mitkMapper3D.cpp Rendering/mitkMapper.cpp Rendering/mitkPointSetGLMapper2D.cpp Rendering/mitkPointSetVtkMapper3D.cpp Rendering/mitkPolyDataGLMapper2D.cpp Rendering/mitkSurfaceGLMapper2D.cpp Rendering/mitkSurfaceVtkMapper3D.cpp Rendering/mitkVolumeDataVtkMapper3D.cpp Rendering/mitkVtkPropRenderer.cpp Rendering/mitkVtkWidgetRendering.cpp Rendering/vtkMitkRectangleProp.cpp Rendering/vtkMitkRenderProp.cpp Rendering/mitkVtkEventProvider.cpp Rendering/mitkRenderWindow.cpp Rendering/mitkRenderWindowBase.cpp Rendering/mitkShaderRepository.cpp Rendering/mitkImageMapperGL2D.cpp Rendering/vtkMitkThickSlicesFilter.cpp )