From 9ecfac01ffd2116e3cf31e4d3a6a91eb1ed93241 Mon Sep 17 00:00:00 2001 From: Gregoire Mercier <gregoire.mercier@telecom-bretagne.eu> Date: Wed, 4 Nov 2009 18:29:02 +0100 Subject: [PATCH] View manager dealing with ImageSeriesReader --- .../otbImageViewerManagerController.cxx | 19 +++- .../otbImageViewerManagerController.h | 2 +- ...otbImageViewerManagerControllerInterface.h | 2 +- .../Model/otbImageViewerManagerModel.cxx | 87 ++++++++++++++++++- .../Model/otbImageViewerManagerModel.h | 3 +- .../View/otbImageViewerManagerViewGUI.cxx | 58 +++++++------ 6 files changed, 136 insertions(+), 35 deletions(-) diff --git a/ViewerManager/Controller/otbImageViewerManagerController.cxx b/ViewerManager/Controller/otbImageViewerManagerController.cxx index 3475806911..b4e58e52b4 100644 --- a/ViewerManager/Controller/otbImageViewerManagerController.cxx +++ b/ViewerManager/Controller/otbImageViewerManagerController.cxx @@ -40,19 +40,30 @@ ImageViewerManagerController -void +unsigned int ImageViewerManagerController ::OpenInputImage(const char * filename) { + unsigned int numberOfOpenedImages = 0; try { std::string strFilename = filename; - m_Model->OpenImage( strFilename ); + numberOfOpenedImages = m_Model->OpenImage( strFilename ); } - catch (itk::ExceptionObject & err) + catch ( ... ) { - MsgReporter::GetInstance()->SendError(err.GetDescription()); + try + { + std::string strFilename = filename; + numberOfOpenedImages = m_Model->OpenImageList( strFilename ); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } } + + return numberOfOpenedImages; } /** diff --git a/ViewerManager/Controller/otbImageViewerManagerController.h b/ViewerManager/Controller/otbImageViewerManagerController.h index 2fdb7aac54..bfed5c6071 100644 --- a/ViewerManager/Controller/otbImageViewerManagerController.h +++ b/ViewerManager/Controller/otbImageViewerManagerController.h @@ -100,7 +100,7 @@ public: //virtual void AddController(VisuModelPointerType modelRenderingLayer ,VisuViewPointerType visuView); - virtual void OpenInputImage(const char * filename); + virtual unsigned int OpenInputImage(const char * filename); virtual void CloseImage(unsigned int selectedItem); virtual void UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem); virtual void UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem ); diff --git a/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h b/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h index b96a2144b6..a34a25af4b 100644 --- a/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h +++ b/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h @@ -68,7 +68,7 @@ public: itkTypeMacro(ImageViewerManagerControllerInterface,Superclass); /** Users actions */ - virtual void OpenInputImage(const char * filename) =0; + virtual unsigned int OpenInputImage(const char * filename) =0; virtual void CloseImage(unsigned int selectedItem) = 0; virtual void UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem) = 0; virtual void UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem) = 0; diff --git a/ViewerManager/Model/otbImageViewerManagerModel.cxx b/ViewerManager/Model/otbImageViewerManagerModel.cxx index 6e5c547345..51fb48ab88 100644 --- a/ViewerManager/Model/otbImageViewerManagerModel.cxx +++ b/ViewerManager/Model/otbImageViewerManagerModel.cxx @@ -22,6 +22,7 @@ See OTBCopyright.txt for details. #include "otbMacro.h" #include "otbImageFileWriter.h" +#include "otbImageSeriesFileReader.h" #include "otbFltkFilterWatcher.h" @@ -61,7 +62,7 @@ ImageViewerManagerModel listener->Notify(); } -void +unsigned int ImageViewerManagerModel ::OpenImage(std::string filename) { @@ -132,8 +133,92 @@ ImageViewerManagerModel this->NotifyAll(); m_HasImageOpened = false; + return 1; +} + +/** + * Read a series of images, including cropping facilities throught + * the ImageSeriesFileReader + */ +unsigned int +ImageViewerManagerModel +::OpenImageList(std::string filename) +{ + /** Reader*/ + typedef ImageSeriesFileReader< ImageType > ImageSeriesReaderType; + ImageSeriesReaderType::Pointer reader = ImageSeriesReaderType::New(); + reader->SetFileName(filename); + reader->Update(); + + for ( unsigned int i = 0; i < reader->GetOutput()->Size(); i++ ) + { + /** Generate the layer*/ + LayerGeneratorPointerType visuGenerator = LayerGeneratorType::New(); + visuGenerator->SetImage(reader->GetOutput()->GetNthElement(i)); + FltkFilterWatcher qlwatcher(visuGenerator->GetResampler(),0,0,200,20,"Generating QuickLook ..."); + visuGenerator->GenerateLayer(); + RenderingFunctionType::Pointer rendrerFunction = visuGenerator->GetRenderingFunction(); + + /** Rendering image*/ + VisuModelPointerType rendering = VisuModelType::New(); + rendering->AddLayer(visuGenerator->GetLayer()); + + rendering->Update(); + + /** View*/ + VisuViewPointerType visuView = this->BuiltVisu(rendering); + + /** Build the pixelDescription View*/ + PixelDescriptionViewType::Pointer pixelView = PixelDescriptionViewType::New(); + 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(); + + /** Store all the information in the structure*/ + ObjectsTracked currentComponent; + + currentComponent.fileName = reader->GetFileName(i); + currentComponent.pLayer = visuGenerator->GetLayer(); + currentComponent.pReader = reader->GetImageFileReader(i); + currentComponent.pRendering = rendering; + currentComponent.pVisuView = visuView; + currentComponent.pWidgetController = controller; + currentComponent.pRenderFunction = rendrerFunction; + currentComponent.pPixelView = pixelView; + currentComponent.pPixelModel = pixelModel; + currentComponent.pCurveWidget = curveWidget; + + assert(currentComponent.pLayer); + assert(currentComponent.pReader); + assert(currentComponent.pRendering); + assert(currentComponent.pVisuView); + assert(currentComponent.pWidgetController); + assert(currentComponent.pRenderFunction); + assert(currentComponent.pPixelView); + assert(currentComponent.pPixelModel); + assert(currentComponent.pCurveWidget); + + /** Add the the struct in the list*/ + m_ObjectTrackedList.push_back(currentComponent); + + m_HasImageOpened = true; + this->NotifyAll(); + m_HasImageOpened = false; + } + + return reader->GetOutput()->Size(); } + /** * Built a part of the visu, create a pointer and add a model to the visu */ diff --git a/ViewerManager/Model/otbImageViewerManagerModel.h b/ViewerManager/Model/otbImageViewerManagerModel.h index d071406e1d..d40a1e8e47 100644 --- a/ViewerManager/Model/otbImageViewerManagerModel.h +++ b/ViewerManager/Model/otbImageViewerManagerModel.h @@ -152,7 +152,8 @@ public: /** Get the unique instanc1e of the model */ static Pointer GetInstance(); - virtual void OpenImage(std::string strfilename); + virtual unsigned int OpenImage(std::string strfilename); + virtual unsigned int OpenImageList(std::string strfilename); virtual void CloseImage(unsigned int selectedItem); virtual void UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem); virtual void UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem); diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx index 766d1009da..a397d4563e 100644 --- a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx +++ b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx @@ -113,39 +113,43 @@ void ImageViewerManagerViewGUI ::Initialize(const char * cfname) { - //Initialise the boolean pair - PairType pair(false,false); //(Not displayed , Packed View) + unsigned int numberOfOpenedImages = m_ImageViewerManagerController->OpenInputImage(cfname); + for ( unsigned int i = 0; i < numberOfOpenedImages; i++ ) + { + //Initialise the boolean pair + PairType pair(false,false); //(Not displayed , Packed View) - //Put a new WidgetManager in the list - if(bSplitted->value() && !bPacked->value()) - { - SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); - SplittedWidgetManagerType::Pointer linkwidgetManager = SplittedWidgetManagerType::New(); + //Put a new WidgetManager in the list + if(bSplitted->value() && !bPacked->value()) + { + SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); + SplittedWidgetManagerType::Pointer linkwidgetManager = SplittedWidgetManagerType::New(); - m_WidgetManagerList->PushBack(widgetManager); - m_LinkWidgetManagerList->PushBack(linkwidgetManager); - pair.second = true; - } - else - { - PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); - PackedWidgetManagerType::Pointer linkwidgetManager = PackedWidgetManagerType::New(); - m_WidgetManagerList->PushBack(widgetManager); - m_LinkWidgetManagerList->PushBack(linkwidgetManager); - } + m_WidgetManagerList->PushBack(widgetManager); + m_LinkWidgetManagerList->PushBack(linkwidgetManager); + pair.second = true; + } + else + { + PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); + PackedWidgetManagerType::Pointer linkwidgetManager = PackedWidgetManagerType::New(); + m_WidgetManagerList->PushBack(widgetManager); + m_LinkWidgetManagerList->PushBack(linkwidgetManager); + } - //Put the status of the last added image - m_DisplayStatusList.push_back(pair); - m_LinkedDisplayStatusList.push_back(false); + //Put the status of the last added image + m_DisplayStatusList.push_back(pair); + m_LinkedDisplayStatusList.push_back(false); - // Call the Controller - m_ImageViewerManagerController->OpenInputImage(cfname); + // Call the Controller + //m_ImageViewerManagerController->OpenInputImage(cfname); - //Update the Progress Bar - this->UpdateDiaporamaProgressBar(); + //Update the Progress Bar + this->UpdateDiaporamaProgressBar(); - //Update the Link Setup - this->UpdateLinkSetupWindow(); + //Update the Link Setup + this->UpdateLinkSetupWindow(); + } } /** -- GitLab