diff --git a/ViewerManager/Model/otbImageViewerManagerModel.cxx b/ViewerManager/Model/otbImageViewerManagerModel.cxx index 59cbc07509e681b6d05c524ed3e57f2d01f10ba9..500f8a8dde6b5b1de619983f1f6b0f343fe822e6 100644 --- a/ViewerManager/Model/otbImageViewerManagerModel.cxx +++ b/ViewerManager/Model/otbImageViewerManagerModel.cxx @@ -69,18 +69,18 @@ ImageViewerManagerModel ReaderPointerType reader = ReaderType::New(); reader->SetFileName(filename); reader->GenerateOutputInformation(); - + /** Generate the layer*/ LayerGeneratorPointerType visuGenerator = LayerGeneratorType::New(); visuGenerator->SetImage(reader->GetOutput()); FltkFilterWatcher qlwatcher(visuGenerator->GetResampler(),0,0,200,20,"Generating QuickLook ..."); visuGenerator->GenerateLayer(); StandardRenderingFunctionType::Pointer rendrerFuntion = visuGenerator->GetDefaultRenderingFunction(); - + /** Rendering image*/ VisuModelPointerType rendering = VisuModelType::New(); rendering->AddLayer(visuGenerator->GetLayer()); - + rendering->Update(); /** View*/ @@ -91,13 +91,13 @@ ImageViewerManagerModel PixelDescriptionModelPointerType pixelModel = PixelDescriptionModelType::New(); pixelModel->SetLayers(rendering->GetLayers()); pixelView->SetModel(pixelModel); - + /** Controller*/ WidgetControllerPointerType controller = this->BuiltController(rendering, visuView ,pixelModel ); /** Finish Builting the visu*/ visuView->SetController(controller); - + /** Build the curve Widget */ CurvesWidgetType::Pointer curveWidget = CurvesWidgetType::New(); @@ -117,11 +117,11 @@ ImageViewerManagerModel /** Add the the struct in the list*/ m_ObjectTrackedList.push_back(currentComponent); - + m_HasImageOpened = true; this->NotifyAll(); m_HasImageOpened = false; - + } /** @@ -134,7 +134,7 @@ ImageViewerManagerModel { VisuViewPointerType visuView = VisuViewType::New(); visuView->SetModel(pRendering); - + return visuView; } @@ -147,13 +147,13 @@ ImageViewerManagerModel ::BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView, PixelDescriptionModelPointerType pixelModel) { WidgetControllerPointerType controller = WidgetControllerType::New(); - + // Add the resizing handler ResizingHandlerType::Pointer resizingHandler = ResizingHandlerType::New(); resizingHandler->SetModel(modelRenderingLayer); resizingHandler->SetView(visuView); controller->AddActionHandler(resizingHandler); - + // Add the change scaled region handler ChangeScaledRegionHandlerType::Pointer changeScaledHandler =ChangeScaledRegionHandlerType::New(); changeScaledHandler->SetModel(modelRenderingLayer); @@ -177,7 +177,13 @@ ImageViewerManagerModel pixelActionHandler->SetView(visuView); pixelActionHandler->SetModel(pixelModel); controller->AddActionHandler(pixelActionHandler); - + + // Add the action handler for the arrow key + ArrowKeyMoveActionHandlerType::Pointer arrowKeyMoveHandler = ArrowKeyMoveActionHandlerType::New(); + arrowKeyMoveHandler->SetModel(modelRenderingLayer); + arrowKeyMoveHandler->SetView(visuView); + controller->AddActionHandler(arrowKeyMoveHandler); + return controller; } @@ -196,11 +202,11 @@ ImageViewerManagerModel renderFunction->SetRedChannelIndex(redChoice); renderFunction->SetGreenChannelIndex(greenChoice); renderFunction->SetBlueChannelIndex(BlueChoice); - + //Update the layer m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(renderFunction); m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); - + //Notify m_HasChangedChannelOrder = true; this->NotifyAll(); @@ -213,11 +219,11 @@ ImageViewerManagerModel { StandardRenderingFunctionType::Pointer renderFunction = m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion; renderFunction->SetAllChannels(choice); - + //Update the layer m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(renderFunction); m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); - + //Notify m_HasChangedChannelOrder = true; this->NotifyAll(); @@ -232,11 +238,11 @@ ImageViewerManagerModel modulusFunction->SetRedChannelIndex(realChoice); modulusFunction->SetGreenChannelIndex(imChoice); modulusFunction->Initialize(); - + //Update the layer m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(modulusFunction); m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); - + //Notify m_HasChangedChannelOrder = true; this->NotifyAll(); @@ -252,11 +258,11 @@ ImageViewerManagerModel phaseFunction->SetRedChannelIndex(realChoice); phaseFunction->SetGreenChannelIndex(imChoice); phaseFunction->Initialize(); - + //Update the layer m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(phaseFunction); m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); - + //Notify m_HasChangedChannelOrder = true; this->NotifyAll(); @@ -274,7 +280,7 @@ ImageViewerManagerModel //Create A null offset OffsetType nullOffset; nullOffset.Fill(0); - + //Get the controllers of the selected images WidgetControllerPointerType rightController = m_ObjectTrackedList.at(rightChoice-1).pWidgetController; WidgetControllerPointerType leftController = m_ObjectTrackedList.at(leftChoice-1).pWidgetController; @@ -282,15 +288,15 @@ ImageViewerManagerModel //Get the models related to the choosen images VisuModelPointerType rightRenderModel = m_ObjectTrackedList.at(rightChoice-1).pRendering; VisuModelPointerType leftRenderModel = m_ObjectTrackedList.at(leftChoice-1).pRendering; - + //Get the views related to the choosen images - VisuViewPointerType pRightVisuView = m_ObjectTrackedList.at(rightChoice-1).pVisuView;; + VisuViewPointerType pRightVisuView = m_ObjectTrackedList.at(rightChoice-1).pVisuView;; VisuViewPointerType pLeftVisuView = m_ObjectTrackedList.at(leftChoice-1).pVisuView; //Pixel View PixelDescriptionModelPointerType rightPixelModel = m_ObjectTrackedList.at(rightChoice-1).pPixelModel; PixelDescriptionModelPointerType leftPixelModel = m_ObjectTrackedList.at(leftChoice-1).pPixelModel; - + // Add the resizing handler ResizingHandlerType::Pointer rightResizingHandler = ResizingHandlerType::New(); rightResizingHandler->SetModel(rightRenderModel); @@ -299,10 +305,10 @@ ImageViewerManagerModel ResizingHandlerType::Pointer leftResizingHandler = ResizingHandlerType::New(); leftResizingHandler->SetModel(leftRenderModel); leftResizingHandler->SetView(pRightVisuView); - + rightController->AddActionHandler( leftResizingHandler); leftController->AddActionHandler(rightResizingHandler); - + // Add the change scaled region handler-- ChangeScaledRegionHandlerType::Pointer rightChangeScaledHandler =ChangeScaledRegionHandlerType::New(); rightChangeScaledHandler->SetModel(rightRenderModel); @@ -313,10 +319,10 @@ ImageViewerManagerModel leftChangeScaledHandler->SetModel(leftRenderModel); leftChangeScaledHandler->SetView(pRightVisuView); leftChangeScaledHandler->SetOffset(offset); - + rightController->AddActionHandler(leftChangeScaledHandler); leftController->AddActionHandler( rightChangeScaledHandler); - + // Add the change extract region handler-- ChangeRegionHandlerType::Pointer rightChangeHandler =ChangeRegionHandlerType::New(); rightChangeHandler->SetModel(rightRenderModel); @@ -327,7 +333,7 @@ ImageViewerManagerModel leftChangeHandler->SetModel(leftRenderModel); leftChangeHandler->SetView(pRightVisuView); leftChangeHandler->SetOffset(offset); - + rightController->AddActionHandler( leftChangeHandler); leftController->AddActionHandler(rightChangeHandler); @@ -369,7 +375,7 @@ ImageViewerManagerModel VisuModelPointerType render = m_ObjectTrackedList.at(selectedItem-1).pRendering; VisuViewPointerType view = m_ObjectTrackedList.at(selectedItem-1).pVisuView; PixelDescriptionModelPointerType pixelModel = m_ObjectTrackedList.at(selectedItem-1).pPixelModel; - + m_ObjectTrackedList.at(selectedItem-1).pWidgetController = this->BuiltController(render,view,pixelModel); m_ObjectTrackedList.at(selectedItem-1).pVisuView->SetController(m_ObjectTrackedList.at(selectedItem-1).pWidgetController); } diff --git a/ViewerManager/Model/otbImageViewerManagerModel.h b/ViewerManager/Model/otbImageViewerManagerModel.h index ff4f1027754053728f1e46980d99a897cfb66869..e392eb348e96022203440ba30ca641faecf23963 100644 --- a/ViewerManager/Model/otbImageViewerManagerModel.h +++ b/ViewerManager/Model/otbImageViewerManagerModel.h @@ -35,6 +35,7 @@ PURPOSE. See the above copyright notices for more information. #include "otbChangeScaledExtractRegionActionHandler.h" #include "otbChangeExtractRegionActionHandler.h" #include "otbChangeScaleActionHandler.h" +#include "otbArrowKeyMoveActionHandler.h" #include "otbModulusRenderingFunction.h" #include "otbPhaseRenderingFunction.h" @@ -46,7 +47,7 @@ PURPOSE. See the above copyright notices for more information. #include "otbCurves2DWidget.h" -#include "otbImageView.h" +#include "otbImageView.h" #include "otbImageWidgetController.h" namespace otb @@ -73,54 +74,55 @@ public: /** Images typedefs */ typedef double PixelType; - + /** Image Type*/ typedef VectorImage<PixelType , 2> ImageType; - typedef itk::RGBPixel<unsigned char> RGBPixelType; + typedef itk::RGBPixel<unsigned char> RGBPixelType; typedef Image<RGBPixelType,2> ViewerImageType; typedef ImageType::Pointer ImagePointerType; /** typedef support for layers */ typedef otb::ImageLayer<ImageType> LayerType; - typedef LayerType::Pointer LayerPointerType; - + typedef LayerType::Pointer LayerPointerType; + typedef otb::ImageLayerGenerator<LayerType> LayerGeneratorType; typedef LayerGeneratorType::Pointer LayerGeneratorPointerType; typedef LayerGeneratorType::RenderingFunctionType StandardRenderingFunctionType; typedef Function::ModulusRenderingFunction<ImageType::InternalPixelType, RGBPixelType> ModulusRenderingFunction; typedef Function::PhaseRenderingFunction<ImageType::InternalPixelType, RGBPixelType> PhaseRenderingFunction; - + /** typedef support for reader*/ typedef ImageFileReader<ImageType> ReaderType; typedef ReaderType::Pointer ReaderPointerType; - + /** Typedef support for rendering image*/ typedef otb::ImageLayerRenderingModel<ViewerImageType> VisuModelType; typedef VisuModelType::Pointer VisuModelPointerType; - + /** NewVisu */ typedef ImageView<VisuModelType> VisuViewType; typedef VisuViewType::OffsetType OffsetType; typedef VisuViewType::Pointer VisuViewPointerType; - + typedef ImageWidgetController WidgetControllerType; typedef WidgetControllerType::Pointer WidgetControllerPointerType; - + typedef WidgetResizingActionHandler<VisuModelType,VisuViewType> ResizingHandlerType; typedef ResizingHandlerType::Pointer ResizingHandlerPointerType; typedef otb::ChangeScaledExtractRegionActionHandler<VisuModelType,VisuViewType> ChangeScaledRegionHandlerType; typedef otb::ChangeExtractRegionActionHandler<VisuModelType,VisuViewType> ChangeRegionHandlerType; typedef otb::ChangeScaleActionHandler<VisuModelType,VisuViewType> ChangeScaleHandlerType; - + typedef otb::ArrowKeyMoveActionHandler<VisuModelType,VisuViewType> ArrowKeyMoveActionHandlerType; + typedef otb::PixelDescriptionModel<ViewerImageType> PixelDescriptionModelType; typedef PixelDescriptionModelType::Pointer PixelDescriptionModelPointerType; typedef PixelDescriptionView<PixelDescriptionModelType> PixelDescriptionViewType; typedef otb::PixelDescriptionActionHandler<PixelDescriptionModelType,VisuViewType> PixelDescriptionActionHandlerType; typedef Curves2DWidget CurvesWidgetType; - - /** + + /** * Struct embedded in the model */ struct _ObjectsTracked @@ -136,11 +138,11 @@ public: CurvesWidgetType::Pointer pCurveWidget; std::string fileName; }; - + typedef struct _ObjectsTracked ObjectsTracked; - /** - * List of objectTracked, we cannot use ObjectList + /** + * List of objectTracked, we cannot use ObjectList * for struct cause don't implenement Register method */ typedef std::vector<ObjectsTracked> ObjectTrackedList; @@ -156,13 +158,13 @@ public: virtual void UpdatePhaseChannelOrder(int realChoice , int imChoice,unsigned int selectedItem ); virtual void Link(unsigned int leftChoice, unsigned int rightChoice, OffsetType offset); virtual void InitializeImageViewController(unsigned int selectedItem); - + /** Method needed to Get the list of componenets stored*/ ObjectTrackedList GetObjectList() { return m_ObjectTrackedList; } - + /** Boolean Flags */ itkGetMacro(HasImageOpened,bool); itkGetMacro(HasChangedChannelOrder,bool); @@ -173,25 +175,25 @@ protected: /** Constructor */ ImageViewerManagerModel(); - + /** Destructor */ virtual ~ImageViewerManagerModel(); /** Built Visu & Controller*/ virtual VisuViewPointerType BuiltVisu(VisuModelPointerType pRendering); virtual WidgetControllerPointerType BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView , PixelDescriptionModelType::Pointer pixelModel); - - + + private: ImageViewerManagerModel(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented /** Notify a given listener of changes */ virtual void Notify(ImageViewerManagerEventsListener * listener); - + /** The instance singleton */ static Pointer Instance; - + /** Boolean flags*/ bool m_HasImageOpened; bool m_HasChangedChannelOrder;