#pragma once /*========================================================================= medInria Copyright (c) INRIA 2013 - 2020. All rights reserved. See LICENSE.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. =========================================================================*/ #include "resliceToolBox.h" #include #include #include #include #include #include #include #include class medResliceCursorCallback; class medResliceViewer : public medAbstractView { friend class medResliceCursorCallback; Q_OBJECT public: medResliceViewer(medAbstractView *view, QWidget *parent = nullptr); ~medResliceViewer(); virtual QString identifier() const; void setToolBox(resliceToolBox *); virtual QString description() const; virtual medViewBackend * backend() const; virtual QWidget* navigatorWidget(); virtual QWidget *viewWidget(); virtual QWidget *mouseInteractionWidget(); public slots: virtual void thickMode(int); virtual void blendMode(int); virtual void SetBlendModeToMaxIP(); virtual void SetBlendModeToMinIP(); virtual void SetBlendModeToMeanIP(); virtual void SetBlendMode(int); virtual void reset(); virtual void resetViews(); virtual void render(); void saveImage(); void askedSpacingOrSizeChange(double); void extentChanged(int); bool eventFilter(QObject *object, QEvent *event); vtkResliceImageViewer* getResliceImageViewer(int i); vtkImagePlaneWidget* getImagePlaneWidget(int i); dtkSmartPointer getOutput(); virtual void update(){} signals: void imageReformatedGenerated(); protected: vtkSmartPointer riw[3]; vtkSmartPointer planeWidget[3]; double planeNormal[3][3]; QWidget *viewBody; QVTKOpenGLWidget *views[4]; dtkSmartPointer inputData; std::array outputSpacingOrSize; unsigned char selectedView; vtkImageView3D *view3d; vtkSmartPointer vtkViewData; dtkSmartPointer outputData; int fromSlice, toSlice; resliceToolBox *reformaTlbx; void applyRadiologicalConvention(); void calculateResliceMatrix(vtkMatrix4x4* result); void adjustResliceMatrixToViewUp(vtkMatrix4x4* resliceMatrix); void updatePlaneNormals(); void ensureOrthogonalPlanes(); int findMovingPlaneIndex(); void makePlaneOrthogonalToOtherPlanes(vtkPlane* targetPlane, vtkPlane* plane1, vtkPlane* plane2); template void generateOutput(vtkImageReslice* reslicer, QString destType); void applyResamplingPix(); template void compensateForRadiologicalView(itk::Image* image); template void correctOutputTransform(itk::Image* outputImage, vtkMatrix4x4* resliceMatrix); template void getImageCenterInLocalSpace(itk::Image* image, double center[3]); vtkSmartPointer getResliceRotationMatrix(vtkMatrix4x4* resliceMatrix); private: virtual QImage buildThumbnail(const QSize &size); };